ドメインのセキュリティを試してみた(途中) spf,dkim,dmarc,dnssec ver 0.1
DESCRIPTION
ドメインのセキュリティを試してみた(途中) SPF,DKIM,DMARC,DNSSEC ver 0.1 2014/11/01 すごい合同勉強会2014 in 広島 http://j.mp/greatstudy2014 注: DNSSEC 等色々間違えているのでゴメンなさい。TRANSCRIPT
2014/11/01 Satすごい合同勉強会
2014 in 広島
ドメインのセキュリティを試してみた(途中)SPF , DKIM , DMARC ,DNSSEC
お約束
この発表は個人的な物で
仕事や所属等は全然関係
ありません。
誤記や間違い等あれば
ご指摘頂けると
助かります。
@takatayoshitake
自己紹介@takatayoshitake
広島を中心に勉強会に出没。広島サーバユーザ友の会(仮称)や
日本CloudStackユーザ会 広島支部やオープンソースカンファレンスのお手伝いやいろんな勉強会で
Ustとかやってます。
会場のみなさんに質問
A. SPFB. DKIMC. DMARCD. DNSSEC
独自ドメイン持ってる方で下記に対応してる方
それぞれの役割
メール
–SPF , DKIM , DMARC電子メールの送信者偽称を防ぐ送信ドメイン認証技術
ドメイン(DNS)
–DNSSECDNSデータの偽装を検知する
DNS拡張機能
なぜ必要なの?
迷惑メールやフィッシング等が増加 対策が必要
今回のテスト環境
ドメインhiroshimaserver.com
サーバIP 133.242.227.23
OS CentOS 6.5
※今回はさくらクラウドで試して
みましたがConoHaVPSでも
多分概ね同じ
検証用ドメイン .com ¥196/年
2014/11/01 AM 07:29 JST 取得
DNSの準備yum update
yum install bind bind-chroot
rpm -q bind bind-chroot
bind-9.8.2-0.30.rc1.el6.x86_64
bind-chroot-9.8.2-0.30.rc1.el6.x86_64
cp -pi /etc/sysconfig/named /etc/sysconfig/named.org
vi /etc/sysconfig/named
追加
OPTIONS="-4"
named.confcp -pi /etc/named.conf /etc/named.conf.org
vi /etc/named.conf
listen-on port 53 { 127.0.0.1; }; ↓
// listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; }; ↓
listen-on-v6 port 53 { none; };
allow-query { localhost; }; ↓
allow-query { any; };
recursion yes; ↓
recursion no;
version "unknown";
named.conf zone追加
zone "hiroshimaserver.com" IN {
type master;
file "master/hiroshimaserver.com.zone";
};
zone
mkdir /var/named/master/
cd /var/named/master/
cp /var/named/named.empty /var/named/master/hiroshimaserver.com.zone
vi /var/named/master/hiroshimaserver.com.zone
# /var/named/master/hiroshimaserver.com.zone
$TTL 300 ; 5m
@ IN SOA @ ns1.hiroshimaserver.com. (
2014110104 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.hiroshimaserver.com.
IN NS ns2.hiroshimaserver.com.
IN MX 50 mail1.hiroshimaserver.com.
host1 IN A 133.242.227.23
ns1 IN A 133.242.227.23
ns2 IN A 133.242.227.23
mail1 IN A 133.242.227.23
smtp IN A 133.242.227.23
pop IN A 133.242.227.23
www IN A 133.242.227.23
設定チェック,サービス開始
chown -R named:named /var/named/master/
/usr/sbin/named-checkconf /etc/named.conf
/usr/sbin/named-checkzone hiroshimaserver.com /var/named/master/hiroshimaserver.com.zone
service named start
dig @localhost ns1.hiroshimaserver.com a
dig @localhost hiroshimaserver.com soa
dig @localhost hiroshimaserver.com mx
メールサーバConoHaの薄い本電子版Vol.2「メールサーバーを立てよう」
https://www.conoha.jp/blog/tech/books/1522.html
# rpm -q postfix
postfix-2.6.6-6.el6_5.x86_64
vi /etc/postfix/main.cf
cp -pi /etc/postfix/main.cf /etc/postfix/main.cf.org
vi /etc/postfix/main.cf
myhostname = mail1.hiroshimaserver.com
mydomain = hiroshimaserver.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
mailbox_size_limit = 1073741824
main.cf
postconf -n
cp -pi /etc/postfix/master.cf /etc/postfix/master.cf.org
vi /etc/postfix/master.cf
submission inet n - n - - smtpd
chkconfig saslauthd on
chkconfig --list saslauthd
service saslauthd start
service postfix restart
dovecot
yum install dovecot
cp -pi /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
cp -pi /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.org
vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
cp -pi /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.org
vi /etc/dovecot/conf.d/10-master.conf
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
dovecot -n
chkconfig dovecot on
chkconfig --list dovecot
service dovecot start
テスト用 telnet インストール
yum install telnet
telnet localhost 25
telnet localhost 587
テストユーザ追加
useradd -s /sbin/nologin mailuser01
passwd mailuser01
テストメール送信
telnet mail1.hiroshimaserver.com 25
helo xxxx
mail from: [email protected]
rcpt to: [email protected]
data
From: [email protected]
Subject: TEST MAIL YYYY/MM/DD HH:MM
TEST
.
テストメール受信
telnet pop.hiroshimaserver.com 110
user mailuser01
pass xxxxxxxxx
list
retr 1
quit
SPF
vi /var/named/master/hiroshimaserver.com.zone
hiroshimaserver.com. IN TXT"v=spf1 ip4:133.242.227.23 ~all"
hiroshimaserver.com. IN SPF "v=spf1 ip4:133.242.227.23 ~all"
※serialを増加させるのを忘れずに
rndc reload
dig @localhost hiroshimaserver.com txt
dig @localhost hiroshimaserver.com spf
http://www.sendmail.co.jp/sa/spfcheck.html
DKIMrpm -q opendkim
yum install opendkim
# rpm -q opendkim
opendkim-2.9.0-2.el6.x86_64
mkdir /etc/opendkim/keys/hiroshimaserver.com
/usr/sbin/opendkim-genkey -D /etc/opendkim/keys/hiroshimaserver.com/ -d hiroshimaserver.com -s default
ls -l /etc/opendkim/keys/hiroshimaserver.com/
chown -R opendkim:opendkim /etc/opendkim/keys
mv /etc/opendkim/keys/hiroshimaserver.com/default.private /etc/opendkim/keys/hiroshimaserver.com/default
※今回は default で作成しますが本来はシリアル等入れて定期的に更新する
opendkim.conf
cp -pi /etc/opendkim.conf /etc/opendkim.conf.org
vi /etc/opendkim.conf
Mode sv
##KeyFile /etc/opendkim/keys/default.private
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreListrefile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable
cp -pi /etc/opendkim/KeyTable /etc/opendkim/KeyTable.org
vi /etc/opendkim/KeyTable
default._domainkey.hiroshimaserver.com hiroshimaserver.com:default:/etc/opendkim/keys/hiroshimaserver.com/default
TrustedHosts
cp -pi /etc/opendkim/TrustedHosts /etc/opendkim/TrustedHosts.org
vi /etc/opendkim/TrustedHosts
127.0.0.1localhost
mail1.hiroshimaserver.com
hiroshimaserver.com
SigningTable
cp -pi /etc/opendkim/SigningTable /etc/opendkim/SigningTable.org
vi /etc/opendkim/SigningTable
*@hiroshimaserver.com default._domainkey.hiroshimaserver.com
Postfix - main.cf
vi /etc/postfix/main.cf
#opendkim
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
DNS DKIM
cat /etc/opendkim/keys/hiroshimaserver.com/default.txt
default._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+urIo0ohDGrETcuo2lc9Hv1RJ7cX/430Ls1LrNZNadbqpNuDna3NdWxEgL5WEALFn6yPd0BuSVlaiMYs+D1qzqEJrvCpRNr1ko69ZAJZzerMRYiBINdT8ABWa92Pg+SlfaDEs1NtQ7cafY6SK97n0Ukxw1UHMBpzTgsrJL0vMQwIDAQAB" ) ; ----- DKIM key default for hiroshimaserver.com
_adsp._domainkey.hiroshimaserver.com. IN TXT "dkim=unknown"
vi /var/named/master/hiroshimaserver.com.zone
上記txtの中身を追加
※シリアルを加算
rndc reload
opendkim
service opendkim start
service postfix restart
送信テスト
telnet localhost 25
helo mail1.hiroshimaserver.com
mail from: [email protected]
rcpt to: [email protected]
data
From: [email protected]
Subject: TEST YYYY/MM/DD HH:MM
TEST
.
quit
※gmail等にメールを送ってメッセージのソース表示で判定結果を確認
DMARC (DNS設定のみ)
vi /var/named/master/hiroshimaserver.com.zone
_dmarc.hiroshimaserver.com. IN TXT "v=DMARC1\; p=none\; rua=mailto:[email protected]\; ruf=mailto:[email protected]"
※シリアルを加算
rndc reload
テスト結果
Received-SPF: pass (google.com: domain of [email protected] designates 133.242.227.23 as permitted sender) client-ip=133.242.227.23;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of [email protected] designates 133.242.227.23 as permitted sender) [email protected];
dkim=pass [email protected];
dmarc=pass (p=NONE dis=NONE) header.from=hiroshimaserver.com
Received: from mail1.hiroshimaserver.com (localhost [IPv6:::1])
by mail1.hiroshimaserver.com (Postfix) with SMTP id 16BFC60672
for <[email protected]>; Sat, 1 Nov 2014 15:11:43 +0900 (JST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hiroshimaserver.com;
s=default; t=1414822343;
bh=q5cyARPl5zX/knmvCnEy11G7/r6gcljJ44qrvv5DErY=;
h=From:To:Subject:Date;
b=liRt7CwuIswOjW5+JYJRYmxaQe9W2QzZF98LvfRF55AWCbolKPItsZq/ztKuxLRXH
QDiZvozmL7pKlYCzUabCQG+kwuZo20PfbCY4xQnqKO3ocLpESBukudru41RnzwzXFf
GnUrIjFQmaxxA8E070qFpgAkXXTvLr51AyT6LVlI=
dnssec
mkdir /var/named/master/keys
chown -R named:named /var/named/master/keys
cp -pi /etc/named.conf /etc/named.conf.YYYYMMDD
vi /etc/named.conf
key-directory "master/keys";
update-policy local;
auto-dnssec maintain;
named-checkconf /etc/named.conf
cd /var/named/master/keys
dnssec-keygen -a RSASHA256 -b 2048 -r /dev/urandom -f ksk hiroshimaserver.com
ls -l
chown named:named *
rndc loadkeys hiroshimaserver.com
KSK
DS
dnssec-dsfromkey Khiroshimaserver.com.+008+40447.key > dsset-hiroshimaserver.com
# cat dsset-hiroshimaserver.com
hiroshimaserver.com. IN DS 40447 8 1 16B3F146217ABDB046C7F4B58CD876FC8AE175F4
hiroshimaserver.com. IN DS 40447 8 2 A0709807AA9AACEDDAAE3C0AE565321C1FAA3F33774974E863FF743B 7255CB84
zone編集時は freeze
cd /var/named/master/
rndc freeze hiroshimaserver.com
vi hiroshimaserver.com.zone
rndc thaw hiroshimaserver.com
DSレコードの登録
DNSレジストラによって異なります。
※どなたかGodaddyへのDS登録方法をご存知の方が居られたら教えて下さい。
.jpドメインでJPDirectでは出来ました。
※JPDirectは新規受付停止(泣
DNSSEC Check
http://dnssec-debugger.verisignlabs.com/
まとめ
DNS等のセキュリティの検証は間違えると通信が出来なくなったりする危険がありますが,テスト用のドメインは数百円で買えるのでぜひチャレンジしてみましょう!・・・失敗しても痛くない(汗
ご清聴
ありがとう
ございました。
今日は間に合いません
でしたが,DNSSEC
出来たらUpdate予定