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

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

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

なぜ直接送れない?

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

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

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

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

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

CentOS7での対処方法

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

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

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

# 必要なモジュールをインストール
yum install cyrus-sasl cyrus-sasl-plain mailx

# 認証設定(最終行へ追加します)
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宛のメールを外部のメールアドレスに転送することができます。

# rootあてメールの宛先変更
vi /etc/aliases
root: honyarara@gmail.com

# エイリアス設定の反映
newaliases

# テストメール送信
echo "complete setup postfix" | mail -s "`hostname` finished first setup." root

まとめ

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

スポンサーリンク