目次
第1章:ネットワークとサーバーの土台作り
サーバーを触る前に、通信の通り道と「時間」を正確にセットします。
① ルーターのポート開放(静的NAT)
外部から自宅サーバーへ接続するための「扉」を開けます。
| 項目 | 内容 |
|---|---|
| 設定場所 | ルーターの管理画面(静的NAT設定など) |
| 宛先IP | 172.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」に以下の通り入力します。
| Hostname | Type | Content | 役割 |
|---|---|---|---|
| www | A | (空欄) | Web用(現在のグローバルIP) |
| A | (空欄) | メールサーバー用 | |
| (空欄) | MX | mail.your-domain.mydns.jp. | メールの宛先サーバーを指定 |
| (空欄) | TXT | brevo-code:xxxxxxxx | Brevoの所有権確認コード |
| (空欄) | TXT | v=spf1 include:spf.sendinblue.com -all | 送信元の身分証明(SPF) |
| brevo1._domainkey | CNAME | b1.your-domain-mydns-jp.dkim.brevo.com. | 電子署名用(1) |
| _dmarc | TXT | v=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
- 選択肢:(E)xpand を聞かれたら
Eを入力。 - 選択肢:Which virtual host? は
2(SSL設定ファイル)を選択。 - 確認:
Successfully received certificate.が出れば成功。
第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 | 巨大なファイルを送られてサーバーがパンクするのを防ぎます。 |
手順
sudo vi /etc/postfix/main.cfを開きます。smtpd_bannerを検索(/smtpd_banner)し、以下の通り書き換えます。smtpd_banner = $myhostname ESMTP- ファイルの一番最後(最終行)に、以下の4行を追記します。
# --- セキュリティ強化 --- disable_vrfy_command = yes smtpd_helo_required = yes message_size_limit = 10240000 - 保存して反映:
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
- 成功例:
status=sent (250 OK) - 失敗例:
User unknown(宛先のスペルミス)
実録教訓
例えば宛先を 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
- ホスト名・ドメイン設定が資料通り 証跡あり
- Brevoリレー設定(relayhost)が資料通り 証跡あり
- セキュリティ強化設定(banner隠蔽・VRFY拒否・HELO必須・サイズ制限)がすべて反映済み 証跡あり
- Postfix・Dovecotともに稼働中 証跡あり
精査メモ
ポート転送先IP(192.168.1.2 → 172.16.1.2)以外の設定内容は、実機の現在の状態と完全に一致していました。この資料は現役で稼働中のメールサーバーの構築記録です。