taRgreyを設定しているにもかかわらず、やられた「正規の」メールサーバから送信されてくるスパムがあまりにも多く、古典的ではあるけれどgTLDにアサインされたIPアドレスレンジでDROPすることにした。
例えばcnについてはプレインテキストが転がっているので、ここからヘッダ行を取り除いたものを用意する。で、これを/etc/firewalld/direct.xml
に挿入するために以下のような簡単なスクリプトで整形する。
#!/bin/bash
# ${GTLD}.txt consists of following lines (doesn't include pound sign)
#1.0.1.0/24
#1.0.2.0/23
#......
readonly GTLD="cn"
count=1
echo " <chain table=\"filter\" ipv=\"ipv4\" chain=\"${GTLD}\"/>"
for i in `cat ~/bin/${GTLD}.txt`; do
echo " <rule priority=\"${count}\" table=\"filter\" ipv=\"ipv4\" chain=\"${GTLD}\">-p tcp --source ${i} -j DROP</rule>"
count=`echo "$count+1" | bc`
done
挿入後のdirect.xml
は以下のような感じになる。
<?xml version="1.0" encoding="utf-8"?>
<direct>
<chain table="filter" ipv="ipv4" chain="cn"/>
<rule priority="1" table="filter" ipv="ipv4" chain="cn">-p tcp --source 1.0.1.0/24 -j DROP</rule>
<rule priority="2" table="filter" ipv="ipv4" chain="cn">-p tcp --source 1.0.2.0/23 -j DROP</rule>
......
<rule priority="2814" table="filter" ipv="ipv4" chain="cn">-p tcp --source 216.98.208.0/20 -j DROP</rule>
<passthrough ipv="ipv4">-I FORWARD -i bridge0 -j ACCEPT</passthrough>
<passthrough ipv="ipv4">-I FORWARD -o bridge0 -j ACCEPT</passthrough>
</direct>
#bridge0
のパススルーはDockerさんあたりが追加したもの。
ファイルの編集が完了したら以下のコマンドでfirewalldをリロードすればOK。
# firewall-cmd --reload