IPアドレスによるブロッキング③
近年、中国や韓国からなどのサーバーに対する脅威は増加している。また、Tor を使った犯罪行為となるアクセスなど、気を付けた方が良いだろう。
そこで、中国や韓国からのアクセス制限や、中国へのデータ送信の拒否、Tor を使用したアクセスなどを禁止できるツールを作成いたしましたので、公開致します。
コチラは FirewallD 版です。(iptables / ip6tables 版)
※ このツールはサーバー管理者用ですので、一般の方には無縁です。
※ このツールは、GPLで公開しています。
※ このツールでは、Python を利用しています。(Python 2.7 以上を推奨)
※ このツールは、FirewallD 用の設定を ARIN、RIPE、APNIC、LACNIC、AfriNIC から入手したデータから作成します。
※ このツールは、「Python 2.7.5」「firewalld 0.3.12」を使用し、Fedora20 で開発・確認を行っています。
入手・インストール
firewalld_ipblock (ver 1.0.0) を入手(python2.7)
firewalld_ipblock (ver 2.3.1) を入手(python3.4)
firewalld_ipblock-python3-Interface(python3 インターフェース対応版) を入手
インストール
コマンドラインから解凍後にディレクトリの中に入り、「./install.py」を実行して下さい。
※ 「./install.py -h」または「./install.py –help」で使い方が参照できます。
※ デフォルトでは「/usr/local/」にインストールされます。(推奨)
※ インストールするためには FirewallD が動作している必要があります。
設定
必ず「/usr/local/etc/firewalld_ipblock/firewalld_ipblock.conf」を開いて、内容を確認して下さい。
※ 設定ファイルの内容を変更するには、「FirewallD」及び「iptables」などの知識が必要です。不明な点がある場合は、「man iptables」で確認して下さい。
ツールの概要
- ARIN などから入手したデータを元に、指定国のデータを抽出し、一時ファイル(キャッシュ)に保存します。また、一時ファイルの作成・更新は、指定日数後に行われます。(ただし、手動で一時ファイルを削除した場合は除く)
- スクリプト実行時に、一時ファイルから指定国のアクセス拒否オプションを作成し、「/etc/firewalld/direct.xml」に保存します。
- 設定ファイル内で、改行してから、先頭に空白を入れる事により、オプションやファイルを複数指定出来ます。
- 「特別拒否IPv4のデータファイル」(dataDenyFileIPv4)に Tor の出口サーバー一覧データファイルを指定すると、Tor からのアクセスを禁止する事が可能です。
- デフォルト設定では、iptables の INPUT(外部からのアクセス)に対して、アクセス制限を行っています。OUTPUT に指定を変更すると、外部へのアクセス制限になります。
- デフォルト設定では、iptables の REJECT(拒否)によるアクセス制限を行っています。DROP(破棄)を指定すると、事実上、指定 IP に対して送受信が不可能になります。
- 特定指定 IP に対しての許可・制限が行えます。この事を利用して、アクセス拒否指定国であっても例外でのアクセス許可が行えます。
- このスクリプトは、膨大な登録を行うため、処理に数十分〜一時間程度、必要とします。
- このスクリプトは、/etc/firewalld/direct.xml として生成される XML を表示・確認する事が可能です。(この時、チェックや保存コマンドは実行されません)
- このコマンドのシンボリックリンクを「/etc/cron.weekly/」や「/etc/cron.monthly/」に作成することで、1週間や1月単位で自動起動する事が出来ます。
- 詳しくは、「firewalld_ipblock -h」または「firewalld_ipblock –help」で確認して下さい。
- 『/etc/firewalld/direct.xml』のサイズが大きい場合、firewalld はロードやリロードに10分程度掛かります。この時、ネットワークが利用出来なくなる環境がある様です。つまり、このスクリプトを導入している場合は、システムの起動時や更新時に外部からアクセス出来なくなる可能性がありますので注意して下さい。( iptables と FirewallD が共にインストールされている環境での問題が確認されています。)
- python 3 版では、『/etc/firewalld/direct.xml』の更新がない場合は、デフォルトでは firewalld のリロードを行いません。
- このスクリプトでは、拒否したアドレスなどをカーネルログとして記録します。
変更および再配布について
このソフトウェアは GNU GPL ライセンスの下で公開しています。つまり、ライセンスに従う限りに於いて、ソーズの変更や再配布を行う事が出来ます。
バグなどについて
バグなどを見つけた場合は、twitter で知らせてくれると助かります。(@kanrakara https://twitter.com/kanrakara)