SPFとDKIMとDMARCが揃わないとスパムになる時代
CentOS7を利用している知り合いから(いいのか・・・)、どうしてもDKIMを設定したいと頼まれたのでメモしました。SPFは楽ですよね。IPわかってDNS登録すればよし。ただDKIMは内容把握するのも、そもそも何してるかを理解するのが難しいのでね。GmailやYahooメールはもう設定しないとスパム扱いになるようです。でもそれでいいんじゃないかなと思います。こちらとしても迷惑メールは撲滅してほしいですからね。
ちょっと雑なところありますが、DKIM設定したのでメモします。ほとんどこちらのおかげでコピペレベルでうまくできました。まずはepelから設定します。
yum -y install epel-release
読み込んだプラグイン:f+B5:B32
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ epel-release.noarch 0:7-11 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
(中略)
インストール:
epel-release.noarch 0:7-11
完了しました!
ちゃんと入ったかrepolistで確認します。
yum repolist
読み込んだプラグイン:fastestmirror, langpacks
base | 3.6 kB 00:00:00
extras/7/x86_64 | 2.9 kB 00:00:00
updates/7/x86_64 | 2.9 kB 00:00:00
One of the configured repositories failed (不明),
and yum doesn't have enough cached data to continue. At this point the only
safe thing yum can do is fail. There are a few ways to work "fix" this:
(中略)
Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again
なんやねん・・・metalinkがダメっぽいので、metalinkをコメント、baseurlをコメント外ししてみます。
vi /etc/repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch ←コメント外す
#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch ←ここをコメントに変更
もう一度yum repolistするとうまくいきました。さて、CentOS7系ですのでyumを使ってdkimをインストールしていきます。
opendkimのインストール
yum install opendkim
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ opendkim.x86_64 0:2.11.0-0.1.el7 を インストール
(中略)
インストール:
opendkim.x86_64 0:2.11.0-0.1.el7
依存性関連をインストールしました:
libbsd.x86_64 0:0.11.7-2.el7 libevent.x86_64 0:2.0.21-4.el7
libmd.x86_64 0:1.1.0-1.el7 libmemcached.x86_64 0:1.0.16-5.el7
libopendkim.x86_64 0:2.11.0-0.1.el7 opendbx.x86_64 0:1.4.6-6.el7
sendmail-milter.x86_64 0:8.14.7-6.el7
完了しました!
「完了しました!」とビックリマーク付きで元気に言ってくれます。
さて、ここから、先ほどインストールしたopendkimのキージェネレータを使って、公開鍵と秘密鍵を作ります。まずはメール送信元ドメインのフォルダを作っておきましょう。ここでは例として、このブログのドメイン「zombie.jp」を例にしています。
mkdir /etc/opendkim/keys/zombie.jp ※zombie.jpはドメイン名
opendkim-genkeyコマンドで、鍵を作ります。末尾「-s」オプションの「240123」わかりやすくて後で識別できればなんでも良いです。この例では日付です。後々使いますのでこの値は覚えておいてください(セレクタ名と呼びます)。
opendkim-genkey -D [KEY作成するディレクトリ] -d [ドメイン] -s [セレクタ名]
opendkim-genkey -D /etc/opendkim/keys/zombie.jp/ -d zombie.jp -s 240123
鍵が出来ているかls -alで見てみましょう。
ll /etc/opendkim/keys/zombie.jp/
-rw------- 1 root root 887 1月 23 15:13 240123.private
-rw------- 1 root root 314 1月 23 15:13 240123.txt
できてますね。所有者がコマンド発行したrootになっているので、opendkimに変更します。
chown -R opendkim:opendkim /etc/opendkim/keys/zombie.jp/
ll /etc/opendkim/keys/zombie.jp/
-rw------- 1 opendkim opendkim 887 1月 23 15:13 240123.private
-rw------- 1 opendkim opendkim 314 1月 23 15:13 240123.txt
所有者変更できました。公開鍵の内容を見てみましょう。
less /etc/opendkim/keys/zombie.jp/240123.txt
240123._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQU...QIDAQAB" ) ; ----- DKIM key 240123 for zombie.jp
これをzombie.jpを管理するDNSサーバのtxtレコードとして登録します。(DNSへの設定は今回割愛します。DNS提供側のサービスにわかりやすく載ってると思われます)
opendkimの設定ファイル郡を変更する
opendkimの設定ファイルを編集します。バックアップを取ったあと、「↓」を挟んでビフォーアフターで変更してください。疲れてきたと思いますがまだ五合目です。頑張ってください。
cp -p /etc/opendkim.conf /etc/opendkim.conf.20240123.default
vi /etc/opendkim.conf
#Mode v
↓
Mode sv
KeyFile /etc/opendkim/keys/default.private
↓
# KeyFile /etc/opendkim/keys/default.private
#KeyTable /etc/opendkim/KeyTable
↓
KeyTable /etc/opendkim/KeyTable
# SigningTable refile:/etc/opendkim/SigningTable
↓
SigningTable refile:/etc/opendkim/SigningTable
# ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
↓
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
# InternalHosts refile:/etc/opendkim/TrustedHosts
↓
InternalHosts refile:/etc/opendkim/TrustedHosts
先ほどコメントインしたKeyTableを編集します。
[セレクタ名]._domainkey.[ドメイン] [ドメイン]:[セレクタ名]:秘密鍵 を追記します。
cp -p /etc/opendkim/KeyTable /etc/opendkim/KeyTable.20240123.default
vi /etc/opendkim/KeyTable
240123._domainkey.zombie.jp zombie.jp:240123:/etc/opendkim/keys/zombie.jp/240123.private
続いてSigningTableを変更します。送信するアドレス指定もできますが、この例だとzombie.jpのアドレスをワイルドカードで全て指定しています。
cp -p /etc/opendkim/SigningTable /etc/opendkim/SigningTable.20241234.default
vi /etc/opendkim/SigningTable
*@zombie.jp 240123._domainkey.zombie.jp
opendkimをサービス起動する
opendkimサービスを起動し、自動起動設定しておきます。
systemctl start opendkim
systemctl status opendkim
systemctl enable opendkim
MTA側の設定ファイルを変更する
MTA側に行きましょう。postfixの設定ファイルをバックアップ取って、末尾あたりに追記します。
cp -p /etc/postfix/main.cf /etc/postfix/main.cf.20240123
vi /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
1行目にポート番号が出てきました。8891はopendkim.confに指定されているので、見比べて同じだったら変更不要です。念のためnetstatなどで8891ポートがlistenしているか確認しておきましょう。先ほどのopendkimサービスの起動でポートが空いてるはずです。
MTA再起動
systemctl restart postfix
MTAを再起動しておわり。お疲れ様でした。/var/log/maillogなどに、DKIMを使ってメールが送られているログが出ているはずですので確認しておきましょう。DMARCの書き方はまた今度。
(追記)DNS登録周りでトラブったので別の記事にしています。
コメント