次のサイトで、ネット上で攻撃してくるようなIPアドレスを、ブラックリストとして公開していることを知りました。
FireHOLで公開されているIPブラックリストを楽に適用する話 – 技術部門のBlog
ブラックリストは、firehol_level2 by FireHOL, attacks IPs list, at FireHOL IP Lists で公開されていて、サイトの左側の local copy の箇所のリンクから取得できます。
(リンク先は https://iplists.firehol.org/files/firehol_level2.netset ですね)
このリストは行数が16000件位ありますが、これを使って、ブラックリストに載っている箇所からのアクセスをipset+iptablesでブロックするようにします。
なお、以降の説明ではCentOS用になります。
準備
ipset が使えるようにします。また、ipsetのセットがサーバー再起動時に失われないように ipset-service もインストールします。
yum install ipset ipset-libs ipset-service
ipsetのセットをセット名FIREHOL_LEVEL2 で作成します。
ipset create -exist FIREHOL_LEVEL2 hash:net
今回の作業用のディレクトリを作成し、次の内容で set_firehol_level2.sh を作成します。
2023.5.3 修正
mv firehol_level2.netset firehol_level2.netset.old 2>/dev/null
curl -o firehol_level2.netset -z firehol_level2.netset.old https://iplists.firehol.org/files/firehol_level2.netset
if [ -f firehol_level2.netset ]; then
ipset f FIREHOL_LEVEL2
grep -v "^#" firehol_level2.netset | while read line;do ipset add FIREHOL_LEVEL2 $line; done < /dev/stdin
ipset save > /etc/sysconfig/ipset
fi
set_firehol_level2.sh を実行します。
sh set_firehol_level2.sh
set_firehol_level2.sh を実行すると、FireHOLからブラックリストをダウンロードしてきて、FIREHOL_LEVEL2 セットにブラックリストのIPアドレスを登録します。
また、ipsetのセット内容が、サーバー再起動時に適用されるようにしています。(ipset save > /etc/sysconfig/ipset が実行されています)
iptablesのルールの先頭に、 FIREHOL_LEVEL2 のセットにマッチしたらDROPするルールを追加します。
iptables -I INPUT -m set --match-set FIREHOL_LEVEL2 src -j DROP
iptables のルールもサーバー再起動時に適用されるようにします。
iptables-save > /etc/sysconfig/iptables
これでOKです。
この状態で、ブラックリストに載っているところからのアクセスはブロックされます。
運用
FireHOLのブラックリストは、頻繁に(1時間に数回)更新されているようです。
適宜、先の「準備」で作成した set_firehol_level2.sh を実行して、 ipsetのセット FIREHOL_LEVEL2 の内容を更新してください。
sh set_firehol_level2.sh
set_firehol_level2.sh ではFireHOLのブラックリストに変更があった場合のみ、再ダウンロードやFIREHOL_LEVEL2セットの更新を行います。
参考
ipsetとiptablesでSSHを日本国内からの接続に限定する (CentOS 7) | 稲葉サーバーデザイン
FireHOLで公開されているIPブラックリストを楽に適用する話 – 技術部門のBlog
ipsetを使ってスマートにiptablesを設定する | ギークを目指して
ブラックリストに載っている悪質なIPアドレスからのアクセスを遮断する方法 – かひわし4v1.memo
CentOS 6で国からのIPをブロックする方法
コメント