親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

cronでspamhausのブラックリストに載せられていないか定期的な自動チェック


再びSpamhausのブラックリスト入り

以前下記の記事で、outlookにメールが届かない場合の対策について書きましたが、
ti-tomo-knowledge.hatenablog.com

Spamhausでブラックリストに入れられてしまうと、一度申請をして解除されても再びリストに入れられてしまうことがあります。

この現象めちゃめちゃ迷惑ですね。
クライアントから苦情来るのは我々なのでほんとにちゃんとした精度でやってほしいものです。
確かにスパムメールを防ぐ必要はあるんですけどね・・・

cronでチェックするためのスクリプト

そこで今回はcronを使って定期的にブラックリストに入っていないかチェックする仕組みを入れました。
どうやらdigコマンドでリストに入っているかどうか調べることができるようなので。
調べる対象のIPがAAA.BBB.CCC.DDDの場合に、

dig +short DDD.CCC.BBB.AAA.zen.spamhaus.org

とすれば、もしリストに入っていれば「127.X.X.X」などのような値が返ってきます。
digコマンドの結果が「空ではない」時にメールを飛ばすように以下のようなスクリプトを作りました。
超簡易的なスクリプトです。

mkdir /var/www/cron
cd /var/www/cron
vim check_spamhaus.sh
a=`dig +short DDD.CCC.BBB.AAA.zen.spamhaus.org`
if [ -n "$a" ]; then
  echo "https://www.spamhaus.org/query/ip/AAA.BBB.CCC.DDD" | mail -s "spamhaus" -r 送信元メールアドレス 送信先メールアドレス
fi

今回はメールの本文にspamhausとしか書いていませんが、本文にspamhausの解除申請をするURLを貼っておけば、メールを受信した時に出先からでもすぐにSpamhausに飛べるようになって便利です。

cronの設定

最後にcronの設定です。
何分おきに起動させるか、といったところですが、今回は15分おきに設定するようにしています。

まずはcronが起動しているか確認しましょう。

service crond status

ここで実行中となっていなければcronを起動させてください。

service crond start

そしてcronの登録です。

crontab -e

以下の記述をして保存してください。

*/15 * * * * /bin/sh /var/www/cron/check_spamhaus.sh

最後にcronが反映されていることを確認しましょう。

crontab -l

多くても2、3回解除申請をしておけばブラックリストに入れられる可能性は減りますが、念のためにcronはずっと実行しておくことをおすすめします。


新しいLinuxの教科書

新しいLinuxの教科書

入門者のLinux 素朴な疑問を解消しながら学ぶ (ブルーバックス)

入門者のLinux 素朴な疑問を解消しながら学ぶ (ブルーバックス)

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識