Postfix-MLで質問した件のまとめ。
自分とこのサーバは、ClamSMTPを利用してClamAVでMTAでのウイルスメールフィルタをしていますが、この場合だとSpamAssassinを利用するとき、.forwardとかでユーザ毎にSpamAssassinを利用してもらう場合は良いのだけども、全アカウントにSpamAssassinを一度通したい場合、簡単な設定方法が見あたらず、どうしたもんかなあと思っていました。
同じ構成、目的で
Postfix+ClamSMTP の配送中に SpamAssasin をかける - Mimori's Algorithms tDiary(2005-02-09)
で実現されているものの、Rubyでフィルタを書いて実現されていて、もっと設定だけで簡単にできそうなのになんとかならんかな〜、と思いMLで質問してみました。
Postfixの設定だけで可能な方法と、SpamPDというSpamAssassinをメールProxyとして利用できるツールと、紹介していただきました。
Postfixの設定だけで可能な方法
pickupのところから、content_filterでClamSMTPを利用しているのがミソですね。
DebianのClamSMTPの設定は、標準だとInが10026でOutが10025と、ClamSMTPの標準とはポートがIn/Out逆になっているので注意。
以下の設定は、自分のDebian(sarge)の標準設定で動いたものです。
/etc/postfix/master.cf
# # SpamAssassin用設定 (下記設定を追加) # spamcコマンドのパラメータ等は適宜修正する # spamd unix - n n - - pipe user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} -- ${recipient} # # ClamSMTP用設定 (下記設定を追加) # scan unix - - n - 16 smtp localhost:10025 inet n - n - 16 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host # # sendmailコマンドからのメールをClamSMTPに渡す # (既存のpickupサービスの設定を修正) # pickup fifo n - n 60 1 pickup -o content_filter=scan:[127.0.0.1]:10026
/etc/postfix/main.cf
# # 外部等からのメールをSpamAssassinに渡す # content_filter = spamd receive_override_options = no_address_mappings
SpamPDを利用するもの。
(追記)
この方法の一部改善したものを
モーグルとカバとパウダーの日記 - Postfixの設定でClamSMTPと、受信時だけSpamAssassinを利用する
にて公開していますので、こちらも参照下さい。
spampd - Spam Proxy DaemonはSpamAssassinをメールProxyとして使うためのツールです。
Debianなら普通にaptでインストールできます。
これを使うとさらにわかりやすい設定に出来ます。
受け取るポート:受け取るデーモンという表記とすると、こんな感じの構成です。
25:smtpd(Postfix)->10026:clamsmtpd(ClamAV)->10025:spampd(SpamAssassin)->10027:smtpd(Postfix)
/etc/postfix/master.cf
# AV scan filter (used by content_filter) scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes # For injecting mail back into postfix from the filter 127.0.0.1:10027 inet n - n - 16 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o smtpd_authorized_xforward_hosts=127.0.0.0/8
/etc/postfix/main.cf
content_filter = scan:127.0.0.1:10026
/etc/clamsmtpd.conf の該当行は以下のようになっているのを確認
OutAddress: 10025 Listen: 127.0.0.1:10026
/etc/default/spampd の該当行を以下に修正
STARTSPAMPD=1 LISTENPORT=10025 DESTPORT=10027
Postfix キューに入った後のコンテンツフィルタ
を読むと、コンテンツフィルタはProxyにしてたほうが、性能もでて安全というようなことが書いてあるので、うちのサーバではこちらのSpamPDを利用した構成で運用することにしました。
(関連)
ClamSMTPを利用しない場合、SpamdをPostfixから直接利用する設定
http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix