qmail-scanner

[ Nob's Home | qmail ]

anti-virus add-on である qmail-scannerを導入します。

Information

Install

reformime from Maildrop 0.73 or 1.1+
reformimeだけ必要だが全部installしてしまった。
rfc2045/reformimeを/usr/local/binにinsallするだけでよさそう。

2001.11.26
**** reformime ではW32/Alizの切り分けができなかったので、ripmimeに変更しています。
**** 後述するとおり ripmimeを使ってください。
2001.11.27
**** reformimeの最新版ではW32/Alizの切り分けが可能になりました。
$ wget http://download.sourceforge.net/courier/maildrop-1.3.5.tar.gz 
$ tar zxvf maildrop-1.3.5.tar.gz 
$ cd maildrop-1.3.5
$ ./configure
$ make
$ su
# make install
Time-HiRes module
perlはPerl 5.005_03+が必要
# chown root /usr/bin/suidperl
# chmod 4711 /usr/bin/suidperl
を忘れないこと。
$ wget http://www.cpan.org/modules/by-module/Time/Time-HiRes-01.20.tar.gz
$ tar zxvf Time-HiRes-01.20.tar.gz
$ cd Time-HiRes-01.20
$ perl  Makefile.PL
$ make
$ su 
# make install

qmail-1.03へのpatch
http://www.qmail.org/qmailqueue-patchをあててrecompileする。
$ wget http://www.qmail.org/qmailqueue-patch
$ cd qmail-1.03
$ patch < ../qmailqueue-patch
$ su
qmailを停止した後
# make setup
qmail-scanner
$ wget http://prdownloads.sourceforge.net/qmail-scanner/qmail-scanner-1.01.tgz
$ tar zxvf qmail-scanner-1.01.tgz 
$ cd qmail-scanner-1.01
unzipが必要なのであらかじめinstallしておいてください。
/usr/ports/archivers/unzip が利用できます。
以前、記載していたgunzipで代用するのはうまくいかないようです。
# ./configure --install
QMAILQUEUEの設定
qmail-smtpdを呼ぶ前にQMAILQUEUEを設定する
/usr/local/bin/start-qmail-smtpdで
#!/bin/sh
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export QMAILQUEUE

/usr/local/bin/tcpserver -u 7791 -g 2108 -x /etc/tcp.smtp.cdb \
                         0 smtp \
                        /usr/local/bin/pbs4q \
                        /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
としてQMAILQUEUEを設定する。
qmail-conf を使用している場合は、
# echo /var/qmail/bin/qmail-scanner-queue.pl > /service/smtpd/env/QMAILQUEUE
とします。
テスト
qmailを再度起動してから
# ./contrib/test_installation.sh -doit でテスト これでvirus入りのmailがチェックできれば成功

設定

scanningの設定

/var/spool/qmailscan/quarantine-attachments.txt にscanningの条件を設定する。

defaultの設定は以下のとおり
#######################################################
EICAR.COM               69      EICAR Test Virus
Happy99.exe             10000   Happy99 Trojan
zipped_files.exe        120495  W32/ExploreZip.worm.pak virus
ILOVEYOU                Virus-Subject:  Love Letter Virus/Trojan
#The following matches Date: headers that are over 100 chars in length
#these are impossible in the wild
.{100,}                 Virus-Date:     Date Buffer Overflow trojan
#######################################################
#".exe"の添付ファイルを拒否する場合
.exe                    0       Executable attachment too large
##     ここは TAB        ここもTAB	

を追加する。その後
# /var/qmail/bin/qmail-scanner-queue.pl -g
を実行してdatabaseを再構築する。

***** 2001.11.27

.dll    0        Windows Dynamic Link Library
.nls    0        National Language Support
を追加。

現在使用中のquarantine-attachments.txt

reformimeからripmimeへ

http://www.amavis.org/security/asa-2001-1.txt に記載されているとおり、reformimeはW32/Alizを抽出できません。
そこでMIMEの切り分けをrefirmimeからripmimeに変更します。

$ wget http://www.pldaniels.com/ripmime/ripmime-1.2.7.tar.gz
$ tar zxvf ripmime-1.2.7.tar.gz 
$ cd ripmime-1.2.7
$ make
$ su
# make install
さらに、/var/qmail/bin/qmail-scanner.plにpatchを当てます。
# cd /var/qmail/bin
# patch < qmail-scanner-ripmime.path
ripmimeに変更すると、 qmail-scanner-1.01/contrib/test_installation.sh でテストのために送られるEICAR.COMのbyte数が69ではなく70になってしまいました。

日本語化

ja_JP.EUC locale
とりあえず日本語化してみました。
qmail-scanner-locale-ja.tar.gzを qmail-scanner-1.01/locale ディレクトリに展開して
configureで--lang ja_JP.EUCを設定します。
$ cd qmail-scanner-1.01
$ wget http://www.y-min.or.jp/~nob/qmail/qmail-scanner-locale-ja.tar.gz
$ tar zxvf qmail-scanner-locale-ja.tar.gz -C locale
$ su
# ./configure --lang ja_JP.EUC --install
文字化け対策
subjectに2byte文字が含まれていると文字化けが発生するようです。
@@ -1040,7 +1041,8 @@

 sub email_sender {

-  open(SM,"|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report - $!");
+#  open(SM,"|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report - $!");
+open(SM,"|/usr/local/bin/nkf -j|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report
- $!");
   print SM "From: \"$V_FROMNAME\" <$V_FROM>\n";
   if (!&is_unreplyable_email('sender') && ¬ify_addr('sender')) {
     &debug("e_s: sending quarantine report via: $qmailinject to sender address ($returnpath)");
@@ -1121,8 +1123,8 @@

 sub email_recips {

-
-  open(SM,"|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report - $!");
+open(SM,"|/usr/local/bin/nkf -j|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report
- $!");
+#  open(SM,"|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report - $!");
   print SM "From: \"$V_FROMNAME\" <$V_FROM>\n";
   if (¬ify_addr('recips') ) {
     if (!&is_unreplyable_email('recips')) {
として nkfでJISに変換しています。

うまくいかないとき

/var/qmail/bin/qmail-scanner-queue.plを確認
permission, ownerが
-rwsr-xr-x  1 qmailq  qmail  45139 Nov 27 16:22 /var/qmail/bin/qmail-scanner-queue.pl
となっているか確認。
qmailの再起動を
"qq temporary error"などが出る場合は、qmailとqmail-smtpdを再起動してみてください。
これでもだめなら、smtpdを起動している tcpserverの起動時にsoftlimit -a 6000000を付けてください。
qmail-confの場合は /service/smtpd/env/DATALIMIT を 6000000 にしてください。

[ Nob's Home | qmail ]
nob@makioka.y-min.or.jp