pfパケットフィルタを使って特定の国からのアクセスを全て拒否する

以前から管理しているサーバへ某国からの無駄なアクセスが多いのをなんとかしたいなと思っていて パケットフィルタを使ってアクセスを拒否出来ないか調べたらアクセスリストファイルを使って簡単に出来そうなのでやってみました。

まず拒否したいIPアドレスの一覧をテキストファイルで用意します。 例えば中国で利用しているIPアドレス一覧は以下のサイトから取得できます。

http://fetus.k-hsu.net/document/network/ipv4assign/countries/cn.html

テキストファイル形式でIPアドレス一覧がダウンロードできます。 全てCIDR形式で書かれておりアドレス以外の情報が付いているのでエディタやスクリプ トで置換機能を使ってIPアドレスだけのファイルにします。 大国なので利用するIPアドレスの数が膨大で3,000以上のアドレスブロックからなるファイルになりました。

この拒否したいアドレスリストのファイルを /etc/cn_ip.txt として保存します。 次にパケットフィルタの設定をします。 拒否するIPアドレスファイルを <spammers_cn> テーブル(このテーブルの名前は任意で 付けることが出来ます)に読み込み block フィルタを使い <spammers_cn> を指定するだけのたった2行で簡単に拒否できます。

/etc/pf.conf

table <spammers_cn> persist file "/etc/cn_ip.txt"
block log quick on $ext_if from <spammers_cn>

/etc/cn_ip.txt

1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.0.32.0/19
1.1.0.0/24
1.1.2.0/23
1.1.4.0/22
1.1.8.0/21
1.1.16.0/20
1.1.32.0/19
.......
以下ずーーっと3,000行以上続きます。

最新のIPアドレス

追記:2014/05/23

世界で使われているIPアドレスは日々更新されております。 最新のアジアで使われているIPアドレスが必要なときはapnicのサイトから情報を取得することが出来ます。 以下のapnicのアドレスから取得して下さい。

http://ftp.apnic.net/stats/apnic/
created:

Back to top