


中国が特段嫌いではないのですが中国からのSpamアクセスが多くて、ちょっとウザかったりします
いままでも酷いのは.htaccessにdeny from IPでその都度手動で追加してしのいでいましたが、いっそうのこと中国からのアクセスをすべて拒否してみることにしました
中国に割り当てられているIPブロックの一覧はこのファイルに記載されています
APNIC delegated internet number resources
http://ftp.apnic.net/stats/apnic/
http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
国コードはCNなのですが、このdelegated-apnic-latestから抽出してCIDRにまとめてapacheで拒否できる”deny from IP”ファイルを作成、そしてhttpd.confや.htaccessに貼り付けてapacheのリロードはなかなかの手間です
頻繁に割当ブロックが変わることも無いとは思うのですが、それでも手動となると老眼SEは面倒だな~となってしまうわけです
どこかにLinuxで動作するプログラムが無いかなと探すとありました(感謝!)
うざい国からのアクセスを全て遮断
http://www.42ch.net/~shutoff/
countryfilter.pl
http://www.42ch.net/~shutoff/prog/countryfilter.pl
Perlプログラムでdelegated-apnic-latestを読み込ませてCIDRにしてipfw, iptables, Windows用のファイルを作成してくれます
Apache用が無いのでPerlは全くの初心者ですが、見よう見まねで機能を追加してみました
updated to Apache for the countryfilter.pl
http://www.rootlinks.net/Program/countryfilter.txt
提供元から転載
■ 注意事項
本ページに掲載しているフィルタ作成用シェルスクリプト・バッチファイルは全て GNU GPL Version 2 (日本語訳) に従って配布しています。このプログラムを使う(または改変する)にあたって用途や目的による制限はしませんが、併せて保証も全く行なわれないことに注意してください。
また、APNIC/ARINのデータベース自身とそこから作成したシェルスクリプトやバッチファイルはそれぞれの著作権を含んでいます。何か文句を言われたらそれに従う必要があるかもしれません。
使用方法(Linux)
- プログラムをダウンロード
- オプション指定
- apache用中国IPブロックを抽出
- apache用中国と韓国IPブロックを抽出
- ファイルに保存
プログラムをダウンロードして拡張子.txtを.plに変更して下さい
国コードと用途を指定します
1 2 3 4 5 |
[root@www ~]# perl countryfilter.pl Usage: countryfilter.pl (Filter Type) (Target Countries) (Filter Type): A filter name ("iptables" or "ipfw" or "windows" or "apache"). (Target Countries): Target countries seperated with comma (ex. "KR,CN,KP"). |
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@www ~]# perl countryfilter.pl apache CN < delegated-apnic-latest # Country based filter from *NIC database. # For APNIC, get from ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest . # Created: Sun Mar 22 13:33:19 2014 # # This filter detects access from contries; # CN # Database version 20140322 deny from 1.0.1.0/24 deny from 1.0.2.0/23 deny from 1.0.8.0/21 (snip) |
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@www ~]# perl countryfilter.pl apache CN,KR < delegated-apnic-latest # Country based filter from *NIC database. # For APNIC, get from ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest . # Created: Sun Mar 22 13:35:15 2014 # # This filter detects access from contries; # CN KR # Database version 20140322 deny from 1.0.1.0/24 deny from 1.0.2.0/23 deny from 1.0.8.0/21 (snip) |
apache用中国IPブロックを抽出してファイルに保存
1 |
[root@ns ~]# perl countryfilter.pl apache CN < delegated-apnic-latest > Deny_CN.txt |
さて、この出力されたIPをhttpd.confや.htaccessにコピー&ペーストするのですが、これをもっと簡単にできないかと工夫してみました
- 拒否IPファイル専用フォルダを作成
- httpd.confを編集
- 中国IPファイルを作成
- Apache設定ファイル読込
1 |
[root@www ~]# mkdir /etc/httpd/DenyIP |
アクセス制限を掛けるDirectoryディレクティブにincludeで追加します
1 2 3 4 5 |
<Directory "/var/www/Docs"> Order allow,deny Allow from all Include /etc/httpd/DenyIP/*.inc </Directory> |
1 |
[root@www ~]# perl countryfilter.pl apache CN < delegated-apnic-latest > /etc/httpd/DenyIP/Deny_CN.inc |
1 |
[root@ns ~]# apachectl graceful |
上記手順をshell scriptにしてcronで週一とか月一で実行すれば自動化できます
これ以外にも拒否したいIPがある場合は/etc/httpd/DenyIP/DenyIP.incなどを作成してその都度個別に追加すれば大丈夫と思います
サーバ管理者でないと難しいですが、それでもいろいろ工夫できるのではと思います
暫くしてログを確認して403が出てくれば拒否できています
1 2 |
[root@www ~]# grep "HTTP/1.1\" 403" /var/log/httpd/access_log 59.58.157.73 - - [22/Mar/2014:13:43:48 +0900] "GET /2010/06/16/usb-rsaq2/ HTTP/1.1" 403 195 "-" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1" |