24.5.09

Ubuntu 8.04 LTS Server でメールサーバを構築する Session 4

■RBLチェック機能を追加
$sudo vim /etc/postfix/main.cf
→以下の内容を追加(3カ所のRBLを利用)
# RBL parameters
smtpd_client_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    check_client_access hash:${config_directory}/clients,
    reject_rbl_client all.rbl.jp,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client zen.spamhaus.org,
permit


○RBLチェック除外リストを作成
$sudo vim /etc/postfix/clients
→以下の内容を記述(過去にrejectされたことがある正当なサーバ)
grp.yahoo.co.jp OK
grp.bbt.yahoo.co.jp OK
ml.freeml.com OK
livedoor.net OK
livedoor.com OK
data-hotel.net OK

$sudo postmap /etc/postfix/clients

○Postfixに設定を反映
$sudo /etc/init.d/postfix force-reload

○RBLチェックの動作確認
・接続をブロックした際に /var/log/mail.log にログが出る

■SpamAssassin(スパムフィルタ)をインストール
$sudo aptitude install spamassassin spamassassin-rules-ja spampd

○SpamAssassinを設定
$sudo vim /etc/default/spamassassin
→以下の内容を変更
ENABLED=1
OPTIONS="--max-children 5 --helper-home-dir"
CRON=1

$cd /etc/spamassassin/
$sudo wget -O local.cf http://tlec.linux.or.jp/docs/user_prefs
$sudo vim local.cf
→以下の内容を追加・変更
skip_rbl_checks 1
rewrite_header Subject ***SPAM***
report_safe 0
bayes_path /var/spool/spamassassin/bayes
bayes_file_mode 0666
auto_whitelist_path /var/spool/spamassassin/auto-whitelist
auto_whitelist_file_mode 0666

$sudo vim v310.pre
→以下の行をアンコメント
loadplugin Mail::SpamAssassin::Plugin::TextCat

$sudo mkdir /var/spool/spamassassin
$chown spamd. /var/spool/spamassassin/

○SpamPDを設定
$sudo vim /etc/spampd.conf
→以下の内容を変更
use_bayes 1
bayes_path /var/spool/spamassassin/bayes
auto_whitelist_path /var/spool/spamassassin/auto-whitelist

$sudo vim /etc/default/spampd
→以下の内容を変更(ポート10027でメールを受け取り、ポート10025へ返す)
LISTENPORT=10027
DESTPORT=10025
AUTOWHITELIST=1
ADDOPTS="--config=/etc/spampd.conf --maxsize=512"


○デーモンを起動
$sudo /etc/init.d/spamassassin start
$sudo /etc/init.d/spampd start

○外部からのメールに対してのみスパムフィルタをかけるよう、Postfixに設定を追加
$sudo vim /etc/postfix/master.cf
→以下の内容を追加(フィルタ通過後のメールの戻り先ポートを作成)
127.0.0.1:10025 inet n - n - 16 smtpd
    -o content_filter=
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
    -o smtpd_helo_restrictions=
    -o smtpd_client_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks_style=host
    -o smtpd_authorized_xforward_hosts=127.0.0.0/8

$sudo vim /etc/postfix/main.cf
→以下の内容を変更(条件に該当しない送信元からのメールはフィルタを通す)
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    check_client_access regexp:${config_directory}/filter_spampd

$sudo vim /etc/postfix/filter_spampd
→以下の内容を記述(ポート100027のspampdへ送る)
/./ FILTER scan:127.0.0.1:10027


○SpamAssassinの動作テスト
・外部からメールを受信し、/var/log/mail.log にspamdのログが出ることを確認
・外部から受信したメールのヘッダに「X-Spam-Status:」行がつくことを確認
・本文に「XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X」を含んだメールを外部から受信し、Subjectに「***SPAM***」が付加されていることを確認

○ベイジアンフィルタ学習用アドレスを作成
・ベイジアンフィルタの学習用に、「spam@example.com」を作成し、メーラからIMAPフォルダ「INBOX.spam」と「INBOX.ham」を作成

○ベイジアンフィルタ学習スクリプトを作成
$sudo vim /etc/cron.daily/sa-learn
→以下の内容を記述
#!/bin/bash
export LANG=C

############################
### 設定ファイル読み込み ###
############################

# 設定ファイルのパス
CONF=/etc/spamassassin/sa-learn.conf

# 設定ファイルが存在しなければ終了
if [ ! -s $CONF ]; then
    echo 'sa-learn config file not exists!'
    exit 1
fi

# 設定ファイルを読み込み
source $CONF

##################
### 初期化処理 ###
##################

# ホスト名を取得
HOSTNAME=`hostname`

##################################
### ベイジアンフィルタ学習処理 ###
##################################

# ログに開始日時を記録
date > $LOGFILE
echo >> $LOGFILE

# spam学習
sa-learn --spam $SPAMDIR/new/ >> $LOGFILE 2>&1
sa-learn --spam $SPAMDIR/cur/ >> $LOGFILE 2>&1

# ham(non-spam)学習
sa-learn --ham $HAMDIR/new/ >> $LOGFILE 2>&1
sa-learn --ham $HAMDIR/cur/ >> $LOGFILE 2>&1

# 学習済みのメールを消去
if [ $DELETE -eq 1 ]; then
echo >> $LOGFILE
    rm $SPAMDIR/new/* >> $LOGFILE 2>&1
    rm $SPAMDIR/cur/* >> $LOGFILE 2>&1
    rm $HAMDIR/new/* >> $LOGFILE 2>&1
    rm $HAMDIR/cur/* >> $LOGFILE 2>&1
fi

# ログに終了日時を記録
echo >> $LOGFILE
date >> $LOGFILE

# ログをメール送信
cat $LOGFILE | mail -s "sa-learn Log for $HOSTNAME" $MAILADDR

exit 0

$sudo chmod +x /etc/cron.daily/sa-learn

○ベイジアンフィルタ学習設定ファイルを作成
$sudo vim /etc/spamassassin/sa-learn.conf
→以下の内容を記述
##################################
### ベイジアンフィルタ学習設定 ###
##################################

# spam学習対象IMAPフォルダ
SPAMDIR=/home/vmail/example.com/spam/.INBOX.spam

# ham学習対象IMAPフォルダ
HAMDIR=/home/vmail/example.com/spam/.INBOX.ham

# ログファイルのパス
LOGFILE=/var/log/sa-learn.log

# ログ送信先メールアドレス
MAILADDR=spam@example.com

# 学習済みメール削除フラグ(削除しない:0/削除する:1)
DELETE=0


○ベイジアンフィルタ学習テスト
・メーラから適当な数のspamとhamをIMAPフォルダにアップロードする。
$sudo /etc/cron.daily/sa-learn
→正常に学習されればログがメールで届くので確認。

○ベイジアンフィルタ運用モード切り替え
$sudo vim /etc/spamassassin/sa-learn.conf
→以下の内容を変更(学習済みのメールが削除される)
DELETE=1


○ベイジアンフィルタ基礎学習
・最低限200通のメールを学習させないとベイジアンフィルタが有効にならないので、精度UPのためにできるだけたくさんのメールを学習させる

0 コメント:

コメントを投稿