今までは qmailのwrapperにqmail-scannerを使っていたけど、
Perlのアップグレードをした際に調子が悪くなったりしたし、
Perlスクリプトのwrapperってオーバーヘッドが気になって、
なんか他にいいのはないかなと探してみたら、
simscanというのがあるらしい。
早速自宅の環境で試すことにした。
参考にしたのはこちら。
BSD にくびったけ - (qmail)simscan
にぐるの日々 | qmail with simscan on FreeBSD
しかし日本語の情報が少ないなー。
普通はqmail-scanner使うもんな。
まずはsimscanユーザ・グループを追加
# groupadd simscan
# useradd simscan -g simscan -s /bin/false
spam や感染したメールを保管するディレクトリを作成する
# mkdir /var/spool/quarantine
# chown simscan.simscan /var/spool/quarantine
tarを解凍後 configure
$ ./configure --enable-custom-smtp-reject=y --enable-per-domain=y --enable-attach=y --enable-spam=y --enable-spam-hits=20 --enable-quarantinedir=/var/spool/quarantine --enable-received=y --enable-clamavdb-path=/usr/local/share/clamav/
$ make
# make install
ドメインごとにSPAMチェック・ウィルスチェックをするための設定をする。
# vi /var/qmail/control/simcontrol
soph.jp:clam=yes,spam=yes,spam_hits=20.1,attach=.com
:clam=yes,spam=no,attach=.com
configureオプションに
--enable-custom-smtp-reject=y
を設定したので、qmailにパッチを当てる。
そのままパッチをあてると失敗してしまったので、
失敗した部分だけ手パッチする。
qmail.c.rejが出来ているので参照。
--- 14,43 ----
{
int pim[2];
int pie[2];
+ int pierr[2];if (pipe(pim) == -1) return -1;
if (pipe(pie) == -1) { close(pim[0]); close(pim[1]); return -1; }
+ if (pipe(pierr) == -1) {
+ close(pim[0]); close(pim[1]);
+ close(pie[0]); close(pie[1]);
+ close(pierr[0]); close(pierr[1]);
+ return -1;
+ }switch(qq->pid = vfork()) {
case -1:
+ close(pierr[0]); close(pierr[1]);
close(pim[0]); close(pim[1]);
close(pie[0]); close(pie[1]);
return -1;
case 0:
close(pim[1]);
close(pie[1]);
+ close(pierr[0]); /* we want to receive data */
if (fd_move(0,pim[0]) == -1) _exit(120);
if (fd_move(1,pie[0]) == -1) _exit(120);
+ if (fd_move(4,pierr[1]) == -1) _exit(120);
if (chdir(auto_qmail) == -1) _exit(61);
execv(*binqqargs,binqqargs);
_exit(120);
qmailを再コンパイル後インストール
SPAM・ウィルス定義情報DBの作成
crontabで更新の設定もする。
# /var/qmail/bin/simscanmk -g
# crontab -e
以下の行を追加
#simscan dbrefresh
9 * * * * /var/qmail/bin/simscanmk -g > /dev/null 2>&1
インストール後のテスト
$ QMAILQUEUE=/var/qmail/bin/simscan SIMSCAN_DEBUG=2 echo "To: foo@example.jp(テスト送信先のメールアドレス)" | /var/qmail/bin/qmail-inject
テストメールの送信先にメールが届けばテスト完了
vpopmailの設定を変更
# vi /home/vpopmail/etc/tcp.smtp
127.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/simscan"
:allow,QMAILQUEUE="/var/qmail/bin/simscan"
# tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
あとは、qmailの起動スクリプトの該当部分を以下のように変更
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
↓
QMAILQUEUE="/var/qmail/bin/simscan"
メールのヘッダーに以下のようなものがあれば正常に動いているのが確認できる。
Received: by simscan 1.1.0 ppid: 12780, pid: 12783, t: 0.0834s scanners: attach: 1.3.1 clamav: 0.90.2/m:43/d:3251 spam: 3.2.0
ヘッダに出てるが、メールのスキャンがものすごく早くなった。
qmail-scannerでは1通あたり1〜2秒かかっていたが、
simscanに変えたら0.1秒弱ぐらいでスキャンが終わっている。
それに、変えてからメールの送信も早くなったような気がする。
まだ事例が少ないのでトラブったときが不安だけど、
とりあえずこのまま使ってみようと思う。
この記事に対するコメント