スパムメール対策(SpamAssassin)インストール・設定

SpamAssassinインストール・設定

※CentOS7関連のインストール・設定については「CentOSで自宅サーバー様」を参考に自分の環境に合わせて設定しています。
※事前にClamAntiVirusをインストールしておく

●スパムメール対策Spamassassinインストール
# yum -y install spamassassin

●SpamAssassin起動
# systemctl start spamassassin

●SpamAssassin自動起動設定
# systemctl enable spamassassin

●Spamassassin設定ファイル最新化スクリプト作成
# vi spamassassin-update(内容は以下の通り)
——————————————————————————-
#!/bin/bash

# SpamAssassin設定ファイル最新版ダウンロード
cd /etc/mail/spamassassin
wget -qN http://www.flcl.org/~yoh/user_prefs

# 設定ファイル更新時のみSpamAssassin再起動
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? -ne 0 ]; then
cp user_prefs local.cf

# スパム判断したメールを添付形式にしないように設定
echo “report_safe 0” >> local.cf

# スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ
echo “rewrite_header Subject ***SPAM***” >> local.cf

# SpamAssassin再起動
if [ -f /etc/rc.d/init.d/spamassassin ]; then
/etc/rc.d/init.d/spamassassin restart > /dev/null
else
systemctl restart spamassassin > /dev/null
fi
fi
cp user_prefs user_prefs.org
——————————————————————————-

