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

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

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

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

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

ソフトウェアバージョン
Alma Linux9.3

なぜ直接送れない?

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

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

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

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

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

対処方法

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

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

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

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

# dnf install postfix cyrus-sasl cyrus-sasl-plain s-nail

次に、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

次に「/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」を確認し、設定を見直してみてください。また、送信したメールが迷惑メールフォルダに入っていないかの確認も忘れずに。

あとがき

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