CentOS 7で外部にメール送信できない理由と対処方法

MiniTool_ad

CentOS 7で外部にメール送信できない理由と対処方法

自宅サーバー(CentOS 7)から外部へメールを送信しようとしても、ほとんどの場合、そのままの設定では宛先のメールサーバーへ直接メールを送信することができません。

ここでは、その理由と一般的な対処方法についてご紹介します。

動作環境

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.4.1708

なぜ直接送れない?

最近では、ほとんどのインターネットサービスプロバイダーが、迷惑メールを減少させるために、ウイルス感染者や迷惑メール送信業者が、自分のPCまたはサーバーから故意あるいは無意識に行うメール送信を規制する対策を施しています。それが「OP25B(Outbound Port 25 Blocking)」です。

OP25Bは、TCPのあて先ポート番号が25番(SMTPプロトコル)となっている通信パケットをブロックする機能です。これにより、自分が契約しているプロバイダー以外のメール・サーバに直接SMTPで接続し、メールを送信することはできなくなっています。たとえば、自宅サーバーなどから外部のメールアドレスへ直接メールを送信することは、ほとんどの場合できません。

サブミッションポート利用による送信

ただ、これだと外部のメール・サーバを利用できないということになり、会社のメール・サーバを利用してメールを送信したいときなど、不便なケースがあります。そこでほとんどのメールサービスでは、SMTPの認証付きサブミッションポートが利用できるようになっており、これで外部のメールサーバーを利用してメール送信ができるようになっています。

SMTPのサブミッションポートは、通常のTCP25番ポートではなく、TCPの587番ポートを使ってメールを送信する機能です。これに認証をつけることによって、正規のユーザーのみ利用ですることができ、上に書いてあるような不正なメール送信も減らすことができるというわけです。

CentOS 7での対処方法

上に書いてあるような状況下で、CentOS 7からメールを送信する場合、外部のSMTPサーバー(自分が契約しているプロバイダーのメールサーバーや、Gmailのメールサーバー)を経由してメールを送信する方法が一般的です。

具体的には、Postfixから外部のSMTPサーバーにサブミッションポートで接続するために、PostfixをSMTPクライアントとしてSMTP認証できるように設定します。

必要な手順は以下となります。
(ここでは、GmailのSMTPサーバーを利用する場合を例示しています)

まずは、必要になるパッケージをインストールします。

# yum install cyrus-sasl cyrus-sasl-plain mailx

次に、postfixの設定ファイルに認証設定を追記します。

# vi /etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt

次に「/etc/postfix/authinfo」へ認証情報を設定し、安全を考慮してファイルの権限を設定します。(hagehoge@gmail.com:1234abcd1234abcdの部分は、メールアカウント:パスワードです)

# echo "[smtp.gmail.com]:587 hagehoge@gmail.com:1234abcd1234abcd" >/etc/postfix/authinfo
# chmod 600 /etc/postfix/authinfo

次に「authinfo.db」ファイルを作成します。

# postmap /etc/postfix/authinfo

次にPostfixに設定を反映します。

# systemctl reload postfix

最後に、メール送信できるか送信テストを実施します。

# echo "complete setup postfix" | mail -s "`hostname` finished first setup." hogehoge@yahoo.co.jp
メールが送信できない場合は、ログファイル「/var/log/maillog」を確認し、設定を見直してみてください。また、送信したメールが迷惑メールフォルダに入っていないかの確認も忘れずに。

おまけ(root宛のメールを転送する)

上の設定にプラスして、以下を設定するとroot宛のメールを外部のメールアドレスに転送することができます。

「aliases」ファイルを編集し、root宛のメールの宛先を変更します。

# vi /etc/aliases
root: honyarara@gmail.com

ファイルの編集が完了したら、設定を反映させます。

# newaliases

設定が完了したら、正しく転送されるかテストメールを送信します。

# echo "complete setup postfix" | mail -s "`hostname` finished first setup." root

あとがき

Gmailの場合は、上のような設定で送ることができましたが、利用するメールサーバーによっては、送信者メールアドレスのドメイン名もチェックされることがあるようです。