OP25B(Outbound Port 25 Blocking)対策

最終更新日: 2014.02.19

<<トップページ <<新着情報 <<サイト内検索 <<CentOSで自宅サーバー構築 <<Scientific Linuxで自宅サーバー構築

■概要

メール送信時に使用するプロバイダがOP25Bを導入している場合、自宅サーバーにおいては以下の影響がある。
各プロバイダのOP25B導入状況

・自宅サーバー接続プロバイダがOP25Bを導入している場合@・・・サーバーから外部宛にメール送信できない(例:root宛メールを外部に転送できない)・・・メールサーバー側対処要
・自宅サーバー接続プロバイダがOP25Bを導入している場合A・・・内部から自宅メールサーバーのメールアドレスでメール送信できない・・・メールサーバー側対処要
・外部でメール送信時に使用するプロバイダがOP25Bを導入している場合・・・外部から自宅メールサーバーのメールアドレスでメール送信できない・・・メールクライアント側対処要

ここでは、メール送信時に使用するプロバイダでOP25Bによる影響を受けるか確認し、影響を受ける場合はOP25B対策を実施する。


■OP25B影響有無確認

メール送信時に使用するプロバイダでOP25Bの影響を受けるか確認するため、外部のメールサーバーへSMTP接続できるかチェックする。
ここでは、GmailのメールサーバーへtelnetコマンドでSMTP接続を行ってみて、接続可否でOP25Bの影響を受けるか確認する。
C:\Documents and Settings\xxxxxxxx>nslookup -type=mx gmail.com ← Gmailのメールサーバー名検索
*** Can't find server name for address 192.168.1.1: Non-existent domain
*** Default servers are not available
Server:  UnKnown
Address:  192.168.1.1

Non-authoritative answer:
gmail.com       MX preference = 50, mail exchanger = gsmtp183.google.com
gmail.com       MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com       MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google
.com
gmail.com       MX preference = 10, mail exchanger = alt2.gmail-smtp-in.l.google
.com
gmail.com       MX preference = 50, mail exchanger = gsmtp163.google.com

gmail-smtp-in.l.google.com      internet address = 209.85.147.27
gmail-smtp-in.l.google.com      internet address = 209.85.147.114
alt1.gmail-smtp-in.l.google.com internet address = 64.233.185.27
alt1.gmail-smtp-in.l.google.com internet address = 64.233.185.114
alt2.gmail-smtp-in.l.google.com internet address = 209.85.129.27
gsmtp163.google.com     internet address = 64.233.163.27
gsmtp183.google.com     internet address = 64.233.183.27

C:\Documents and Settings\xxxxxxxx>telnet alt1.gmail-smtp-in.l.google.com 25 ← GmailのメールサーバーへSMTP接続
220 mx.google.com ESMTP 35si17739625wra ← 接続成功=OP25Bの影響を受けない=OP25B対策不要
quit ← quit応答(SMTP接続終了)

接続中: alt1.gmail-smtp-in.l.google.com...ホストへ接続できませんでした。 ポート番号 25: 接続に失敗しました
 ← 接続失敗=OP25Bの影響を受ける=OP25B対策要

■メールサーバーのOP25B対策(sendmail編)

プロバイダのメールサーバーから送信するメールはOP25Bの影響は受けないため、全ての送信メールをプロバイダのメールサーバーを経由するようにする。
※なお、下記に示すOP25B対策は代表的な大手プロバイダでの対策例であり、プロバイダによっては別の対策が必要な場合もある

(1)sendmail設定
[root@fedora ~]# yum -y install sendmail-cf ← sendmail-cfインストール

