Postfixを自サーバで構築
メールサーバの設定概要リンク
- ドメイン設定
- メールサーバ(MTA)のネットワーク設定 にまとめたのでその通り各種DNSのレジストラの管理画面で操作をやる
- postfix設定
- CentOS 7 の Postfix で独自ドメインの設定
- 独自ドメインでメールサーバ構築したいならば上の資料が一番早い、のでそのとおりやる
- dovecot設定
- メールサーバー構築(Postfix+Dovecot) のdovecotの設定を読んで実施する
- postfix/dovecotのSSL対応
- Webサーバー間通信内容暗号化(Apache+mod_SSL+Certbot)
- certbotのくだりは、証明書が取得できればいいので手順としては実施しなくても良い
- このページの下の方にCloudFlareのAPIを使用してLet's Encryptで証明書を取得する方法を書いた。
- SPF/DKIM設定
- DKIM
- 自ドメインのDNSとPostfixをSPF/DKIM対応させてみた をそのままなぞればいい
- DKIM
- SPF
- 送信ドメインを認証するためのSPFレコードに詳しくなろう
- 上記Sendgridの例ではincludeを指定しているが、実は不要
- SPF レコードで再帰的に include してしまうというミス
- そのような確認は https://mxtoolbox.com/ というサイトが役立つ、上記のミスも警告してくれる
SPF/DKIM設定までやれば、ThunderbirdでメールサーバにログインしGmailにメールを送ったりできるはす。
postfix/dovecotの設定のポイント
ほぼメールサーバー構築(Postfix+Dovecot)の通りで設定できるが以下は結構重要。結論から言うと私の環境では不要だった、「saslauthd」を使えばよい。
[[email protected] ~]# vi /etc/sasl2/smtpd.conf ← SMTP認証設定ファイル編集※CentOS7の場合 pwcheck_method: saslauthd ↓ pwcheck_method: auxprop ← 変更
saslauthdだとLinux上の各ユーザのパスワードがメールの認証に使われるので、わかりやすいパスワードは避けるべきだろう。
メールのテスト
ドキュメントではThunderbirdを使用した設定例が載っている。接続できず、デバッグする時はtelnetを使ったほうが良い。
CloudFlareのAPIを使用してLet's Encryptで証明書を取得する方法
certbot-dns-cloudflareというのがあって、CloudFlareで管理しているDNSの証明書をLet's Encryptで取得する場合、証明書の取得処理を自動でできる
以下を参考にさせてもらう
$ which python ~/.pyenv/shims/python $ python --version Python 3.6.10 $ pip install certbot-dns-cloudflare ...
pyenvを使っている場合、sudoでPATHを引き継げる必要があるので、以下を実施すること
CloudFlareコンソールでGlobal API Keyをもらう、そしてdns_cloudflare_api_keyに設定する
$ sudo mkdir -pv /etc/letsencrypt { echo dns_cloudflare_email = [email protected] echo dns_cloudflare_api_key = ***key*** } | sudo tee /etc/letsencrypt/cloudflare_secret.ini $ sudo chmod 600 /etc/letsencrypt/cloudflare_secret.ini
ドライラン(-vをつけると詳細が表示される)
$ sudo certbot certonly --dry-run -n --agree-tos --dns-cloudflare \ --dns-cloudflare-credentials /etc/letsencrypt/cloudflare_secret.ini \ --dns-cloudflare-propagation-seconds 20 \ --email [email protected] -d *.example.com -d example.com -v
うまくいったら、--dry-runを抜いて実行
$ sudo certbot certonly -n --agree-tos --dns-cloudflare \ --dns-cloudflare-credentials /etc/letsencrypt/cloudflare_secret.ini \ --dns-cloudflare-propagation-seconds 20 \ --email [email protected] -d *.example.com -d example.com -v
うまく動いていれば以下のように表示される
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem This certificate expires on YYYY-MM-DD. These files will be updated when the certificate renews.
取得した証明書をdovecotに設定する際は以下のようにする。"<"は必須。
ssl = yes # Preferred permissions: root:root 0444 ssl_cert = </etc/ssl/certs/dovecot.pem # Preferred permissions: root:root 0400 ssl_key = </etc/ssl/private/dovecot.pem
fullchain.pemと書かれている通り、Let's Encryptで取得した証明書は中間証明書を含むので証明書を連結しなくてもよいと思われる。