PG WORKS

PHPやLinuxサーバなどのノウハウや、便利なツールを紹介していきます。

Apache2.4でのWebアクセス制御

とある事情で国内のみのアクセス制限することになり、下記のサイトからIPリストを取得

www.cgis.biz

早速「.htaccess」で設定したら、サイトが落ちかけました。。。

.htaccessはサイトにアクセスがあるたびに設定内容を読み込むため、
国内のIPリストを4000行書くと、サーバーが応答不能になるほど重くなります。

CentOS7標準の「firewall」で設定しようと思いましたが、検索エンジンを回避方法がわからず。。。
※ユーザーエージェントで回避するみたいですが、設定がよくわからにゃい(汗

vhost.conf

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /example
    ServerName example.com
    <Directory "/example">
       Options FollowSymLinks
       AllowOverride All
       Include /etc/httpd/conf.d/iplist
    </Directory>
</VirtualHost>

バーチャルホストの設定を「/etc/httpd/conf.d/vhost.conf」に書いています。

「example」というフォルダが対象(サンプルなので各自の設定に書き換えてください。

4000行もipを書くため別ファイルに分けました。

iplist

SetEnvIf User-Agent "Googlebot" bok
SetEnvIf User-Agent "Slurp" bok
SetEnvIf User-Agent "msnbot" bok
SetEnvIf User-Agent "bingbot" bok
<RequireAny>
Require all denied
Require env bok
Require ip 1.0.16.0/20
Require ip 1.0.64.0/18
Require ip 1.1.64.0/18
#
#続きのipをここに記載
#
</RequireAny>

設定エラーがでないか「configtest」で確認

service httpd configtest


Syntax OK

と表示されれば問題ないので、Apacheを再起動させます。

service httpd restart

サイトが落とせないのであれば、下記のコマンドで反映できます。

service httpd graceful