Rocky Linux 9 一覧へ戻る トップRocky Linux 9 / メールサーバー構築
Rocky Linux 9 ・ Mail Server

🛡️ メールサーバー構築

Postfix(送信)+ Dovecot(受信)+ Brevo SMTPリレー構成

Let's Encrypt SPF / DKIM / DMARC Brevoリレー

目次

  1. 第1章:ネットワークとサーバーの土台作り
  2. 第2章:DNS設定(MyDNS.JP)
  3. 第3章:パッケージ導入とSSL証明書
  4. 第4章:Postfix(送信担当)の設定
  5. 第5章:Dovecot(受信担当)の設定
  6. 第6章:ファイアウォールとSELinux
  7. 第7章:送受信テストとクライアント設定
  8. 実機で確認した設定状況

第1章:ネットワークとサーバーの土台作り

サーバーを触る前に、通信の通り道と「時間」を正確にセットします。

① ルーターのポート開放(静的NAT)

外部から自宅サーバーへ接続するための「扉」を開けます。

項目内容
設定場所ルーターの管理画面(静的NAT設定など)
宛先IP172.16.1.2(サーバーのIP・DMZセグメント)
開放ポート(TCP)25(SMTP受信用) / 80(HTTP) / 443(HTTPS)
110, 143, 465, 993, 995(各種メール受信用)
587(Submission/スマホ送信依頼用)← これを忘れるとスマホから送れません

精査メモ:宛先IPを現行構成に修正

当初の資料では宛先IPが192.168.1.2と記載されていましたが、これはDMZセグメント導入前の旧ネットワーク構成のものでした。現在このサーバーはDMZセグメント(172.16.1.0/24)の172.16.1.2で稼働しているため、記載を修正しています。

② サーバーの時刻同期(重要:証明書エラー防止)

サーバーの時計がズレているとSSL証明書が取れません。

sudo systemctl enable --now chronyd
sudo chronyc makestep   # 強制同期
date                     # 現在時刻(2026年...)であることを必ず確認!

第2章:DNS設定(MyDNS.JP)

世界に自分のサーバーの住所と「身分」を教えます。

① MyDNS レコード登録

MyDNSの「Domain Info」に以下の通り入力します。

HostnameTypeContent役割
wwwA(空欄)Web用(現在のグローバルIP)
mailA(空欄)メールサーバー用
(空欄)MXmail.your-domain.mydns.jp.メールの宛先サーバーを指定
(空欄)TXTbrevo-code:xxxxxxxxBrevoの所有権確認コード
(空欄)TXTv=spf1 include:spf.sendinblue.com -all送信元の身分証明(SPF)
brevo1._domainkeyCNAMEb1.your-domain-mydns-jp.dkim.brevo.com.電子署名用(1)
_dmarcTXTv=DMARC1; p=none; ...なりすまし対策設定

第3章:パッケージ導入とSSL証明書

① 必要なソフトのインストール

# epelリポジトリ経由で s-nail などを導入
sudo dnf install -y epel-release
sudo dnf install -y postfix dovecot s-nail httpd certbot python3-certbot-apache
sudo systemctl enable --now httpd

