RHEL9で作る自宅サーバ:mailサーバの構築 その5 RspamdでSPAMを100%排除できたらいいな

mailサーバRHEL9パソコン自宅サーバ

いままでRspamdを送信ドメイン認証(SPF/DKIM/DMARC/ARC)で使うための設定を行ってきましたが、今回は本来の使用目的である迷惑メール対策のための設定を入れていこうと思います。

迷惑メールの現状について

SPAM(迷惑メール)対策の状況は流動的なので、10年前のSPAM対策はもう時代遅れです!

4年前のこの記事でも解説していますが、10年前のSPAM発信源はウィルスに侵されたエンドユーザのパソコンがメールサーバのふりをするというのが中心でした。

SPAM配信用ウィルスは少ないメモリなどのリソースで大量にメールを配信するために普通のメールサーバとは違った特徴を持っていました。

そのためにとられた対策として

  • IPアドレスを逆引きできないホストを排除
    プロバイダが手を抜いてエンドユーザのパソコンに逆引きホスト名を付けないことが多かったから
  • Greylisting(「今忙しいからまた後で」といったん拒絶して一定時間後に受信)
    SPAM配信ウィルスは再送のためのメモリが足りないため、すぐに諦めることが多かったから
  • Tarpitting(応答に時間をかけてゆっくり対応する)
    SPAM配信ウィルスはすぐにメールを配信したいため、時間のかかりそうだったら諦めるから
  • メールサーバのやり取りで不正な手順があったら切断
    SPAM配信ウィルスはすぐにメールを配信したいため、手順を省略してメールを配信しようとするから

がありました。

その根本的な対策として「エンドユーザのパソコンがメールサーバのふりをしてメールを送信させないように、ポート25番を遮断する(Outbound Port 25 Blocking)」という処置をインターネットプロバイダがとりました。

それが功を奏して、今はウィルスに侵されたエンドユーザのパソコンからのメール配信はほとんどありません。

2020年代のSPAM発信源の主流は「正規のメールサーバのユーザアカウントがSPAM配信業者に乗っ取られて、そこから配信する」です。

よって、正規のメールサーバからSPAMが配信されることとなり、先にあげた対策をとっても今では無駄になってます!

いま、一番効果があるSPAM対策は、「Spamhaus(スパムハウス)やSpamCop(スパムコップ)などのブラックリストに載っているメールサーバを排除する」です。

以前は、「ウィルスに侵されたエンドユーザのパソコン」の数が膨大であったためにブラックリストの精度が低かったですが、今はそれが排除されたことと、メールサーバ管理者の「ブラックリストに載ったらメールが送れなくなる!」という意識もあって、非常に精度が高くなっています。

Rspamd導入当初、「自分ちにくるメールを全部Rspamdに食わせたらどうなるんだろう」と試してみました。

すると1日当たり正常なメールが約100通、SPAMメールが400通以上ととんでもないことになりました!

SPAMメールを詳細に確認するとほとんど全部ブラックリストに登録されているメールサーバから発信されているものだと確認できました。

こちらの記事にあるように、すぐにpostfixでブラックリストに基づいてSPAMメールをブロック!
すると、Rspamdの結果は

と、SPAMがなくなりました。

ちなみに1日400通以上あったSPAMメールの半分は、From:(送信元)のドメインをzeke.ne.jpになりすましていました。おかげでDMARCレポートが1日半で「なりすましメールが300通来たよ!」ととんでもないことになっていました。

Google様の「メール送信者のガイドライン」でも「Fromアドレスをgmail.comとしてメール送信しない」となっているので、目的はわかりませんが受信者のメールアドレスと送信元のメールアドレスを同じにするのが流行っているのかもしれませんね。

Rspamdで100%のSPAMブロックを目指す!

実は、先のpostfixによるブラックリストの参照で、なりすましメールを含む99.5%のSPAMは排除済みです…残りの0.5%をRspamdで排除できるように頑張りましょう!

ベイジアンフィルタの無効化

いきなりですが、Rspamdの目玉機能であるベイジアンフィルタを無効化します。

これは、メールの文面を機械的にSPAMかどうか判定する機能なんですが、実際に使ってみたところ判定結果は一勝一敗という感じでした。つまり効果は感じられませんでした。

原因は文面の判定で日本語を使わず英文字だけ使っているからなのかなぁと予想しています。

また。5年前のSPAMは広告が主流でしたが、今は銀行やクレジットカード会社になりすまして、口座やクレジット情報を盗み取ることが多いです。
そのような状況では、人間でも文面だけからSPAMかどうか見分けるのは難しいです。

SPAMとHAM(正常メール)を学習させなければベイジアンフィルタは機能しないので、ほっときましょう。

greylistの無効化

greylistは相手のメールサーバに「今ちょっと忙しいから」と後で再送を促す機能です。今のSPAM対策では無駄な機能なので無効化しておきましょう。

