自宅サーバ(CentOS 7.2)でメールサーバを構築する際に、プロバイダがOutbound Port 25 Blocking(OP25B)を行っている場合に対応方法です。
Outbound Port 25 Blocking(OP25B)について
Outbound Port 25 Blocking(OP25B)とは、プロバイダーが迷惑メールを減らすために行ってる対策の1つです。
迷惑メールの大多数はプロバイダーのメールサーバは使用されず、ユーザのメールサーバから直接送信されるという特徴があります。
そのため、プロバイダーのメールサーバを使用せずにユーザから直接送信されるメールをブロックすることで、迷惑メールを減らそうという対策内容になります。
簡単に言うと、外向けの25番ポート(smtp)宛通信がブロックされるということです。
Outobound Port 25 Blocking(OP25B)対応方法
では、どのようにすれば自宅サーバからメールを送信することが出来るのかというと、下記のどちらかの方法でメールを送信を行うことができるようになります。(どちらの場合もSMTP認証が必要)
- サブミッションポート(587番ポート)を使用
- SMTP over SSL/TLS (465番ポート)を使用
※プロバイダによっては固定IPオプションで固定IP契約をすると、OB25Pの影響を受けないというところもあります。
これは、プロバイダーのSMTPサーバが用意しているサブミッションポート(認証機能付きの送信専用ポート)を使用することで、自宅サーバからもメールを送信することが可能となります。
今回は「postfix」での設定方法について説明していきます。
サブミッションポート(587番ポート)を使用する場合
自宅サーバから、プロバイダ等が提供しているSMTPサーバのサブミッションポートを使用する場合についての設定方法を説明していきます。
Cyrus SASLライブラリインストール
サブミッションポートを使用する場合には「ID」と「パスワード」による認証(smtp auth)が必要になります。
「postfix」からリレー先のsmtpサーバに「ID」と「パスワード」の認証情報をやり取りをするためには「Cyrus SASLライブラリ」が必要なので、インストールを行っていきます。
# yum install cyrus-sasl cyrus-sasl-plain
postfix設定
プロバイダーのメールサーバで提供しているサブミッションポートと連携できるように、「/etc/postfix/main.cf」を設定していきます。
# cd /etc/postfix # cp -p main.cf main.cf_yyyymmdd # vi main.cf
※postfixの基本的な設定は完了していることが前提です。
※基本的な設定についてはこちらのページで説明しています。
リレー設定
コメントで無効化されている「relayhost」の項目を編集して、メールをリレー(転送)するsmtpサーバを設定します。
smtpサーバはプロバイダ等で指定されているサーバを設定し、ポート番号はサブミッションポートである「587」番を設定します。
relayhost = [smtpサーバ]:587
※[]で囲むことでMXレコードを検索しないようになります。
SMTP認証と暗号化設定
リレー先のsmtpサーバのサブミッションポートを使用するに必要な、認証を行うための設定をします。
編集中の「main.cf」最下段に追記してください。
# SMTP認証設定 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/smtp_pass smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter = plain,login # 暗号化設定 smtp_tls_security_level = may smtp_tls_loglevel = 1 smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
設定項目 | 設定 |
---|---|
smtp auth SASL認証有効化 | smtp_sasl_auth_enable = yes |
SASL認証ファイル指定 | smtp_sasl_password_maps = hash:認証ファイル |
認証設定のセキュリティオプション指定 | smtp_sasl_tls_security_options = noanonymous |
認証方法の指定 | smtp_sasl_mechanism_filter = plain,login |
smtp auth SASL認証有効化
リレー先smtpサーバでのSMTP AUTH認証に対応できるように、SASL認証を有効化します。
SMTP認証情報ファイルを指定
SASL認証に必要な情報(smtpサーバ:ポート番号 ユーザID:パスワード)を記述してあるファイルを指定します。
このファイルは自分で作成する必要があるため、好きな名前でファイルを作成してかまいません。
作成した認証情報のファイルはhash化する必要があります。(作成方法は後述で説明します)
認証設定のセキュリティオプションを指定
anonymous(匿名)ユーザでのログインを許可しない設定とします。
デフォルトの設定は「noanonymous,noplaintext」なのですが、プロバイダが用意しているSMTPサーバでは「plain」(暗号化なし)での認証が有効化されていることが多いため、「noplaintext」を記述しないことで「plain」(暗号化なし)での認証を許可しています。
認証方法の指定
プロバイダで用意されているsmtpサーバの場合、一般的に「plain」と「login」方式が有効となっている場合が多いため、両方の方式を指定します。
接続先のsmtpサーバで「CRAM-MD5」「DIGEST-MD5」などの認証方式が使用できるのであれば、そちらも指定することができます。
対応している認証方式の確認方法
相手のsmtpサーバで対応している認証を方式を確認するためには、「telnet」でサブミッションポートに接続してから「EHLO 相手先SMTPサーバ名」コマンドを実行することで確認することができます。
下記はOCNのSMTPサーバで確認した際のログになります。
$ telnet smtp.ocn.ne.jp 587 Trying 153.149.232.193... Connected to smtp.ocn.ne.jp. Escape character is '^]'. 220 ocn.ne.jp ESMTP mail service ready EHLO smtp.ocn.ne.jp ## EHLOコマンドを実行 250-smtp.ocn.ne.jp 250-SIZE 10485760 250-AUTH PLAIN LOGIN ## 対応している認証方式が表示される 250-AUTH=PLAIN LOGIN 250-STARTTLS 250 ENHANCEDSTATUSCODES quit ##「quit」コマンドで切断 221 2.0.0 Bye Connection closed by foreign host.
設定項目 | 設定 |
---|---|
TLS暗号化使用 | smtp_tls_security_level = may |
TLS暗号化のログ出力設定 | smtp_tls_loglevel = 1 |
TLS暗号化使用
「smtp_tls_security_level = may」を設定することで、相手先のsmtpサーバが「TLS」に対応してれば暗号化で通信を行い、対応していない場合は暗号化なしの平文で通信をおこないます。
「postfix 2.1」以前は「smtp_use_tls = yes」を使用していたが「postfix 2.2」以降は「smtp_tls_security_level」の使用が推奨されています。
暗号化設定のログ出力設定
ログのレベルを「0」~「4」の5段階で指定することができます。
指定できるログレベルの詳細は下記の通りとなり、ログ出力を行いたくない場合は「0」を指定します。
ログレベル詳細
- 0 TLS関するログ記録を無効
- 1 TLSハンドシェイクと証明書情報をログに出力
- 2 TLSネゴシエーションの間のレベルをログに出力
- 3 TLSネゴシエーションプロセスの16進数とASCIIダンプをログに出力
- 4 STARTTLS以降の通信の16進数と完全なASCIIダンプをログに出力
認証情報ファイルの作成方法
「/etc/postfix/main.cf」のSMTP認証項目「smtp_sasl_password_maps = hash:ファイル名」で指定した、認証情報が記述されたファイルの作成方法です。
今回は「/etc/postfix/smtp_pass」というファイルを作成して、そこに認証情報を設定してからhashDB化していきます。
認証情報ファイルの作成
# vi /etc/postfix/smtp_pass
設定書式
SMTP AUTHに認証に必要な情報は下記の書式で設定します。
[相手先smtpサーバ]:587 ユーザID:パスワード
相手先smtpサーバの記述は「/etc/postfix/main.cf」の「relayhost」で設定した内容と合わせてください。
プロバイダのSMTPサーバを使用する場合は、「ユーザID」「パスワード」はメールアドレスとメールを受信する際のパスワードの場合が一般的だと思いますが、念のためにプロバイダのサイト等で確認しておいてください。
パーミッションの変更
作成したファイルには「ユーザID」と「パスワード」記述されているので、他のユーザに見られないようパーミッションを「600」に変更します。
# chmod 600 smtp_pass
認証ファイルのhash化
作成したファイルを「postmap」コマンドを使用してhash化します。
# postmap /etc/postfix/smtp_pass
「postmap」コマンドでhash化させると、「ファイル名.db」というファイルが作成されます。
# ls -la smtp_pass* -rw------- 1 root root 55 11月 19 16:04 smtp_pass -rw------- 1 root root 12288 11月 22 18:08 smtp_pass.db
「postfix」はこのファイルを読み込む形となります。
設定反映
「/etc/postfix/main.cf」の編集と認証情報ファイル(smtp_pass.db)の作成が完了しましたら、「postfix」を再起動させて設定を反映させます。
# systemctl restart postfix
動作試験試験
実際にメールを送信して動作確認をしてください。
無事メールが送信出来たら作業完了です。
※今回の「postfix」に行った設定は、プロバイダ等のsmtpサーバのサブミッションポートにメールをリレーする設定ですので、メーラーでsmtpサーバを指定する場合は「25」番ポートを使用してください。
証明書が期限切れです。