CONTENTS
SpamAssassinについて
SpamAssassin(スパムアサシン)はメールサーバに組み込んで、メールサーバーに到達した全メールをチェックすることで、スパムメールか否かを判別してフィルタリングする事が可能です。
スパムと判断されたメールの件名に [SPAM] と文字列を追加されるように設定をして、メーラーの振り分けで管理する方法等、好みの運用方法に合わせってセッティングが可能です。
スパムかどうかの判別は別途コマンドにて学習させることで制度が向上します。
現在はApacheソフトウェア財団のプロジェクトとして進められています。
構築環境
- 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のインストール
1 |
# dnf -y install spamassassin |
SpamAssassinのコンフィグ設定
1 |
# vi /etc/mail/spamassassin/local.cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
▼日本語のスパムメールにも対応 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 |
▼設定ファイルの検査
エラーが表示されなければ問題なし。
1 |
# spamassassin --lint |
SpamAssassinをCourierPythonFilterに連動
1 |
# vi /etc/pythonfilter-modules.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
▼コメントアウト「#」を外して下記で修正。 [spamassassin.py] ▼spamdと接続するソケットspamcのPATH設定 spamc_path = '/usr/bin/spamc' ▼受信するメッセージの最大サイズ max_msg_size = 512000 ▼起動ユーザーは「deamon」を指定 username = 'deamon' ▼スパム判別時のスコアの優先度設定 「required_hits」を大きくしてこちらの機能は優先を下げる。 reject_score = 1000 |
CourierPythonFilterの停止・起動で設定反映
1 2 3 4 5 |
# 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を有効化
1 |
# vi /etc/pythonfilter.conf |
1 2 3 4 5 6 7 8 9 10 |
# 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の起動設定
▼自動起動
1 |
# systemctl enable spamassassin |
▼自動起動の確認
1 2 3 |
# systemctl is-enabled spamassassin enabled |
▼起動
1 |
# systemctl start spamassassin |
▼起動確認
1 2 3 4 5 |
# 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 |
SpamAssassinの自動学習
▼誤判定した場合
1 |
# sa-learn --ham /home/*/Maildir/cur |
「–ham」オプションをつけて正しいメールと学習をさせます。
この場合は「/home」配下全ユーザーの既読メールを非スパムとして学習させています。
▼/home/Maildir配下の用途
未読 | /home//Maildir/new |
既読 | /home//Maildir/cur |
配送中 | /home//Maildir/tmp |
▼cronで定期時間に自動学習させる
自動学習を行うための処理を Shell Script と呼ばれるプログラムファイルとして作成して、Scriptファイルを cron にて毎日時限発動させることで、自動的に学習されるようにします。
1 |
# vi /usr/local/bin/sa-learn-filter.sh |
1 2 3 4 5 6 7 |
#!/bin/sh # スパムメールの学習 sa-learn --spam /home/*/Maildir/.SPAM/cur # 通常メールを学習 sa-learn --ham /home/*/Maildir/cur |
▼作成したShell Scriptに実行権限を付与
1 |
# chmod 755 /usr/local/bin/sa-learn-filter.sh |
▼cronに登録して時限設定
1 |
# vi /etc/crontab |
1 |
* 3 * * * root /usr/local/bin/sa-learn-filter.sh |
ベイズ(学習)データベースの初期化
学習したデータを初期化する場合は、下記のファイルを削除してください。
1 2 |
# rm /etc/mail/spamassassin/bayes/bayes_seen # rm /etc/mail/spamassassin/bayes/bayes_toks |