目次
SpamAssassinについて
SpamAssassin(スパムアサシン)はメールサーバに組み込んで、メールサーバーに到達した全メールをチェックすることで、スパムメールか否かを判別してフィルタリングする事が可能です。
スパムと判断されたメールの件名に [SPAM] と文字列を追加されるように設定をして、メーラーの振り分けで管理する方法等、好みの運用方法に合わせってセッティングが可能です。
スパムかどうかの判別は別途コマンドにて学習させることで制度が向上します。
現在はApacheソフトウェア財団のプロジェクトとして進められています。
▼公式WEB
https://spamassassin.apache.org/
構築環境
- CentOS Linux release 8.2.2004 (Core)
- courier-1.0.14
- courier-authlib-0.71.0
- courier-unicode-2.1
- spamassassin.x86_64 3.4.2-7.el8
- courier-pythonfilter-3.0.2
SpamAssassinのインストール
CentOS 8 では dnf コマンドを利用してパッケージ情報検索やインストール、削除を行うことができます。
パッケージファイルが管理されているダウンロードサーバーをリポジトリと呼び、新規でリポジトリを追加することで、ダウンロードできるファイルの種類を増やすことが可能です。
「-y」オプションを指定すると、インストール可否の確認で「yes」となり自動的にインストールが開始します。
command [st_af id="334"] # dnf -y install spamassassin
SpamAssassinのコンフィグ設定
command # vi /etc/mail/spamassassin/local.cf
local.cf
▼日本語のスパムメールにも対応
normalize_charset 1
▼同じメールが指定回数送られるとスパムと判断
required_hits 5
フィルタの効果が出始めたら、required_hitsの値を5.0に近づけるように少しずつ下げてください。
なお、スコア5.0はFalse Positiveが0.05%程度(2000通に1通)発生するように調整されたものなのです。
5未満にスコアを設定するとFalse Positiveが増えますので、5未満に設定しない方がよいでしょう。
▼レポートメッセージ加工設定
スパムと判断されたメッセージをレポートメッセージに加工されないようにするには下記の設定を入れます。
report_safe 0
▼スパムと判断された場合件名を変更
下記で件名の頭に[SPAM]が追記されるので、メーラーのフィルターで振り分け等を行います。
rewrite_header Subject [SPAM]
▼日本のメールを受け取る
meta FROM_EXCESS_BASE64 0
▼本文の文字がUTF-8のメールを許容
meta MIME_BASE64_TEXT 0
▼スペースを多用する署名を許容
meta TVD_SPACE_RATIO 0
▼設定ファイルの検査
エラーが表示されなければ問題なし。
command # spamassassin --lint
SpamAssassinをCourierPythonFilterに連動
command # vi /etc/pythonfilter-modules.conf
pythonfilter-modules.conf
▼コメントアウト「#」を外して下記で修正。
[spamassassin.py]
▼spamdと接続するソケットspamcのPATH設定
spamc_path = '/usr/bin/spamc'
▼受信するメッセージの最大サイズ
max_msg_size = 512000
▼起動ユーザーは「deamon」を指定
username = 'deamon'
▼スパム判別時のスコアの優先度設定
「required_hits」を大きくしてこちらの機能は優先を下げる。
reject_score = 1000
CourierPythonFilterの停止・起動で設定反映
command # filterctl stop pythonfilter # filterctl start pythonfilter # ps -ef | grep pythonfilter daemon 6097 1099 0 03:55 ? 00:00:00 /usr/libexec/platform-python -s /etc/courier/filters/active/pythonfilter
SpamAssassinを有効化
command
# vi /etc/pythonfilter.conf
pythonfilter.conf
# spamassassin: scans messages using "spamc". This requires that
# SpamAssassin's daemon is running. Note that all mail will be
# filtered under the settings for courier's user, which means that
# your users' individual whitelists and thresholds won't be
# processed.
▼コメント「#」を外して有効化にする
#spamassassin
↓
spamassassin
SpamAssassinの起動設定
▼自動起動
command # systemctl enable spamassassin
▼自動起動の確認
command # systemctl is-enabled spamassassin enabled
enabled になっていればサーバー再起動で自動で敵にサービスが起動します。
▼起動
command # systemctl start spamassassin
▼起動確認
command # systemctl status spamassassin ● spamassassin.service - Spamassassin daemon Loaded: loaded (/usr/lib/systemd/system/spamassassin.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2020-10-05 03:59:27 JST; 6s ago
最後までエラーが無く Active: active (running) となっていればOK。
SpamAssassinの自動学習
▼誤判定した場合
command # sa-learn --ham /home/*/Maildir/cur
「--ham」オプションをつけて正しいメールと学習をさせます。
この場合は「/home」配下全ユーザーの既読メールを非スパムとして学習させています。
▼/home/Maildir配下の用途
未読 | /home//Maildir/new |
既読 | /home//Maildir/cur |
配送中 | /home//Maildir/tmp |
▼cronで定期時間に自動学習させる
自動学習を行うための処理を Shell Script と呼ばれるプログラムファイルとして作成して、Scriptファイルを cron にて毎日時限発動させることで、自動的に学習されるようにします。
command # vi /usr/local/bin/sa-learn-filter.sh
sa-learn-filter.sh
#!/bin/sh
# スパムメールの学習
sa-learn --spam /home/*/Maildir/.SPAM/cur
# 通常メールを学習
sa-learn --ham /home/*/Maildir/cur
さらに詳しく
Shell Scriptや、そもそもシェルってなーにという方は、こちら にて解説しています。
▼作成したShell Scriptに実行権限を付与
command # chmod 755 /usr/local/bin/sa-learn-filter.sh
▼cronに登録して時限設定
command # vi /etc/crontab
crontab
* 3 * * * root /usr/local/bin/sa-learn-filter.sh
さらに詳しく
cronについての詳細は こちら で解説しています。
ベイズ(学習)データベースの初期化
学習したデータを初期化する場合は、下記のファイルを削除してください。
command # rm /etc/mail/spamassassin/bayes/bayes_seen # rm /etc/mail/spamassassin/bayes/bayes_toks