●SpamAssassin自動アップデート設定
# chmod *x spamassassin-update
# ./spamassassin-update
# mv spamassassin-update /etc/cron.daily/
# vi /etc/cron.d/sa-update
10 4 * * * root /usr/share/spamassassin/sa-update.cron 2>&1 | tee -a /var/log/sa-update.log
(行頭に#があれば#を削除)

●procmail設定
# vi /etc/postfix/main.cf
mailbox_command = /usr/bin/procmail ←追加

●Postfix再起動
# systemctl restart postfix

●Procmailrc作成
# vi /etc/procmailrc(内容は以下の通り)
———————————————————————————-
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SPAM=$MAILDIR/.Spam/
LOGFILE=$HOME/.procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力

# Clam AntiVirusによるウィルスチェック
AV_REPORT=`/usr/bin/clamscan  –no-summary – 2>&1| awk -F\n -v ORS=’ ‘ ‘{print}’|awk ‘{print $NF}’`
VIRUS=`if [ “$AV_REPORT” != “OK” ]; then echo Yes; else echo No;fi`
:0fw
| formail -i “X-Virus: $VIRUS”

# Clam AntiVirusがウィルス判定したメールは削除
:0
* ^X-Virus: Yes
/dev/null

# SpamAssassinによるスパムチェック
:0fw
|/usr/bin/spamc

# SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除
# ※必要なメールが削除されてしまう可能性があることに留意すること
#(以下の3行は間違ってスパム判定されたメールが削除されないように最初はコメントアウトしておいた方が良い)
:0
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
/dev/null

#メールサーバーがIMAPの場合のみ以下を追加
# SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配送
:0
*^X-Spam-Flag: YES
$SPAM
———————————————————————————-

●procmailログローテーション設定ファイル作成
# vi /etc/logrotate.d/procmail
/home/*/.procmail.log {
missingok
nocreate
notifempty
}

●スパムメール振り分け設定(受信メールサーバーがIMAPの場合)

・スパムメール専用BOX作成
1.既存ユーザ対処用メールボックス作成スクリプト作成
# vi spamfolder-create(内容は以下の通り)
————————————————————————————-
#!/bin/bash

for user in `ls /home`
do
id -u $user > /dev/null 2>&1
if [ $? -eq 0 ] && [ ! -d /home/$user/Maildir/.Spam/new ]; then
mkdir -p /home/$user/Maildir/.Spam/new
mkdir -p /home/$user/Maildir/.Spam/cur
mkdir -p /home/$user/Maildir/.Spam/tmp
chmod -R 700 /home/$user/Maildir/.Spam
chown -R $user. /home/$user/Maildir/.Spam
echo $user
fi
done
————————————————————————————–

2.スパムメール専用メールボックス作成スクリプト実行
# sh spamfolder-create

3.新規ユーザ用スパムメール専用BOX自動作成
# mkdir -p /etc/skel/Maildir/.Spam/{new,cur,tmp}
# chmod -R 700 /etc/skel/Maildir/.Spam

●Spamassassin学習機能設定(受信メールサーバーがIMAPの場合)

・spamassassin-learnに使用するtmpwatchをインストール
# yum -y install tmpwatch

・学習機能設定
# vi spamassassin-learn(内容は以下の通り)
———————————————————————————————————————-
#!/bin/bash

PATH=/usr/sbin:/usr/bin:/bin

for user in `ls /home/`
do
# 正常メール
hammail=/home/$user/Maildir/cur

# 正常メール学習
if [ -d “$hammail” ]; then
# 正常メールをSpamAssassinに学習させる
su $user -s “/bin/bash” -c “sa-learn –ham $hammail | \
logger -p mail.info -t ‘sa-learn for $user'”
fi

# スパムメール
spammail=/home/$user/Maildir/.Spam/cur

# スパムメール学習
if [ -d “$spammail” ]; then
# スパムメールをSpamAssassinに学習させる
su $user -s “/bin/bash” -c “sa-learn –spam $spammail | \
logger -p mail.info -t ‘sa-learn for $user'”

# 受信後一ヶ月経過したスパムメールを削除
tmpwatch -m 720 $spammail
fi
done
———————————————————————————————————————-

・学習機能設定ファイル実行権限付与
# chmod 700 spamassassin-learn

・学習機能自動実行登録
# mv spamassassin-learn /etc/cron.daily/

 

●メールアカウントユーザ毎に設定ファイル作成
1.「.forward」ファイル作成
# vi /home/ユーザ名/.forward(内容は以下の通り)
———————————————————————————————————————-
“|IFS=’ ‘ && exec /usr/bin/procmail -f- || exit 75 #ユーザ名”
———————————————————————————————————————-

2.作成したフォワードファイルの所有者・グループ設定
# chown ユーザ名. /home/ユーザ名/.forward

 

3./home/ユーザ名/に「.procmailrc」を下記の内容で作成してprocmailを動作させる
# vi /home/ユーザ名/.procmailrc
———————————————————————————————————————-
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SPAM=$MAILDIR/.Spam/
LOGFILE=$MAILDIR/.procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力

# 未承諾広告メールを削除
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo “$MATCH” | nkf -mwZ2 | sed ‘s/[[:space:]]//g’ | egrep ‘未承諾広告※’
/dev/null

# SpamAssassinによるスパムチェック
:0fw
|/usr/bin/spamc

# SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除
# (必要なメールが削除されてしまう可能性があるので、以下の3行はとりあえずコメントアウトしておき、しばらくの間メールソフトの
# Spamフォルダをチェックして、必要なメールがスパム判定されていないのを確認してから「#」を外す)

#:0
#* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
#/dev/null

# SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配送
# (この時点でスパムと判断されたメールは転送されません)
:0
*^X-Spam-Flag: YES
$SPAM

# メール転送設定
# 例として、Subjectに”SPAM”が含まれてなければ、メールボックスに受信メールを残して
# コピーを「sample@keitai.com」に転送
# (2行目の条件文をコメントアウトすれば、上でスパムと判断されなかったメールは全て転送されます)

:0 c
*!^Subject: .*”SPAM.*
! sample@keitai.com
———————————————————————————————————————-

4.作成した「.procmailrc」の所有者・グループ設定
# chown ユーザ名. /home/ユーザ名/.procmailrc

●Postfix再起動
# systemctl restart postfix

 

カテゴリー: CentOS7 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です