FreeBSD に Clam AntiVirus を導入する
Clam AntiVirus(ClamAV)は GPL に従って配布されるオープンソースのア ンチウイルスソフトウエアです。メールサーバに導入することを主な目的にしているため Postfix にも簡単に導入できます。
ClamAV のインストール
いつものように ports からインストールします。
# cd /usr/ports/security/clamav # make install clean
/usr/local/etc/rc.d に起動スクリプトがインストールされますがそのままでは利用できません。利用できるようにするために /etc/rc.conf に次の内容を追加します。
clamav_clamd_enable="YES" clamav_freshclam_enable="YES"
ClamAV を起動
# /usr/local/etc/rc.d/clamav-clamd.sh start # /usr/local/etc/rc.d/clamav-freshclam.sh start
clamd は ClamAV 本体、freshclam はウイルスパターン更新のためのプログラム(デーモン)です。
UPDATE Database URL の変更
/usr/local/etc/clam/freshclam.conf
DatabaseMirror db.jp.clamav.net
動作ユーザの変更
amavisdとの連携のためclamdをamavisdと同じユーザーで動作するように変更これを行わないと以下のwarnningが出てclamdが使われずclamscanが呼び出されてしまい動作が遅くなります
WARN: all primary virus scanners failed, considering backups
/usr/local/etc/clamd.conf
User clamav
/usr/local/etc/freshclam.conf
DatabaseOwner clamav
アクセス権の設定
chown -R clamav:clamav /var/run/clamav chown -R clamav:clamav /var/db/clamav chown -R clamav:clamav /var/log/clamav
amavisd-new のインストール
ClamAV のウイルススキャン機能を Postfix から利用するためには、MTA との橋渡しをするプログラムが必要になります。
今回は Postfix でよく利用される amavisd-new を導入します。 amavisd-milter もありますがこちらはsendmailで利用されるものなので今回はinstallしません。
# cd /usr/ports/security/amavisd-new # make AMAVIS_NOMILTER=yes install clean
amavisd-new は依存するものが多いので結構時間がかかります。
インストールが終了したあとは、/etc/rc.conf に次の行を追加します。
amavisd_enable="YES"
spamassassin の設定
spamassassin はみなさんご存知のspamよけのプログラムです。 amavisd-new を ports からインストールすると spamassassin も一緒にインストールされます。
ここでは設定ファイルのコピーだけしておきます。
# cd /usr/local/etc/mail/spamassassin/ # cp local.cf.sample local.cf
/etc/rc.conf に次の行を追加します。
- spamd_enable="YES"
- spamd_flags="-c -H /var/spool/spamd"
spamd_flags のoptionの意味は c ~/.spamassassin/を自動的に作成 H spamd のホームディレクトリの指定 spamdにメールを渡すためにprocmailを利用します。
portsからmail/procmailをインストールします procmailがインストールできたらコイツにmailをわたすので~/に.forwardを以下の内容で作成します
.forward
"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #username_here"
procmail 設定ファイルを作成
procmailでspamdに渡す設定を.procmailに行います因みにspamと判定されるとメールヘッダに X-Spam-Status: Yes が追加されます。
~/.procmailrc
ここにはメールの振り分けの設定を書き込みます必要に応じて書き換えて下さい。
SHELL=/bin/sh PATH=/bin:/usr/bin:/usr/local/bin:$HOME/bin MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/new LOGFILE=$MAILDIR/from ADDRESS=your_name@example.com SENDMAIL=/usr/sbin/sendmail NGWORD=$HOME/.ngwords :0fw: spamassassin.lock | /usr/local/bin/spamc :0 * ^X-Spam-Status: Yes $MAILDIR/.spam/ :0 * ^To:.*postfix-jp-list $MAILDIR/.Postfix/ :0 * ^From: ASPX* $MAILDIR/.ASP-NET/ :0 * ^From: VBNET* $MAILDIR/.VB-NET/ :0 * ^To:.*ASPX $MAILDIR/.ASP-NET/ :0 * ^Subject: Cron * $MAILDIR/.CRON/ :0 * ^To:.*FreeBSD-users-jp $MAILDIR/.FreeBSD/ :0 * ^To:.*FreeBSD-users-jp@jp.FreeBSD.org $MAILDIR/.FreeBSD/ :0 * ^From:.*mag2 $MAILDIR/.Mag/ :0 $DEFAULT
spamassasinが機能してるとメールヘッダに以下のように入ります
X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on moe.example.com X-Spam-Level: X-Spam-Status: No, score=-1.4 required=5.0 tests=ALL_TRUSTED autolearn=ham version=3.1.3
ユーザ毎の設定ファイル ~/.spamassassin/user_prefs を有効にするには
/usr/local/etc/mail/spamassassin/local.cf に以下を追加
allow_user_rules 1
これにより~/.spamassassin/user_prefs でユーザ毎にspamassassinを制御できるようになる
ホワイトリストにより特定のドメインからのメールは必ず受け取る設定空メール登録プログラムなどを利用する場合、本文件名が空だとspam判定される恐れがあるため特定のドメインを全て許可する設定は以下のようになります
/usr/local/etc/mail/spamassassin/local.cf
whitelist_from *@docomo.ne.jp *@ezweb.ne.jp *@softbank.ne.jp
amavisd-new の設定
amavisd-new の設定ファイルは /usr/local/etc/amavisd.conf です。同じ ディレクトリに amavisd.conf-sample があり多くのパラメータが載っています。 amavisd.conf はそのダイジェストといったところですが、それでもかなり巨大なファイルです。しかし、設定するところはほとんどありません。
/usr/local/etc/amavisd.conf
$mydomain = 'example.com'; $myhostname = 'moe.example.com'; $notify_method = 'smtp:127.0.0.1:10025'; $sa_kill_level_deflt = 8.5; # triggers spam evasive actions #特定ドメインを緩くする 'docomo.ne.jp' => -9.0, 'ezweb.ne.jp' => -9.0, 'vodafone.ne.jp' => -9.0, #Clamav-clamdを利用するように以下のコメント部分を外します # ### http://www.clamav.net/ ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"], qr/\bOK$/, qr/\bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
amavisd-new を起動する
# /usr/local/etc/rc.d/amavisd.sh start
Postfix の設定
ClamAV、amavisd-new と必要なものがそろったので、最後に Postfix からこれらのソフトウエアを使うように設定します。
/usr/local/etc/postfix/main.cf に次の記述を追加します。
content_filter = smtp-amavis:[127.0.0.1]:10024
次に /usr/local/etc/postfix/master.cf に次の記述を追加します。
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookups=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_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 # -o strict_rfc821_envelopes=yes
smtp-amavis と 127.0.0.1 から始まる行は先頭にスペースなど余計なものを入れず、 -o から始まる行は必ず先頭にスペースを入れてください。
ウイルス検知通知先メールアドレス
amavisd-new がウイルスを検知した場合、amavisd.conf の $virus_adminで指定されたメールアドレスにウイルス検知メールを送信します。こちらを変更するよりも、aliases を変更する方が一般的なので、Postfix のエイリアスデータベースを編集します。
# vi /etc/aliases virusalert: root
設定がすみましたら newaliases コマンドでデータベースを更新します。
# newaliases
Postfix の再起動
最後に新しい設定ファイルを読み込むために Postfix を再起動します。
# /usr/local/etc/rc.d/postfix restart
ウイルススキャンを通過したメールヘッダに以下が入ります
X-Virus-Scanned: amavisd-new at example.com