AntiVir with postfix
コンテンツフィルタの考え方
postfix のマニュアルを読めばわかるのですが、コンテンツフィルタの考え方は以下のとおりです。
..................................
: Postfix :
----->smtpd \ /local---->
: -cleanup->queue- :
---->pickup / ^ | \smtp----->
: | v :
: smtpd smtp :
: 10025 | :
......................|...........
^ |
| v
....|............
: | 10024 :
: contents : : filter :
: :
.................
つまり、SMTPを 25 番ポートと 10025 番ポートの両方で開いておきます。メールを 25 番ポートから受け取り、10024 番ポートで待っているコンテンツフィルタ (ここではウィルススキャンプログラム) に渡します。コンテンツフィルタは所望の処理をした後に、 localhost の 10025 番ポートに渡します。Postfix は受け取ったデータを通常通り配送するだけです。
10025番ポートに直接繋げにこられるとコンテンツフィルタは通らないので、このポートは外部からは接続できないように、しかるべき手段で防衛しておきます。
個人利用登録とダウンロード
まず、ソフトのダウンロードと登録をしてライセンスを入手します。Webから登録をしてライセンスが届くのに少し時間がかかるかもしれないので、先に個人利用登録をします。AntiVir for Linux - Private User Registration
それからダウンロードします。 Downloads 内にある、AntiVir MailGate FreeBSD をダウンロードします。
インストール
適当なディレクトリでダウンロードしたファイルを展開します。
$ tar xvzf avfbmgt.tgz
$ cd antivir-mailgate-2.0.1.16/avmailgate/
このディレクトリ内の INSTALL, INSTALL.postfix, README.FreeBSD を読みます。これらの内容に従えばインストールできるはずです。しかし、多分に趣味的な問題により、いくつかは自分に合わせて読み替えます。以下に記述する内容の中には、必要ないものもあります。
AntiVir を実行するユーザとグループを作成します。私は antivir:antivir としました。
$ su
# vi /etc/group
antivir:*:92:
# vipw
antivir:*:92:92::0:0:virus scan user:/nonexistent:/sbin/nologin
AntiVir の実行バイナリとウィルス定義ファイルを格納するディレクトリを作成し、そこにコピーします。
# mkdir /usr/local/lib/antivir
# cp vdf/antivir.vdf /usr/local/lib/antivir/
# cp bin/antivir /usr/local/lib/antivir/
# chown -R antivir:antivir /usr/local/lib/antivir
設定ファイルを格納するディレクトリを作成し、そこにコピーします。
# mkdir /usr/local/etc/antivir
# cp etc/* /usr/local/etc/antivir/
デーモンとして動作するファイルをコピーします。
# cp bin/avgated /usr/local/sbin/
# cp bin/avgatefwd /usr/local/sbin/
AntiVir が使用するスプールディレクトリを作成します。
# mkdir /var/spool/avmailgate
# mkdir /var/spool/avmailgate/incoming
# mkdir /var/spool/avmailgate/outgoing
# mkdir /var/spool/avmailgate/rejected
# chown -R antivir:antivir /var/spool/avmailgate
# chmod -R 700 /var/spool/avmailgate
AntiVir のPIDを格納するディレクトリをつくります。
mkdir /var/run/antivir
chown antivir:antivir /var/run/antivir
そろそろライセンスが添付されたメールが届いているかもしれません。確認してインストールしましょう。添付されている hbedv.key をコピーします。
# cp hbedv.key /usr/local/lib/antivir/avmgate.key
# chown antivir:antivir /usr/local/lib/antivir/avmgate.key
AntiVirの設定と起動
別にやらなくてもいいのですが、ポートを名前で指定できるように、/etc/services に以下の行を加えます。
# Content Filter for postfix
antivir 10024/tcp #Port for avgated
smtp-backdoor 10025/tcp #Port for postfix backdoor
/usr/local/etc/antivir/avmailgate.conf を編集します。私が編集したのは以下の通りです。
# User uucp
# Group uucp
User antivir
Group antivir
# ------------------------------------------------------------------------
# AntiVirDir /usr/lib/AntiVir
AntiVirDir /usr/local/lib/antivir
# ------------------------------------------------------------------------
# PidDir /var/tmp
PidDir /var/run/antivir
# ------------------------------------------------------------------------
# ListenAddress 0.0.0.0 port 25
ListenAddress localhost port antivir
# ------------------------------------------------------------------------
# ForwardTo SMTP: localhost port 825
ForwardTo SMTP: localhost port smtp-backdoor
/usr/local/etc/antivir/avmailgate.acl を適当に編集します。私の場合は以下となります。
# Access lists for AvMailGate
# These hosts and/or domains are local.
local: localhost
local: f-bell.net
# These hosts and networks are allowed to relay.
relay: 127.0.0.1/8 192.168.1.0/24
ウィルス定義ファイルのアップデート
# /usr/local/lib/antivir/antivir --update
ここまで設定して、AntiVir側を起動します。
# avgated -C /usr/local/etc/antivir/avmailgate.conf -A /usr/local/etc/antivir/avmailgate.acl
# avgatefwd -C /usr/local/etc/antivir/avmailgate.conf -A /usr/local/etc/antivir/avmailgate.acl
改行されていますが、1行で入力します。
なお、このコマンドはなにも指定しないと、/etc/avmailgate.conf, /etc/avmailgate.acl
を読み込みますので、READMEどおりインストールしていると、
# avgated
# avgatefwd
だけでOKです。
ウィルス定義ファイルを自動的に取得するように/etc/crontab に以下の行を加えます。各列はタブ区切りにした上、時間は適当に決めてください。
0 4 * * * root /usr/local/lib/antivir/antivir --update -q
postfixの設定と再起動
この設定が何を意味するかは、postfixのドキュメントをよく読んで理解してください。
/usr/local/etc/postfix/master.cf に以下の設定を加えます。
smtp inet n - n - - smtpd
localhost:smtp-backdoor inet n - n - - smtpd -o content_filter=
/usr/local/etc/postfix/main.cf に以下の設定を加えます。
# Antivir Einbindung
content_filter = smtp:127.0.0.1:10024
postfixを再起動します。
# /usr/local/etc/rc.d/postfix.sh reload
以上で終了です。
確認
このサーバを使って送受信するメイルには以下のヘッダが追加されます。
X-AntiVirus: checked by AntiVir MailGate (version: 2.0.1.16; AVE: 6.22.0.1; VDF: 6.22.0.40; host: pippo.f-bell.net)
また、メールはAntivir と postfix の間を行き交うので、こんなreceivedヘッダもつきます。
Received: from localhost (localhost [127.0.0.1])
by mail.f-bell.net (Postfix)
with ESMTP id C86F75B for <bell@f-bell.net>;
Tue, 18 Nov 2003 00:33:30 +0900 (JST)
Received: from mail.f-bell.net (localhost [127.0.0.1])
by localhost (AvMailGate-2.0.1.16) id 32130-35B4063D;
Tue, 18 Nov 2003 00:33:30 +0900
再起動したときに AntiVir も自動的に立ち上がるように私は以下のスクリプトを/usr/locale/etc/rc.d/antivir.sh として利用しています。ただし、rc.subr を利用しているので、FreeBSD のportから sysutils/rc_subr をインストールしてください。
#!/bin/sh
#
# PROVIDE: AntiVir
# REQUIRE: DAEMON
# KEYWORD: FreeBSD
#
# Add the following line to /etc/rc.conf or /etc/rc.conf.local
# to enable antivir:
#
# avgated_enable="YES"
# avgated_flags="-C /usr/local/etc/antivir/avmailgate.conf
#
-A /usr/local/etc/antivir/avmailgate.acl"
# avgatefwd_enable="YES"
#
avgatefwd_flags="-C /usr/local/etc/antivir/avmailgate.conf
#
-A
/usr/local/etc/antivir/avmailgate.acl
. /usr/local/etc/rc.subr
name=avgated
rcvar=`set_rcvar`
command=/usr/local/sbin/avgated
pidfile=/var/run/antivir/avgated.pid
load_rc_config $name
run_rc_command "$1"
name=avgatefwd
rcvar=`set_rcvar`
command=/usr/local/sbin/avgatefwd
pidfile=/var/run/antivir/avgatefwd.pid
load_rc_config $name
run_rc_command "$1"
rc.subr がなくてもこんな単純なのでも一応起動できるでしょう。
#!/bin/sh
# AntiVir start
if [ -x /usr/local/sbin/avgated ]; then
/usr/local/sbin/avgated
fi
if [ -x /usr/local/sbin/avgatefwd ]; then
/usr/local/sbin/avgatefwd
fi
以上で終了です。
