GMOの特定のNWが Gmail/Gsuite に嫌われているらしく、メール配送に苦慮している方がいるようなので、さくらのクラウドにメールリレーサーバを構築する手順を作成しました。一時的な逃げ道になればいいかと思います。
既存のメールサーバがSPFに対応していることが前提で、DKIM、DMARCに対応していても問題は起きないはずです。さくらのVPSでも同様に構築できるかと思います。さくらのVPSで構築する場合は広告から申し込んで頂けると幸いです。
1. メールリレーサーバのセットアップ
#-- まずは さくらのクラウドで CentOS7 でサーバを作成
#-- ホスト名は、relay.example.com とする
#-- 既存の送信用メールサーバから送信される Envelope From のドメインを変数に設定(例では2つ)
DOMAINS="xxx.example.com yyy.example.com"
#-- 既存の送信用メールサーバのIPアドレスを変数に設定(例では2サーバ)
IPS="xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy"
#-- tool のインストールとパッケージを更新
yum install -y bind-utils
yum update -y
#-- IPADDRESS の取得
source /etc/sysconfig/network-scripts/ifcfg-eth0
#-- postfix の設定
#-- From に指定できるドメインを設定
for x in ${DOMAINS}
do
echo "${x} OK" >> /etc/postfix/access
done
postmap /etc/postfix/access
POSTCONF="postconf -c /etc/postfix -e"
${POSTCONF} inet_interfaces=${IPADDR}
${POSTCONF} smtpd_helo_restrictions="reject_invalid_hostname reject_non_fqdn_hostname reject_unknown_hostname"
${POSTCONF} smtpd_sender_restrictions="reject_non_fqdn_sender reject_unknown_sender_domain"
${POSTCONF} inet_protocols=ipv4
${POSTCONF} smtpd_helo_required=yes
${POSTCONF} message_size_limit=52428800
${POSTCONF} disable_vrfy_command=yes
${POSTCONF} smtpd_discard_ehlo_keywords=dsn,enhancedstatuscodes,etrn
${POSTCONF} smtpd_sender_restrictions="check_sender_access hash:/etc/postfix/access, reject"
${POSTCONF} smtp_tls_loglevel=1
${POSTCONF} smtp_tls_security_level=may
${POSTCONF} smtp_use_tls=yes
${POSTCONF} smtp_tls_CAfile=/etc/pki/tls/certs/ca-bundle.crt
${POSTCONF} tls_random_source=dev:/dev/urandom
MYNETWORKS="127.0.0.1,${IPADDR}"
for x in ${IPS}
do
MYNETWORKS="${MYNETWORKS},${x}"
done
MYNETWORKS=$(echo ${MYNETWORKS} | sed 's/,$//')
${POSTCONF} mynetworks=${MYNETWORKS}
#-- firewalld で既存のメールサーバからのアクセスを許可
for x in ${IPS}
do
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='${x}/32' accept"
done
#-- postfix, firewalld の設定変更も兼ねてOSを再起動
shutdown -r now
2. DNS登録 (事前にSPFのTTLは短くしておくこと)
#-- relay.example.com の 正引き(Aレコード)をDNSに登録する
#-- 作成したリレーサーバのIPアドレスの逆引き(PTRレコード) に relay.example.com. を登録する
#-- xxx.example.com と yyy.example.com の SPFを記述したTXTレコードに作成したリレーサーバのIPアドレスを追加する
3. DNSの登録確認
#-- python3.4 インストール
yum install -y python34 python34-pip
pip3.4 install py3dns pyspf
#-- SPF登録確認ツールの作成
cat <<-'_EOL_'> check_spf.py
#!/usr/bin/python3.4
import sys,spf
print(spf.check(i=sys.argv[1],s=sys.argv[2],h="localhost")[0])
_EOL_
chmod 755 check_spf.py
#-- 確認コマンド実行
source /etc/sysconfig/network-scripts/ifcfg-eth0
#-- From アドレスに使用する自メールドメインを変数に設定
DOMAINS="xxx.example.com yyy.example.com"
while :
do
FLAG=0
if [ $(dig $(hostname). a +short | grep -c "^${IPADDR}$") -eq 0 ]
then
echo "$(hostname) の A レコードが ${IPADDR} と一致していません"
FLAG=$(($FLAG + 1))
fi
if [ $(dig -x ${IPADDR} +short | grep -c "^$(hostname).$") -eq 0 ]
then
echo "${IPADDR} の PTR レコードが $(hostname) と一致していません"
FLAG=$(($FLAG + 1))
fi
for x in ${DOMAINS}
do
if [ $(./check_spf.py ${IPADDR} ${x}) != "pass" ]
then
echo "${IPADDR} が ${x} の SPF レコードに登録されていません"
FLAG=$(($FLAG + 1))
fi
done
if [ ${FLAG} -eq 0 ]
then
break
fi
sleep 30
done
#-- 上記スクリプトが終了したら、確認完了
4. 既存のメールサーバのメール配送先を構築したリレーサーバに変更する
#-- postfix であれば relayhost に構築したメールサーバの relay.example.com を設定
#-- sendmail であれば SmartRealy に構築したメールサーバの relay.example.com を設定