どんどん進化するメーラーのスパムメールフィルタに変に引っかからないように、しっかりとした身元証明をもってメールを配信するようにしておきます。SPF、DKIM、DMARC、それぞれがどんなものかを超ざっくり、超簡単にまとめますが、詳しく知りたい方はググってくださいね。
Contents
SPFって?
DNSを用いて、そのメールが配信されるIPアドレスを宣言する仕組みです。この宣言されたIPアドレス以外のサーバから配信されている場合は、怪しいメールになります。
DKIMって??
公開鍵と電子署名を用いてメールが正しく配信されているかを調べる仕組みです。サーバ内で保持する秘密鍵をもとに行った電子署名をメールに付与し、DNSに記載した公開鍵をもって承認など、うんちゃらかんちゃらと書くと、どんどん深みにハマっていきそうな気がする(笑)
DMARC????
これまでのあがった、SPFとDKIM、それぞれの補足的なもので、それぞれのルールでNGとなったメールをどう処理するかといったルールをDNSに記載する仕組みです。
とはいえ、いずれもDNSを用いますので、DNSが編集できることを前提として考えてください。
では早速、SPFの設定します。
これは超簡単。
DNSに、SPFレコードを一行を追加するだけです。
v=spf1 a mx ip4:IPアドレス -all
Google Workspace からも配信する場合はこんな感じ。
v=spf1 a mx ip4:IPアドレス include:_spf.google.com -all
様々なサイトで書かれているSPFレコード。
一部が、-all だったり ~all だったりと違うことがあるのですが、その理由はあまり触れられていないです。
ハイフンの場合は、厳格にこのIPアドレス以外からの配信はないですよ。それ以外は fail っす。と明確宣言するのに対し、チルダの場合は、それ以外からの配信もあるかもね。といったものになっています。そのため、記載のIPアドレス以外からの配信は、softfail となんとも日本人っぽい曖昧な認証失敗に(笑)
可能であれば、ハイフンを使って厳格に宣言したほうが良いと思うmonmonでした。
次にDKIMです。
OpenDKIMを使っていきます。
インストールは簡単です。
sudo apt install opendkim opendkim-tools
マルチドメインでのサーバ運用も視野に入れるため、ちょっと設定が複雑化しています。
/etc/opendkim が見つからない。
/etc/opendkim ディレクトリが見つからず、代わりに、/etc/dkimkeys が見つかったので、こちらで作業することにする。(なんでだろ、Debian系だから?)
とはいえ、ひとまず、やることは同じで、ドメイン単位に証明書を格納するディレクトリを作成します。
sudo mkdir /etc/dkimkeys/monmon.jp
selectorは指定ぜず、defaultのまま証明書を作成します。
sudo opendkim-genkey --directory=/etc/dkimkeys/monmon.jp --domain=monmon.jp --bits=2048
以下、2ファイルが作成されました。
default.private
default.txt
オーナーをopendkimユーザーに変更しておきます。
sudo chown -R opendkim:opendkim /etc/dkimkeys/monmon.jp
OpenDKIMの設定。
設定ファイルはこちら。
sudo vi /etc/opendkim.conf
修正箇所。
Socket inet:8892@localhost
#Socket local:/run/opendkim/opendkim.sock
#Mode sv
Mode sv
末尾に追加。
KeyTable /etc/dkimkeys/KeyTable
SigningTable refile:/etc/dkimkeys/SigningTable
ExternalIgnoreList refile:/etc/dkimkeys/TrustedHosts
InternalHosts refile:/etc/dkimkeys/TrustedHosts
設定ファイルに追記した各ファイルを作成していきます。
KeyTable
sudo vi /etc/dkimkeys/KeyTable
内容は、ドメインキーと秘密鍵との紐付けですね。
default._domainkey.monmon.jp monmon.jp:default:/etc/dkimkeys/monmon.jp/default.private
SigningTable
sudo vi /etc/dkimkeys/SigningTable
こちらの内容は、ドメインキーとメールユーザーとの紐付けですね。
*@monmon.jp default._domainkey.monmon.jp
TrustedHosts
sudo vi /etc/dkimkeys/TrustedHosts
信頼できるホストの指定ですね。ローカルサーバのみですので。
127.0.0.1
::1
起動
sudo systemctl status opendkim
● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-03-02 19:40:21 JST; 25s ago
Docs: man:opendkim(8)
man:opendkim.conf(5)
man:opendkim-genkey(8)
man:opendkim-genzone(8)
man:opendkim-testadsp(8)
man:opendkim-testkey
http://www.opendkim.org/docs.html
Process: 87650 ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf (code=exited, status=0/SUCCESS)
Main PID: 87661 (opendkim)
Tasks: 6 (limit: 1160)
Memory: 2.3M
CGroup: /system.slice/opendkim.service
└─87661 /usr/sbin/opendkim -x /etc/opendkim.conf
aptでのインストール後、やはりすでに動いている(笑)
なので再起動だけ。
sudo systemctl restart opendkim
PostfixにもDKIMの設定を。
設定ファイルはこれ。
sudo vi /etc/postfix/main.cf
フィルタ設定などを末尾に追加します。
milter_default_action = accept
smtpd_milters = inet:127.0.0.1:8892
non_smtpd_milters = $smtpd_milters
Postfixをリロード。
sudo systemctl reload postfix
Postfixリロード後、不安なので(笑)OpenDKIMも再起動。
sudo systemctl restart opendkim
公開鍵などをDNSに登録。
sudo cat /etc/dkimkeys/monmon.jp/default.txt
上記の内容を、
default._domainkey
TXTレコード、
v=DKIM1; h=sha256; k=rsa; p=MIIBIjA ... 省略 ... IDAQAB
こんな感じで追加します。
ADSPレコードも追加。
_adsp._domainkey
TXTレコード、
dkim=unknown
を追加。DKIM認証のポリシーなので、すべてのメールがDKIM認証されている!そんな確固たる自信があるあなたはallでもいいかもですが、IPアドレスと違って確固たる自信はないので(笑)unknownに。特段これで問題はありません。
最後に、最低限のDMARCも追加。
_dmarc
TXTレコード、
v=DMARC1; p=none
を追加します。
もろもろ設定が完了し、DNSが反映されると……
送ったメールのすべての認証がパスされているのを確認できました。マルチドメインの場合は、証明書を作成する手順から同じように別ドメインのものを作成していく感じですね。
メール周りもこれで完了です。だいぶサーバらしくなってきましたね。