最近 Google Cloud Platform が発信源になっているフィッシングメールが多く届き、お行儀は良い(DMARC などがきちんと設定されている)ため Rspamd を通り抜けてくる状態でした。
私の環境では GCP からメールを受け取る必要性が無かったので、まとめてフィルタリングすることにしました。
ASN で判定する
Rspamd には自律システム番号(ASN:Autonomous System Number)で判定する ASN モジュールがデフォルトで有効なため、これを使って設定していきます。
Google Cloud Platform に割り当てられている ASN は 396982 で、Googleの主幹ネットワーク(Gmail、検索、YouTubeなど)に割り当てられている ASN(15169)とは別の番号が割り当てられています。
そのため、GCP をフィルタリングしても Gmail や Google 本体からのメールなどには影響しないので、安心してください。
ASN のリストを作成
まずは、ASN のリストを作成します。
/etc/rspamd/local.d/blacklist_asn.map を作成して、GCP の ASN である「396982」を入力します。
396982Web GUI から操作できるように、所有者を変更しておきます。
chown _rspamd: /etc/rspamd/local.d/blacklist_asn.mapフィルタールールの追加
multimap.conf にフィルタールールを追加します。
# ASN のブラックリスト
BLACKLIST_ASN {
description = "ブラックリスト:Autonomous System Numbers";
type = "asn";
map = "${LOCAL_CONFDIR}/local.d/blacklist_asn.map";
score = 10.0;
}設定の反映
コンフィグテストで問題無ければ、Rspamd を再起動して設定を反映させます。
rspamadm configtest
(out) syntax OK
systemctl restart rspamd以上で、ASN を使ってフィルタリングする設定は完了です。
結果
設定後しばらく様子をみたところ、ASN 情報が取得できている場合にはうまく動作していますが、稀に ASN が引けずに判定をすり抜けてくるものがあります。
ASN モジュールだけでも効果は大きかったのですが、なんか悔しいので徹底的にやることにしました。
IP アドレスで判定する
GCP の IP アドレスの範囲は Google から公開されており、JSON(JavaScript Object Notation)形式で取得できます。
GCP の IPv4 アドレスをリスト化する
GCP の IPv4 アドレスをリスト化し、Rspamd のマップファイルとして書き出します。
スクリプトは /etc/cron.weekly/ に配置し、毎週自動的に更新してくれるようにします。
#! /bin/bash
curl -s https://www.gstatic.com/ipranges/cloud.json | jq -r '.prefixes[] | .ipv4Prefix | select(. != null)' > /etc/rspamd/local.d/gcp_ipranges.mapパーミッションを変更しておきます。
chmod 700 /etc/cron.weekly/rspamd-gcpフィルタールールの追加
/etc/rspamd/local.d/multimap.conf に下記の設定を追加します。
# Google Cloud Platform のブラックリスト
BLACKLIST_GCP {
description = "ブラックリスト:Google Cloud Platform";
type = "ip";
map = "${LOCAL_CONFDIR}/local.d/gcp_ipranges.map";
score = 10.0;
}設定の反映
コンフィグテストで問題無ければ、Rspamd を再起動して設定を反映させます。
rspamadm configtest
(out) syntax OK
systemctl restart rspamd結果
IP アドレスで判定する方法では確実に弾いてくれるようになりました。
前半の設定が残っていると、ASN 情報が取得できた場合に二重加点されてしまうため、どちらかの方法で設定すれば十分です。


コメント