2009/09/19

AntiVirus Scanner を導入

さて、予告通り、AntiVirus Scanner の導入です。

今回は、フリーの Clam AntiVirus Scanner (ClamAV) を採用しました。
Postfix との橋渡しには、AMaViS を使います。
AMaViS には、amavis, amavis-perl, amavisd-new, amavisd-ng と種類があるのですが、amavisd-new しかサポートもメンテもしてません、って書いてあるので、amavisd-new を使います。
と言って調べたら、FreeBSD の ports には amavisd-new しかないのでした。
でも、2004 年から更新止まってる感じね。

さて、そんなわけで、インストールするのは、
security/clamav
security/amavisd-new
です。

amavisd-new は、依存で山ほど port が入ります。
SpamAssassin も入るんだよね。。。orz
でも、使いません。
# 二重チェックしてもいいけど、バカっぽい

さて、まずは ClamAV の設定。
が、ほとんどデフォルトのままで問題ないです。
ログの設定をちょこっといじったくらい。

まぁ、ログは詳しく見たいし、時間も欲しいよね、ってことで。

LogFileMaxSize 2M
LogTime yes
LogVerbose yes


さて、次は AMaViS の設定です。

今回、オプションを指定しないでインストールしたので、vscan ユーザ/グループでインストールされちゃいました。
vscan は、McAfee VirusScan らしいです。
が、そんな物使いません。
今回使用するのは ClamAV なので、それを使うように設定します。
ClamAV のデーモンを使うためには、
AMaViS が ClamAV のユーザで動くか、
ClamAV が AMaViS のグループに属して、かつ、AllowSupplementaryGroups しないといけないみたいです。
どうせ ClamAV しか使わないので、AMaViS を ClamAV ユーザ/グループで動かします。
インストール時に作成された amavisd のディレクトリが、軒並み vscan:vscan なので、これを clamav:clamav に変更します。
変更の必要があったのは、
/var/amavis
/var/virusmails
もう一個くらいあった気がするけど、どれだっけ。。。
ちなみに amavisd-new のインストール時に
AMAVISUSER=clamav AMAVISGROUP=clamav
しておけば、良きに計らってくれたらしいです。

さて。
設定の変更点を挙げていきましょう。

今回は SpamAssassin を使った spam チェックはしないので、

@bypass_spam_checks_maps  = (1);  # controls running of anti-spam code

を有効にします。

ユーザの設定も変えておきます (オプション付きでインストールしたら要らないはず)

$daemon_user  = 'clamav';     # (no default;  customary: vscan or amavis), -u
$daemon_group = 'clamav';     # (no default;  customary: vscan or amavis), -g

ドメイン設定を自ドメインに。

$mydomain = 'example.com';   # a convenient default for other settings

ネットワークの設定も変えましょう。

@mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0::]/10
                  10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 );

チェックに引っ掛かった場合の動作もカスタムを。

$final_virus_destiny      = D_DISCARD;
$final_banned_destiny     = D_BOUNCE;
$final_spam_destiny       = D_PASS;
$final_bad_header_destiny = D_PASS;
$bad_header_quarantine_method = undef;

ウィルスメールだったら、破棄 (VirusAlert 監視ユーザにコピーが行きます)
配送不可は送信元に送り返し。
spam は配送許可 (今回は作動しない)
壊れたヘッダを持つメールも配送許可。
にしてみました。
個人的には、ウィルスメールも配送させたいんですが、家族は訳も分からず exe とかクリックしちゃうと思うので、泣く泣く削除。
VirusAlert に飛んでくるメール見てニヤニヤすることにします。

