PostfixのセキュリティーとSpam対策

正直、Postfixだけで有効なSpam対策ができる訳ではありませんが、最低限の設定をしておいても損は無いでしょう。

制限を弱めればSpamは多く届きますし、制限を強めれば本来受け取りたいメールまで拒否してしまうなども考えられます。

(例えばPTRレコード(逆引き)の制限を付けるなど)

制限の強弱は、そのメールサーバの運用ポリシーにより決定される事と思いますので、適時設定してください。

ただし、第三者中継を許可しないようにセキュリティー面には考慮してください。

 

 

Postfix のバージョンを非表示にする

Telnetなどでメールサーバ(SMTP)にアクセスした際に、ソフト名とバージョン番号が表示されます。バージョン番号からはそのソフトにどのような脆弱性が存在するかを割り出すことを可能にしますので、これらの情報をむやみに与える必要は無いでしょう。

バージョン番号を非表示にする

/etc/postfix/main.cf

smtpd_banner = $myhostname ESMTP $mail_name

 

ソフト名とバージョン番号を非表示にする

/etc/postfix/main.cf

smtpd_banner = $myhostname ESMTP

 

 

EXPN/VRFYコマンドの拒否

EXPN コマンドによってシステムアカウントの有無を確認することができます。また、VRFYはメールアカウントが存在するかどうかを確認できます。このような情報はできるなら表示させないように設定することが望ましいでしょう。

/etc/postfix/main.cf

disable_vrfy_command = yes

 

 

HELO コマンドの要求

PostfixではSMTPセッションのはじめにHELO(またはEHLO)コマンドを要求するかどうかをクライアントに対して決定することができます。

HELOコマンドを要求するようにしておくことで止めることができるスパムも存在しますので、要求する事が望ましいでしょう。

smtpd_helo_required = yes

 

 

smtpd_*****_restrictionsで接続の可/否を設定

smtpd_*****_restrictionsでSMTPサーバがそれぞれのセクションでの接続可/否を設定できます。

主なセキュションは以下のようになります。

smtpd_client_restrictions = クライアントからの接続要求時

smtpd_helo_restrictions = HELOコマンドの場面

smtpd_sender_restrictions = MAIL FROMコマンドの場面

smtpd_recipient_restrictions = RCPT TOコマンドの場面

これらを利用して適切にアクセス制限をもうける事により、Spam対策やセキュリティー対策を行います。

例えば、ある程度のSpam対策やセキュリティー対策を行うには、以下のような設定が考えられます。

設定例)

smtpd_client_restrictions =
        permit_mynetworks,
        check_client_access hash:/etc/postfix/access,
        reject_rbl_client all.rbl.jp,
        reject_rbl_client list.dsbl.org,
        permit

smtpd_helo_restrictions =
        permit_mynetworks,
        check_helo_access hash:/etc/postfix/access,
        reject_invalid_hostname,
        permit

smtpd_sender_restrictions =
        permit_mynetworks,
        check_sender_access hash:/etc/postfix/access,
        reject_unknown_sender_domain,
        reject_non_fqdn_sender

smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        check_recipient_access hash:/etc/postfix/access,
        reject_non_fqdn_recipient,
        reject_unauth_destination
        permit_auth_destination,
        reject

 

hash:/etc/postfix/accessの利用例

check_*****_access : /etc/postfix/accessを作成し制御したいドメインを記述します。その後、postmap を実行してhash を作成します。

ここで、対象(IPアドレス、ドメイン、アドレス)とそれに対するルールでOK(許可)、REJECT(拒否)を指定します。

/etc/postfix/access

# IP Address Rule OK
192.168.1		OK
89.201.92.***	OK

# IP Address Rule REJECT
200.189.73.***	REJECT

# Domain Rule OK
hogehoge.com OK

# Domain Rule REJECT
spam.org REJECT

# Address Rule OK
test@examples.com	OK

# Address Rule REJECT
spam@spam.com REJECT

以下のコマンドで 、DB化し反映させます。

# postmap /etc/postfix/access

 

 

以下にセクション別の設定内容の解説と設定例を示します。

smtpd_client_restrictions

SMTPサーバがクライアントからSMTP接続の要求を受けた際に適用する、オプションのアクセス制限。

例えば、PTRレコードが無い(逆引きできない)ホストの接続を拒否する場合は以下の用にします。

permit_mynetworks : 自ネットワークは許可

check_client_access : accessファイルの指定に従って、要求の可/否を判定

reject_unknown_client : クライアントのIPアドレスがDNSにPTR (アドレスから名前への)レコードを持たない場合や、そのPTRレコードがマッチするA(名前からアドレスへ)レコードを持たない場合に、要求を拒否

permit = 上記以外は中継を許可

設定例)

smtpd_client_restrictions =
	permit_mynetworks,
	check_client_access hash:/etc/postfix/access,
	reject_unknown_client,
	permit

 

smtpd_helo_restrictions

SMTP サーバがSMTP HELOコマンドの場面で適用する、オプションの 制限。

permit_mynetworks = 自信のネットワークからは許可

check_helo_access = accessファイルの指定に従って、要求の可/否を判定

