ubuntu 10.04 をメールサーバーに (ウィルスチェック)

今回は Postfix で送受信するメールをウィルスチェックをするようにしたい。
ウィルスチェックソフトにも色々な種類があるが、ubuntu の標準リポジトリで提供されている Clam AntiVirus を入れることにする。

Clam AntiVirus を Postfix と連携させて、Postfix が送受信するメールをチェックするには、amavisd-new パッケージと clamav-daemon パッケージを組み合わせる方法や、clamsmtp パッケージを使う方法などがある。
ここでは、最近とみに流行の milter というシステムを利用した clamav-milter パッケージを使って、Postfix にウィルスチェックを実装する。

milter が何かについては、「milter managerによる柔軟なメールフィルタリング」の Web ページで平易に説明されているので、そちらを参照されたい。

まずは sudo aptitude update; sudo aptitude install clamav-milter コマンドを実行して、clamav-milter をインストールする。
clamav-milter を動かすのに必要で、まだインストールされていないパッケージが表示され、一緒にインストールするこか確認されたら ‘y’ を入力する。

続いて、milter システムの Clam AntiVirus と Postfix を連携させるために、それぞれの設定を修正する。

Clam AntiVirus と Postfix の間の通信には UNIX ソケットを使うことにする。
Postfix が chroot 環境で動くことを考慮すると、UNIX ソケットは /var/spool/postfix ディレクトリ以下に作成しなくてはならない。

Postfix が chroot したときのルートディレクトリの位置は postconf -d queue_directory コマンドで調べられる。

clamav-milter パッケージをインストールした最初の設定では、Clam AntiVirus の milter システムで使う UNIX ソケットのパスは /var/run/clamav/clamav-milter.ctl になっている。
これを /var/spool/postfix/var/run/clamav/clamav-milter.ctl に変更する。
そのため /etc/clamav/clamav-milter.ctl ファイルの 7 行目の ‘MilterSocket /var/run/clamav/clamav-milter.ctl’ を ‘MilterSocket /var/spool/postfix/var/run/clamav/clamav-milter.ctl’ に修正する。
修正した /etc/clamav/clamav-milter.ctl ファイルの内容を以下に揚げる。

/etc/clamav/clamav-milter.ctl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#Automatically Generated by clamav-milter postinst
#To reconfigure clamav-milter run #dpkg-reconfigure clamav-milter
#Please read /usr/share/doc/clamav-base/README.Debian.gz for details
MilterSocket /var/spool/postfix/var/run/clamav/clamav-milter.ctl
FixStaleSocket true
User clamav
AllowSupplementaryGroups true
ReadTimeout 120
Foreground false
PidFile /var/run/clamav/clamav-milter.pid
ClamdSocket unix:/var/run/clamav/clamd.ctl
OnClean Accept
OnInfected Quarantine
OnFail Defer
AddHeader Replace
LogSyslog false
LogFacility LOG_LOCAL6
LogVerbose false
LogInfected Off
MaxFileSize 25M
TemporaryDirectory /tmp
LogFile /var/log/clamav/clamav-milter.log
LogTime true
LogFileUnlock false
LogFileMaxSize 0M
MilterSocketGroup clamav
MilterSocketMode 666

もうひとつ、/etc/default/clamav-milter ファイルも編集する。
修正箇所は /etc/default/clamav-milter ファイルの最後の行 (13 行目) で、#SOCKET_RWGROUP=postfix の行頭の ‘#’ を削除してアンコメントする。
修正した /etc/default/clamav-milter ファイルの内容を以下に揚げる

/etc/default/clamav-milter
1
2
3
4
5
6
7
8
9
10
11
12
13
#
# clamav-milter init options
#

## SOCKET_RWGROUP
# by default, the socket created by the milter has permissions
# clamav:clamav:755. SOCKET_RWGROUP changes the group and changes the
# permissions to 775 to give read-write access to that group.
#
# If you are using postfix to speak to the milter, you have to give permission
# to the postfix group to write
#
SOCKET_RWGROUP=postfix

