FirewallD を用いて国を指定してアクセス制限を行う
「国ごとの IP アドレスリストを取得する」で得られるアドレスリストを使用して、自動で設定・更新を行うPythonスクリプトを作成しました。
※ バグが見つかったため更新しました。(2024年 5月 3日 金曜日 23:43:05 JST)
このスクリプトは、ファイヤーウォール(FirewallD)を用いて指定された国のパケットを DROP (つまり接続拒否)します。
アクセス制限などにご利用下さい。
解凍
zip ファイルを解凍すると「ipDenyFierwallD.tar.gz」が得られると思います。
直接インストールする場合は、ファイルを「/tmp」にコピーして次のコマンドを実行して下さい。
# cd /
# tar xcvfp /tmp/ipDenyFierwallD.tar.gz
すると、「/usr/local/」にファイルがインストールされます。
設定
設定ファイルは「/usr/local/etc/ipDeny/ipDeny.conf」にインストールされます。
[DEFAULT]
deny_country = RU, CN, HK, KR, NL
tmp_directory = /tmp
address_file_suffix = .zone
url_ipv4 = https://www.ipdeny.com/ipblocks/data/countries/
url_ipv6 = https://www.ipdeny.com/ipv6/ipaddresses/blocks/
auto_remove_download_file = yes
- deny_country
アクセスを禁止する国のコード(二文字)をカンマで区切って指定して下さい。 - tmp_directory
国の IP リストを保存するディレクトリです。 - address_file_suffix
IP リストのファイル拡張子です。(変更は非推奨です。) - url_ipv4
IPv4 形式のファイルが格納されているURLです。(変更は非推奨です。) - url_ipv6
IPv6 形式のファイルが格納されているURLです。(変更は非推奨です。) - auto_remove_download_file
国の IP リストの自動削除(yes/no)です。
他のサービスの ACL(Access Control List)に利用する場合等は「no」を指定しても構いません。
ソース
ソースは「/usr/local/lib/python/ipDenyFierwallD.py」に格納されています。ご自由に改変や再配布などを行ってもらって構いません。(一応、BSDライセンス…かな?)
実行
ルート権限で実行して下さい。設定・更新が自動で行われます。
$ sudo ipDenyFierwallD
更新
一定期間ごとに更新したい場合は、「/usr/local/bin/ipDenyFierwallD」のシンボリックリンクを「/etc/cron.weekly/」などに作成して下さい。
# ln -s /usr/local/bin/ipDenyFierwallD /etc/cron.weekly/
バグなどについて
もしもバグなどを見つけた場合は、コメント頂けると幸いです。