[root@ace ~]# vi /etc/rspamd/local.d/greylist.conf
[root@ace ~]# cat /etc/rspamd/local.d/greylist.conf
enabled = false;

[root@ace ~]# vi /etc/rspamd/local.d/actions.conf
[root@ace ~]# cat /etc/rspamd/local.d/actions.conf
greylist = null;

[root@ace ~]#

「enabled = false;」でgreylist機能を無効化します。

actions.confの「greylist = null;」はgreylistのスコアを無効化します。これが4のままだと4以上6未満のスコアのメールはHistoryリストにgreylistのマークがついてしまうので。(無効化してればマークがつくだけで、メールはgreylistされずローカルに配信されているんですけどね)

フィッシングの有効化

[root@ace ~]# vi /etc/rspamd/local.d/phishing.conf
[root@ace ~]# cat /etc/rspamd/local.d/phishing.conf
openphish_enabled = true;

[root@ace ~]#

フィッシングサイトのURLを集めているところなのかな?
SPAMは文面だけではわからないので、URLをもとにSPAMかどうか判定します。

スコア値の調整

Rspamdはスコアを加算して大きくなったらSPAMと判定するようです。
そのスコアを自分好みに調整します。

[root@ace ~]# vi /etc/rspamd/local.d/groups.conf
[root@ace ~]# cat /etc/rspamd/local.d/groups.conf
group  "subject" {
    symbols = {
        SUBJ_ALL_CAPS {
          weight = 0;
        }
    }
}

group  "statistics" {
    symbols = {
        BAYES_SPAM {
            weight = 0;
        }
        BAYES_HAM {
            weight = 0;
        }
    }
}


group "policies" {
    symbols = {
        DMARC_POLICY_REJECT {
            weight = 6;
        }
        DMARC_POLICY_QUARANTINE {
            weight = 3;
        }
        "DMARC_POLICY_SOFTFAIL" {
            weight = 1;
        }
        "ARC_ALLOW" {
            weight = -3;
        }
        "ARC_REJECT" {
            weight = 3;
        }
    }
}

group "hfilter" {
    symbols = {
        HFILTER_HOSTNAME_UNKNOWN {
            weight = 0;
        }
    }
}

[root@ace ~]#

「SUBJ_ALL_CAPS」は「件名がすべて英大文字」の意味なんですが、英文字しか対応していないので「今はやりのSNSはXです。」も「SUBJ_ALL_CAPS」に含まれてしまいます。英語圏の人は件名がすべて大文字で書かれていると衝撃なのかもしれませんが、日本語だと普通なのでスコアを0に。

「BAYES_SPAM」と「BAYES_HAM」はベイジアンフィルタの結果ですね。機能自体を無効にしてますが、スコアも0に。

「DMARC_POLICY_REJECT」「DMARC_POLICY_QUARANTINE」「DMARC_POLICY_SOFTFAIL」「ARC_ALLOW」「ARC_REJECT」は送信ドメイン認証関連のスコアですね。デフォルトだと小さな値だったので、影響が出やすいように大きな値にしてみました。
「DMARC_POLICY_REJECT」はRejectを要求されているので一発でRejectになるように15が良いかなと考えましたが、6でも他の評価と合わせて数えRejectになりそうです。

「HFILTER_HOSTNAME_UNKNOWN」は逆引きホスト名が見つからないときのスコアですが、postfixの設定で逆引きをしないので、どのIPアドレスでもホスト名なしになります。その影響が出ないようにスコアは0です。

その他の設定

[root@ace ~]# vi /etc/rspamd/local.d/history_redis.conf
[root@ace ~]# cat /etc/rspamd/local.d/history_redis.conf
nrows = 1000;

[root@ace ~]#

Web管理画面のHistory画面の履歴の数は、デフォルトの200では少ないので1000に増やしました。

Rspamdの設定は以上です。

ウィルス対策として、ウィルスチェックソフトでメールを検索ることも考えましたが、ウィルスチェックソフトが重いことと各パソコンやスマホでウィルスチェックをしてることを考えると無駄になるんじゃないかと保留中です!

Rspamdの設定で役に立ったコマンド

最後にRspamdの設定をするうえで役に立ったコマンドを紹介します。

rspamadm configdump | less

全部の設定を表示するコマンドです。設定が間違っていてもエラーにならずおかしな動作になることが多いので、このコマンドで想定通りになっているかを確認します。

rspamadm configdump -g | less

グループ(スコア値)一覧するためのコマンドです。なぜだか上記の全設定表示より細かくグループ設定が表示されます。こちらもスコア値が想定通りになっているかを確認します。

redis-cli KEYS *BAYES* | xargs redis-cli DEL
redis-cli KEYS RS* | xargs redis-cli DEL

ベイジアンフィルタで学習した内容を一括で削除するコマンドです。

お勧めのKindle本です!

コメント