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

それぞれのファイルは、以下のようになっています。

使用例

使用例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

必要条件と注意事項

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アドレスを使用している人やマシンの実際の所在地とは必ずしも一致しない点にもご留意ください。