![]() |
![]() |
|
●postfixのスパムメール対策● (※管理人は現在これを使用していません)
昨年の4月から「阻止率99%のスパム対策方式の研究報告」(以下S25R方式)さんを参考にしたものと、
» 非スパムメールのREJECTを限りなく0にする これらの条件を満たすべく、いろいろ調べてたどり着いたスパムメール対策が下記の方法です。
» Postfixが持つ制限機能の利用(但しあまり厳しくしない)
※「reject_rbl_client」「reject_rhsbl_sender」を使用すると、DNSBL、URLBLに該当した場合にREJECTされてしまい、
■Postfixが持つ制限機能、「S25R方式」を参考にした制限の利用
●Postfixが持つ制限機能の利用
●「S25R方式」を参考にした制限
●/etc/postfix/client_restrictionsの作成
------------------------------------------------------------------------------
# *** WHITE LIST ***
/^192\.168\.1\.2$/ OK
# *** BLACK LIST ***
#
/^219\.117\.232\.107$/ REJECT
/^59\.106\.20\.223$/ REJECT
/^124\.37\.15\.8$/ REJECT
/^ns1\.mdhfc\.com$/ REJECT
# *** GENERIC PROTECTION ***
# [rule 1]
/^[^.]*.*[0-9]{1,3}-[0-9]{1,3}.*\..+\.[a-z]/ 450 may not be mail exchanger
# [rule 2]
/^[^.]*.*[0-9]{1,3}\.[0-9]{1,3}.*\..+\.[a-z]/ 450 may not be mail exchanger
# [rule 3]
/^[^.]*.*[0-9]{4}.*\..+\.[a-z]/ 450 may not be mail exchanger
# [rule 4]
/^[^.]*.*(dhcp|dial|ppp|dsl|flets|ftth|cable).*\..+\.[a-z]/ 450 may not be mail exchanger
------------------------------------------------------------------------------
●/etc/postfix/main.cfの編集
------------------------------------------------------------------------------
smtpd_client_restrictions = #SMTPコネクション時の制限
permit_mynetworks #自ネットワークは無条件で許可
check_client_access btree:/etc/mail/dracd #POP3認証を通ったIPは許可
check_client_access regexp:/etc/postfix/client_restrictions #ルール6〜9に該当するものは拒否
reject_unlisted_recipient #宛先不明なアドレスへの配送要求は拒否
reject_unauth_destination #自ネットワーク以外への配送要求は拒否
smtpd_helo_required = yes #ルール1に該当するものは拒否(HELOコマンドを必須に)
smtpd_helo_restrictions = #HELOコマンド時の制限
permit_mynetworks #自ネットワークは無条件で許可
reject_invalid_hostname #ルール2に該当するものは拒否
permit #上記に該当しないものは許可
smtpd_sender_restrictions = #MAIL FROMコマンド時の制限
reject_unknown_sender_domain #ルール3に該当するものは拒否
reject_non_fqdn_sender #ルール4に該当するものは拒否
reject_unverified_sender #ルール5に該当するものは拒否
------------------------------------------------------------------------------
※編集が終わったらpostfix reloadを実行します。
■ベイジアンスパムフィルタ「bsfilter」の導入
●bsfilterのインストール
●作業ディレクトリの作成
●bsfilter.confの作成
------------------------------------------------------------------------------ homedir /var/lib/bsfilter #作業ディレクトリ insert-revision #メールのヘッダに「X-Spam-Revision」を追加 insert-flag #メールのヘッダに「X-Spam-Flag」を追加 insert-probability #メールのヘッダに「X-Spam-Probability」を追加 auto-update #cleanかspamか判定した後、その結果をtokenデータベースに追加し確率データベースも更新 pipe #標準出力する(procmail用) ------------------------------------------------------------------------------
●http://www.db.is.kyushu-u.ac.jp/computer/solarisserver/bs.spamからスパムメールを頂いてくる
●頂いてきたスパムメールを学習させる
●クリーンなメールを学習させる
●sdbmを更新
●オーナーの関係でデータベースが読み込みできなかったのでパーミッションを変更
●スパムと認識されたクリーンなメールを学習させるスクリプトを作成
------------------------------------------------------------------------------
#!/bin/sh
FILE=$1
if [ -n "$1" ]; then
bsfilter --homedir /var/lib/bsfilter --sub-spam --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 --add-spam --update ${FILE}
chmod 666 /var/lib/bsfilter/*
fi
------------------------------------------------------------------------------
> chmod 700 /usr/local/bin/bsfilter-spam.sh
※使い方:/usr/local/bin/bsfilter-clean.sh スパムなメール
■procmailから使用するDNSBL、URLBLチェックスクリプトの導入
> wget http://cmf.ohtanz.com/download/procdnsbl.txt
■procmailの準備
●procmail用ログファイルの作成
●procmail用ログファイルをlogrotateに追加 > vi /etc/logrotate.d/procmail
------------------------------------------------------------------------------
/var/log/procmail {
create 666 root root
}
------------------------------------------------------------------------------
●スパムと判定されたメールを格納するspamディレクトリの作成
●spamディレクトリに入ったメールを1つのメールにまとめるスクリプトの作成
------------------------------------------------------------------------------
#!/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
------------------------------------------------------------------------------
> chmod 700 /usr/local/bin/spamsend.sh
●spamsend.sh対象のアカウントを管理するファイルの作成
------------------------------------------------------------------------------ hoge hogehoge ------------------------------------------------------------------------------
●spamsend.shをcronに追加
------------------------------------------------------------------------------ 0 0-23/4 * * * /usr/local/bin/spamsend.sh ------------------------------------------------------------------------------※4時間おきに実行
●~hoge/.forwardの作成
------------------------------------------------------------------------------ "|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #~/Maildir/" ------------------------------------------------------------------------------
●~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}/
------------------------------------------------------------------------------
■あとがき
上記のフィルタリングをまとめますと。
また当方は以前からメールチェッカー「Liam」を使用しているので、
本音を言うとスパム自体を受取りたくはないですが、非スパムを救済することが1番と考え今回こういった形にしてみました。
これだけのフィルタリングを行うとサーバーへの負荷が気になるところですが、
結論として1つのフィルタリングのみに頼らず複数のフィルタリングを組み合わせることが1番効果的ではないかと思いました。
Postfix2.3からアクセステーブルでsleepが使用できる(2.2でもコンパイル時にオプションを付ければ可)そうなので、
|
||
![]() |
![]() |