GeoFilter
GeoFilter は、指定した国や地域からのアクセスを遮断する Python スクリプトです。
Ubuntu Server 20.04 LTS で動作します。(CentOS 8 向けは こちら に移動しました)
ダウンロードとインストール
こちら からダウンロードできます。 (geofilter.tar.gz)
以下のようにして、解凍を行いファイルを所定のディレクトリーにコピーしてください。
$ tar zxvf geofilter.tar.gz
$ sudo cp geofilter/geofilter.py /usr/local/sbin/
$ sudo cp geofilter/geofilter.service /etc/systemd/system/
$ sudo cp geofilter/geofilter.timer /etc/systemd/system/
$ sudo chmod 0755 /usr/local/sbin/geofilter.py
それぞれのファイルは、以下のようになっています。
- geofilter.py - 本体です
- geofilter.service - 更新のための自動実行を行わせる設定ファイルです
- geofilter.timer - 定期的に更新を行うようにするための設定ファイルです
使用例
使用例1:特定の国や地域からのアクセスを遮断する場合
$ sudo geofilter.py deny AF CF CG IQ LB LY KP SO SS SD KR CN HK RU BY
使用例2:使用例1の後、自動更新をする場合
/etc/systemd/system/geofilter.service
内の ExecStart=/usr/local/sbin/geofilter.py deny AF CF CG IQ LB LY KP SO SS SD KR CN HK RU BY
の部分を適宜書き換えたのち、以下のようにします。
$ sudo systemctl enable geofilter.timer
$ sudo systemctl start geofilter.timer
国や地域の指定について
国や地域は、ISO 3166-1 alpha 2 で規定されたアルファベット2文字で指定してください。
ご参考:https://ja.wikipedia.org/wiki/ISO_3166-1
必要条件と注意事項
- Ubuntu Server 20.04 LTS で動作確認済です。(python3, systemctl, iptables, ip6tables が利用可能であることが前提です)
- ipset のインストールが必要です。
- 国や地域のデータを5つの RIR からダウンロードするため、処理に数分かかる場合があります。
- プロキシーサーバーを使用している場合、後述のように
geofilter.py
を書き換えてください。
- Podman や Docker などのコンテナの中で実行するのではなく、コンテナの外(ホスト)での実行を推奨します。
- 本ソフトウェアのインストールもしくは使用により生じたいかなる損害についても保障いたしません。
ipset のインストール方法
$ sudo apt install ipset
プロキシーサーバーを利用している場合
$ sudo vi /usr/local/bin/geofilter.py
:
#os.environ["http_proxy"] = "http://user:pass@proxy.server:port" ←このコメントを外して設定します
#os.environ["https_proxy"] = "http://user:pass@proxy.server:port" ←このコメントを外して設定します
:
解説
5つある地域インターネットレジストリ (RIR: Regional Internet Registry)
が公開しているインターネット資源の割り振り/割り当てデータ (RIR statistics files) の中から、
指定した国や地域に割り当てられている IPv4 ならびに IPv6 のアドレスをかき集め、CIDR 記法で書かれたリストを作成します。
このリストをセット化してシステムのファイアウォールに渡すことで、フィルタリングを行います。
なお、この割り振り/割り当てデータは毎日更新されているため、時々(週に1度程度)実行してリストを更新する必要があります。
また、この割り振り/割り当てデータに示された国や地域は、そのIPアドレスを使用している人やマシンの実際の所在地とは必ずしも一致しない点にもご留意ください。