ブラックリストに載っている悪質なIPアドレスからのアクセスを遮断する方法

2019年8月25日 1 投稿者: khws4v1

世の中にはスパムや攻撃といったことを繰り返す悪質なIPアドレスのリストが存在しています。
有名なものではstopforumspamがあり、スパム行為をするIPアドレスのリストが提供されています。

今回はインターネットに存在する複数のIPアドレスリストを自動的に収集し、ファイアウォールで掲載されているIPアドレスからのアクセスを遮断する方法を紹介します。

IPアドレス一覧の一覧

IPアドレスのリストのリストを提供するFireHOL IP Listsというウェブサイトがあります。
これはインターネット上のIPアドレス一覧をまとめているサイトです。
また、これらのIPアドレスを自動的に収集するupdate-ipsets.shというスクリプトも提供されています。

初期設定

update-ipsets.sh

update-ipsets.shは指定されたIPアドレス一覧を取得し、ipsetに取り込むスクリプトです。
このスクリプトの動作にはipsetとiprangeというソフトウェアが必要なのでインストールしてください。
ipsetとiprangeのビルドに必要なパッケージはこのコマンドでインストールできます:

iprangeは自力でビルドします。

update-ipsets.shは単なるシェルスクリプトなので/usr/local/binに直置きでいいでしょう。

ipeset-apply.sh

update-ipsets.shは存在するipsetを自動でアップデートしますが、最初の初期設定を行うのがipset-apply.shです。
これはipsetのsetの作成とIPアドレスの反映をするスクリプトです。

手動でやってもいいですが、あると簡単に進められるのでダウンロードしておきましょう。

ipsetの永続化

ipsetは再起動するたびに設定が消滅します。
起動時にipsetが復元されるように設定してください。

iptablesの永続化

iptablesの設定も再起動で消えるので永続化。
CentOSはデフォルトでfirewalldですが、firewalldは--permanentオプションで消えなくなるので何もしなくていいです。

定期アップデート

リストは定期的にアップデートされるのでcronで定期的にアップデートしてきます。

ダウンロードとリストの反映

初期設定が終わったので、実際にリストをダウンロードしてipsetに入れましょう。
まずはリストの選定ですが、ここに書いてあるので参考にしてください。
すべてのリストの一覧はFireHOL IP Listsにあります。

ファイアウォールの設定

ipsetに取り込んだだけではアクセスの拒否はできないのでファイアウォールを設定します。

iptables

iptablesの設定ファイルを直接編集していきます。
Debian/Ubuntuは/etc/iptables/rules.v4、CentOSは/etc/sysconfig/iptablesです。

入ってくるパケットに対してipsetの特定のリストに入っているIPアドレスからのアクセスを遮断する場合はリストごとに以下を記述します。

iptablesは先のルールが優先的に処理されます。
後に追加しても先のルールで処理されると遮断できなくなるので注意してください。

実際にどのくらいファイアウォールで遮断されたかを確認したい場合はログに出すように設定します。

編集が終わったら設定ファイルを再ロードされます。

firewalld

--directオプションでiptablesを直接触ります。