postfix でウィルスチェックサーバー構築 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # 運用形態 #--------------------------------------------------------------------------------------------- このドキュメントでは、postfix メールサーバーでclamAV+clamSMTP によるウィルスチェックを行う設定について説明します。clamAV とclamSMTP はすでにインストールされているものとします。 ※ 運用イメージ ※ 下記図は、postfix の標準構成にコンテンツフィルタという形でウィルスチェックを行わせたときのイメージです。 フィルタ前 → smtpd → cleanup −−−−−→ qmgr → smtp → 配送 → pickup → ↑ [3] | → local → | | | ↓ smtpd PORT 1900 smtp ↑ | | [2] | [1] | ↓ コンテンツフィルタclamSMTP+clamAV PORT 1800 smtpd、またはpickup によってキューに蓄積されたメールはqmgr によって配送先が決定されますが、postfix のコンテンツフィルタ機能により、キューのすべてのメールはsmtp により一旦clamSMTP に配送されます(図中[1])。 clamSMTP によってウィルスチェックされたメールはSMTP プロトコル経由でpostfix に取り込まれます(図中[2])。 ウィルスチェック後のメールはclenup によってキューに登録されますが、qmgr はコンテンツフィルタ機能を有効とせず、smtp、local にメールを渡します(図中[3])。 # postfix 側の設定 #--------------------------------------------------------------------------------------------- postfix では、ウィルスチェックフィルタを使うためのコンテンツフィルタの設定をmain.cf で行った上で、上記「構成イメージ」のうち、コンテンツフィルタclamSMTP を呼び出すsmtp、コンテンツフィルタclamSMTP から呼び出されるsmtpd をmaster.cf にて用意します。 ↓ /etc/postfix/main.cf ------------------------------------ content_filter = scan:[127.0.0.1]:18000 ↑ ココまで------------------------------------------------- ↓ /etc/postfix/master.cf ---------------------------------- scan unix - - n - - smtp -o smtp_send_xforward_command=yes -o smtp_enforce_tls=no 127.0.0.1:1900 inet n - n - - 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 ↑ ココまで------------------------------------------------- 127.0.0.1:1900 で待機するsmtpd はフィルタ後のメールを受け取ります。しかし、通常のsmtpd のようにmain.cf をそのまま読み込んでいては一度チェックを行った項目の再チェックやコンテンツフィルタがループするなど都合がよろしくありません。そこで「-o」オプションでmain.cf を書き換えます。「-o」オプションで指定された項目の意味は下記の通りです。 smtp_send_xforward_command=yes | フィルタ後の smtpd プロセスに元のIP アドレスを転送して、元 | メールのIP アドレスをログに記録されるようにします content_filter | main.cf のcontent_filter を以降の処理で利用しないようにします receive_override_options=〜 | フィルタ前に行われたチェックをフィルタ後行わないようにします mynetworks_style=host | フィルタ後のsmtpd は自身サーバーからの接続のみ受け付けます 以上でpostfix の設定が終わりました。 # clamSMTP 側の設定 #--------------------------------------------------------------------------------------------- clamSMTP では、postfix のコンテンツフィルタから送られたメールを受け取る設定、およびウィルスチェック後のメールを送り出す設定を行います。 # cd /usr/local/clamsmtp # vi clamsmtp.conf 編集 → OutAddress: 127.0.0.1:1800 編集 → Listen: 127.0.0.1:1900 以上でpostfix の設定が終わりました。 最後に、ゲートウェイ型ウィルスチェックを有効にするために、clamSMTP とclamAV、そして、メールサーバーpostfix を起動して完成です。