IndexPage>WebMail>AntiSpam>LinuxTips
さあ、これでメールサーバーも動き出した。アカウントも作成したし、システムもすべてうまくいってるな。「これで俺の仕事も完成だ」~ だが、待てよ。「このメールサーバーはなかなかいいよ。しかし、ウィルスとSPAMを芸撃 退するにはどうするんだい?」うーん。
うん、答えは比較的簡単さ。qmail-scannerがspamとウィルスから守ってくれるんだよ。インストールはこんな風にやろう:
wget http://optusnet.dl.sourceforge.net/sourceforge/razor/razor-agents-2.77.tar.bz2
RazorをインストールするとSpamAssassinが自動的に呼び出してくれることになっている。Razorはspamを実に的確に見分けることができるので、CPU負荷が多少増すことになってもインストールする価値は多いにある。
razorに必要なモジュールを先だってインストールしておこう。
# perl -MCPAN -e shell
(CPANのダウンロード先(地域と国とサーバー)のセッティングもしておこう)
cpanに必要なモジュールを自動的にインストールするよう要求。
> o conf prerequisites_policy follow
まずは、CPANモジュールをスムーズにするために
> install LWP MD5
razorに必要なモジュールをインストール。
> install Net::Ping Net::DNS Time::HiRes Digest::SHA1 Getopt::Long File::Copy Digest::Nilsimsa URI::Escape > quit
準備が整ったところでrazorのインストール。適当なディレクトリで、
# bunzip2 razor-agents-2.77.tar.bz2 # tar xf razor-agents-2.77.tar # chown -R root.root razor-agents-2.77 # cd razor-agents-2.77 # perl Makefile.PL # make # make test # make install # cd ..
これでRazorが/usr/binにインストールされた。これらのうちSpamAssassinは"razor-check"を使うことになる。
最後に、次のようなコマンドを打ってRazor用設定ファイルを作成する(結果は/etc/razor/に書き出される)。
# razor-admin -d -create -home=/etc/razor
高負荷サーバーならrazor設定ファイルを編集してデバッグレベルを落としておこう。
# vi /etc/razor/razor-agent.conf debuglevel=1
DCCはサーバー負荷が重いなど問題があるので当面インストールしないことにした。スキップしてください。
DCCはRazorによく似ており、spamをより正確に検出できるメリットがある。少しCPUを食うがインストールする価値があると思う。
ソースのダウンロード
# cd /usr/local/src # wget http://www.rhyolite.com/anti-spam/dcc/source/dcc-dccproc-1.2.56.tar.Z
コンパイルとインストール
# tar xzf dcc-dccproc-1.2.56.tar.Z # chown -R root.root dcc-dccproc-1.2.56 # cd dcc-dccproc-1.2.56 # ./configure # make # make install
DCC設定ファイルの作成
cdcc 'info'
dccifdサービスの起動
spamassassinを効率的に動かすには各メールごとにdccprocを起動するよりdccデーモンを使った方がよい。
#vi /var/dcc/dcc_conf #DCCIFD_ENABLE=off DCCIFD_ENABLE=on # cp -f ./misc/rcDCC /etc/rc.d/init.d/dcc # chmod 755 /etc/rc.d/init.d/dcc # chkconfig --add dcc # /etc/rc.d/init.d/dcc start
DCC関係のプログラムは/usr/local/binにインストールされている。
cd ../
SpamAssassinの役割:
SpamAssassinはメールをスキャンするとき、ルールセットにしたがって点数をつける。もし点数が指定の範囲を超えたらspamと判断されることになる。
spamassassinの必要モジュールをインストールする。
# perl -MCPAN -e shell
cpanが必要モジュールを自動インストールできるように:
> o conf prerequisites_policy follow
Spamassassinに必要なモジュールがすべてインストールできたかの確認:
> install HTML::Parser DB_File Net::DNS BerkeleyDB Net::SMTP Mail::SPF::Query IP::Country::Fast # ここまで必須 > install ExtUtils::MakeMaker File::Spec Pod::Usage Archive::Tar IO::Zlib > exit
# wget http://apache.ausgamers.com/spamassassin/source/Mail-SpamAssassin-3.2.5.tar.gz # tar xzf Mail-SpamAssassin-3.2.5.tar.gz # chown -R root.root Mail-SpamAssassin-3.2.5 # cd Mail-SpamAssassin-3.2.5 # perl Makefile.PL # make # make install
結果は以下のようなファイルが作成される。
/usr/bin/spamassassin <- SpamAssassinのcommandラインバージョン /usr/bin/spamc <- SpamAssassinのデーモンクライアント /usr/bin/spamd <- SpamAssassinのサーバーデーモン /usr/share/spamassassin/ <- SpamAssasinのlogicないしfilter用ファイルを置くところ /etc/mail/spamassassin/local.cf <- サイト全体の設定ファイル
インストール結果がうまくいったかどうかのテストをしてみよう。
下の二つのスクリプトを実行した結果を見て、SpamAssassinがヘッダに追加した情報を確認してみよう。特に、"X-Spam-Status: "を見て前者ならNo、後者ならYesのコメントがついてればOK。
# spamassassin -t < sample-nonspam.txt # spamassassin -t < sample-spam.txt
セキュリティのため
# groupadd spamd # useradd -g spamd spamd
続いてspamd設定ファイルの作成
# vi /etc/sysconfig/spamassassin # ヒント : # デバッグの場合は (結果は/var/log/maillog) : # SPAMDOPTIONS="-x -u spamd -H /home/spamd -d -D" # 注意)サーバーに負荷がかかるので、このままにしないで置くこと # 通常時は : SPAMDOPTIONS="-x -u spamd -H /home/spamd -d"
# cp spamd/redhat-rc-script.sh /etc/rc.d/init.d/spamd # chmod 700 /etc/rc.d/init.d/spamd # cd .. # chkconfig --add spamd
# vi /etc/mail/spamassassin/local.cf
# 感度の設定。デフォルトは5。これ以上のスコアのものはspamと判定。 # 一定点数以上のものを隔離するか否かはqmail-scannerで決定する。 required_score 5
# spamと判定された時タイトルに付けられるタグの定義 rewrite_header subject [SPAM] # spam分析結果をメール本文でなくヘッダに付ける report_safe 0
# auto-whitelistingを使う use_auto_whitelist 1 # ホワイトリスト whitelist_from jhaar@users.sourceforge.net # これは黙って追記しておく whitelist_from *@ok_domain.com
# 日本語以外は認めない(option) ok_languages ja # 日本からしか認めない(option) ok_locales ja score UNWANTED_LANGUAGE_BODY 5.0
# ベージアンフィルタを使う use_bayes 1 bayes_auto_learn 1 bayes_path /home/spamd/.spamassassin/bayes # ベイジアン登録基準(辛めに設置が無難) bayes_auto_learn_threshold_nonspam 0.1 bayes_auto_learn_threshold_spam 12 # ベイジアンにスルーさせるヘッダ bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status
# ベージアンフィルタ関係のDBをlocalhostで動かし、かつNSFを使わない場合、次をセットすれば処理が速い lock_method flock
# Spamassassinは全てのメールを対象に次のようなユーティリティを使うのがデフォルトになってるが、 # (詳しくは http://www.spamassassin.org/dist/INSTALL で) # CPU負荷になるものを避けるために当分インストールせずに使用不可にしておく。 #use_pyzor 0 -> /etc/mail/spamassassin/v310.preに変更 # razor2チェックを使用 # use_razor2 1 -> /etc/mail/spamassassin/v310.preに変更 # dccチェックの有効化: # 先に有効にするとしたが、その後実際に使用してみたところいくつか問題があるので今は使わないようにする。 #use_dcc 0 -> /etc/mail/spamassassin/v310.preに変更 #dcc_home /var/dcc
# SpamAssassinのRBLチェック : # 既にqmailのrblsmpdでRBLフィルタを用いたが、SpamAssassinのRBLチェックで別のRBL情報の使用を薦める。 # もっと正確にSPAMタグを添付するためだ。 skip_rbl_checks 0 # 3秒以内にレスポンスがない場合はチェックをスキップする。 rbl_timeout 3 # 参考サイト:RBL.JP利用方法:http://www.rbl.jp/allrbl.htmlは有用な情報。取り込んでおくのが吉。
# 特定のネットワークアドレスやメールサーバーのあるネットワークを制御できる。 # つまり、信頼できるネットのメールサーバーにRBLチェックをかける必要はないからだ。 # 下の例はcクラスの123.123.123.0/24をSpamassassinのRBLチェックから除外している。 trusted_networks 127.0.0.1 trusted_networks 123.123.123.
もしその他の設定項目を知りたければ次のコマンドで :
perldoc Mail::SpamAssassin::Conf
いや、こっちの方が読みやすいかな?
http://spamassassin.apache.org/full/3.1.x/dist/doc/Mail_SpamAssassin_Conf.html
オーケー, これでSpamAssassin関係はすべてインストール完了だ。
3.1.0からplugin方式に変更されてます
razor機能と言語フィルタを有効にするために
vi /etc/mail/spamassassin/v310.pre # 下記行のコメントを外す loadplugin Mail::SpamAssassin::Plugin::Razor2 # razor2を有効に loadplugin Mail::SpamAssassin::Plugin::TextCat # ok_languageを有効に
注:ver3から[SPAM]タグの指定方法が変更になってます。バージョンアップの方は要注意です。
注:ベージアンdbが大幅に変更されてたりするので、2からのバージョンアップは必ずUPGRADEを読んでください。
注:SpamAssassinがspamと判断したメールのタイトルには [SPAM] というタグが貼られるので、ユーザーがSPAM専用フォルダに放り込む方法を案内しておいた方がいいだろう。
# /etc/rc.d/init.d/spamd start
起動確認:
# ps axf
起動成功:
9721 ? S 0:01 /usr/bin/spamd -x -u spamd -H /home/spamd -d
(この時点ではまだspamフィルタは有効になっていない。qmail-scannerをインストール、起動してからだ)
# tail -40 /var/log/maillog
http://www.clamav.net
Clamアンチウィルスは二つのモードで動作する。
コマンドラインスキャナー版、またはクライアント/デーモンのペア版。
コマンドラインスキャナーとして動作させるには"clamscan"を使う。しかし、ウィルススキャナーが全てのメールを繰り返しチェックするような複雑なソフトではcpuやdiskスペースを浪費する恐れがある。
このような問題に答えられるのがClamd(Clamをデーモンとして動かす)で、バックグラウンドで動かすことができるようになる。さらに小さなclamdscanクライアントを走らせれば起動も動作も素早くできるようになる。
クライアントがデーモンに指示を出し、デーモンがスキャンとその結果をクライアントに返すやり方だ。 (SpamAssassinでも同じように、spamassassinのコマンドライン版と spamc/spamdのクライアント/デーモンペアの仕組みがある)
負荷の高い環境では言うまでもなくクライアント/デーモンペアの方が有利だ。さっそくインストールしてみよう:
# groupadd clamav # useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav # cd /usr/local/src # wget http://downloads.sourceforge.net/clamav/clamav-0.95.1.tar.gz?modtime=1215467158&big_mirror=0 # tar xzf clamav-0.95.1.tar.gz # chown -R root.root clamav-0.95.1 # cd clamav-0.95.1 # ./configure --enable-experimental --disable-zlib-vcheck # make uninstall (旧バージョンからのアップの場合) # make # make install
# vi /usr/local/etc/clamd.conf
#example # この行は必ずコメントしておく、または削除 以下の行のコメントをはずす。 LogSyslog yes FixStaleSocket yes MaxThreads 10 User qscand # <- clamav /tmp/clamd.socket # <- /tmp/clamd
v0.91ではunixソケットが変更になってます
追加)デーモンclamdscanを走らせるにはこのユーザをqscandに変更(Ryosukeさんのアドバイス)。したがって後述のユーザーqscandをここで作っておいてください。
# vi /usr/local/etc/freshclam.conf
exampleの行をコメント、または削除。 DNSDatabaseInfo current.cvd.clamav.net DatabaseMirror db.jp.clamav.net DatabaseMirror database.clamav.net LogSyslog yes DatabaseOwner clamav NotifyClamd /usr/local/etc/clamd.conf
# /usr/local/bin/freshclam -v
# touch /var/log/freshclam.log # chmod 600 /var/log/freshclam.log # chown clamav /var/log/freshclam.log # crontab -e 以下を追加 0 * * * * /usr/local/bin/freshclam --quiet -l /var/log/freshclam.log
注:このクロン実行で次のエラーが出る場合
ERROR: Problem with internal logger. ERROR: Can't open /var/log/freshclam.log in append mode (check permissions!).
clamavのクロンに切り替える。
# crontab -u clamav -e 0 * * * * /usr/local/bin/freshclam --quiet -l /var/log/freshclam.log
# cp contrib/init/RedHat/clamd /etc/rc.d/init.d/ # chmod 744 /etc/rc.d/init.d/clamd # chkconfig --add clamd
起動:
# /etc/rc.d/init.d/clamd start
起動確認:
# ps axf
以下のようであればOK:
18144 ? S 0:00 /usr/local/sbin/clamd
# ./configure --enable-experimental --disable-zlib-vcheck # make uninstall (旧バージョンのuninstall) # rm -f /usr/local/etc/clamd.conf (confアイテムの変更あり) # make # make install # vi /usr/local/etc/clamd.conf (再設定) # /usr/local/bin/freshclam -v (Not supported data formatエラーを回避するため)
作業前に
# make uninstall # rm -f /usr/local/etc/*clam*conf
旧confファイルを削除するのは、コンフィグパラメータが変更され、オペランド入力が必須になっているため確認の意味で。
LogSyslog yes
FixStaleSocket yes
NotifyClamd /usr/local/etc/clamd.conf
どういう訳かclamav-0.90に上げたらpermissionエラーが頻発するようになった。
そこで、下記対策を順に打ってみた。
1. softlimitを上げてみる-->効果なし
2. clamavやspamassassinをアップデートした場合はqmailscannerも再コンパイルする-->効果なし
3. qmailscannerのオプションに--qs-group qscand を追加してみる-->効果なし
4. # usermod -G qsand clamav
# usermod -G clamav qscand
4項のあと10時間を経過したが再現してない。なんとなくQ-Sのstパッチが原因のような気がするので、stパッチを外してチェックした方がいいかもしれない。。。。謎
Qmail-Scannerは一種のアドオンで、qmailが特定文字をスキャンできるようになる。アンチウィルス機能に適しており、商用(またはオープンソース用)のスキャナーと一体化して使うものだ。さらに、ヘッダの特定の文字列や*.vbsなどの添付ファイルを含むメールもブロックできる。
まず、Qmail-Scannerに必要なモジュールをインストールする。
TNEF:
http://sourceforge.net/projects/tnef/
# wget http://optusnet.dl.sourceforge.net/sourceforge/tnef/tnef-1.3.4.tar.gz # tar xzf tnef-1.3.4.tar.gz # chown -R root.root tnef-1.3.4 # cd tnef-1.3.4 # ./configure # make # make install # cd ..
reforMIME (Maildropパッケージから):
http://download.sourceforge.net/courier/
# wget http://optusnet.dl.sourceforge.net/sourceforge/courier/maildrop-2.0.1.tar.bz2 # bunzip2 maildrop-2.0.1.tar.bz2 # tar xf maildrop-2.0.1.tar # chown -R root.root maildrop-2.0.1 # cd maildrop-2.0.1 # ./configure # make # make install-strip # make install-man # cd ..
1.作業ディレクトリのデフォルトが/var/spool/qmailscanから/var/spool/qscanに変更 2.plolicy/spam/virusを区別して隔離する(隔離エリアを細分化可能) 3.sa-quarantineオプションの追加 4.quarantine-attachments.txt がrenameされて quarantine-events.txt に 5.その他いっぱい
http://qmail-scanner.sourceforge.netから最新のものをダウンロード
# wget http://jaist.dl.sourceforge.net/sourceforge/qmail-scanner/qmail-scanner-2.01.tgz # tar xzf qmail-scanner-2.01.tgz # chown -R root.root qmail-scanner-2.01 # cd qmail-scanner-2.01
これより進む前にqmail-scannerのドキュメントに一通り目を通すことをお奨めする。
続いて、qmailscannerを走らせるユーザーとグループを作成:
# groupadd qscand # useradd -c "Qmail-Scanner Account" -g qscand -s /bin/false qscand
Qmail-Scannerのconfig :
# 基本は以下の通り : # - ウィルス検知した場合の通知先はvirusadmin@mydomain.com # - アンチウィルススキャンするClam AVはクライアント/サーバー型を使用 # - バーボスモードのspamc/spamdを使用 # Qmail-Scannerは"fast"モードまたは"verbose"モードで作動可 # 詳しくはQmail-ScannerのFAQページを見ること # SpamAssassinが提供する全ての情報やタグ情報を見られるという意味で、バーボスモードをお奨めする # CPUは少し喰うが幅広い情報入手が可能だ # ./configure \ --admin virusadmin \ --domain mydomain.com \ --scanners clamdscan,verbose_spamassassin \ --local-domains "mydomain.com,yourdomain.com" \ # 複数あれば,(コンマ)で続ける --notify psender,nmlvadm \ # psender:ポリシー抵触したら送信者に拒否通知 --sa-quarantine 5 \ # 5 + required_scoreの5 = 10 10点以上は隔離 --lang ja_JP.EUC \ --fix-mime yes \ --ignore-eol-check yes \ --add-dscr-hdrs yes \ --debug yes \ --log-details syslog \ --max-zip-size 50000000 \ --install
通知メールの文字化け対策:
# vi /var/qmail/bin/qmail-scanner-queue.pl
my $qmailinject = '/var/qmail/bin/qmail-inject';
↓
my $qmailinject = '/usr/bin/nkf -j |/var/qmail/bin/qmail-inject';
ns X-Qmail-Scanner-1.22 [ns108132181147017965] clamscan: corrupt or unknown ClamAV scanner error or memory/resource/perms problem - exit status 50
--scanners clamscan,verbose_spamassassin \
インストールスクリプトが示すように、次のコマンドを打ってエラーの有無を確認:
# setuidgid qmaild /var/qmail/bin/qmail-scanner-queue.pl -g
perlscannerファイルの編集:
これは特定の文字列をもったメールをブロックするために使うものだ。perlscannerは qmail-scannerのツールのひとつで、clamscanなど他のウィルススキャナーの後に実行される。これはウィルススキャナーが検出できなかった新しいタイプのウィルスを検出可能であり、一種のフェールセーフの考え方だ。perlscannerは異常なウィルス付き添付ファイルを完璧にブロックすることができる。
# vi /var/spool/qscan/quarantine-events.txt
下記行のコメントを外す
ファイルサイズ表記が変更になっています。
.vbs SIZE=-1 VBS files not allowed per Company security policy .scr SIZE=-1 SCR files not allowed per Company security policy .wsh SIZE=-1 WSH files not allowed per Company security policy .hta SIZE=-1 HTA files not allowed per Company security policy .pif SIZE=-1 PIF files not allowed per Company security policy
さらにブロック対象を拡張する場合は以下のように追記する。
.bat SIZE=-1 COMMAND.COM batch file .exe SIZE=-1 Executable binary
# setuidgid qmaild /var/qmail/bin/qmail-scanner-queue.pl -g
せっかく隔離データを保存しているのだから、データベースに登録してみる。
# sa-learn --spam /var/spool/qscan/quarantine/spam/new # sa-learn --spam /var/spool/qscan/quarantine/policy/new # sa-learn --spam /var/spool/qscan/quarantine/viruses/new
週一回くらいのペースで自動的に行うのもいいかもしれない。
# crontab -e 30 0 * * 0 /usr/bin/sa-learn --spam /var/spool/qscan/quarantine/spam/new 2>&1 > /dev/null
タイムアウトなどでSMTPセッションが落ちた場合/var/spool/qmailscanなどにファイルが残る場合がある。さらに放っておくと隔離データも肥大する。そこで/var/qmail/bin/qmail-scanner-queue.pl -z を少なくても1日1回は走らせて14日以上経過したファイルを削除することとする。
# crontab -e 以下を追加 0 1 * * * /var/qmail/bin/qmail-scanner-queue.pl -z
SPAMが集中した時の対策としてスコアが一定以上に達すると黙殺(reject/delete)したり、隔離(quarantine)させるパッチ(Qmail-Scanner-2.01st)があります。
大量のSPAMに悩まされた筆者は実際にこちらを使っていますがなかなか快適です。
ダウンロードと解説ページは http://toribio.apollinare.org/qmail-scanner/#n.4.a を読んでください。
DLリンク:
http://toribio.apollinare.org/qmail-scanner/download/q-s-2.01st-20060626.tgz
config例です:
./configure \ --admin virusadmin \ --domain mydomain.com \ --local-domains "mydomain.com" \ --lang ja_JP.EUC \ --scanners clamdscan,fast_spamassassin \ --fix-mime yes \ --admin-fromname "Antivirus MYDOMAIN" \ --add-dscr-hdrs yes \ --dscr-hdrs-text "X-Antivirus-MYDOMAIN" \ --ignore-eol-check yes \ --redundant yes \ --max-zip-size 50000000 \ --max-unpacked-files 2000 \ --virus-to-delete yes \ --sa-subject "[spam]" \ # spamassassinのつけるサブジェクトを書き換え --sa-quarantine 3.0 \ # 5+3.0=8.0以上は隔離 --sa-delete 5.0 \ # +5つまり10以上ならdelete --sa-reject yes \ --sa-alt yes \ --sa-delta 1.0 \ サブジェクにレベルを付加。5+1.0=6.0以下ならLOW、5+2=7以下ならMIDDLE、7以上はHIGH --sa-debug yes \ --sa-report yes \ # sa-alt と sa-debug がonならヘッダに X-Spam-Report を付加 --install
この例ではSPAM判断スコア(/etc/mail/spamassassin/local.cf あるいは ~spamd/.spamassassin/user_preds で決定)が、 5+3.0=8.0以上は隔離、 5+5つまり10以上はrejectがあるのでdeleteではなくreject処理。 5〜8.0にはタイトルに[spam]+レベルが付いてユーザーに届きます。
Something like spamc for SpamAssassin detected - but not correctly installed (didn't include a "X-Spam-Status" line in output). Please read Q-S FAQ if you want it - especially check that spamd daemon is running. Ignoring...
原因は、config中spamc-nice.emlに書かれたテスト用アドレスが既存のベイジアンDBによってspamと判断されたこと。
だから、Q-SがスパムフィルタとしてSAを拒んだことによる。
spamとされたアドレスをホワイトアドレスとして SpamAssassinのlocal.cfに追記すれば回避できた:whitelist_from jhaar@users.sourceforge.net
sa-rejectを有効にして sa-delete が正しく設定されてれば、sa-deleteより高いスコアのメッセージはsmtpセッションが終了する前にrejectされる。
でなければ、ただ無視されるだけである。もちろん、LOCALHOSTからのものはrejectされない。
帯域セービングになるわけではないが、少なくともこちらに代わって送信元smtpサーバーがrejectされたメッセージを処理することになる。
送信元サーバー(場合によっては送信者も)は
"554 mail server permanently rejected message (#5.3.0)"
というコードを受け取るが、qmail-1.03のqmail.cファイルを編集すれば内容をカスタマイズできる。
次の行を見つけて:
case 31: return "Dmail server permanently rejected message (#5.3.0)";
たとえば、以下のように書き換えるだけでいい(冒頭のDを削除してはいけない)
case 31: return "DWe have reasons to believe this mail is SPAM (#5.7.1)";
そして、qmailを再コンパイルする。# make clean ; make setup check ; strip /var/qmail/bin/*
Qmailサーバーは5xxコードを受け取ったらすぐにコネクション終了するが相手が他のサーバーなら10〜15秒接続したままになってる。そこでこれを回避するために553コードを送信したらすぐにセッションを切断するパッチがある。
http://toribio.apollinare.org/qmail/
わずからしい(サンプルでは7〜8%)がQSの処理を速めることが可能らしい。unix socketを用いる。
spamdの起動オプションを# vi /etc/sysconfig/spamassassin SPAMDOPTIONS="-d -x -m 5 --max-conn-per-child=5 --socketpath=/var/run/spamd -u spamd"QS設定変更
# vi /var/qmail/bin/qmail-scanner-queue.pl my $spamd_socket='';となってる部分を my $spamd_socket='/var/run/spamd';に書き換え
# /var/spool/qscan/log-report.sh /var/spool/qscan/qmail-queue.log.1.gz (このように圧縮ファイルも可)
46 HTML.Phishing.Bank-12 26 Worm.SomeFool.P 12 Worm.SomeFool.Gen-1 10 Worm.SomeFool.Q 6 Worm.SomeFool.Gen-2 1 HTML.Phishing.Bank-2 1 HTML.Phishing.Auction-2 20691 rejecting 3332 deleting 283 tagging 52 quarantining
LinuxTipsに書いた方法で、qmail-queue.logとquarantine.logをローテーションさせます。
# vi /etc/logrotate.d/qscan
/var/spool/qscan/quarantine.log {
postrotate
/usr/bin/killall -HUP clamd
endscript
}
/var/spool/qscan/qmail-queue.log {
}
# /usr/sbin/logrotate /etc/logrotate.conf
または、こんな方法でもいいでしょう。
# crontab -e 0 3 * * * mv -f /var/spool/qscan/qmail-queue.log /var/spool/qmailscan/qmail-queue.log.1 0 3 * * * mv -f /var/spool/qscan/quarantine.log /var/spool/qmailscan/quarantine.log.1
次に、qmail-smtpdがQmail-Scanner + Antivirus + SpamAssassinをサポートできるようにするためには十分な資源を与えなければならない。
# vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
# メールはQMAILQUEUEがセットされると指定のスクリプトに送られる
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" export QMAILQUEUE
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
# softlimitはウィルススキャンソフトが動作するには十分な容量(15MB)が必要
exec /usr/local/bin/softlimit -m 15000000 \
/usr/local/bin/tcpserver -v -x /home/vpopmail/etc/tcp.smtp.cdb -c 30 -R \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
... あとは省略 ...
readproctitle service errors: ...tlimit: usage: softlimit [-a allbytes] [-c corebytes] .....のエラーが出ることがあります。smtpd実行のためのメモリーが不足しているのが原因ならばリブートすれば解消できます。
これ以外に、全部のメールをチェックするのではなく、特定のIPアドレスの範囲を区別しながらウィルススキャンの可否を決めるやり方もある。(ただしpop-before-smtpの時は機能しないので気をつけてください。)
つまり、supervise/qmail-smtpd/runファイルで指定するのではなく、QMAILQUEUE環境変数の使い分けを/home/vpopmail/etc/tcp.smtpファイルでコントロールする方法である。 詳しくはQmail-Scannerホームページのセットアップ例を参照。
# vi /home/vpopmail/etc/tcp.smtp # # 127.0.0.1からはすべてパス 127.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-queue" # # 内部ローカルからはSpamAssassinを通さずQmail-Scannerのチェックのみ行う。 # (SpamAssassinはRELAYCLIENT変数がコントロール) 192.168.0.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" # # その他はすべてQmail-Scanner、SpamAssassinでチェックする :allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
続いて:
# qmailctl cdb # qmailctl reload # qmailctl restart
# contrib/test_installation.sh -doit
この結果、configで指定した、つまりvirusadmin@mydomain.com宛てに正常メール(1/4)1通と異常メール(4/4)1通、そして/var/spool/qscan/quarantine以下に隔離された2通の汚染メール(2/4と3/4)があることが確認できればすべてインストール完了。各メールのタイトルは:
Qmail-Scanner test (1/4): inoffensive message Qmail-Scanner viral test (2/4): checking perlscanner... #(perlscannerで検知) Qmail-Scanner viral test (3/4): checking non-perlscanner AV... # (CLAMで検知) [SPAM] Qmail-Scanner anti-spam test (4/4): checking SpamAssassin [if present] (There yours for FREE!) *2/4と4/4はsa-quarantine、sa-delete、sa-rejectが有効の場合virusadmin宛には送信されない
あるドメインについて異常なspam攻撃を受けてるような場合、no-accountだと言っていちいちバウンスしてられない場合がある。逆にこちらがSPAM攻撃の元になりかねないからだ。あるいは、qmailscannerの設定を変えても実現できるが、管理者宛の大量の汚染メールがあると通知メールもうるさくて仕方がない。こんな時はそれぞれ静かに消えてもらうことも必要かも知れない。
no-accountのときバウンスしない。
# vi ~vpopmail/domains/ドメイン/.qmail-default | /home/vpopmail/bin/vdelivermail '' delete
virus-adminからの通知メールを廃止(とりあえず管理者にはメールを送信させたままの格好ですが)
# vi ~vpopmail/domains/ドメイン/.qmail-virusadmin | /home/vpopmail/bin/vdelivermail '' delete
追補:
.qmail-defaultの書き換えは前述のQmail-Scanner-2.01stパッチを当てれば不要になると思います。
SpamAssassinが有効かどうか、どうやって確認できるのか:
SpamAssassinが処理する毎に/var/log/maillogにスコア、メッセージのサイズ、要した時間のログが記録されている。
全てのメールがSpamAssassinに送られるわけではない:
supervise/qmail-smtpd/runで全てのメールをQmail-Scannerを通すように設定したが、 これは全ての入・出のメールをウィルスチェックすることを意味しているのであって、Qmail-Scannerをパスした全てのメールが必ずしもSpamAssassinに送られるわけではないことに注意。
Qmail-Scannerはtcp.smtpファイルにRELAYCLIENT環境変数がセットされてないものだけをSpamAssassinに送るようになっている。この考え方には、信頼できるユーザーにはSpamAssassinをかけないようにしてシステムの負荷を減らしたいという背景がある。
もし、ローカルユーザーであってもSpamAssassinチェックをしたいのなら、tcp.smtpファイルでQS_SPAMASSASSIN="on"をセットすれば可能だ。詳しくはQmail-Scanner FAQ pageで。
ユーザー単位でSpamAssassinチェックさせる方法:
config次第である。vpopmailユーザーがSpamAssassinチェックをon/offできるインターフェースを用意し、独自の採点方法を採用すれば可能だろう。MySQLのvpopmailテーブルに項目追加すれば可能だろうだと思うので、情報入手次第お知らせするのでお待ちいただきたい。
全てのspamをSPAMまたはTRASHフォルダーに放り込むには:
pipelineの参考ページを紹介します。
http://www.pipeline.com.au/staff/mbowe/isp/send-spam-to-folder.htm
- しかし
- これはimapを使う場合のサンプルでした。pop3ユーザーには向きません。maildropとmailfilterを組み合わせて、spamcを使えば実現できそうですがお試しください。
きはらっち? (2005-08-03 21:41:14 (水))
現在 FreeBSD 4.11 にてqmail-scanner-1.25をインスト中。。
インストが完了して、「contrib/test_installation.sh -doit」を
実行すれば、問題なく4つのメールが届きます。
で、qmailのQMAIL-SMTPDのrunスクリプトに
「QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" export QMAILQUEUE」を書き込んだところ、送信の際に「"unable to exec qq"」というエラーが発生し送信が出来ません。
また外部からメールを送っても届かない状態です。
「QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" export QMAILQUEUE」を再度はずし、qmailを再起動すると、送信可能。
外部からのメールも無事に届きだします。
「/home/vpopmail/etc/tcp.smtp」に「127.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-queue"」を念のため、追加しても同じ結果。
「/etc/qmail/smtp.rules」 に作成した「:allow,QMAILQUEUE="/usr/local/bin/qmail-scanner-queue.pl"」を
記述しても同じ結果でした。
どうすればいいかご教授くださいませ
ゲスト? (2005-05-12 10:49:41 (木))
先日は、tcpserver でお世話になりました。引き続き今度はapamassassin に挑戦中です。上記で、razor をインストールし(make check も make install もうまくいきました。)、しかし# razor-client
# razor-admin -d -create -home=/etc/razor
を実行したところ、2番目のコマンドが全く終了しません。5月 12 10:45:20.767059 admin[23793]: [ 8] Checking with Razor Discovery Server 66.151.150.12 5月 12 10:45:20.767121 admin[23793]: [ 6] No port specified, using 2703 5月 12 10:45:20.767152 admin[23793]: [ 5] Connecting to 66.151.150.12 ... 5月 12 10:45:20.769749 admin[23793]: [ 3] Unable to connect to 66.151.150.12:2703; Reason: 接続を拒否されました. 5月 12 10:45:20.769810 admin[23793]: [ 5] Razor Discovery Server 66.151.150.12 is unreachable 5月 12 10:45:20.769850 admin[23793]: [ 5] Couldn't talk to discovery servers. Will force a bootstrap... 5月 12 10:45:20.769914 admin[23793]: [ 6] no discovery listfile: /etc/razor/servers.discovery.lst 5月 12 10:45:20.769949 admin[23793]: [ 5] Finding Discovery Servers via DNS in the razor2.cloudmark.com zoneが無限に続いています。どうすれば良いかどうぞお教えください。
右とん平? (2004-12-15 (水) 23:05:46)
Qmail-Scanner-1.24stでclamdを呼んでいますが、
aaa.bbb.ccc.dddだけチェックさせないとかどうすればいいのでしょうか?
↓メールのヘッダの一部
X-Antivirus-MYDOMAIN: 1.24st (Clear:RC:0(aaa.bbb.ccc.ddd):SA:0(0.6/7.0):. Processed in 13.941359 secs Process 23630)
異常に時間がかかるので、信頼できるところはチェックしたくないので。
/etc/mail/spamassassin/local.cfにwhitelist_fromやtrusted_networksに書いてもダメでした。
qmail,spamassassin,clamav,vpopmail.quickml(port:10025)を使ってます。
よろしくお願いいたします。
まいどです? (2004-11-11 (木) 23:26:15)
以前こちらを参考にさせていただいて構築をして
久しぶりに覗いてみたら最新情報にあわせてますね〜
お疲れ様です。
さて本題ですが、上記ではdccは使用しないとかかれていますが、
動かし方まで載せてありますよね
当方 dccproc1.2.58で起動させようとしたらServer-IDエラーが出てしまいちょっとあせりました。
英語苦手なんですが、マニュアルを見てidsファイルに書かれてるのをdcc_confのServ-IDだかに入れて〜ってかかれてたみたいなので
そこに書いてあった数字を入れたらとりあえずデーモンは起動したみたいなんですが、
果たしてあってるんでしょうか?(汗
本当にお世話になります? (2004-11-11 (木) 11:19:36)
qmail-inject: fatal: qq temporary problem (#4.3.0)
Bad error. qmail-inject died
と出てはまっています。
御世話になっております? (2004-11-05 (金) 17:43:19)
setgiduid qmaild /var/qmail/bin/qmail-scanner-queue.pl -g
となっていますが、/var/spool/qmailscan/関係のパーミッションで引っ掛かってしまいます。ユーザに'qscand'を指定すると通るので、「まぁええか」と悩みながら先へ進もうとする初心者がココに一人(^^;
とおりすがり? (2004-11-05 (金) 01:18:44)
/usr/local/etc/freshclam.confも「Example」と書いてある行をコメントアウトしないとワクチンをアップデートがエラーになります。
(2004-09-01 (水) 07:08:41)
# softlimitはウィルススキャンソフトが動作するには十分な容量(15000000MB)が必要
exec /usr/local/bin/softlimit -m 15000000 \
と書かれていますが、15TBも必要ですか?
Ryosuke? (2004-05-09 (日) 17:16:07)
you can use clamdscan with qmail-scanner when clamd can read files under qmail-scanner's directories.
a simple solution is running clamd as qscand user.