2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

FreeBSD4.9R Postfix With ClamAntiVirus + AmavisNewのインスコ!

どうしても、サーバ側のSMTPのとばっ口でワームを撃退したくなる( ̄ー ̄)ニヤリッ。
MUA側では、Windows端末でウィルスバスターとかシマンテックのアンチウィルスとかで防御しがちだが。MTA側でウィルス&ワームを仕分けできたらかなり楽である。最近では、NET.SKYの亜種のワームに悩まされた。これでもかと言わんばかりに飛んでくる。SPAMのように飛んでくるワームをMTA側でスキャンしながら仕分けする。さらに、無償のClamAntiVirusを仕込んだので説明する。FreeBSDでは、良い子のportsを利用した(笑)。

仕込み環境:Toshiba NotePC MMXPentium200 FreeBSD4.9R+Postfix+SMTP AUTH


1.ClamAntiVirusのインスコ

1)portsする(いつものおまじない)

# cd /usr/ports/security/clamav
# make install clean

ここでは、clamデーモンclamdとウィルス定義ファイル更新モジュールfreshclamがインスコされる。

2)必要ディレクトリの作成

◆ 必要なグループとユーザが作られているか確認。

# more /etc/passwd
省略
clamav:*:106:106:Clam Antivirus:/nonexistent:/sbin/nologin

◆ pidディレクトリを作成する。

# mkdir /var/run/clamav
# chown clamav:clamav /var/run/clamav

3)confファイルの設定

ほとんど、デフォルトでOK以下の記述だけ訂正。

# vi /usr/local/etc/clamd.conf
LocalSocket /var/run/clamav/clamd.sock

4)起動のための設定

rc.confスクリプトにenableの設定をする。

# vi rc.conf
省略
clamav_clamd_enable=”YES”
clamav_freshclam_enable=”YES”
省略

5)起動する

clamdから起動する。

# /usr/local/etc/rc.d/clamav-clamd.sh start
502 ?? Is 0:00.04 /usr/local/sbin/clamd

freshclamを起動する。

# /usr/local/etc/rc.d/clamav-freshclam.sh
523 ?? Is 0:00.10 /usr/local/bin/freshclam –pid=/var/run/clamav/freshclam.pid –daemon -notify=/usr/local/etc/clamd.conf –

こんな感じに起動すれば、成功!


2.Amavis-Newのインスコ

1)portsする

# cd /usr/ports/security/amavisd-new
# make install clean

2)グループとユーザが作られているか確認する

# more /etc/passwd
省略
vscan:*:8003:8002:Scanning Virus Account:/var/amavis:/bin/sh

こうなっていればOK。

補足:俺が思うに、clamavのグループには、vscanユーザ。 vscanのグループには、clamavユーザをそれぞれ追加しておくと良いと思う(/etc/groupファイルをいじる)。何かと両者協調しあいながら動くので。

3)confファイルを作る

# cd /usr/local/etc
# cp amavisd.conf-dist amavisd.conf

4)confファイルの設定

ほとんど設定されてるけど、これだけは確認。間違っていたら訂正、無ければ追加する。このファイルは元々パーミッション555になっているため、書込可能にしてから編集して、元の555に必ず戻しておくこと。さもなくば、エラーがでるよ。

# vi amavisd.conf

# @bypass_virus_checks_maps = (1); # uncomment to DISABLE anti-virus code
@bypass_spam_checks_maps = (1); # uncomment to DISABLE anti-spam code  ←俺の場合、amavisでanti spamは使わないのでDISABLEにする。
$mydomain = ‘ドメイン名’;
$forward_method = ‘smtp:[127.0.0.1]:10025’;
$notify_method = $forward_method;
$log_level = 0;
$log_recip_templ = undef; # disable by-recipient level-0 log entries
$DO_SYSLOG = 1;                                         ←syslogでlogを収集する。
$SYSLOG_LEVEL = ‘mail.info’;                                 ←logはmail.infoレベルでmaillogで収集。
# $LOGFILE=”/var/log/amavis/amavis.log”;
$hdr_encoding = “iso-2022-jp”;
$bdy_encoding = “iso-2022-jp”;

### http://www.clamav.net/
[‘ClamAV-clamd’,
\&ask_daemon, [“CONTSCAN {}\n”, “/var/run/clamav/clamd.sock“],      ←濃い青色のパスに気を付けること。デフォルトでは/var/run/clamav/clamdになっていると思う。
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],                         ←primary scanner setting

注:logは、syslogで吐くように設定する。

5)servicesにportを追加する

# vi /etc/services
省略
amavisd 10024/tcp
smtp-amavis 10025/tcp
省略

6)ディレクトリを追加する

専用のtmpディレクトリを追加する。

# mkdir /var/amavis/tmp
# chown vscan:vscan /var/amavis/tmp
# mkdir /var/amavis/db
# chown vscan:vscan /var/amavis/db

7)alert aliasesの追加

# vi /etc/aliases
省略
virusalert: root
spamalert: root
省略

# newaliases

8)postfixへの設定

◆ main.cfへの設定

# cd /usr/local/etc/postfix
# vi main.cf
省略
content_filter = smtp-amavis:[127.0.0.1]:10024

◆ master.cfへの設定

# vi 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

注 :-oの前には必ずTABを入れること。

9)rc.confスクリプトへのenable設定

# vi /etc/rc.conf
省略
amavisd_enable=”YES”
amavis_milter_enable=”YES”
省略

