【Postfix】迷惑メール対策4選|送受信とも強化(SPF・DKIM・DMARC・Postscreen)

2025年12月末でGmailがPOP取り込みを終了します。

今までGmailの「他のアカウントのメールを確認」で外部の受信メールを取り込んで1箇所にまとめることができましたが、今後できなくなります。

メールをGmailに転送すれば今まで通りになるけど、正しく設定してないとスパムメール扱いされてしまう。ということで改めて迷惑メール対策しました。

なおサーバはRocky Linux 9。Postfixで送受信できているところから進めます。
SPF・DKIM・DMARCが送信側の対策、Postscreenが受信側の対策です。

スポンサーリンク

SPF

DNSでメールのドメインとIPアドレスを紐づけます。2023年まではこれ設定するだけで良かったんだけど今では不十分です。

txt @ v=spf1 ip4:(IPアドレス) ~all


DKIM

メールに電子署名を追加して改ざんされてないかチェックする機能です。

OpenDKIM初期設定

インストール

# dnf config-manager --set-enabled crb
# dnf install opendkim opendkim-tools
# dnf config-manager --disable epel

設定

# vi /etc/opendkim.conf
Mode    sv
#KeyFile /etc/opendkim/keys/default.private
KeyTable        refile:/etc/opendkim/KeyTable
SigningTable   refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts  refile:/etc/opendkim/TrustedHosts

起動

# systemctl start opendkim
# systemctl enable opendkim

PostfixとOpenDKIM接続

# vi /etc/postfix/main.cf
末尾に追加
smtpd_milters = local:/run/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

ユーザ権限変更してリロード

# usermod -a -G opendkim postfix
# systemctl reload postfix


ドメインごとの設定

鍵を作成します。ドメインはexample.comにしてるので書き換えてください。あと鍵の名前20251211も。

# mkdir -p /etc/opendkim/keys/example.com
# cd /etc/opendkim/keys/example.com
# opendkim-genkey -v -b 1024 -d example.com -s 20251211
# chown opendkim:opendkim *.*

なお鍵の長さを1024bitにしているのは2048bitだとDNSで長すぎだとエラーが出たから。複数行に分ければ登録できるみたいだし、1024bitだと弱いのでそのうち対応します。

秘密鍵を指定

# vi /etc/opendkim/KeyTable
20251211._domainkey.example.com example.com:20251211:/etc/opendkim/keys/example.com/20251211.private

署名するメールアドレスを指定

# vi /etc/opendkim/SigningTable
*@example.com 20251211._domainkey.example.com

再起動

# systemctl restart opendkim
# systemctl restart postfix

TXTレコード作成します

# cd /etc/opendkim/keys/example.com
# cat 20251211.txt

上記結果から括弧の中身を取り出しダブルクォーテーションと改行削除して1行にまとめます。そして以下のようにDNSに登録します。

txt 20251211._domainkey.example.com v=DKIM1; k=rsa; p=(省略)

DKIMは毎回めんどくさいね。

DMARC

メールをどう扱うかの設定です。これは何もしないという設定です。DNSに書き込みます。

txt _dmarc.example.com v=DMARC1; p=none;


Postscreen

受信側の迷惑メール対策です。転送設定で使うのならGmail側が勝手にスパム判断してくれるので不要ですが、転送しないメールアカウントもあるので。

# vi /etc/postfix/master.cf
コメントアウト
#smtp      inet  n       -       n       -       -       smtpd
有効化
smtp      inet  n       -       n       -       1       postscreen
smtpd     pass  -       -       n       -       -       smtpd
dnsblog   unix  -       -       n       -       0       dnsblog
tlsproxy  unix  -       -       n       -       0       tlsproxy
# vi /etc/postfix/main.cf
末尾に追加
postscreen_greet_action = enforce
postscreen_greet_wait = 6s
postscreen_non_smtp_command_enable = no
postscreen_non_smtp_command_action = drop
postscreen_client_connection_count_limit = 50
postscreen_dnsbl_action = ignore
postscreen_cache_cleanup_interval = 12h

再起動

# systemctl restart postfix

ログを確認します。

# journalctl -u postfix | grep postscreen | grep -E 'DROP|HANGUP|reject|PREGREET|NON-SMTP'

1日100通来ていた迷惑メールが10通に減りました。まだ多いけど誤検知があると困るので最低限のチェックのみにしています。
無料DNSBL調べてみたけどもう使えない所が多いね…

まとめ

これで2026年になっても今まで通りGmailアカウント1本でメールを扱えます。

コメント