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

SpamAssassinインストール・設定

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

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

●SpamAssassin起動
# systemctl start spamassassin

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

●SpamAssassin設定ファイル入れ替え
下記サイトの[ダウンロード]ボタンを押して設定ファイルをDL
https://pastebin.com/QnwRxxBQ

DLした「spamassassin_user_prefs_for_japanese..txt」を
「user_prefs」としてサーバーの「/etc/mail/spamassassin/」にUL

同ディレクトリにある「local.cf」を適当な名前に変更し
ULしたuser_prefsをlocal.cfに変更
# cd /etc/mail/spamassassin
# mv local.cf local.cf.back
# mv user_prefs local.cf
# systemctl restart spamassassin

●ok_languagesオプション有効化
# vi /etc/mail/spamassassin/v310.pre
下記の行頭の#を削除
#loadplugin Mail::SpamAssassin::Plugin::TextCat

loadplugin Mail::SpamAssassin::Plugin::TextCat

●spamass-milter起動
# systemctl start spamass-milter

●spamass-milter自動起動設定
# systemctl enable spamass-milter

●milter-managerインストール
milter-manager_reposリポジトリ追加
# curl -s https://packagecloud.io/install/repositories/milter-manager/repos/script.rpm.sh | bash
# yum -y install milter-manager

●milter-manager起動
# systemctl start milter-manager

●milter-manager自動起動設定
# systemctl enable milter-manager

●postfix/milter-manager連携
# vi /etc/postfix/main.cf
最下行に下記4行を追加
milter_protocol = 6
milter_default_action = tempfail
milter_mail_macros = {auth_author} {auth_type} {auth_authen}
smtpd_milters = unix:/var/run/milter-manager/milter-manager.sock

●milter-managerグループにpostfixユーザーを追加
# usermod -G milter-manager -a postfix

●設定反映
# systemctl reload postfix

●milter-manager/spamass-milter連携
postfixグループにmilter-managerユーザーを追加
# usermod -G postfix -a milter-manager

●設定反映
# systemctl restart milter-manager

●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/
LOGFILE=$HOME/.procmail.log # ログ出力先
VERBOSE=ON # 詳細ログ出力

# SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除
# ※必要なメールが削除されてしまう可能性があることに留意すること
:0
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
/dev/null
———————————————————————————-

●procmailログローテーション設定ファイル作成
# vi /etc/logrotate.d/procmail
内容は下記の通り
———————————————————————————-
/home/*/.procmail.log {
missingok
nocreate
notifempty
}
———————————————————————————-

●postfix/procmail連携
# vi /etc/postfix/main.cf
下記を追加
mailbox_command = /usr/bin/procmail

●postfix設定反映
# systemctl reload postfix

●スパムメール振り分け設定(受信メールサーバーが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.スパムメール専用メールボックス作成スクリプト削除
# rm -f spamfolder-create

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

5.スパムメール振り分け設定
# vi /etc/procmailrc
最下行に下記4行を追記
# SpamAssassinがスパム判定したメールはスパム専用メールボックス(/home/xxxx/Maildir/.Spam)へ配送
:0
*^X-Spam-Flag: YES
$HOME/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

※Spamassassinで必要なメールがスパム判定されてしまう場合、以下により特定のドメインをスパム判定対象外にする。

●全アカウント共通設定の場合
# vi /etc/mail/spamassassin/local.cf

●アカウント毎に設定する場合
# vi /home/ユーザ名/.spamassassin/user_prefs

●各ファイルの最下行に以下を追記
・メールアカウントを指定する場合
whitelist_from メールアドレス
・特定のドメインを指定する場合
whitelist_from *@除外するドメイン名
・複数のサブドメインを指定する場合
whitelist_from *.サブドメイン名

●Spamassassin再起動
# systemctl restart spamassassin


※2021/3/20追記
Spamassassinから以下のsa-update失敗のメールが来たので対応。

最新バージョンのSpamassassinではすでに使用しなくなっているSoughtルールセットが完全に消滅したようなので、ルールセットチャンネルを使用しないようにsought.confを書き換えます。

channel: no 'mirrors.sought.rules.yerp.org' record found, channel failed
20- 3月-2021 04:39:04: SpamAssassin: Unknown error code 3 from sa-update

vi /etc/mail/spamassassin/channel.d/sought.conf

# http://wiki.apache.org/spamassassin/SoughtRules
CHANNELURL=sought.rules.yerp.org
KEYID=6C6191E3
# Ignore everything below.
return 0

↓↓↓

# http://wiki.apache.org/spamassassin/SoughtRules
#CHANNELURL=sought.rules.yerp.org ←行頭に#を入れてコメントアウト
#KEYID=6C6191E3 ←行頭に#を入れてコメントアウト
# Ignore everything below.
return 0


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

コメントを残す

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