※旧スパムメール対策1 ※旧スパムメール対策2 [インストール環境] » vine linux 4.2 » postfix-2.4.7-2vl5 » bsfilter-1.0.16-0vl1 » db4-4.2.52-6vl6 » db4-devel-4.2.52-6vl6 » DB_File.pm(perl) ※ すべてapt-get、rpmを構築してインストールしています。 ※ postfixにはsleepパッチを適用しています。 ※ postfixはMaildir方式を採用します。 ※ postfixのインストールはpostfix + cyrus-sasl(pam)でsmtp認証(Vine4.2)をご覧下さい。 ※ 基本的な考え方はtaRgreyを元にしています。 ※ お約束ですが”自己責任”で行ってください。 [運用ポリシー] » 非スパムメールが誤判定により拒否された場合でも自動救済できるようにする。 » 配送されたメールがスパムと判定された場合はそのメールを隔離する。 » 隔離されたスパムメールの中に非スパムメールが混在していないか確認できるようにする。 » 隔離されたスパムメールを容易に削除できるようにする。 » 国内クライアントからの要求は制限をあまり厳しくしない。 » 海外クライアントからの要求は制限を厳しくする。 [本スパムメール対策の主な流れ] 1. クライアントの逆引きFQDNに動的IP要素が含まれているor逆引きできないクライアントのみを対象とする。 2. 1のクライアントをCIDR_TABLEを使い国内or海外を区別する。 3. 2で区別した国内クライアントは1度要求を拒否した後、5分以上120分以内に再送されてきた要求のみを許可する。 4. 3で許可した要求は35秒間配送を遅延させる。 5. 2で区別した海外クライアントは1度要求を拒否した後、10分以上120分以内に2度再送されてきた要求のみを許可する。 6. 5で許可した要求は125秒間配送を遅延させる。 7. 要求を許可したメールをDNSBL、URLBL、ベイジアンスパムフィルタで検査してスパムメールと判定した場合は隔離する。 ■ グレイリスティングを行うスクリプトの設置 ※このスクリプトはクライアントのIPとエンベロープFROM、TOをキーにした情報をDB_Fileを使って記録します。 > cd /usr/local/bin/ > wget http://cmf.ohtanz.com/download/receivegrey.txt > mv receivegrey.txt receivegrey > chmod 755 receivegrey > vi receivegrey ---------------------------------------------------------------------------------------------------------------------------------- my $SYSLOG_SOCKTYPE = 'unix'; #1 my $SYSLOG_FACILITY = 'mail'; #2 my $SYSLOG_OPTIONS = 'pid'; #3 my $SYSLOG_IDENT = 'postfix/policy-service'; #4 my $RESULT_NG = '450 In order to receive mail, please try again later'; #5 my $RESULT_OK = 'DUNNO'; #6 ---------------------------------------------------------------------------------------------------------------------------------- 1. my $SYSLOG_SOCKTYPE = 'unix'; デバッグ用(RedHat、debian系はunix/solarisはstream)。 2. my $SYSLOG_FACILITY = 'mail'; デバッグ用(固定値) 3. $SYSLOG_OPTIONS = 'pid'; デバッグ用(固定値) 4. $SYSLOG_IDENT = 'postfix/policy-service'; デバッグ用(固定値) 5. $RESULT_NG = '450 In order to receive mail, please try again later'; 要求を拒否した際のメッセージ。 6. $RESULT_OK = 'DUNNO'; 要求の許可方法(DUNNO/OK) ■ CIDR_TABLE自動生成(更新)スクリプトの設置 > cd /usr/local/bin/ > wget http://cmf.ohtanz.com/download/getApnicCidr.txt > mv getApnicCidr.txt getApnicCidr.pl > chmod 755 getApnicCidr.pl > vi getApnicCidr.pl ---------------------------------------------------------------------------------------------------------------------------------- my $CIDR_TABLE = '/etc/postfix/check_client_country'; ---------------------------------------------------------------------------------------------------------------------------------- ※ 上記はCIDR_TABLEファイルのPATH。 ※ このスクリプトは日本国内のIPアドレスを収集しCIDR_TABLEを生成します。 ● 設置が完了したら手動で実行して下さい。 > /usr/local/bin/getApnicCidr.pl ● cronに追加して1日1回自動更新するようにします。 ------------------------------------------------------------------------------------------------------------------------------- 0 5 * * * /usr/local/bin/getApnicCidr.pl ------------------------------------------------------------------------------------------------------------------------------- ※ 毎朝5時に実行 ■ main.cfの設定 > vi /etc/postfix/main.cf ---------------------------------------------------------------------------------------------------------------------------------- disable_vrfy_command = yes #1 allow_min_user = yes #2 smtpd_sasl_auth_enable = yes #3 smtpd_sasl_security_options = noanonymous #4 broken_sasl_auth_clients = yes #5 non_fqdn_reject_code = 450 #6 127.0.0.1:10027_time_limit = 3600 #7 127.0.0.1:10028_time_limit = 3600 #8 smtpd_restriction_classes = #9 check_smtp_auth #10 check_dynamic_client #11 check_client_jp #12 check_client_na #13 check_smtp_auth = #14 permit_sasl_authenticated #15 check_dynamic_client = #16 check_client_access cidr:/etc/postfix/check_client_country #17 check_client_na #18 check_client_jp = #19 check_policy_service inet:10027 #20 sleep 35 #21 permit #22 check_client_na = #23 check_policy_service inet:10028 #24 sleep 125 #25 smtpd_recipient_restrictions = #26 permit_mynetworks #27 check_client_access cidr:/etc/postfix/check_smtp_auth #28 reject_unauth_destination #29 reject_unlisted_recipient #30 check_client_access regexp:/etc/postfix/check_special_client #31 check_sender_access regexp:/etc/postfix/check_special_sender #32 reject_non_fqdn_sender #33 reject_unverified_sender #34 check_client_access regexp:/etc/postfix/check_dynamic_client #35 ---------------------------------------------------------------------------------------------------------------------------------- 1. disable_vrfy_command = yes VEFYコマンドを禁止 2. allow_min_user = yes ハイフンで始まるメールアドレスを許可 3. smtpd_sasl_auth_enable = yes smtp認証用 4. smtpd_sasl_security_options = noanonymous smtp認証用 5. broken_sasl_auth_clients = yes smtp認証用 6. non_fqdn_reject_code = 450 reject_non_fqdn_senderで拒否した際のリターンコード 7. 127.0.0.1:10027_time_limit = 3600 グレイリスティングを行うスクリプト(receivegrey)の時間制限(要求元クライアントが国内の場合) 8. 127.0.0.1:10028_time_limit = 3600 グレイリスティングを行うスクリプト(receivegrey)の時間制限(要求元クライアントが海外の場合) 9. smtpd_restriction_classes = postfix制限クラスの設定 10. check_smtp_auth check_smtp_authファイルから呼び出されるpostfix制限クラスの定義(smtp認証用) 11.check_dynamic_client check_dynamic_clientファイルから呼び出されるpostfix制限クラスの定義 12.check_client_jp check_client_countryファイルから呼び出されるpostfix制限クラスの定義 13.check_client_na check_dynamic_clientから呼び出されるpostfix制限クラスの定義 14. check_smtp_auth = check_smtp_authファイルから呼び出されるpostfix制限クラス(smtp認証用) 15. permit_sasl_authenticated smtp認証をパスした要求は許可 16.check_dynamic_client = check_dynamic_clientファイルから呼び出されるpostfix制限クラス 17.check_client_access cidr:/etc/postfix/check_client_country check_dynamic_clientファイルにより動的IP要素が含まれているor逆引きできないクライアントと 判断されたクライアントの国内or海外を検査 ※ check_client_countryファイルの中身(getApnicCidr.plにより自動生成) ------------------------------------------------------------------------------------------------------------------------------- # LastUpdate: Sat Jul 19 05:00:00 2008 # [Japan Network] 58.0.0.0/15 check_client_jp 58.3.0.0/17 check_client_jp 58.3.128.0/17 check_client_jp 58.4.0.0/15 check_client_jp 58.12.0.0/15 check_client_jp 58.65.32.0/19 check_client_jp 58.70.0.0/16 check_client_jp 58.80.0.0/15 check_client_jp 58.84.0.0/18 check_client_jp ・ ・ ・ ------------------------------------------------------------------------------------------------------------------------------- 18.check_client_na check_client_countryファイルにてクライアントが国内と判定されなかった場合に呼び出すpostfix制限クラス 19.check_client_jp = check_client_countryファイルにてクライアントが国内と判定された場合に実施されるpostfix制限クラス 20.check_policy_service inet:10027 グレイリスティングを行うスクリプト(receivegrey)にて検査(国内)を実施 21.sleep 35 グレイリスティングを行うスクリプト(receivegrey)の検査(国内)をパスした要求を35秒間停滞 22.permit グレイリスティングを行うスクリプト(receivegrey)の検査(国内)、35秒間の停滞をパスした要求を許可 23.check_client_na = check_client_countryファイルにてクライアントが国内と判定されなかった場合に実施されるpostfix制限クラス 24.check_policy_service inet:10028 グレイリスティングを行うスクリプト(receivegrey)にて検査(海外)を実施 25.sleep 125 グレイリスティングを行うスクリプト(receivegrey)の検査(海外)をパスした要求を125秒間停滞 26.smtpd_recipient_restrictions = RCPT TOコマンド時の制限 27.permit_mynetworks 自ネットワークからの要求は許可 28.check_client_access cidr:/etc/postfix/check_smtp_auth smtp認証を許可するIP ※ check_smtp_authファイルの中身(編集後はpostmap /etc/postfix/check_smtp_authを実施) ------------------------------------------------------------------------------------------------------------------------------- 192.168.120.0/24 check_smtp_auth 127.0.0.1/32 check_smtp_auth ------------------------------------------------------------------------------------------------------------------------------- 29.reject_unauth_destination 自ネットワーク以外への要求は拒否 30.reject_unlisted_recipient 宛先不明なアドレスへの要求は拒否 31.check_client_access regexp:/etc/postfix/check_special_client IP、ホスト名によるホワイトリストorブラックリスト ※ check_special_clientファイルの中身(手動設定) ------------------------------------------------------------------------------------------------------------------------------- /^192\.168\.100\.123$/ 450 you are judged spam /example\.com$/ 450 you are judged spam /example\.jp$/ OK ・ ・ ・ ------------------------------------------------------------------------------------------------------------------------------- 32.check_sender_access regexp:/etc/postfix/check_special_sender エンベロープFROMによるホワイトリストorブラックリスト ※ check_special_senderファイルの中身(手動設定) ------------------------------------------------------------------------------------------------------------------------------- /.*@example\.com$/ 450 you are judged spam /.*@example\.jp$/ OK ・ ・ ・ ------------------------------------------------------------------------------------------------------------------------------- 33.reject_non_fqdn_sender エンベロープFROMがFQDN形式ではない場合は要求を拒否 34.reject_unverified_sender エンベロープFROMがバウンスしたり配送先に到達できない場合は要求を拒否 35.check_client_access regexp:/etc/postfix/check_dynamic_client クライアントの逆引きFQDNに動的IP要素が含まれているor逆引きできないクライアントの判定 ※ グレイリスティングを行うスクリプト(receivegrey)により自動救済されるので多少荒っぽい設定にしてあります。 ※ check_dynamic_clientファイルの中身 ------------------------------------------------------------------------------------------------------------------------------- if !/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/ #1 /^unknown$/ check_dynamic_client #2 /^[^.]*[0-9][^a-z0-9]+[0-9][^.]*/ check_dynamic_client #3 /.*[0-9]{4,}[^.]*\..+\.[^j][a-z]+$/ check_dynamic_client #4 /^[^.]*[0-9]{5,}/ check_dynamic_client #5 /.*(broad|dynamic|dhcp|dial|ppp|flets|ftth|dsl|pool).*\.[^.]+\.[a-z]+$/ check_dynamic_client #6 /.*(broad|dynamic|dhcp|dial|ppp|flets|ftth|dsl|pool|cable|catv|proxy|vps).*\.[^.]+\.[^j][a-z]+$/ check_dynamic_client #7 /^[^.]+\.[^.]*[0-9][^a-z0-9]+[0-9][^.]*/ check_dynamic_client #8 /^[^.]*[0-9]{3,}[a-z]{3,}[^.]*\.[^.]+\.[^.]+\.[^j]+/ check_dynamic_client #9 /^[pcsx][0-9]{2,}[^.0-9]+/ check_dynamic_client #10 /^(gw|fw)-[^.]*/ check_dynamic_client #11 /[^.]*[0-9]+[a-z]+[0-9]+[^.]*\..+\.[^j][a-z]+$/ check_dynamic_client #12 !/\.(jp|com|net)$/ check_dynamic_client #13 endif #14 ------------------------------------------------------------------------------------------------------------------------------- 1. if !/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/ IPアドレス以外の場合に2行目以降を実施 2. /^unknown$/ 逆引きできないクライアントの場合はcheck_dynamic_clientの検査を実施 3. /^[^.]*[0-9][^a-z0-9]+[0-9][^.]*/ 逆引きFQDNの最下位に英数字以外で2つに区切られた数字が含まれる場合はcheck_dynamic_clientの検査を実施 4. /.*[0-9]{4,}[^.]*\..+\.[^j][a-z]+$/ 逆引きFQDNの3番目以降に4桁以上の連続した数字を含みtldがj以外で始まる場合はcheck_dynamic_clientの検査を実施 5. /^[^.]*[0-9]{5,}/ 逆引きFQDNの最下位に5桁以上の連続した数字を含む場合はcheck_dynamic_clientの検査を実施 6. /.*(broad|dynamic|dhcp|dial|ppp|flets|ftth|dsl|pool).*\.[^.]+\.[a-z]+$/ 逆引きFQDNの3番目以降にbroad、dynamic、dhcp、dial、ppp、flets、ftth、dsl、poolを含む場合はcheck_dynamic_client の検査を実施 7. /.*(broad|dynamic|dhcp|dial|ppp|flets|ftth|dsl|pool|cable|catv|proxy|vps).*\.[^.]+\.[^j][a-z]+$/ 逆引きFQDNの3番目以降にbroad、dynamic、dhcp、dial、ppp、flets、ftth、dsl、pool、cable、catv、proxy、vpsを含みtld がj以外で始まる場合はcheck_dynamic_clientの検査を実施 8. /^[^.]+\.[^.]*[0-9][^a-z0-9]+[0-9][^.]*/ 逆引きFQDNの最下位から2番目に英数字以外で2つ以上に区切られた数字が含まれる場合はcheck_dynamic_clientの検査を実施 9. /^[^.]*[0-9]{3,}[a-z]{3,}[^.]*\.[^.]+\.[^.]+\.[^j]+/ 逆引きFQDNの最下位が英字で2つに区切られた連続した3桁以上数字を含み最下位から4番目がj以外の文字で始まる場合は check_dynamic_clientの検査を実施 10./^[pcsx][0-9]{2,}[^.0-9]+/ 逆引きFQDNの最下位の先頭がp、c、s、xで始まりドット、数字以外の文字列で終わる連続した2桁以上の数字が含まれる場合は check_dynamic_clientの検査を実施 11./^(gw|fw)-[^.]*/ 逆引きFQDNの最下位の先頭がgw、fwで始まる場合はcheck_dynamic_clientの検査を実施 12./[^.]*[0-9]+[a-z]+[0-9]+[^.]*\..+\.[^j][a-z]+$/ 逆引きFQDNの3番目以降に連続した英字で2つに区切られた連続した数字を含みtldがj以外で始まる場合はcheck_dynamic_client の検査を実施 13.!/\.(jp|com|net)$/ tldがjp、com、net以外の場合はcheck_dynamic_clientの検査を実施 14.endif if文の終了宣言 ■ master.cfの設定 > vi /etc/postfix/master.cf ------------------------------------------------------------------------------------------------------------------------------- 127.0.0.1:10027 inet n n n - 16 spawn user=nobody argv=/usr/local/bin/receivegrey --DEBUG=0 --DBFILE=/tmp/receivegrey-jp.db --TYPE=1 --COUNT=1 --BEGIN=5 --END=120 127.0.0.1:10028 inet n n n - 16 spawn user=nobody argv=/usr/local/bin/receivegrey --DEBUG=0 --DBFILE=/tmp/receivegrey-na.db --TYPE=1 --COUNT=2 --BEGIN=10 --END=120 ------------------------------------------------------------------------------------------------------------------------------- 1. 127.0.0.1:10027 inet n n n - 16 spawn グレイリスティングを行うスクリプト(receivegrey)の設定(国内クライアント用) ※16は同時起動可能数 2. 127.0.0.1:10028 inet n n n - 16 spawn グレイリスティングを行うスクリプト(receivegrey)の設定(海外クライアント用) ※16は同時起動可能数 3. user=nobody receivegreyの実行ユーザー 2. argv=/usr/local/bin/receivegrey receivegreyまでのPATH 3. --DEBUG=0 詳細ログ(デバッグ)を出力する場合は1、しない場合は0を指定 4. --DBFILE=/tmp/receivegrey-jp.db クライアント情報を記録するファイルのPATH(nobody権限で作成できるディレクトリ配下を指定) 5. --TYPE=1 1度許可した要求を--ENDで指定した時間の間許可する場合は0、しない場合は1を指定 6. --COUNT=1 許可するまでの再送要求数 7. --BEGIN=5 最初の要求から再送要求を受け付けるまでの開始時間 8. --END=120 最初の要求から再送要求を受け付けるまでの終了時間 ■ ベイジアンスパムフィルタ(bsfilter)の導入 > apt-get install bsfilter mecab mecab-ipadic ruby-mecab > mkdir /var/lib/bsfilter > chmod 755 /var/lib/bsfilter > vi /etc/bsfilter.conf ------------------------------------------------------------------------------------------------------------------------------- homedir /var/lib/bsfilter #1 jtokenizer mecab #2 insert-revision #3 insert-flag #4 insert-probability #5 auto-update #6 pipe #7 ------------------------------------------------------------------------------------------------------------------------------- 1. homedir /var/lib/bsfilter 作業ディレクトリ 2. jtokenizer mecab 形態要素解析エンジンMeCabを使う 3. insert-revision メールのヘッダに「X-Spam-Revision」を追加 4. insert-flag メールのヘッダに「X-Spam-Flag」を追加 5. insert-probability メールのヘッダに「X-Spam-Probability」を追加 6. auto-update cleanかspamか判定した後、その結果をtokenデータベースに追加し確率データベースも更新 7. pipe 標準出力する(procmail用) ● http://www.db.is.kyushu-u.ac.jp/computer/solarisserver/bs.spamからスパムなトークンを入手 > wget http://www.db.is.kyushu-u.ac.jp/computer/solarisserver/bs.spam ● スパムなトークンを学習させる > bsfilter --config-file /etc/bsfilter.conf --import-spam ./bs.spam ● クリーンなメールを学習させる(普段使っているメーラーがmbox形式だったのでそれを全部入れてみました) > bsfilter --config-file /etc/bsfilter.conf --mbox --jtokenizer mecab --add-clean ./***.mbx ● sdbmを更新 > bsfilter --update --config-file /etc/bsfilter.conf ● オーナーの関係でデータベースが読み込みできなかったのでパーミッションを変更 > chmod 666 /var/lib/bsfilter/* ● スパムと認識されたクリーンなメールを学習させるスクリプトを作成 > vi /usr/local/bin/bsfilter-clean.sh ------------------------------------------------------------------------------------------------------------------------------- #!/bin/sh FILE=$1 if [ -n "$1" ]; then bsfilter --homedir /var/lib/bsfilter --sub-spam --jtokenizer mecab --add-clean --update ${FILE} chmod 666 /var/lib/bsfilter/* fi ------------------------------------------------------------------------------------------------------------------------------- > chmod 700 /usr/local/bin/bsfilter-clean.sh ※ 使い方:/usr/local/bin/bsfilter-clean.sh クリーンなメール ● クリーンと認識されたスパムメールを学習させるスクリプトを作成 > vi /usr/local/bin/bsfilter-spam.sh ------------------------------------------------------------------------------------------------------------------------------- #!/bin/sh FILE=$1 if [ -n "$1" ]; then bsfilter --homedir /var/lib/bsfilter --sub-clean --jtokenizer mecab --add-spam --update ${FILE} chmod 666 /var/lib/bsfilter/* fi ------------------------------------------------------------------------------------------------------------------------------- > chmod 700 /usr/local/bin/bsfilter-spam.sh ※ 使い方:/usr/local/bin/bsfilter-spam.sh スパムメール ■ DNSBL、URLBLチェックスクリプト(procdnsbl)の設置 ※ procdnsblはDNSBL、URLBLに該当した場合にメールヘッダーにX-DnsBL、X-UrlBLを付与します。 ※ 利用するDNSBL、URLBLを変更したい場合はprocdnsbl内の15行目の@DNS_BL、20行目の@URL_BLを変更して下さい。 > wget http://cmf.ohtanz.com/download/procdnsbl.txt > mv procdnsbl.txt /usr/local/bin/procdnsbl > chmod 755 /usr/local/bin/procdnsbl ■ procmailのインストール > apt-get install procmail ● procmail用ログファイルの作成 > touch /var/log/procmail > chmod 666 /var/log/procmail ● procmail用ログファイルをlogrotateに追加 > vi /etc/logrotate.d/procmail ------------------------------------------------------------------------------------------------------------------------------- /var/log/procmail { create 666 root root } ------------------------------------------------------------------------------------------------------------------------------- ● スパムと判定されたメールを格納するspamディレクトリの作成 > mkdir ~hoge/Maildir/spam > chown hoge:hoge ~hoge/Maildir/spam > chmod 700 ~hoge/Maildir/spam ● spamディレクトリに入ったメールを1つのメールにまとめるスクリプトの作成 > vi /usr/local/bin/spamsend.sh ------------------------------------------------------------------------------------------------------------------------------- #!/bin/sh export LANG=en PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin CONF=/usr/local/etc/spamsend.txt HOST=`hostname` MAILDATE=`date "+%a, %d %b %Y %H:%M:%S +0900"` LIST=`cat $CONF` for u in $LIST do COUNT=`ls /home/$u/Maildir/spam/ | wc -l` if [ $COUNT -ne 0 ]; then FILEDATE=`date '+%s'` MAIL=/home/$u/Maildir/new/$FILEDATE.$$.$HOST echo "Date: $MAILDATE" >> $MAIL echo "From: postmaster@example.com" >> $MAIL echo "To: $u@example.com" >> $MAIL echo "Subject: SPAM MAIL LIST" >> $MAIL echo "MIME-Version: 1.0" >> $MAIL echo "Content-Type: text/plain; charset=iso-2022-jp" >> $MAIL echo "Content-Transfer-Encoding: 7bit" >> $MAIL echo "" >> $MAIL echo "[[[[[SPAM MAIL LIST]]]]]" >> $MAIL echo "" >> $MAIL nkf -mj /home/$u/Maildir/spam/* >> $MAIL chown $u:$u $MAIL chmod 600 $MAIL rm -f /home/$u/Maildir/spam/* fi done ------------------------------------------------------------------------------------------------------------------------------- ※From、Toのメールアドレスは適宜修正して下さい。 > chmod 700 /usr/local/bin/spamsend.sh ● spamsend.sh対象のアカウントを管理するファイルの作成 > vi /usr/local/etc/spamsend.txt ------------------------------------------------------------------------------------------------------------------------------- hoge hogehoge ------------------------------------------------------------------------------------------------------------------------------- ● spamsend.shをcronに追加 > vi crontab -e ------------------------------------------------------------------------------------------------------------------------------- 0 0-23/4 * * * /usr/local/bin/spamsend.sh ------------------------------------------------------------------------------------------------------------------------------- ※ 4時間おきに実行 ● .forwardファイルの作成 > vi ~hoge/.forward ------------------------------------------------------------------------------------------------------------------------------- "|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #~/Maildir/" ------------------------------------------------------------------------------------------------------------------------------- ● .procmailrcファイルの作成 > vi ~hoge/.procmailrc ------------------------------------------------------------------------------------------------------------------------------- PATH=/bin:/usr/bin:/usr/local/bin LOGFILE=/var/log/procmail MAILDIR=${HOME}/Maildir DEFAULT=${MAILDIR} :0 fw | /usr/local/bin/procdnsbl :0 * ^X-(Dns|Url)BL: * ${MAILDIR}/spam/. :0 fw | /usr/bin/bsfilter --config-file /etc/bsfilter.conf :0 * ^X-Spam-Probability: *(1|0\.[89]) ${MAILDIR}/spam/. :0 ${MAILDIR}/ ------------------------------------------------------------------------------------------------------------------------------- ■ 本スパムメール対策の統計● REJECTの各項目 1. reject_unlisted_recipientで拒否した数 2. reject_unverified_senderで拒否した数 3. reject_non_fqdn_senderで拒否した数 4. reject_unauth_destinationで拒否した数 5. グレイリスティングで拒否した数 6. sleepで諦めた数 7. ブラックリストで拒否した数 8. procmail(bsfilter+DNSBL+URLBL)でspam判定された数 ● OKは配送されたすべてのメール数 ● TRUE JUDGEはOKの中で配送されたスパムの数 ● FALSE JUDGEは拒否した非スパムの数 ● REJECT RATE(postfix)はpostfixのみの拒否率 ● REJECT RATE(ALL)はpostfix、procmailをあわせた拒否率 ● 1番下のREJECT RATEは設定毎の拒否率 -----2008年06月から2010年05月までの統計----- ● postfixのみの排除率は99.73% ● postfix+procmail(bsfilter+DNSBL+URLBL)を合わせた排除率は99.99% ● すり抜けたスパムメールは22通 ● 非スパムメールがスパムメール判定された数は0通 ------------------------------------------ ※ 2008年06月から2010年05月までの統計 ※ 2010年05月分の統計 ※ 2010年04月分の統計 ※ 2010年03月分の統計 ※ 2010年02月分の統計 ※ 2010年01月分の統計 ※ 2009年12月分の統計 ※ 2009年11月分の統計 ※ 2009年10月分の統計 ※ 2009年09月分の統計 ※ 2009年08月分の統計 ※ 2009年07月分の統計 ※ 2009年06月分の統計 ※ 2009年05月分の統計 ※ 2009年04月分の統計 ※ 2009年03月分の統計 ※ 2009年02月分の統計 ※ 2009年01月分の統計 ※ 2008年12月分の統計 ※ 2008年11月分の統計 ※ 2008年10月分の統計 ※ 2008年9月分の統計 ※ 2008年8月分の統計 ※ 2008年7月分の統計 ※ 2008年6月分の統計 ■ 統計を取る為のスクリプト
● RejectMail.zipのダウンロード > wget http://cmf.ohtanz.com/download/RejectMail.zip ● RejectMail.zipを解凍してGrepMaillog.pl、index.cgiを編集 > cd /hoge/RejectMail > vi GrepMaillog.pl ------------------------------------------------------------------------------------------------------------------------------- my $VIEWDIR = '/hoge/RejectMail'; #1 my $MAILLOG = '/var/log/maillog'; #2 my $PROCMAIL = '/var/log/procmail'; #3 my $WWWUSER = 'www'; #4 ------------------------------------------------------------------------------------------------------------------------------- 1. WWWアクセス可能な作業ディレクトリ 2. maillogのPATH 3. procmailログのPATH 4. WWW上からCGI実行可能なユーザー > chmod 755 GrepMaillog.pl > vi index.cgi ------------------------------------------------------------------------------------------------------------------------------- my $VIEW_DIR = '/hoge/RejectMail'; #1 my $VIEW_URI = 'http://www.example.com/RejectMail'; #2 my $MY_SCR = 'index.cgi'; #3 my %REJECT_MESS = ( #4 '1' => 'Recipient address rejected: User unknown in local recipient table', '2' => 'Sender address rejected: undeliverable address', '3' => 'Sender address rejected: unverified address', '4' => 'Sender address rejected: Domain not found', '5' => 'Sender address rejected: need fully-qualified address', '6' => 'Relay access denied', '7' => 'Sender address rejected: you are judged spam', '8' => 'Client host rejected: rejected: you are judged spam', '9' => 'Recipient address rejected: User unknown in virtual alias table', '10' => 'Client host rejected: In order to receive mail, please try again later', '11' => 'lost connection', ); ------------------------------------------------------------------------------------------------------------------------------- 1. WWWアクセス可能な作業ディレクトリ 2. 作業ディレクトリのURI 3. このスクリプトのファイル名 4. REJECTメッセージの一覧(REJECTメッセージを追加する場合はここに追加して下さい) > chmod 755 index.cgi ● cronにGrepMaillog.plを追加 ------------------------------------------------------------------------------------------------------------------------------- 15,30,45,59 * * * * /hoge/RejectMail/GrepMaillog.pl ------------------------------------------------------------------------------------------------------------------------------- ※ 毎時15分、30分、45分、59分に実行 以上ですべての説明は終わりです。 最後に現在のmain.cfを上げておきますので参考までに。