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
created:

Back to top