$banned_filename_re = new_RE(

という項目を全部消さないと、添付ファイルが軒並み送れなくなります。
デフォルトだと、exe, dll, pif, scr, rpm, cpio, tar, application/x-msdownload, application/x-msdos-program, application/hta, vbs, bat, cmd, com, cpl あたりが送れません。
ウィルスだったら送らない、んじゃなくて、拡張子/suffix がそれだったら送らせない、と言う酷い設定。
全解除です。

そして、ClamAV との連携部分がコメントアウトされているので、これを有効にします。

# ### http://www.clamav.net/
 ['ClamAV-clamd',
   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
   qr/\bOK$/m, qr/\bFOUND$/m,
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
# # NOTE: run clamd under the same user as amavisd, or run it under its own
# #   uid such as clamav, add user clamav to the amavis group, and then add
# #   AllowSupplementaryGroups to clamd.conf;
# # NOTE: match socket name (LocalSocket) in clamav.conf to the socket name in
# #   this entry; when running chrooted one may prefer socket "$MYHOME/clamd".

# ### http://www.clamav.net/ and CPAN  (memory-hungry! clamd is preferred)
# # note that Mail::ClamAV requires perl to be build with threading!
# ['Mail::ClamAV', \&ask_clamav, "*", [0], [1], qr/^INFECTED: (.+)/m ],

ソケット部分は、デフォルトが /var/run/clamav/clamd になっているので、ClamAV の設定に合わせます。
/var/run/clamav/clamd.sock に修正。

これで完了です。


次に、Postfix の設定も変えます。

まず、main.cf.

content_filter = smtp-amavis:[127.0.0.1]:10024

を追加します。
これだけです。

次に、master.cf.
以下を追加します。

smtp-amavis unix -      -       n       -       2       smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookup=yes
127.0.0.1:10025 inet n  -       n       -       -       smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

判定返りを待つ部分が、ガチガチの設定になってますが、こんなもんでしょう。


さて、rc.conf の設定です。

ClamAV を有効に。

#-- Clam AntiVirus Scanner Settings --
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"

clamav_freshclam というのは、ClamAV のデータベースを最新に保ってくれるデーモンです。
有効にしましょう。

さて、次に AMaViS の有効化。

#-- AMaViSd-new Settings --
amavisd_enable="YES"

出来たら、順次起動しましょう。

/usr/local/etc/rc.d/clamav_clamd start
/usr/local/etc/rc.d/clamav_freshclam start
/usr/local/etc/rc.d/amavisd start
/usr/local/etc/rc.d/postfix restart

これで完成です。

が。
AMaViS が、初回起動だけエラーを吐きました。

(!!)TROUBLE in child_init_hook: BDB no dbS: Lock table is out of available
locker entries, . at (eval 97) line 27.
(!)_DIE: Suicide in child_init_hook: BDB no dbS: Lock table is out of
available locker entries, . at (eval 97) line 27.

こんな感じ。
メールが一切送受信できなくなって焦りました。

一回全部止めて、起動し直したら問題なくなったんだよね。。。
BerkeleyDB のエラーらしいんだけど、何だったんだろう。。。
海外では、このエラーが報告されてて、BerkeleyDB をアップデートしろとか書いてあったんだよね。
なんか、これ謎みたいで、
$enable_db = 0;
にしたら起動した。
とか、そのあと $enable_db = 1; にしても問題なくなった、とか。
まぁ、動いてるから、気にしないことにしよう。

さて、なにかメールを送ってみましょう。

X-Virus-Scanned: amavisd-new at example.com

みたいなヘッダがあれば、OK です。

次に、実際にウィルスメールを送ってみましょう。
と言っても、1701 cascade くらいしか持っていないので。
ウィルスメールを送るサービスを利用します。

http://www.securesystems.co.jp/eicar.shtml
http://www.eicar.org/anti_virus_test_file.htm

これで、送ったアドレスにはメールが届かず、VirusAlert アカウントにメールのコピーが届けば完璧です。


無事動いたので、メールサーバの設定は終わりっ!



さて、タイムリーなことに、これを設定していたときに freebsd-stable ML に amavisd-new port の苦情が上がりました。
曰く、「port を upgrade したら、動かなくなった! 調べてみたら、amavisd.conf をデフォルトに上書きされちゃってた! バックアップしてたから実被害はなかったけど、ユーザがエディットしたコンフィグを消す port なんて見たことないから驚いた。 このバグ、どこに文句言えばいい?」
まぁ、「port maintainer に言え」 と言う至極真っ当な回答が返ってましたが。
なるほど、upgrade したら、設定ファイルを上書きされてしまうわけだな。
ちょっと覚えておかないといけませんね。

0 件のコメント:

コメントを投稿