/etc/clamav/clamav-milter.ctl ファイルと /etc/default/clamav-milter ファイルの二つのファイルを編集したら、設定を反映させるために sudo service clamav-milter restart コマンドを実行する。
続いて ls -l /var/spool/postfix/var/run/clamav/clamav-milter.ctl コマンドを実行して、以下の結果が表示されれることを確認する。

srw-rw-rw- 1 clamav postfix 0 2010-08-09 11:30 /var/spool/postfix/var/run/clamav/clamav-milter.ctl
ここに表示される日付と時刻は、sudo service clamav-milter restart コマンドを実行して、clamav-milter に設定を読み込ませた日時。

次は Postfix が送受信のために受け取ったメールを、Clam AntiVirus の milter システムに渡すように、Postfix の設定を修正する。
このためには /etc/postfix/main.cf に以下の 3 行を追加する。

milter_default_action = accept
smtpd_milters =
        unix:/var/run/clamav/clamav-milter.ctl
non_smtpd_milters =
        unix:/var/run//clamav/clamav-milter.ctl

milter_default_action エントリは、Postfix が milter システムを使って呼び出したプログラムが、何らかのエラーを起こしたときにの動作を指定する。
Postfix の初期値では、milter システムで呼び出したプログラムがエラーになったときは、それを一時的なエラーとして、対象となったメールを時間をおいてもう一度送り直すよう、送信元にステータスを返すようになっている。
ここでは milter_default_action エントリに ‘accept’ を指定して、milter システム経由で呼び出したプログラムがエラーになったときでもエラーを無視して、処理を続行するようにする。
milter システム経由で呼び出すプログラムの動作を監視して、エラーが生じたときに速やかにその原因を取り除いて復旧できる体制が取れるのでなら ‘accept’ ではなく、Postfix 2.6 から導入された ‘quarantine’ か初期値の ‘tempfail’ を指定する方がいいかもしれない。

smtpd_milters エントリや non_smtpd_milters エントリには、連携する milter システムのソケットを指定する。
ソケットには UNIX ソケットと INET ソケットの 2 種類があり、UNIX ソケットを使って連携するときは ‘unix:’ に続けて UNIX ソケットのパスを、INET ソケットを使って連携するときは ‘inet:’ に続けてホスト名と INET ソケットのポート番号を指定する。

Clam AntiVilrus の milter システム (clamav-milter) の設定で、UNIX ソケットを使って Postfix と連携するようにしたので、’unix:’ に続けてそのパスをここに指定する。
Clam AntiVilrus では UNIX ソケットに /var/spool/postfix/var/run/clamav/clamav-milter.ctl と指定したが、ここから Postfix の chroot ルートである /var/spool/postfix を除いた /var/run/clamav/clamav-milter.ctl の頭に ‘unix:’ を付けた ‘unix:/var/run/clamav/clamav-milter.ctl’ を指定する。

smtpd_milters エントリと non_smtpd_milters エントリでは、smtpd_milters エントリは Postfix の smtpd モジュールを経て受け付けたメールに適用する milter システムを指定し、non_smtpd_milters エントリはそれ以外の方法で受け付けたメールに適用する milter システムを指定するという違いがある。

最後に /etc/postfix/main.cf ファイルに施した修正を読み込ませるために sudo service postfix reload コマンドを実行すれば、Postfix で送受信するメールのウィルスチェックがされるようになる。

関連する記事 (Related posts):

  1. ubuntu 10.04 をメールサーバーに (グレイリスティング – milter-greylist で失敗)
  2. ubuntu 10.04 をメールサーバーに (DKIM 署名の検証)
  3. ubuntu 10.04 をメールサーバーに (Postfix で SMTP 認証)
  4. ubuntu 10.04 をメールサーバーに (SPF の検証)
  5. ubuntu 10.04 をメールサーバーに (グレイリスティング – Postgrey)

1 comment to ubuntu 10.04 をメールサーバーに (ウィルスチェック)

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">