サーバー移転:メールサーバー編

サーバー移転

サーバー移転

サーバー移転シリーズ、メールサーバー編です。
これはgmailからブロックされてしまい、かなりはまりました。。。

環境

  • 移転前:Postfix 2.6.6
  • 移転後:Postfix 2.6.6

サーバー移転シリーズリンク

作業の流れ

  1. 設定ファイルのコピーして再起動
  2. Postmaster Toolの設定
  3. DKIMの設定
  4. Postfixの設定を修正

せっかちさんのための作業まとめ

移転先作業

# 設定ファイルのコピー
scp -i ~/.ssh/rsa.pem [source_host_ip]:/etc/postfix/main.cf /etc/postfix/main.cf

# Postfixの再起動
/etc/init.d/postfix restart

# Postmaster Toolの設定
# ブラウザ作業のため省略

#OpenDKIMのイントール
yum install -y epel-release
yum install -y opendkim

# keyの発行
opendkim-genkey -D /etc/opendkim/keys -b 2048 -d example.com -s 20180929

# KeyTableの修正(詳細は後述)
vi /etc/opendkim/KeyTable

# SigningTableの修正(詳細は後述)
vi /etc/opendkim/SigningTable

# main.cfにOpenDKIMの設定を追加(詳細は後述)
/etc/postfix/main.cf

# OpenDKIMの起動設定&起動
chkconfig opendkim on
/etc/init.d/opendkim start

# main.cfのプロトコルの指定を修正(詳細は後述)
/etc/postfix/main.cf

# Postfixの再起動
/etc/init.d/postfix restart

作業の詳細

1. 設定ファイルのコピーして再起動

設定ファイルをコピーしてpostfixを再起動

# 設定ファイルのコピー
scp -i ~/.ssh/rsa.pem [source_host_ip]:/etc/postfix/main.cf /etc/postfix/main.cf

# Postfixの再起動
/etc/init.d/postfix restart

このタイミングでgmail宛にメールテストするとメールが届かず、maillogに下記エラーが出力されている。

# エラーの確認
cat /var/log/maillog

