firewalldでcn/br/ruからのパケットを落とす

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
タイトルとURLをコピーしました