うざい国からのアクセスを全て遮断


どこぞの国からの攻撃がうざったい鯖缶さんのためのページです。

■ フィルタを作成するためのシェルスクリプト(バッチファイル)

2007/07/01 単純にCIDR表記に置き換えることのできないデータに対応しました。多謝 世界の国別 IPv4 アドレス割り当てリスト
(アドレス数が768個と書かれていて一対一ではCIDR表記に置き換えられないもの、およびサブネット境界を跨いでいるもの)

*NIXシステム用 (Linux iptables環境およびFreeBSD ipfw環境、Windows環境向け; perlが必要)

Windowsシステム用 (Windows 2000/XP/2003/Vista対応)

■ 上記のシェルスクリプト/バッチファイルの使いかた

  1. (Windowsのみ) まずは このページ を参考にしてパケットフィルタリングを有効化します。

  2. APNICやARINなどから最新のデータベースをダウンロードします。
    wget とか fetch のようなダウンロードツールを使っても良いですし、もちろん普通のWebブラウザを使ってもかまいません。
    URLは ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest (APNIC)   ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest (ARIN) です。

  3. あとは以下のようにシェルスクリプト/バッチファイルを実行します。Windowsの場合はコマンドプロンプトからどうぞ。

    (Windows) cscript //nologo countryfilter.vbs KR,CN,KP < delegated-apnic-latest > filter.netsh
    (Linux) perl countryfilter.pl iptables KR,CN,KP < delegated-apnic-latest > filter.sh
    (FreeBSD) perl countryfilter.pl ipfw KR,CN,KP < delegated-apnic-latest > filter.sh

    なお、 "KR,CN,KP" はフィルタ対象の国を指定する項目です。カンマ区切りで、ISO3166-1形式の2文字の国コードを並べてください。
    ISO3166-1形式での国コードは 国名・通貨コード一覧 ISO提供のリスト から探してください。
    この例では KR=韓国, CN=中国, KP=北朝鮮 からのそれぞれのアクセスを制限するものが作られます。

  4. それぞれ filter.netsh または filter.sh ができあがりますので、必要に応じて冒頭に書かれている設定を修正します。
    Windows環境の場合は特に書き換える項目はありません。

    Linux環境の場合 IPTABLES= 以下に iptables の実行形式へのパスを、FILTERNAME= 以下にフィルタ名を、TARGET= 以下にパケットの処理方法 ("DROP" であればパケットを捨て、 "REJECT" であれば接続を拒否する旨を相手に伝えます) を記入します。

    FreeBSD環境の場合 IPFW= 以下に ipfw の実行形式へのパスを、RULENUM= 以下にipfwルール番号を記入します。

  5. あとは filter.netsh または filter.sh を実行するだけです。

    (Windows) netsh -f filter.netsh

    (Linux/FreeBSD) source filter.sh

    このように実行することでそれぞれ指定したフィルタまたはルールにそれぞれの国からのアクセスを拒否したり遮断したりすることが出来ます。

■ お急ぎの人/面倒くさい人/よくわからない人向け (1週間に1度程度更新; 更新日時はそれぞれの冒頭部分を参照)

元のデータ (APNICにある ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest と全く同じもの)

元のデータ (ARINにある ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest と全く同じもの)

中国(CN),韓国(KR),北朝鮮(KP) を指定して作成したLinux iptables環境用シェルスクリプト

中国(CN),韓国(KR),北朝鮮(KP) を指定して作成したFreeBSD ipfw環境用シェルスクリプト

中国(CN),韓国(KR),北朝鮮(KP) を指定して作成したWindows環境用netshスクリプト

 

日本(JP) を指定して作成したLinux iptables環境用シェルスクリプト

日本(JP) を指定して作成したFreeBSD ipfw環境用シェルスクリプト

日本(JP) を指定して作成したWindows環境用netshスクリプト

■ 注意事項

本ページに掲載しているフィルタ作成用シェルスクリプト・バッチファイルは全て GNU GPL Version 2   (日本語訳) に従って配布しています。このプログラムを使う(または改変する)にあたって用途や目的による制限はしませんが、併せて保証も全く行なわれないことに注意してください。

また、APNIC/ARINのデータベース自身とそこから作成したシェルスクリプトやバッチファイルはそれぞれの著作権を含んでいます。何か文句を言われたらそれに従う必要があるかもしれません。

■ Thanks to ...

"うざい国からのアクセスを全て遮断" スレッド

自宅サーバ@2ch掲示板

■ おまけ

IPアドレスからアクセス元の国を判定するスクリプト
ARINやAPNICなどのデータベースを参照し、指定したIPアドレスがどの国のものであるかを判定します。

[使い方] $ ./countrycheck.pl [データベースファイル] ... < (IPアドレスの羅列) > (結果)

[データベースファイル]: ARIN, APNIC, RIPE などのデータベースファイルを指定します。

それぞれ delegated-(arin/apnic/ripe etc.)-latest のファイル名です。
これを書いている時点では ARIN   APNIC   RIPE   LACNIC   AfriNIC の計5つがありますが、全てを指定してもかまいませんし一部(または1つだけ)を指定してもかまいません。
(IPアドレスの羅列): 1行ごとに1つのIPアドレスを記載したファイルです。
一般的に使われているNCSAログ形式から取り出すには、
 $ cut -d " " -f 1 < (ログファイル) > (IPアドレスの羅列) 
のようにすれば取り出せます。
(結果): 1行ごとに "IPアドレス" "国コード (ISO3166-1形式)" がスペース区切りで出力されます。国が見つからない場合は出力されません。

あとは以下のようにして集計すると、国別のアクセス数順位が得られます。
 $ cut -d " " -f 2 < (結果) | sort | uniq -c | sort -r > (アクセス数順位) 

Last updated: 2013/08/22 08:14:01