FreeBSDでSendmailのMilter APIとCyrus IMAPを使ってspam対策を行う方法です。
方針は以下の通り。
sendmail.mcに以下を追加します。
INPUT_MAIL_FILTER(`sid-filter', `S=local:/var/run/sid-filter, F=T, T=R:2m') INPUT_MAIL_FILTER(`dkim-filter', `S=local:/var/run/milteropendkim/socket, F=T, T=R:2m') INPUT_MAIL_FILTER(`spamass-filter', `S=local:/var/run/spamass-milter.sock, F=T, T=R:2m')
フラグの意味
F= | |
---|---|
R | フィルタが利用できない場合はコネクションを拒否する |
T | フィルタが利用できない場合はコネクションを一時エラーにする |
なし | フィルタが利用できない場合はフィルタなしの動作を行う |
T= | |
---|---|
C | フィルタへの接続のタイムアウト(デフォルト5分) |
S | MTAからフィルタへの送信タイムアウト(デフォルト10秒) |
R | フィルタから応答読み出しタイムアウト(デフォルト10秒) |
E | フィルタへメッセージの最後まで送信してから、最終確認を待っている間のタイムアウト(デフォルト5分) |
sendmailに設定を反映させます。
# cd /etc/mail # make sendmail.cf # /etc/rc.d/sendmail restart
ソーススクリプト(.sieve.src)を書きます。
require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "INBOX.spam"; } elsif header :contains "Received-SPF" "softfail" { fileinto "INBOX.spam"; } elsif header :contains "Authentication-Results" "spf=softfail" { fileinto "INBOX.spam"; } elsif header :contains "Authentication-Results" "spf=fail" { fileinto "INBOX.spam"; } elsif header :contains "Authentication-Results" "sender-id=softfail" { fileinto "INBOX.spam"; } elsif header :contains "Authentication-Results" "sender-id=fail" { fileinto "INBOX.spam"; } elsif header :contains "Authentication-Results" "dkim=softfail" { fileinto "INBOX.spam"; } elsif header :contains "Authentication-Results" "dkim=hardfail" { fileinto "INBOX.spam"; } elsif header :contains "Authentication-Results" "domainkeys=softfail" { fileinto "INBOX.spam"; } elsif header :contains "Authentication-Results" "domainkeys=hardfail" { fileinto "INBOX.spam"; }
ソーススクリプトをバイトコンパイルします。
% /usr/local/cyrus/bin/sievec $HOME/.sieve.src $HOME/.sieve
Copyright ©2000-2018 T.Hiraga <hiraga@next-hop.net> All Rights Reserved. Last modified: $Date: 2016/02/21 16:11:05 $ |