メールサーバにSPFとDKIMとDMARCを設定して迷惑メールにならないようにする

スポンサーリンク

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登録周りでトラブったので別の記事にしています。

コメント

タイトルとURLをコピーしました