自宅のLinuxサーバーから外部へメールを送信しようとしても、ほとんどの場合、そのままの設定では宛先のメールサーバーへ直接メールを送信することができません。
ここでは、その理由と一般的な対処方法についてご紹介します。
目次
なぜ直接送れない?
最近では、ほとんどのインターネットサービスプロバイダーが、迷惑メールを減少させるために、ウイルス感染者や迷惑メール送信業者が、自分の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」へ認証情報を設定し、安全を考慮してファイルの権限を設定します。([email protected]:1234abcd1234abcdの部分は、メールアカウント:パスワードです)
# echo "[smtp.gmail.com]:587 [email protected]: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." [email protected]
メールが送信できない場合は、ログファイル「/var/log/maillog」を確認し、設定を見直してみてください。また、送信したメールが迷惑メールフォルダに入っていないかの確認も忘れずに。
あとがき
Gmailの場合は、上のような設定で送ることができましたが、利用するメールサーバーによっては、送信者メールアドレスのドメイン名もチェックされることがあるようです。