PR

これができれば一人前!VPSでPostfix+DKIM設定をマスターする実践ガイド

※当サイトはアフィリエイト広告を利用しています

ネットワーク

こんにちは。情シス先輩です。
VPSでPostfixを構築してもGmailなどで迷惑メール扱いされたり、そもそもメールが届かない…そんな悩みを抱えたことはありませんか?
その原因の多くは DKIM・SPF・DMARCの未設定や不備、さらにはファイアウォールの設定ミス にあります。
この記事ではPostfixを使ってこれらの技術に対応したメール送信サーバーをVPS上に構築する手順を詳しく解説します。

  • メールがGmailなどで迷惑メールに分類されてしまう…
  • VPS上にPostfixを入れたけど、外部にメールが届かない…
  • そもそもDKIM・SPF・DMARCって何?どう設定すればいいの?

これらの悩みを持つ若手エンジニアの方に向けて基本から丁寧に紹介していきます。

※本記事の構成には「独自ドメイン」や「VPS環境」が必要です。
それぞれの導入がまだの方は以下の記事で詳しく解説しています。

スポンサーリンク

なぜ自前でPostfixを構築するのか?メリットは?

Postfixを自分で構築して外部(Gmailなど)へメール送信できるようになると以下のような活用が可能になります。

  • 迷惑メールに入らない正規の通知メールを送れる
  • サーバー監視やセキュリティイベントの通知をGmailで受信可能
  • Pythonなどから構成されたメール自動送信スクリプトを実運用に活用
  • ブログ更新やログ監視など、自宅ラボの自動通知に連携

さらに言えばこれを正しく構築できるだけでも「実務レベルのLinux・ネットワーク・DNS・セキュリティの理解がある」ことの証明になります。
社内情シスとしてもインフラエンジニアとしても自信を持っていいスキルです。

構成と前提

  • VPS:固定グローバルIP付き(例:さくらのVPSなど)
  • OS:AlmaLinux 9
  • 送信専用メールサーバー(受信は不要)
  • DNSで正引き・逆引き・SPFのTXTレコードが設定可能

構築の流れ

Postfixとs-nailのインストール

AlmaLinux 9ではメール送信コマンドは mailx の代わりに s-nail を使います。

sudo dnf install postfix s-nail
sudo systemctl enable --now postfix

/etc/postfix/main.cf 設定例(抜粋)

myhostname = mail.example.com
myorigin = example.com
mydestination = localhost
inet_interfaces = all
inet_protocols = all

iptablesで25番ポートの外向き通信を許可

Postfixから外部のSMTPサーバー(例:Gmail)に接続できるよう、OUTPUTチェーンに25番ポートを許可しておきます。以下のようなルールを追加してください:

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT

保存・再読み込み(firewalldと併用している場合は注意)

iptables-save > /etc/sysconfig/iptables

※iptablesを使っていない場合は、firewalldnftables 側の設定が必要です。

SPF設定(DNS)

DNSゾーンに以下のTXTレコードを追加

"v=spf1 ip4:XXX.XXX.XXX.XXX -all"

OpenDKIMの導入と設定(AlmaLinux特有)

事前に依存パッケージとリポジトリを有効にします。

sudo dnf config-manager --set-enabled crb
sudo dnf makecache
sudo dnf install opendkim opendkim-tools libmemcached libmemcached-devel sendmail-milter

設定ファイル /etc/opendkim.conf の抜粋

Syslog                  yes
LogWhy                  yes
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              no
AutoRestart             Yes
Socket                  inet:8891@localhost
KeyTable                /etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts

LogWhy yes を設定しておくと、署名やエラーの詳細が /var/log/maillog に出力されます。

DKIM鍵の作成とDNS登録

mkdir -p /etc/opendkim/keys/example.com
cd /etc/opendkim/keys/example.com
opendkim-genkey -s mail -d example.com
chown opendkim:opendkim mail.private

生成された mail.txt を元に、以下のようにDNSにTXTレコードを追加します

mail._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."

DKIMのKeyTable・SigningTableなど設定

設定ファイルに記載する際は、SigningTableに refile: を忘れずに!

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

# /etc/opendkim/SigningTable
*@example.com mail._domainkey.example.com

# /etc/opendkim/TrustedHosts
127.0.0.1
localhost

PostfixとOpenDKIMの連携設定

# /etc/postfix/main.cf の末尾に追加
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

サービスを再起動

sudo systemctl enable --now opendkim
sudo systemctl restart postfix

DMARCのDNS設定

_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

動作確認とトラブル対処法

テスト送信(自分で持っているgmailあてへのテスト)

echo "テストメール" | s-nail -s "DKIMテスト" あなたのメール@gmail.com

メールが届かない場合は以下を確認

  • iptablesOUTPUT に25番が許可されているか: iptables -L OUTPUT -n
  • Postfixが25番で外部に接続しているか: netstat -ntp | grep :25
  • DKIM署名ログの確認: tail -f /var/log/maillog
  • DNSレコード反映: dig txt mail._domainkey.example.com

検証サイトも活用しましょう

Postfix構築で広がる活用例

Postfixによるメール送信が安定すれば以下のような仕組みを自分で構築・運用できるようになります

Python × Postfix で自作ツールを強化

import smtplib
from email.mime.text import MIMEText

msg = MIMEText("自宅サーバーからの自動通知です")
msg["Subject"] = "ラボ環境監視通知"
msg["From"] = "you@example.com"
msg["To"] = "your_gmail@gmail.com"

s = smtplib.SMTP("localhost")
s.send_message(msg)
s.quit()
  • 自宅サーバーで発生した障害・監視ログを即時通知
  • バッチ処理やスクレイピングの成功通知
  • ZabbixやWazuhなどOSSと連携したセキュリティレポート送信

Gmailと連携することで「使える自動通知環境」が完成

メールが迷惑フォルダに入らず通常の受信トレイに届くようになれば、日々の運用監視にも実用性が出てきます。
SlackやLINE連携より自由度が高く外部サービスに依存せず構成できるのも大きなメリットです。

まとめ

構築を終えると以下のような力が身につきます

  • Postfix + DKIM/SPF/DMARCを正しく構築できる力
  • iptablesなどLinuxの出力制御の理解
  • s-nailなどツールを駆使したテスト技術
  • ログやnetstatなどで原因を追う実践力
  • 通知・自動化スクリプトへの応用展開

単なる構築で終わらせずPythonや監視ツールと組み合わせて使い倒すことこそがこのスキルの真価です。
自宅ラボや個人開発の通知基盤としても活用してみてください。

※本記事の内容は筆者がVPS(AlmaLinux)環境で実際に構築・検証した事例に基づいていますが、VPSの仕様やDNS設定の状況によって動作結果が異なる場合があります。
設定や運用は自己責任にて実施していただき、特に外部へのメール送信については送信先の利用規約や迷惑メールポリシーに十分ご注意ください。

関連リンク

本格的にサーバー構築を始めるなら以下の記事もおすすめです

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