② SSL証明書(Let's Encrypt)の取得

sudo hostnamectl set-hostname mail.your-domain.mydns.jp
sudo certbot --apache -d your-domain.mydns.jp -d www.your-domain.mydns.jp -d mail.your-domain.mydns.jp

第4章:Postfix(送信担当)の設定

① Brevo認証パスワードの作成

sudo vi /etc/postfix/sasl_passwd

内容:

[smtp-relay.sendinblue.com]:587    あなたのID:BrevoのSMTPキー
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

② main.cf の編集(末尾に追記)

sudo vi /etc/postfix/main.cf の一番下に追加します。

# --- 基本・配送設定 ---
myhostname = mail.your-domain.mydns.jp
mydomain = your-domain.mydns.jp
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/

# --- SSL証明書のパス(Let's Encrypt) ---
# 元々あった smtpd_tls_cert_file 等は # でコメントアウトしてください
smtpd_tls_cert_file = /etc/letsencrypt/live/your-domain.mydns.jp/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/your-domain.mydns.jp/privkey.pem
smtpd_tls_security_level = may

# --- Brevoリレー設定 ---
relayhost = [smtp-relay.sendinblue.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_sasl_mechanism_filter = plain, login

# --- スマホ・PCからの「送信依頼」を許可する設定 ---
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Postfix 設定の強化(main.cf の修正)

各項目の意味

項目意味
smtpd_banner接続時に「Postfix 3.x です」という名刺を渡すのをやめ、バージョンを隠します。
disable_vrfy_command「このユーザーは存在しますか?」という攻撃者の偵察(VRFY)を拒否します。
smtpd_helo_required最初に挨拶(HELO)をしない無作法なボットを門前払いします。
message_size_limit巨大なファイルを送られてサーバーがパンクするのを防ぎます。
手順
  1. sudo vi /etc/postfix/main.cf を開きます。
  2. smtpd_banner を検索(/smtpd_banner)し、以下の通り書き換えます。
    smtpd_banner = $myhostname ESMTP
  3. ファイルの一番最後(最終行)に、以下の4行を追記します。
    # --- セキュリティ強化 ---
    disable_vrfy_command = yes
    smtpd_helo_required = yes
    message_size_limit = 10240000
  4. 保存して反映:sudo systemctl restart postfix

③ master.cf の編集(587番窓口を開く)

sudo vi /etc/postfix/master.cf

以下の行の # を消して有効化します。

submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_sasl_auth_enable=yes

第5章:Dovecot(受信担当)の設定

① 10-ssl.conf(SSLパス)

sudo vi /etc/dovecot/conf.d/10-ssl.conf

※先頭の < は絶対に消さないでください。

ssl = yes
ssl_cert = </etc/letsencrypt/live/your-domain.mydns.jp/fullchain.pem
ssl_key = </etc/letsencrypt/live/your-domain.mydns.jp/privkey.pem

② 10-mail.conf(保存場所)

sudo vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir

③ 10-master.conf(Postfix認証との橋渡し:最重要)

sudo vi /etc/dovecot/conf.d/10-master.conf

service auth { の塊の中を以下のように修正・追記。

# Postfix smtp-auth 用の窓口を開設
unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
}

第6章:ファイアウォールとSELinux

① 通信許可

sudo firewall-cmd --permanent --add-service={smtp,imaps}
sudo firewall-cmd --permanent --add-port=587/tcp
sudo firewall-cmd --reload

② SELinux(Postfixの外部通信許可)

これをやらないとBrevoへリレーできません。

sudo setsebool -P allow_postfix_network_connect 1

# 最後に全サービス再起動
sudo systemctl restart postfix dovecot

第7章:送受信テストとクライアント設定

① ユーザー作成

sudo adduser user
sudo passwd user

② スマホ・PCアプリの設定値(Thunderbirdなど)

項目設定値
ユーザー名user
パスワード設定したもの
受信(IMAP)mail.your-domain.mydns.jp / ポート 993 / SSL/TLS
送信(SMTP)mail.your-domain.mydns.jp / ポート 587 / STARTTLS
認証方式「通常のパスワード」を選択。

③ ログの確認方法(トラブル時はここ!)

sudo tail -f /var/log/maillog

実録教訓

例えば宛先を yamada のつもりで ymada のように1文字間違えるだけで届きません。ログをよく読みましょう。

実機で確認した設定状況

2026年8月4日時点で、本サイトのRocky Linux 9サーバーの実際の設定を確認しました。

$ hostname
mail.your-domain.mydns.jp

$ postconf myhostname mydomain relayhost smtpd_banner \
    disable_vrfy_command smtpd_helo_required message_size_limit
myhostname = mail.your-domain.mydns.jp
mydomain = your-domain.mydns.jp
relayhost = [smtp-relay.sendinblue.com]:587
smtpd_banner = $myhostname ESMTP
disable_vrfy_command = yes
smtpd_helo_required = yes
message_size_limit = 10240000

$ systemctl is-active postfix dovecot
active
active

精査メモ

ポート転送先IP(192.168.1.2172.16.1.2)以外の設定内容は、実機の現在の状態と完全に一致していました。この資料は現役で稼働中のメールサーバーの構築記録です。

Rocky Linux 9 一覧へ戻る