家のメル鯖をロリポからGCPに移設したのでメモ
まずはCompute Engineでf1-microマシンを立てる。
OSはいつものUbuntu 18.04
セットアップ
まずはPostfix+Dovecotをインストール。
手順はこちらを参考。
Ubuntu 18.04 LTS : Postfix : インストール : Server World
上記サイトの手順を参考にしてPostfix、Dovecot、SSL/TLSの設定までやっておく。
certbotの更新時にサービスを再起動するようにcron設定を変える。
末尾に –deploy-hookオプションを追加。
#/etc/cron.d/certbot 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --deploy-hook "systemctl restart postfix dovecot"
そしてGCPのVPC Firewall設定で、Postfix+Dovecotが動いてるVMのインスタンスに対して使用するポートを穴あけしておく事。
今回の設定だと最低限インバウンドで tcp 25, 465, 995など必要なものをあける。
header_checks設定を有効化
ついでにheader_checksの設定を有効にして怪しい添付ファイル付きのメールをブロックする設定を追加。
# /etc/postfix/main.cf header_checks = regexp:/etc/postfix/header_checks
そして header_checks ファイルを作成して保存。
ルールに一致したメールは全て DISCARD で破棄。
# /etc/postfix/header_checks /^X-Mailer:.*PostMaster General/ DISCARD /name=.*\.scr/ DISCARD /name=.*\.exe/ DISCARD /name=\".*\.inf\"/ DISCARD /name=\".*\.scr\"/ DISCARD /name=\".*\.pif\"/ DISCARD /name=\".*\.bat\"/ DISCARD /name=\".*\.dll\"/ DISCARD /name=\".*\.vbs\"/ DISCARD /name=\".*\.reg\"/ DISCARD /^Return-Path:.*<#.*@.*>/ DISCARD /^From:.*<#.*@.*>/ DISCARD
header_checksファイルを作成後、postmapでheader_checks.dbを作成。
sudo postmap /etc/postfix/header_checks
SendGridへのリレー設定
GCEはOP25BによってVPCネットワーク外部へのtcp25番接続が出来ない。
外部からGCEインスタンスへのtcp25番接続はVPC Firewall設定を開ければ可能。
というわけでPostfixのrelayhost設定を使ってSendGridの465番ポート経由でメールを送る。
下記を参考にしてSendGridを有効化する。
SendGrid でのメールの送信
リンク先ではtcp2525番を使ってるけど、SSLを使いたいのでtcp465番にした。
# /etc/postfix/main.cf relayhost = [smtp.sendgrid.net]:465 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_tls_security_level = encrypt header_size_limit = 4096000 smtp_tls_wrappermode = yes
sasl_passwdは先程のGCPのドキュメントのとおり作成しておく。
そしてpostfix reload で設定をリロード。
DNS設定を変更
忘れずにDNSでVMに対するAレコードと、MXレコードを作成して反映を待つ。
さらに、SendGrid経由だとメールが届かないドメインがちらほら存在するので、SendGridにSPF設定をしておく。
こちらの手順で Sender Authentication をすればOK.
指定されたCNAMEレコードを3件DNSに追加するだけ。
How to set up domain authentication | SendGrid Documentation