Sep 30 16:04:03 web01 postfix/smtp[13197]: A39891A307D: to=<target@gmail.com>, relay=gmail-smtp-in.l.google.com[2404:6800:4008:c00::1b]:25, delay=1, delays=0.06/0/0.53/0.42, dsn=5.7.1, status=bounced (host gmail-smtp-in.l.google.com[2404:6800:4008:c00::1b] said: 550-5.7.1 [2400:8500:1801:404:118:27:9:56 1] Our system has detected an 550-5.7.1 unusual rate of unsolicited mail originating from your IP address. To 550-5.7.1 protect our users from spam, mail sent from your IP address has been 550-5.7.1 blocked. Please visit 550-5.7.1 https://support.google.com/mail/?p=UnsolicitedIPError to review our 550 5.7.1 Bulk Email Senders Guidelines. d41-v6si9254247pla.172 – gsmtp (in reply to end of DATA command))

エラーログに言われるがままに下記にアクセス。
一括送信ガイドライン

ガイドラインに従って後述するPostmaster Toolの設定とDKIMを設定。

2. Postmaster Toolの設定

エラーを直接解決するためのものではないけど、迷惑メールとして処理された件数などを知ることができるサービスのようです。

一括送信ガイドライン に従って下記にアクセス。
Postmaster Tool

ブラウザ作業のため、詳細は省略。

3. DKIMの設定

たぶん、この設定をしなくても動作したと思う。。。
でも、迷惑メール対策としてはDKIMは設定したほうが無難であるため良しとします。

なにはともあれOpenDKIMをインストール

#OpenDKIMのイントール
yum install -y epel-release
yum install -y opendkim

opendkim-genkeyで鍵ペアを作成します。
鍵の長さは1024未満だとgmailではじかれるようです。
(2048以上が一般的ですね)

# keyの発行
# 書式:opendkim-genkey -D [出力先ディレクトリ] -b [鍵の長さ] -d [ドメイン名] -s [セレクタ名]
opendkim-genkey -D /etc/opendkim/keys -b 2048 -d example.com -s 20180929

/etc/opendkim/KeyTable に下記の通り追記

# OPENDKIM KEY TABLE
# To use this file, uncomment the #KeyTable option in /etc/opendkim.conf,
# then uncomment the following line and replace example.com with your domain
# name, then restart OpenDKIM. Additional keys may be added on separate lines.

#default._domainkey.example.com example.com:default:/etc/opendkim/keys/default.private
# 書式:DKIMレコード名 ドメイン名:セレクタ名:秘密鍵ファイル
20180929._domainkey.example.com example.com:20180929:/etc/opendkim/keys/20180929.private

続いて/etc/opendkim/SigningTable を修正。
DKIMヘッダーを設定する対象のアカウントを設定する。

書式は3種類
・アカウントを指定
hoge@examle.com 20180929._domainkey.example.com

・ワイルドカードを利用
*@example.com 20180929._domainkey.example.com

・ドメイン全体(ワイルドカードとの違いがわからん)
@example.com 20180929._domainkey.example.com

今回はワイルドカードを採用

# OPENDKIM SIGNING TABLE
# This table controls how to apply one or more signatures to outgoing messages based
# on the address found in the From: header field. In simple terms, this tells
# OpenDKIM "how" to apply your keys.

# To use this file, uncomment the SigningTable option in /etc/opendkim.conf,
# then uncomment one of the usage examples below and replace example.com with your
# domain name, then restart OpenDKIM.

# WILDCARD EXAMPLE
# Enables signing for any address on the listed domain(s), but will work only if
# "refile:/etc/opendkim/SigningTable" is included in /etc/opendkim.conf.
# Create additional lines for additional domains.

#*@example.com default._domainkey.example.com
*@example.com 20180929._domainkey.example.com

# NON-WILDCARD EXAMPLE
# If "file:" (instead of "refile:") is specified in /etc/opendkim.conf, then
# wildcards will not work. Instead, full user@host is checked first, then simply host,
# then user@.domain (with all superdomains checked in sequence, so "foo.example.com"
# would first check "user@foo.example.com", then "user@.example.com", then "user@.com"),
# then .domain, then user@*, and finally *. See the opendkim.conf(5) man page under
# "SigningTable" for more details.

#example.com default._domainkey.example.com

続いて、/etc/postfix/main.cf にOpenDKIMと連携するための設定をファイルの最後に追記

smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
milter_default_action = accept

OpenDKIM起動&起動設定とPostfixの再起動

# OpenDKIMの起動設定&起動
chkconfig opendkim on
/etc/init.d/opendkim start

# Postfixの再起動
/etc/init.d/postfix restart

このタイミングでgmail宛にメールテストしてもまだメールが届かず、maillogに下記エラーが出力されている。

# エラーの確認
cat /var/log/maillog

Sep 30 16:04:24 web01 postfix/smtp[13196]: E39201A3082: to=<target@gmail.com>, relay=gmail-smtp-in.l.google.com[2404:6800:4008:c00::1b]:25, delay=1.3, delays=0.07/0/0.4/0.88, dsn=5.7.1, status=bounced (host gmail-smtp-in.l.google.com[2404:6800:4008:c00::1b] said: 550-5.7.1 [2400:8500:1801:404:118:27:9:56 18] Our system has detected that 550-5.7.1 this message is likely suspicious due to the very low reputation of 550-5.7.1 the sending IP address. To best protect our users from spam, the 550-5.7.1 message has been blocked. Please visit 550 5.7.1 https://support.google.com/mail/answer/188131 for more information. f10-v6si9142084pgl.148 – gsmtp (in reply to end of DATA command))

エラーログに言われるがままに下記にアクセス。
Gmail でメールがブロックされる理由

試行錯誤の末、後述するプロトコルの問題を解決

4. main.cf で利用するプロトコルを指定

どうやら、postfixの設定でプロトコルの指定がallとなっているのが原因らしいことが判明。
旧サーバーではブロックされていなかった理由がわからないけど、下記の通り修正。

/etc/postfix/main.cf

#inet_protocols = all ← コメントアウト
# ipv4のみに限定
inet_protocols = ipv4

postfixを再起動して、メールをテスト。
やっとうまくいった!