CNからのコメントスパムがひどいことになってきたので
日本以外のIPを.htaccessで制限した。
※deny .cn で最初試したけどうまくいかなかった。DNSから国コードが引けないのが多い?
当初
http://www.cgis.biz/tools/access/
からとってきたのを置いてて、うまくいってたけど、このIPは
不定期に変わるらしいので毎日1回取りに行くことにした。といっても
http://wataame.sumomo.ne.jp/archives/550
からのコピペ。ありがたい。
こちらでいじったのは
・配置場所を手直し、allow from にお馴染みの「Allow from .il24.net」を追加
・cronで実行されるshに.htaccessのコピー配置も追記
・置き換える前に生成されるファイルのサイズチェックを追加
(APNICから応答が無くて0バイトのIPリストができてしまう場合は置き換えを実施しない)
程度。
まるごとコピペなのも情けないので、内部で計算していた
サブネットマスクの計算についてチラッとメモ。
1)APNICで取れる情報
apnic|JP|ipv4|216.8.0.0|4096|19990910|allocated
→4096→216.8.0.0から4096個割り当ててる
2)サブネットマスク計算
=32-(LOG(4096)/LOG(2)) →20(255.255.240.0)
3)以下の様に表記される
allow from 216.8.0.0/20
■以下はほぼまるごとコピペの内容。
get_ip.php
<?php // APNIC URL $fp_arr = file("http://ftp.apnic.net/stats/apnic/delegated-apnic-latest"); $jp_ip4 = "order deny,allow" . "\n"; $jp_ip4 .= "deny from all" . "\n\n"; foreach( $fp_arr AS $v ) { if( preg_match('/ipv4/', $v) && preg_match('/JP/', $v) ) { $_line = explode('|', $v); $_line[3]; $prefix = log($_line[4]) / log(2); $prefix = 32 - $prefix; $jp_ip4 .= "allow from " . $_line[3] . "/" . $prefix . "\n"; } } // Search engine bot and YahooBB_InterLink $jp_ip4 .= "\n"; $jp_ip4 .= "Allow from .googlebot.com" . "\n"; $jp_ip4 .= "Allow from .yahoo.net" . "\n"; $jp_ip4 .= "Allow from .msn.com" . "\n"; $jp_ip4 .= "Allow from .bbtec.net" . "\n"; $jp_ip4 .= "Allow from .il24.net" . "\n"; print $jp_ip4; ?>
★こちらをcronで実行
jpip_get.sh
#!/bin/sh /usr/local/bin/php /srv/bin/htaccesscron/get_ip.php > /srv/bin/htaccesscron/.htaccess.new SIZE=`ls -l /srv/bin/htaccesscron/.htaccess.new | awk '{ print $5 }'` if [ -e /srv/bin/htaccesscron/.htaccess.new ] && [ $SIZE -gt 50000 ]; then rm /srv/bin/htaccesscron/.htaccess.old mv /srv/bin/htaccesscron/.htaccess /srv/bin/htaccesscron/.htaccess.old mv /srv/bin/htaccesscron/.htaccess.new /srv/bin/htaccesscron/.htaccess \cp -f /srv/bin/htaccesscron/.htaccess /配置先 \cp -f /srv/bin/htaccesscron/.htaccess /配置先 fi