Postfix 3.xでメール到達率とセキュリティを向上させる方法

企業メールシステムの信頼性向上に頭を悩ませているLinux管理者の皆様、メール到達率の問題は解決可能です。本記事では、Postfix 3.x環境を前提に、独自ドメインを持ち、DNS設定を編集できる環境での実践的な設定方法をご紹介します。
メール配信の成功率を高めるには「送信経路の健全化」「ドメイン認証の実装」「伝送路の適切な保護」そして「受信面の堅牢化」という4つの柱が不可欠です。これらを順に実装することで、迷惑メールフォルダ行きを減らし、ビジネスコミュニケーションの確実性を飛躍的に向上させることができます。
Postfix基本設定:smtp.engn.jpへの安全なリレー
Postfixを安全に運用するには、smtp.engn.jpへのリレー設定が不可欠です。設定は/etc/postfix/main.cfファイルに書き込むことで行います。
最小構成例
# main.cf
relayhost = [smtp.engn.jp]:587
# SASL
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
# TLS(587はSTARTTLS前提、暗号化を必須に)
smtp_tls_security_level = encrypt
smtp_tls_loglevel = 1 # 初期診断用(不要になったら0へ)
# 多くのディストリではCAパスは既定でOK(必要に応じて明示)
# smtp_tls_CApath = /etc/ssl/certs
各設定項目の意味
- relayhost = [smtp.engn.jp]:587
外部中継先(角括弧でMX参照を抑止)とMSAポート587を指定し、送信を常にそのサーバへ中継する設定。 - smtp_sasl_auth_enable = yes
送信側SMTPクライアントでSASL認証を有効化する。 - smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
宛先ホストごとのSASL資格情報を格納したマップファイルの場所(postmapで生成した.dbを使用)を指定する。 - smtp_sasl_security_options = noanonymous
匿名認証を禁止し、ユーザー名・パスワードの提示を必須にする。 - smtp_tls_security_level = encrypt
STARTTLSによる暗号化を必須化し、TLS不可の相手には送信しない。 - smtp_tls_loglevel = 1
TLS関連の最小限の診断ログを出力する(0で無効、数値を上げると詳細化)。 - smtp_tls_CApath = /etc/ssl/certs
信頼済みCA証明書ストアのパスを明示する設定(多くの環境で既定のため通常はコメントのままで可)。
認証情報の設定とテスト
/etc/postfix/sasl_passwdに以下のようにblastengineの認証情報を設定します。
[smtp.engn.jp]:587 ユーザー名:パスワード
【Postfix再起動】
設定を記載したら以下のコマンドでPostfixを再起動します。
sudo systemctl restart postfix
【簡易送信テスト】
上記の設定が完了したらSMTPリレーで送信できるようになっています。swarkを使って簡単な送信テストを行いましょう。
コマンド例:
swaks –server 127.0.0.1 –port 25 –tls –from aaaaa@example.com –to bbbbb@example.com –h-Subject ‘Test Mail’ –body ‘Postfixからのテストメールです。’
上記のコマンドを叩いて、実在のアドレスにメールを送信し、実際にメールが届いたら成功です。
DNSとドメイン認証:到達率の基盤整備
メールの到達率を高めるには、DNSを活用したドメイン認証技術の実装が不可欠です。SPF・DKIM・DMARCの3つの認証技術を正しく設定することで、受信側にあなたのメールが正規のものであることを証明できます。
特にGmailやMicrosoftなどの大手プロバイダーは、これらの認証がないメールを疑わしいと判断する傾向が強まっています。smtp.engn.jpを利用する場合でも、自社ドメインからのメール送信には独自のDNS設定が必要です。SPF・DKIM・DMARC、1つずつ見ていきましょう。
SPF設定
SPF(Sender Policy Framework)は、メール送信元を認証する基本的なDNSレコードで、メール到達率向上に欠かせません。設定はシンプルで、送信元ドメインのDNSゾーンにTXTレコードとして以下を追加するだけです。
v=spf1 include:smtp.engn.jp ~all
このレコードは「このドメインからのメールはsmtp.engn.jpのサーバーから送信される」と宣言しています。末尾の「~all」は、このポリシーに合致しない送信元からのメールは「ソフトフェイル」と判定することを示します。
より厳格にしたい場合は「-all」に変更できますが、誤判定のリスクもあるため、まずは「~all」での運用をお勧めします。複数のメール送信サービスを利用している場合は、それぞれを「include:」で追加できますが、SPFには10回のDNSルックアップ制限があるため注意が必要です。
DKIM署名(OpenDKIM連携)
DKIM署名は、メール送信者の身元を証明する重要な認証技術です。OpenDKIMとPostfixを連携させることで、送信するすべてのメールに電子署名を付与できます。導入の手順は以下の通りです。
1,必要パッケージを入れる。
sudo apt update
sudo apt install opendkim opendkim-tools
2,鍵を置く場所を作る
鍵を置くフォルダを作成します。example.comは自分の送信元ドメインに置き換えてください。
sudo mkdir -p /etc/opendkim/keys/example.com
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R 700 /etc/opendkim/keys
3,DKIM鍵を生成する(2048bit推奨)
以下のコマンドで鍵を生成します。example.comは自分の送信元ドメインに置き換えてください。
sudo -u opendkim opendkim-genkey -b 2048 -d example.com -s selector1 -v \
-D /etc/opendkim/keys/example.com
sudo chmod 600 /etc/opendkim/keys/example.com/selector1.private
ここからはblastengineを使う場合と、自サーバーのOpenDKIMを使う場合に分かれます。blastengineを使ってリレーする場合はOpenDKIMの設定は不要です。
4a,blastengineのDKIM設定(blastengineを使う場合)
blastengineの管理画面でDKIMの秘密鍵を設定できます。ただし、blastengineのフォームはPKCS#8形式の秘密鍵しか受け付けないため、以下のコマンドで変換します。
sudo openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in /etc/opendkim/keys/example.com/selector1.private -out /etc/opendkim/keys/example.com/selector1.pkcs8
selector1.pkcs8に書かれている秘密鍵をblastengineに設定しましょう。設定方法は以下のページをご覧ください。
5a,DNSに公開鍵TXTを登録する(blastengineを使う場合)
selector1.txt を開き、表示されたTXTレコードをそのままゾーンに追加します。
レコード名 selector1._domainkey.example.com
値 v=DKIM1; k=rsa; p=xxxxxxxxxxxxxxxxx
6a,伝播確認(blastengineを使う場合)
ここまで設定できたらDNSが伝播しているか以下のコマンドで確認してみましょう。
dig +short TXT selector1._domainkey.example.com
先ほど設定したdomainkeyがそのまま出てくれば成功です。以下のコマンドでもテストできます。
sudo opendkim-testkey -d example.com -s selector1 -vvv
opendkim-testkey: key OKとでれば成功です。
7a,実送信で検証する(blastengineを使う場合)
自分あてにメールを送ってみましょう。受信側ヘッダーの Authentication-Results に dkim=pass が出ていれば成功です。
4b,KeyTable と SigningTable と InternalHosts を作る(OpenDKIMを使う場合)
以下のコマンドを実行します。
echo “selector1._domainkey.example.com example.com:selector1:/etc/opendkim/keys/example.com/selector1.private” | sudo tee /etc/opendkim/key.table
echo “*@example.com selector1._domainkey.example.com” | sudo tee /etc/opendkim/signing.table
printf “127.0.0.1\nlocalhost\n” | sudo tee /etc/opendkim/trusted.hosts
5,OpenDKIM設定を書く(UNIXソケット方式でPostfixと連携)
opendkim.confに設定を追記します。直接書いてもかまいませんが、以下のコマンドで自動的に追記できます。
sudo tee /etc/opendkim.conf >/dev/null <<‘CONF’
UserID opendkim:opendkim
Mode sv
Canonicalization relaxed/relaxed
OversignHeaders From
KeyTable /etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
InternalHosts refile:/etc/opendkim/trusted.hosts
Socket local:/var/spool/postfix/opendkim/opendkim.sock
PidFile /run/opendkim/opendkim.pid
UMask 007
Background yes
CONF
6b,ソケット用ディレクトリを作り権限を整える
Postfix側から見えるUNIXソケット用にディレクトリを作ります。
sudo mkdir -p /var/spool/postfix/opendkim
sudo chown opendkim:postfix /var/spool/postfix/opendkim
sudo chmod 750 /var/spool/postfix/opendkim
以下はPID用のディレクトリです。
sudo mkdir -p /run/opendkim
sudo chown opendkim:opendkim /run/opendkim
sudo chmod 755 /run/opendkim
/runフォルダは再起動でクリアされてしまうので、以下のコマンドで自動作成する設定にします。
sudo systemctl edit opendkim
エディタが開いたら以下のように追記しましょう。
[Service]
RuntimeDirectory=opendkim
PIDFile=/run/opendkim/opendkim.pid
7b,Postfixにmilter設定を入れる(main.cf)
以下のコマンドをbashで入力すると、main.cfに追記されます。
sudo postconf -e ‘milter_default_action=accept’
sudo postconf -e ‘milter_protocol=6’
sudo postconf -e ‘smtpd_milters=unix:/opendkim/opendkim.sock’
sudo postconf -e ‘non_smtpd_milters=unix:/opendkim/opendkim.sock’
エディタで直接main.cfに追記しても構いません。
sudo nano /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:/opendkim/opendkim.sock
non_smtpd_milters = unix:/opendkim/opendkim.sock
8b,サービスを再起動して連携を有効化する
以下のコマンドで有効化します。
sudo systemctl restart opendkim
sudo systemctl reload postfix
sudo systemctl status opendkim –no-pager
9b,DNSに公開鍵TXTを登録する
selector1.txt を開き、表示されたTXTレコードをそのままゾーンに追加します。
レコード名 selector1._domainkey.example.com
値 v=DKIM1; k=rsa; p=xxxxxxxxxxxxxxxxx
10b,伝播確認
ここまで設定できたらDNSが伝播しているか以下のコマンドで確認してみましょう。
dig +short TXT selector1._domainkey.example.com
先ほど設定したdomainkeyがそのまま出てくれば成功です。以下のコマンドでもテストできます。
sudo opendkim-testkey -d example.com -s selector1 -vvv
opendkim-testkey: key OKとでれば成功です。
11b,実送信で検証する
自分あてにメールを送ってみましょう。受信側ヘッダーの Authentication-Results に dkim=pass が出ていれば成功です。
DMARCポリシー
続いてDMARCの設定です。以下の手順で行います。
1,前提を確認(SPF/DKIMが通るか)
SPFに送信元が入っているか
dig +short TXT example.com | sed ‘s/”//g’
DKIM公開鍵があるか
dig +short TXT selector1._domainkey.example.com
DKIM鍵が通っているか
sudo opendkim-testkey -d example.com -s selector1 -vvv
ポイント:DMARCはFromのドメインと、DKIMのd=またはSPFのMailFrom/HELOの整合が取れている必要あります。
2,監視モードで開始(p=none)
送信元ドメインのDNSにTXTレコードを作成します。まずはブロックせずレポート収集しましょう。
名前:_dmarc.example.com
値:v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com; adkim=r; aspf=r
以下のコマンドで反映を確認します。:
dig +short TXT _dmarc.example.com
3,レポートを30–60日収集し、未整合を修正
レポートは受信箱に*.xml(集計)の形で届きます。30〜60日程度収集して確認し、未成合があれば修正しましょう。<record>内のspf/dkimのpass/failとalignmentが重要です。
4,隔離ポリシーを段階適用(p=quarantine + pct)
レポート集計と整合が終わったら、ポリシーを「隔離(quarantine)」に変えます。段階的に適用していきましょう。例えばpctを25%にする場合はDNSを以下のように更新します。
_dmarc.example.com TXT “v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc-reports@example.com; adkim=r; aspf=r”
更新したら以下のコマンドで反映確認しましょう。
dig +short TXT _dmarc.example.com
影響を見つつpct=50→pct=100へ段階的に引き上げます。
5,本番化(p=reject)
本番運用ではpをreject(拒否)に切り替えましょう。以下のようにDNSのTXTを更新します。必要ならサブドメインにも適用しましょう。
名前→_dmarc.example.com
値→”v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc-reports@example.com; adkim=r; aspf=r”
動作確認(メールサーバー動作確認チェックリスト)
1. リレー接続・認証確認
- swaksまたはmail -vでsmtp.engn.jp:587に接続できるか
- ログにAuthentication successfulが出て、SASL認証成功を確認できるか
2. TLS暗号化の確認
- /var/log/mail.logにTLSv1.2 with cipher…などの暗号化情報が記録されているか
- 必要に応じてopenssl s_client -starttls smtp -connect smtp.engn.jp:587で証明書・暗号化を手動確認
3. SPF/DKIM/DMARCの検証
- Gmailやmail-tester.comにテスト送信
- 受信側ヘッダのAuthentication-Results:にspf=pass、dkim=pass、dmarc=passが表示されるか。
- 特にDKIM署名が正しく付与されているか(dkim=pass)
4. 到達率・運用モニタリング
- Gmail/Yahoo/Outlook宛に送信し、迷惑メールフォルダに入っていないか確認
- Google Postmaster Tools/Microsoft SNDSなどの公式レピュテーションツールで監視
- 定期的にテスト送信を行い、認証・暗号化・ブラックリストの状況を点検
まとめ
本記事では、Postfixを使ったメール配信環境の最適化と安全性確保について解説しました。smtp.engn.jpへの適切なリレー設定から始まり、SPF・DKIM・DMARCによるドメイン認証の実装、MTA-STSによる伝送路保護、そしてPostscreenを活用したスパムボット対策まで、包括的な対策を網羅しています。これらの設定を適切に行うことで、メール到達率の向上とセキュリティリスクの低減を同時に実現できます。定期的な動作確認と監視を怠らず、常に最新のセキュリティ推奨事項に従うことをお勧めします。
