今回は、フリーの 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 件のコメント:
コメントを投稿