« postfixによるSMTPサーバの構築その2 | メイン | postfixによるSMTPサーバの構築その4 »

postfixによるSMTPサーバの構築その3

前回でmain.cfへの基本設定がすんだのでいろいろなスパム対策をしましょう。

●送信元ホストによるアクセス制御

スパム対策など不必要なメールの受信をしないためにアクセス制御をしましょう。
アクセス制御には smtpd_client_restrictions を使います。

---
smtpd_client_restrictions =
        permit_mynetworks,
        check_client_access regexp:/etc/postfix/client_access,
        reject_unknown_client,
        permit
---

reject_unknown_clientのレスポンスコードはデフォルトで450ですがこれでは再送されてしまうため気になる人は550などにしましょう。
---
unknown_client_reject_code = 550
---

上の例では mynetworks で指定したネットワークを受信し,/etc/postfix/client_access ファイルによるアクセス制御を行い,reject_unknown_client でDNS逆引きができないサーバからの接続を拒否し,permitでそれ以外のデフォルト動作は接続を許可するという意味になります。
reject_unknown_client を指定すると結構メールをはじきますので注意が必要です。

regexp はそれ以降に指定したファイルの記述に正規表現を使うという意味です。書式は以下のような感じ。

---
/^223-123-45-67\.example\.net$/           OK
/\.domain\.com$/                                OK
/^223\.123\.45\.67$/                            REJECT
/^[^\.]*[0-9][^0-9\.]+[0-9]/                   450 may not be MX
---

/パターン/ 制御パラメータ
といった形式になります。
制御パラメータには,OK, REJECT, 4xx コメント, 5xx コメント, DISCARD コメント,などがあります。
4xxを指定した場合はエラーメッセージを返しメールは再送されますが,5xxを指定した場合はエラーメッセージをすぐに返し,メールは再送されません。


●送信元ドメインによるアクセス制御

ドメインによるアクセス制御は以下のようにします。

---
smtpd_sender_restrictions =
        permit_mynetworks,
        # 送信者のドメインがMX,Aレコードいずれでもない場合拒否
        reject_unknown_sender_domain,
        check_sender_access hash:/etc/postfix/sender_access,
        permit
---

reject_unknown_sender_domainもデフォルトレスポンスコードが450なので550にします。
---
unknown_address_reject_code = 550
---

sender_accessの書式はhashにしています。hashはいたって簡単。ただ,hashはpostmapコマンドでdbファイル形式に変換する必要があります。

# postmap /etc/postfix/sender_access

---
spammer@domain.com REJECT
domain.jp OK
spam.com REJECT
---


●RBLの利用

オープンリレー(第三者中継を許してしまっているサーバ)の情報を集め,データベースにしているサイトを利用して受信を拒否する設定が可能です。もし,データベースに登録されていれば受信を拒否出来ます。
設定は smtpd_client_restrictions に記述します。

---
reject_rbl_client list.dsbl.org
reject_rbl_client all.rbl.jp
---

RBL提供サイト一覧は以下のサイトで調べることが出来ます。

http://www.sdsc.edu/~jeff/spam/cbc.html

RBLサイトの中には精度に問題があるところもあるので慎重に選びましょう。


●メッセージ内容による制御

ヘッダー情報による制御を行うには以下の記述のコメントをはずし/etc/postfix/header_checksに制御したい内容を記述する。

header_checks = regexp:/etc/postfix/header_checks

# vi /etc/postfix/header_checks
---
/^X-Mailer:.*Emacs/ REJECT header_check RULE1
---

このように記述するとX-MailerにEmacsという文字を含んでいるとはじきます。またログには header_check RULE1 のコメントが書き込まれます。

同様にメッセージ内容による制御を行うには body_checks を使う。main.cfには以下のように記述する。

body_checks = regexp:/etc/postfix/body_checks

# vi /etc/postfix/body_checks

body_checksに制御したい内容を書きましょう。


●存在しないユーザ宛のメール

でたらめなユーザ宛によくきます。レスポンスコードは550になっていることを確認しましょう。

---
unknown_local_recipient_reject_code = 550
---