10)デバッグ

amavisにはデバッグモードがあり、エラーチェックできるようになっている。

# su – vscan -c ‘/usr/local/sbin/amavisd -c /usr/local/etc/amavisd.conf’

これでエラーがでたら、その旨エラーが無くなるまで不具合をつぶしていく。

11)ローテーションログnewsyslog.confへの設定

ログローテーションさせる。

# vi /etc/newsyslog.conf

logfilename  [owner:group]   mode   count   size   when   flags   [/pid_file]   [sig_num]

省略

/var/log/clamav/clamd.log clamav:clamav 600 7 100 * Z /var/run/clamav/clam
d.pid
/var/log/clamav/freshclam.log clamav:clamav 644 7 100 * Z /var/run/clamav/fres
hclam.pid

省略

# newsyslog

注:気になるのだが、amavis.logの切り分けをするときpidにシグナルを与えると、もしかするとamavisdが落ちてしまうかもしれない。そういうときは、切り分けをしてもamavisdにシグナルを与えないようにした方が無難かもしれない。なぜかというと、このamavisd野郎はプロセスが起動すると自分の子供(チャイルドプロセス)を2匹産み落とすようだ。この子供は親がリセットしても本人は知らん顔でそのまま居座ってるので親はビックリして落ちちゃうようだ(笑)。うそです。というより、これは俺の想像だがチャイルドプロセスにはシグナルが当たらないため、master(親)が死ぬのではないかと思ってる。したがって、俺としてはamavisのログはsyslogで行うことをお勧めする。

12)起動

clamdを含めて起動する。起動の順番があるので間違えないこと(既に、ClamAVが立ち上がってるならば、いったん停止させて改めて起動する)。

bash-2.05b# /usr/local/etc/rc.d/clamav-clamd.sh start
bash-2.05b# /usr/local/etc/rc.d/amavisd.sh start
bash-2.05b# /usr/local/etc/rc.d/clamav-freshclam.sh start

この順番で起動する。プロセスの確認。

bash-2.05b# ps axw | grep clamd
502 ?? Ss 0:00.04 /usr/local/sbin/clamd
bash-2.05b# ps axw | grep freshclam
523 ?? Is 0:00.10 /usr/local/bin/freshclam –pid=/var/run/clamav/freshclam.pid –daemon -notify=/usr/local/etc/clamav.conf –
bash-2.05b# ps axw | grep amavisd
510 ?? Ss 0:28.08 amavisd (master) (perl)
526 ?? I 0:28.50 amavisd (ch4-avail) (perl)
527 ?? IW 0:00.00 amavisd (ch2-avail) (perl)

こんな感じになっていればOK!

13)amavisdが効いてるかどうかの確認

◆ テストウィルスを使う
http://www.eicar.org/anti_virus_test_file.htm
ここで、使っても感染しないテストウィルスを使ってテストしてみる。

◆ ヘッダー情報
X-Virus-Scanned: by amavisd-new at hogehoge.net
X-UIDL: H”A!!j-c”!Jog!!9LV!!

例えば、送受信ヘッダー情報がこんな風になっている。

◆ ウィルスメールが来たときは
/var/virusmailsディレクトリに、

bash-2.05b# ls -al /var/virusmails
total 6
drwxr-x— 2 vscan vscan 512 Oct 24 13:47 .
drwxr-xr-x 26 root wheel 512 Oct 23 17:04 ..
-rw-r—– 1 vscan vscan 1462 Oct 24 13:47 virus-20041024-134707-00526-05

こんな具合に分別される。内容は、

bash-2.05b# more virus-20041024-134707-00526-05
Return-Path:
Delivered-To: virus-quarantine
X-Envelope-To:
X-Envelope-From:
X-Quarantine-id:
Received: from michi.morashita.com (sub2.morashita.com [222.xxx.xxx.180])
by ns.hogehoge.net (Postfix) with ESMTP id ABC2EB2DD1
for ; Sun, 24 Oct 2004 13:47:01 +0900 (JST)
Received: from localhost (localhost [127.0.0.1])
by michi.morashita.com (Postfix) with ESMTP id 424F311BCEC
for ; Sun, 24 Oct 2004 13:47:00 +0900 (JST)
Received: from michi.morashita.com (localhost [127.0.0.1])
by localhost (AvMailGate-2.0.1.16) id 10769-29276431;
Sun, 24 Oct 2004 13:46:59 +0900
Received: from [192.168.0.105] (comp.morashita.com [192.168.0.105])
by michi.morashita.com (Postfix) with SMTP id 1218B11BCEC
for ; Sun, 24 Oct 2004 13:46:59 +0900 (JST)
Date: Sun, 24 Oct 2004 13:46:59 +0900
From: =?ISO-2022-JP?B?GyRCOS1MbkY7QTEbKEI=?=
To: hoge@hogehoge.net
Subject: virus
Message-Id: <20041024134611.A24C.UNKO@morashita.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=”ISO-2022-JP”
Content-Transfer-Encoding: 7bit
X-Mailer: Becky! ver. 2.11.02 [ja]
X-AntiVirus: checked by AntiVir MailGate (version: 2.0.1.16; AVE: 6.28.0.7; VDF: 6.28.0.34; hos
t: michi.kozupon.com)
X-Amavis-Alert: INFECTED, message contains virus: Eicar-Test-Signature

このような感じ。

以上

コメント