Gmailの方針変更に伴う当サーバーの信頼性向上
googleはメール送信者のガイドラインを改定しようとしています。期限は2024年02月からという事で複数のメールを送信するにはこのガイドラインに沿ったサーバを構築しておく必要性があります。
当方のメールサーバは送信、受信と別々に構築してありますが基本は一緒です。以下の設定を順に行う事で各機能を有効化することが可能となります。
今回私が契約している「さくらのVPS」及びドメイン管理「value-domain」上でどのように設定するのかを披露していこうと思います。
さくらのVPSの構成
私の契約ではコア2、メモリ1GB、SSD100GB、初期OSはubuntu22.04を選択しております。ですのでこれ以降の説明ではubuntu22.04をベースに解説しています。almalinuxや他のOSでも似たような設定にはなりますが追加モジュールの方法が違いますのでその辺りはご勉強して頂きたく思います。
ここにこのWordpress、データベース、メール及びfail2banを組み込みをしてある所から話を進めようかと思います。またドメイン管理にはvalue-domainを利用しております。
ですので上記モジュールは既に出来上がっているものとして編集をして行こうかと思っております。
SPF (Sender Policy Framework)とDKIM (Domainkeys Identified Mail)
SPFとDKIMはいずれも送信ドメイン認証の仕組みであり、IETFによってSPFは RFC4408 、DKIMは RFC4871 および RFC5672 にて仕様が定められています。
簡略に言うと、メール送信時「このメールは『〇〇ドメイン』から正規に発出されましたよ」というお墨付きを付けて配送先に渡す仕組みです。
相手はその情報をもとに「これは正規メールか否か」を判断する材料にするのです。
SPF
SPFはDNSのSPFレコードを利用し送信ドメインを認証します。SPFに対応しているメール受信サーバは、メール受信時に送信元ドメインのDNSサーバのSPFレコードを参照し、送信元のサーバがSPFレコード中で許可されていない場合には送信ドメインの詐称が行われたと判断して、受信を拒否する等の処理をおこないます。
では設定を行っていきましょう。
ドメインサーバの設定
と言ってもまずはDNSの設定が必要です。なぜならどんなDNSサービスを受けていても全世界に反映されるには時間がかかるからです。後述するDKIM,DMARCもそれぞれ時間がかかるのでゆっくりやっていきましょう。
今回はvalue-domainという事で以下の設定を追加します。
txt hogehoge.com v=spf1 +ip4:XXX.XXX.XXX.XXX ~all
この意味ですがtxtから始まるのはTXTのリソースですよという意味です。
また次のhogehoge.comですがvalue-domainの仕組み上TXT項目の名前になります。後述するのも最初にどの項目なのか明示的に示してあげる必要性があります。
v=spf1ですがこれはspfの規格を示しているようです。(この部分は調べきれませんでした)
次の+ip4:XXX.XXX.XXX.XXXはアドレスを示しています。
アドレスは伏せましたが皆さんが利用するメールサーバのアドレスです。
そして最後の~ALLですがドメイン名+IPアドレスの構成『以外』は偽物ですよと明示しています。
それぞれをかみ砕いて言うと
「IPXXX.XXX.XXX.XXXというメールが飛んできた場合、メールヘッダに送信者がhogehoge.comでなければ偽物ですよ」という形になります。
まずはここまででドメイン情報を一旦保存しましょう。
SPFレコードが正しく記述されているか確認する方法
インターネット上で無料公開されている、SPFレコードチェックツールなどを利用することが可能です。
SPF Record Testing Tools
spfのメールサーバの設定
今度は受信側の設定を行っていきます。
受信側では受け取ったメールヘッダを見て送信時ipと送信ドメインをチェックします。このため以下のモジュールを追加する事から進めます。
sudo apt update sudo apt install -y postfix-policyd-spf-python
次に設定ファイルを変更していきます。
Postfix設定変更
/etc/postfix/master.cfを変更します。まだ設定されていない方は以下の一文を追加します。
policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spf
wordpressの仕様で2行に見えますが全て一行で書き込みます。
また/etc/postfix/main.cfを変更します。多分この辺りは追加されている可能性もあるので注意して追加してください。
policyd-spf_time_limit = 3600 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policyd-spf
check_policy_service unix:private/policyd-spfですね。master.cfで受信した物を振り分ける機能になります。最後に入れてあるのは上記を通りきらなかったメールを最終的にチェックする事になります。
Postfix再起動
設定を反映するため、Postfixを再起動します
sudo systemctl restart postfix
テストメール受信
SPFレコードが適切に設定されたドメインからのメールを受信すると、メールヘッダに以下が追加されます。もっともここ最近のメールサーバでは後述するDKIM,DMARCによっては付かない可能性もあります。
Received-SPF: Pass
続いてDKIM行ってみましょう。
DKIM
との事で送信ドメイン認証の追加版といった所でしょうか。これがあるとspfと同時に厳正チェックをしてくれます。早速設定を行っていきましょう。
今回はまず必要なモジュールをインストールする所から始めます。
sudo apt install opendkim opendkim-tools sudo gpasswd -a postfix opendkim sudo cp /etc/opendkim.conf /etc/opendkim.conf.org sudo vi /etc/opendkim.conf
としてconfファイルを変更します。
変更箇所は三つ
Canonicalization relaxed/simple Mode sv SubDomains no
そして追加部分が以下です。
KeyTable refile:/etc/opendkim/key.table SigningTable refile:/etc/opendkim/signing.table ExternalIgnoreList /etc/opendkim/trusted.hosts InternalHosts /etc/opendkim/trusted.hosts
そしてそれぞれのファイルが入るフォルダを作って行きます。
sudo mkdir -p /etc/opendkim/keys/hogehoge.com sudo chown -R opendkim:opendkim /etc/opendkim sudo chmod 700 /etc/opendkim/keys
/etc/opendkim/signing.tableを新規作成します。
*@hogehoge.com default._domainkey.hogehoge.com
/etc/opendkim/key.tableを新規作成します。
default._domainkey.hogehoge.com hogehoge.com:default:/etc/opendkim/keys/hogehoge.com/default.private
/etc/opendkim/trusted.hostsを新規作成します。
127.0.0.1 locahost *.hogehoge.com
それぞれhogehoge.comは自分のドメインに変更して下さいね。
秘密鍵/公開鍵のキーペア作成
DKIMでは送信メールへの署名とメッセージの受信検証のために、署名のためのプライベートキーとリモートの確認者のためにパブリックキーを作成します。
パブリックキーは後程DNSを使って公開します。
sudo opendkim-genkey -b 2048 -d hogehoge.com -D /etc/opendkim/keys/hogehoge.com -s default -v sudo chown opendkim:opendkim /etc/opendkim/keys/hogehoge.com/default.* sudo cat /etc/opendkim/keys/hogehoge.com/default.txt
表示されたパブリックキーは改行やダブルクオーテーションなどで区切られていますが必要なのはp=から始まるキーです。その部分をコピーしておいてDNSに反映させます。例えば
default._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwwndjVvUhESSAm9ARmA9hh4GBPdf+yjSxTJ+2gsdTVUr0aYykMT9GWST0FlmGHd0Myq/+8TaqoDiEsAWrvHu8fsc0zvw6Svf7JbBRocxxxxxxxxxOA3duQ+JyU8Yw70sXxRn4d8ODheqaCFaALVUNnndL9O+N15kVQ38OAt3u3FZFm3ZlrHlc8xxppxGwV4JrOyeYJPjpFmXG3" "HZu7S29W8gwpBhnjYeOk43LH1OctZzjab8L3A3VAoMkhKHfwuxGqewptXV1SqWZtae2fU+dvUnf9WTMng6dilVzB18Ns39O4eSu/xui9KDEq5gv+nlUFnUeYLBr9W7hPHAuzb5xQIDAQAB" ) ;
となっていた場合value-domainに追加する文字としては
txt _adsp._domainkey.hogehoge.com dkim=unknown txt default._domainkey.hogehoge.com v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwwndjVvUhESSAm9ARmA9hh4GBPdf+yjSxTJ+2gsdTVUr0aYykMT9GWST0FlmGHd0Myq/+8TaqoDiEsAWrvHu8fsc0zvw6Svf7JbBRocxxxxxxxxxOA3duQ+JyU8Yw70sXxRn4d8ODheqaCFaALVUNnndL9O+N15kVQ38OAt3u3FZFm3ZlrHlc8xxppxGwV4JrOyeYJPjpFmXG3HZu7S29W8gwpBhnjYeOk43LH1OctZzjab8L3A3VAoMkhKHfwuxGqewptXV1SqWZtae2fU+dvUnf9WTMng6dilVzB18Ns39O4eSu/xui9KDEq5gv+nlUFnUeYLBr9W7hPHAuzb5xQIDAQAB
という感じで追加します。一行ですね。ここを間違えるとDKIMがPASSできません。気を付けて登録して下さい。
確認
opendkim-testkeyコマンドを使って今登録したキーが反映及びPASSするか確認します。
sudo opendkim-testkey -d hogehoge.com -s default -vvv
すると
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key ‘default._domainkey.hogehoge.com’
opendkim-testkey: key not secure
opendkim-testkey: key OK
となれば成功です。太字で示したkey not secureですがさくらのVPNとvalue-domainとの連携でDNSSECという機構を利用できなかったのでこれでOKとしました。
PostfixとOpenDKIMの連携
今度はPostfixとの連携です。以下の通りとしました。
sudo mkdir -p /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim sudo vi /etc/opendkim.conf
として再びファイルを開いてSocket部分を修正します。
Socket local:/var/spool/postfix/opendkim/opendkim.sock
/etc/default/opendkimも同様に変更します。
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
/etc/postfix/main.cfを加筆します。
milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim.sock non_smtpd_milters = $smtpd_milters
smtpd_miltersは後程DMARCで修正します。まずはDKIMのみ設定します。
終わったらpostfixとopendkimの再起動を行います。
sudo systemctl restart postfix opendkim
これでDKIMが働き始めます。試してみましょう。
一番簡単なチェック方法としては自ホストからgmailに送信してみる事です。
送信されたメールの詳細をgmail上でチェックするとDKIMの項目が増えているはずです。
そこがPASSとなっていればDKIMは正常に働いています。
続いてDMARCに移りましょう。
DMARC
ということでDMARCの設定を行っていこうと思います。
DNSに設定
まずは追加項目を見て下さい。
txt _dmarc v=DMARC1; p=none; pct=100; fo=1; rua=mailto:dmarc-reports@hogehoge.com; ruf=mailto:dmarc-reports@hogehoge.com;
各項目の詳細は今回説明すると長くなりますので、このような物として扱ってくれると助かります。詳細は先ほどの説明に載っております。重要なのはruaとrufのメールアドレスを自身のアドレスに変更して下さい。このアドレスに対して成功、失敗のメールが飛んできます。実在するアドレスで飛んできても良いアドレスにしてください。
OpenDMARCのインストール
次はモジュールを追加します。
sudo apt install -y opendmarc
そしてDNSに登録したDMARCの情報が拾えるかテストします。
sudo opendmarc-check hogehoge.com
すると以下のような項目が表示されます。
DMARC record for hogehoge.com: Sample percentage: 100 DKIM alignment: relaxed SPF alignment: relaxed Domain policy: none Subdomain policy: unspecified Aggregate report URIs: mailto:dmarc-reports@hogehoge.com Failure report URIs: mailto:dmarc-reports@hogehoge.com
DNSに設定された情報をもとに表示されます。これが出ない場合DNSへの登録が失敗しています。修正してください。
次に/etc/opendmarc.confを変更加筆します。
変更部分は以下です。
AuthservID OpenDMARC TrustedAuthservIDs FQDN RejectFailures true Socket local:/var/spool/postfix/opendmarc/opendmarc.sock
FQDNは自ホストのフルアドレスを記載してください。
追加する部分は以下です。
IgnoreHosts /etc/opendmarc/ignore.hosts IgnoreAuthenticatedClients true RequiredHeaders true SPFSelfValidate true
加筆修正が終わったらIgnoreHosts用のフォルダを作成してignore.hostsを追加します。
sudo mkdir /etc/opendmarc sudo touch /etc/opendmarc/ignore.hosts
/etc/opendmarc/ignore.hostsの中身は以下のようにします。
127.0.0.1
次にsocket関連を修正します。
まずはフォルダを作成等を行います。
sudo mkdir -p /var/spool/postfix/opendmarc sudo chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc sudo chmod 750 -R /var/spool/postfix/opendmarc sudo gpasswd -a postfix opendmarc
/etc/postfix/main.cfを変更します。先ほどDKIMで修正しますと言ったところを加筆します。
smtpd_milters = local:opendkim/opendkim.sock,local:opendmarc/opendmarc.sock
最後にpostfixとopendmarcを再起動します。
sudo systemctl restart postfix opendmarc
最終確認
全て終わるとspf,dkim,dmarcの設定が完了されたメールが送受信できるようになります。
まずは自ホストからgmailに送信してみてください。また項目が増えてSPF,DKIM,DMARCのそれぞれがPASSとなっていれば成功です。
逆にgmailから自ホスト宛にメールを送信してメールのソースを確認して下さい。
Authentication-Results: OpenDMARC; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: OpenDMARC; spf=pass smtp.mailfrom=gmail.com Authentication-Results: mail.hogehoge.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=K3ZOAA6m; dkim-atps=neutral
こんな感じでdmarc経由でSPFなどを調べたりその後DKIMでチェックされたりと色々とチェックしてくれます。
総括
色々と端折り過ぎた所もありますが各種チェックが正常になりました。これで2月を迎えられそうです。
設定自体は大したことはありませんのでぜひ設定してセキュアなメール送受信を行うようにしましょう。
そしてこれの良い所はDNSの設定を多少弄るだけで迷惑メール対策もできるようになります。
コメント