[root@fedora ~]# vi /etc/mail/sendmail.mc ← sendmail設定ファイル編集
dnl define(`SMART_HOST', `smtp.your.provider')dnl
define(`SMART_HOST', `esmtp:[プロバイダのSMTPサーバー名]')dnl ← 追加(プロバイダのメールサーバーへメールを転送)
※プロバイダのSMTPサーバー名は各プロバイダのWebサイト等で確認
define(`ESMTP_MAILER_ARGS',`TCP $h 587') ← 追加(Submissionポートへ接続)
FEATURE(authinfo, DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`authinfo') ← 追加(SMTP認証)

[root@fedora ~]# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ← sendmail.mcからsendmail.cfを作成

(2)SMTP認証情報設定
プロバイダのSMTPサーバーが対応している認証方式を調査する
[root@fedora ~]# telnet プロバイダのSMTPサーバー名 25または587 ← プロバイダのSMTPサーバーへ接続
Trying XXX.XXX.XXX.XXX...
Connected to プロバイダのSMTPサーバー名 (XXX.XXX.XXX.XXX).
Escape character is '^]'.
220 プロバイダのSMTPサーバー名 ESMTP
ehlo localhost ← ehlo localhost応答
250-プロバイダのSMTPサーバー名
250-AUTH LOGIN CRAM-MD5 PLAIN ← プロバイダのSMTPサーバーが対応している認証方式
250-AUTH=LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME
quit ← quit応答
221 プロバイダのSMTPサーバー名
Connection closed by foreign host.

[root@fedora ~]# echo AuthInfo:SMTPサーバー名 \"U:ユーザー名\" \"P:パスワード\" \"M:認証方式\" > /etc/mail/authinfo ← SMTP-Auth設定
SMTPサーバー名・・・プロバイダのSMTPサーバー名
ユーザー名・・・プロバイダのメールアカウント名
パスワード・・・プロバイダのメールパスワード
認証方式・・・プロバイダのSMTPサーバーが対応している認証方式(例:LOGIN CRAM-MD5 PLAIN)

[root@fedora ~]# chmod 640 /etc/mail/authinfo ← root以外参照できないようにパーミッション変更

[root@fedora ~]# makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo ← authinfo.db作成

[root@fedora ~]# chgrp smmsp /etc/mail/authinfo.db ← authinfo.db所有グループ変更

(3)送信元メールアドレス書き替え設定※自ドメインを取得している場合
送信元メールアドレスの@以降の部分の名前解決が外部から行えない場合、メール受信を拒否するメールサーバーもあるので、サーバーから送信するメールの送信元アドレスをxxxx@fedora.fedorasrv.comからxxxx@fedorasrv.comに書き替える。
[root@fedora ~]# vi /etc/mail/sendmail.mc ← sendmail設定ファイル編集
EXPOSED_USER(`root')dnl
↓
dnl EXPOSED_USER(`root')dnl ← 変更(送信元がrootの場合も書き替える)

dnl MASQUERADE_AS(`mydomain.com')dnl
MASQUERADE_AS(`fedorasrv.com')dnl ← 追加(送信元アドレスの@以降をドメイン名にする)

dnl FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_envelope)dnl ← 追加(エンベロープFromも書き替える)

[root@fedora ~]# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ← sendmail.mcからsendmail.cfを作成

(4)送信元メールアドレス書き替え設定※自ドメインを取得していない場合
送信元メールアドレスの@以降の部分の名前解決が外部から行えない場合、メール受信を拒否するメールサーバーもあるので、サーバーから送信するメールの送信元アドレスをプロバイダのメールアドレスに書き替える。
[root@fedora ~]# vi /etc/mail/sendmail.mc ← sendmail設定ファイル編集
dnl FEATURE(masquerade_envelope)dnl
−−ローカル発信メールの送信元アドレスを書き替える設定追加(ここから)
FEATURE(masquerade_envelope)dnl
FEATURE(genericstable,DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`genericstable')
GENERICS_DOMAIN_FILE(MAIL_SETTINGS_DIR`genericsdomain')
FEATURE(`generics_entire_domain')
−−ローカル発信メールの送信元アドレスを書き替える設定追加(ここまで)

[root@fedora ~]# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ← sendmail.mcからsendmail.cfを作成

[root@fedora ~]# echo localhost >> /etc/mail/genericsdomain ← 書き替え対象ホスト名を設定

[root@fedora ~]# echo `hostname` >> /etc/mail/genericsdomain ← 書き替え対象ホスト名を設定

[root@fedora ~]# echo root プロバイダのメールアドレス > /etc/mail/genericstable
 ← 送信元がrootの場合、送信元アドレスをプロバイダのメールアドレスに書き替える

[root@fedora ~]# makemap hash /etc/mail/genericstable.db < /etc/mail/genericstable ← genericstable.db作成

[root@fedora ~]# chgrp smmsp /etc/mail/genericstable.db ← genericstable.db所有グループ変更

(5)sendmail設定反映
[root@fedora ~]# /etc/rc.d/init.d/sendmail reload ← sendmail設定反映
sendmail を再読み込み中:                                   [  OK  ]
sm-client を再読み込み中:                                  [  OK  ]

■メールサーバーのOP25B対策(Postfix編)

プロバイダのメールサーバーから送信するメールはOP25Bの影響は受けないため、全ての送信メールをプロバイダのメールサーバーを経由するようにする。
※なお、下記に示すOP25B対策は代表的な大手プロバイダでの対策例であり、プロバイダによっては別の対策が必要な場合もある

(1)Postfix設定
[root@fedora ~]# vi /etc/postfix/main.cf ← Postfix設定ファイル編集
# The relayhost parameter specifies the default host to send mail to
# when no entry is matched in the optional transport(5) table. When
# no relayhost is given, mail is routed directly to the destination.
#
# On an intranet, specify the organizational domain name. If your
# internal DNS uses no MX records, specify the name of the intranet
# gateway host instead.
#
# In the case of SMTP, specify a domain, host, host:port, [host]:port,
# [address] or [address]:port; the form [host] turns off MX lookups.
#
# If you're connected via UUCP, see also the default_transport parameter.
#
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost = [プロバイダのSMTPサーバー名]:587 ← プロバイダのSMTPサーバーを指定
※プロバイダのSMTPサーバー名は各プロバイダのWebサイト等で確認

(2)SMTP認証情報設定
プロバイダのSMTPサーバーが対応している認証方式を調査する
[root@fedora ~]# telnet プロバイダのSMTPサーバー名 25または587 ← プロバイダのSMTPサーバーへ接続
Trying XXX.XXX.XXX.XXX...
Connected to プロバイダのSMTPサーバー名 (XXX.XXX.XXX.XXX).
Escape character is '^]'.
220 プロバイダのSMTPサーバー名 ESMTP
ehlo localhost ← ehlo localhost応答
250-プロバイダのSMTPサーバー名
250-AUTH LOGIN CRAM-MD5 PLAIN ← プロバイダのSMTPサーバーが対応している認証方式
250-AUTH=LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME
quit ← quit応答
221 プロバイダのSMTPサーバー名
Connection closed by foreign host.

[root@fedora ~]# vi /etc/postfix/main.cf ← Postfix設定ファイル編集
以下を最終行へ追加
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = 認証方式
認証方式・・・プロバイダのSMTPサーバーが対応している認証方式(例:LOGIN, CRAM-MD5, PLAIN)

[root@fedora ~]# echo [SMTPサーバー名]:587 ユーザー名:パスワード > /etc/postfix/authinfo ← SMTP認証情報設定
SMTPサーバー名・・・プロバイダのSMTPサーバー名
ユーザー名・・・プロバイダのメールアカウント名
パスワード・・・プロバイダのメールパスワード

[root@fedora ~]# chmod 640 /etc/postfix/authinfo ← root以外参照できないようにパーミッション変更

[root@fedora ~]# postmap /etc/postfix/authinfo ← authinfo.db作成

(3)Postfix設定反映
[root@fedora ~]# /etc/rc.d/init.d/postfix reload ← Postfix設定反映

■メールサーバーのOP25B対策(qmail編)

プロバイダのメールサーバーから送信するメールはOP25Bの影響は受けないため、全ての送信メールをプロバイダのメールサーバーを経由するようにする。
※なお、下記に示すOP25B対策は代表的な大手プロバイダでの対策例であり、プロバイダによっては別の対策が必要な場合もある
[root@fedora ~]# wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz ← qmailダウンロード

※wgetが固まってダウンロードできない場合は下記手順でダウンロード
[root@fedora ~]# wget --no-passive-ftp ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz ← qmailダウンロード

[root@fedora ~]# tar zxvf qmail-1.03.tar.gz ← qmail展開

[root@fedora ~]# cd qmail-1.03 ← qmail展開先ディレクトリへ移動

[root@fedora qmail-1.03]# wget http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz
 ← SMTP-Auth対応パッチダウンロード

[root@fedora qmail-1.03]# wget http://tomclegg.net/qmail/qmail-remote-auth.patch ← 外部SMTP-Auth対応パッチダウンロード

[root@fedora qmail-1.03]# tar zxvf qmail-smtpd-auth-0.31.tar.gz ← SMTP-Auth対応パッチ展開

[root@fedora qmail-1.03]# /bin/mv qmail-smtpd-auth-0.31/* . ← SMTP-Auth対応パッチをqmail展開先ディレクトリへ移動

[root@fedora qmail-1.03]# patch < auth.patch ← SMTP-Auth対応パッチ施行
patching file Makefile
patching file TARGETS
patching file qmail-smtpd.8
patching file qmail-smtpd.c

[root@fedora qmail-1.03]# patch < qmail-remote-auth.patch ← 外部SMTP-Auth対応パッチ施行
patching file qmail-remote.c
patching file Makefile
Hunk #1 succeeded at 1441 (offset -4 lines).

[root@fedora qmail-1.03]# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更

上記は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処
/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

[root@fedora qmail-1.03]# make qmail-remote ← qmail-remoteのみコンパイル

[root@fedora qmail-1.03]# install -m 711 qmail-remote /var/qmail/bin/qmail-remote ← qmail-remoteのみインストール

[root@fedora qmail-1.03]# cd ← qmail展開先ディレクトリを抜ける

[root@fedora ~]# rm -rf qmail-1.03 ← qmail展開先ディレクトリ削除

[root@fedora ~]# rm -f qmail-1.03.tar.gz ← ダウンロードしたqmail削除

[root@fedora ~]# echo :SMTPサーバー名:587 ユーザー名 パスワード > /var/qmail/control/smtproutes ← SMTP認証情報設定
SMTPサーバー名・・・プロバイダのSMTPサーバー名
ユーザー名・・・プロバイダのメールアカウント名
パスワード・・・プロバイダのメールパスワード

■メールクライアントのOP25B対策

メールソフトの設定で、メール送信時に使用するポートをSMTP(25番ポート)から別のポート番号に変更すればよいため、プロバイダ側ではサブミッションポート(587番ポート)の使用を推奨しているが、当サイトではセキュリティ上の理由からSMTP認証を必須としており、かつ、SMTP認証情報の盗み見対策としてTLSによる暗号化通信を必須としているため、メール送信時に使用するポートはSMTPS(465番ポート)としている。これにより自動的にOP25B対策となっているため、対処は不要。

【参考】
メールサーバー間通信内容暗号化(OpenSSL+Postfix+Dovecot)


■関連コンテンツ




▲このページのトップへ戻る

プライバシーポリシー