reject_invalid_hostname = HELOまたはEHLOホスト名の文法が不正な場合に、要求を拒否

reject_non_fqdn_hostname = HELOまたはEHLOホスト名の文法がRFCで要求されているような完全修飾ドメイン形式ではない場合に(FQDN 形式でない場合に)、要求を拒否

reject_unknown_hostname = HELOまたはEHLOホスト名のDNS AレコードまたはMXレコードがない場合に、要求を拒否

permit = 上記以外は中継を許可

設定例)

smtpd_helo_restrictions =
	permit_mynetworks,
	check_helo_access hash:/etc/postfix/access,
	reject_invalid_hostname,
	reject_non_fqdn_hostname,
	reject_unknown_hostname,
	permit

 

smtpd_sender_restrictions

SMTP サーバが MAIL FROM コマンドの場面で適用する、オプションの制限。

permit_mynetworks = 自信のネットワークからは許可

check_sender_access hash:/etc/postfix/access = accessファイルの指定に従って、要求の可/否を判定

reject_unknown_sender_domain = MAIL FROMアドレスにDNS AレコードまたはMXレコードがない場合に、要求を拒否

reject_non_fqdn_sender = MAIL FROMアドレスがRFCで要求されているような完全修飾ドメイン形式ではない場合に(FQDN 形式でない場合に)、要求を拒否

設定例)

smtpd_sender_restrictions =
	permit_mynetworks,
	check_sender_access hash:/etc/postfix/access,
	reject_unknown_sender_domain,
	reject_non_fqdn_sender

 

smtpd_recipient_restrictions

SMTP サーバがRCPT TOコマンドの場面で適用するアクセス制限。

permit_mynetworks = 自信のネットワークからは許可

check_recipient_access = hash:/etc/postfix/access = accessファイルの指定に従って、要求の可/否を判定

reject_non_fqdn_recipient = RCPT TOアドレスがRFCで要求されているような完全修飾ドメイン形式ではない場合に(FQDN 形式でない場合に)、要求を拒否

reject_unknown_recipient_domain = RCPT TOアドレスにDNS AレコードまたはMXレコードがない場合に、要求を拒否
permit_auth_destination = 以下のうち一つを満たした場合に、要求を許可

・Postfixがメールを転送する場合: 解決されたRCPT TOアドレスが$relay_domainsまたはそのサブドメインにマッチし、送信者指定のルーティング (user@elsewhere@domain)を含まない場合

・Postfixが最終配送先の場合: 解決されたRCPT TOアドレスが$mydestinationや$inet_interfaces、$proxy_interfaces、$virtual_alias_domains、$virtual_mailbox_domains にマッチし、送信者指定のルーティング (user@elsewhere@domain) を含まない場合

reject_unauth_destination = 以下のどれか一つに当てはまらない場合に、要求を拒否

・Postfixがメールを転送する場合: 解決されたRCPT TOアドレスが$relay_domainsまたはそのサブドメインにマッチし、送信者指定のルーティング(user@elsewhere@domain)を含まない場合

・Postfixが最終配送先の場合: 解決されたRCPT TOアドレスが$mydestinationや $inet_interfaces、$proxy_interfaces、$virtual_alias_domains、$virtual_mailbox_domains にマッチし、送信者指定のルーティング (user@elsewhere@domain)を含まない場合

reject = 上記条件を満たした予期しない条件があった場合に拒否

設定例)

smtpd_recipient_restrictions =
	permit_mynetworks,
	check_recipient_access hash:/etc/postfix/access,
	reject_non_fqdn_recipient,
	reject_unknown_recipient_domain,
	reject_unauth_destination,
	permit_auth_destination,
    reject

 

 

DNSBLを利用してスパム判定をする

RBL(DNSBL)は、IPアドレスやホスト名をDNSに問い合わせることで、スパムや問題のあるホストであるかを判定してくれるブラックリスト機能です。

DNSBLはいくつかボランティアで運営されている物がありますが、中には、多少ルールか厳しく、本来受け取りたいメールもSpam判定を受けてしまう事もあり得ます。また、運営自体が停止された場合は、メールが配送されない障害も発生しますので、これを利用する場合はある程度の注意が必要です。

Postfixでこれを利用するには、smtpd_client_restrictionsに設定します。今回は、日本独自のブラックリストデータベースシステムを運用している rbl.jp を利用しました。

設定例)

smtpd_client_restrictions =
	permit_mynetworks,
	check_client_access hash:/etc/postfix/access,
	reject_unknown_client,
	reject_rbl_client all.rbl.jp,
	reject_rbl_client bl.spamcop.net,
	reject_rbl_client list.dsbl.org,
	reject_rbl_client sbl-xbl.spamhaus.org,
	permit

なお、RBLに登録されているホストを除外したい場合は、check_client_accessに例外を追加してください。

 

 

参考資料:

MTA のアクセス制御 – http://ya.maya.st/mail/accessctl.html

Postfix 設定パラメータ – http://www.postfix-jp.info/trans-2.1/jhtml/postconf.5.html

RBL.JPプロジェクト – http://www.rbl.jp/

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">