Postfixのフィルタリング設定 - スパム・迷惑メール対策、受信拒否

更新:

Postfixのフィルタリング設定 - スパム・迷惑メール対策、受信拒否方法。
対象:Linux Fedora, RedHat

フィルタリング設定
  • Postfix関連サイト
    http://www.postfix.org/
    http://www.kobitosan.net/postfix/
  • Postfixのインストール
    Postfixのインストール
  • フィルタリング設定サンプル(header_checks、body_checks)
    main.cfに予めheader_checksとbody_checksがない場合があります。
    その場合は、自分で追加します。
    
    vi /etc/postfix/main.cf
    	header_checks = regexp:/etc/postfix/header_checks
    	body_checks   = regexp:/etc/postfix/body_checks
    
    vi /etc/postfix/header_checks
    	#Received Asia
    	/^Received:.*\[211\.112\./ DISCARD
    	/^Received:.*\[218\.39\./ DISCARD
    	
    	#Received Domain
    	/^Subject:.*testtest/ REJECT
    	/^Received:.*.com\.tw/ REJECT
    	/^Received:(.from.a-net\.ne\.jp)/ REJECT
    	
    	#others
    	/^X-Mail-Agent:.*(BSMTP DLL)/ DISCARD
    	/^X-Mailer:(.AOL).*(for.Windows.US.sub)/ REJECT
    	
    	#From
    	/^From:.*@yahoo\.fr/ REJECT
    	/^From:.*@yahoo\.ca/ REJECT
    	
    	#To
    	/^To:.*undisclosed-recipients/ REJECT
    	
    	#Subject
    	/^Subject:(.Re:)$/ REJECT
    	/^Subject:(.Re:Re:)$/ REJECT
    	/^Subject:(.Re:Re:Re:)$/ REJECT
    	
    	#netsky
    	/name=.*\.scr/ REJECT
    
    vi /etc/postfix/body_checks
    	#spam
    	/^(|[^>].*)livedear.com/ REJECT
    	
    	#LogWatch
    	if !/(reject: header|reject: body)/
    	/^(|[^>].*)sample.com/ REJECT
    	/^(|[^>].*)http:\/\/[0-9a-zA-Z!-~]+\.ch/ REJECT
    	/^(|[^>].*)http:\/\/[0-9a-zA-Z!-~]+\.example\.net/ REJECT
    	end if
    	
    	*root宛てにLogWatchのメールを送っている場合、
    	 body_checksでREJECTすると、LogWatchのメールもREJECTされ、
    	 エラーメールで届いてしまうので、if文などで制御する
    	*マニュアルではendifとなっているがendifだとpostmap時にエラーになる
    	 end ifか何もかかないとエラーが出ず、一応動作する
    	 if以降の行は、行頭にスペースやタブを入れない
    	 スペースやタブは、前行の続きとみなされる
    
    設定後、postmap
    /usr/sbin/postmap /etc/postfix/header_checks
    /usr/sbin/postmap /etc/postfix/body_checks
    
    設定をリロード
    service postfix reload
    
    処理方法について
    	OK:受信する(Ver2.1以降はDUNNO推奨)
    	IGNORE:一致した行をヘッダから削除
    	REJECT:受信拒否して、エラーメールを返す
    	DISCARD:受信して破棄する
    
  • ORDB、RBL(DNSBL)による受信拒否
    ORDBや、RBL(DNSBL)は、スパムのドメインやIPアドレス収集・管理しているサイトです。
    これらのデータベースを利用して、受信拒否することができます。

    ※RBL(DNSBL)は、スパムではないIPアドレスも受信拒否してしまう可能性があります。
    ※メールをきちんと確認したい人には、おすすめしません。

    まず、main.cf 中に smtpd_client_restrictions を書きます。
    初期状態では、smtpd_client_restrictions がない場合があるので適当に追加。
    また、maps_rbl_domainsは古い機能なのでPostfix 2.0以降はいらない。
    Postfix 2.0以降はsmtpd_client_restrictions中にreject_rbl_clientを使う。
    smtpd_recipient_restrictionsもいらない。

    設定後、postfix再起動。
    ・例
    vi /etc/postfix/main.cf
    	smtpd_client_restrictions = permit_mynetworks,
    		reject_rbl_client relays.ordb.org,(閉鎖された)
    		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
    
    関連サイト
    http://www.kobitosan.net/postfix/trans-2.2/jhtml/postconf.5.html
    http://www.rbl.jp/
  • procmailでフィルタリング
    procmailを利用して、フィルタリングやメール転送などができます。
    メールヘッダ、本文などの文字列に対して正規表現を使って制御できます。
    Postfixだけでは、フィルタリングしきれない場合などに利用。
    ただし、一度受け取ってからの処理になるため、エラーメールを返すことはできず、基本的に破棄するだけです。
    スパムではないメールも破棄してしまわないように、自分でメールを確認したい人には、良いと思います。
    ・procmailのパス確認
    	which procmail
    		/usr/bin/procmail
    
  • スパムのリレーメール対策、チェック方法
    リレーメールの受信拒否をチェックできるサイトを利用してチェックします。
    リレーメールとは、自分のサーバを踏み台にして、スパムを送信する行為です。

    telnet relay-test.mail-abuse.org というコマンドを実行すると、19項目程度テストが行われます。
    リレーメールが可能な場合(NGの場合)は、途中でテストが中断されます。
    旧アドレス
    telnet mail-abuse.org
    は、現在使えません。
このエントリーをはてなブックマークに追加