All In One WP SecurityとIPアクセス制限
特定のIPアドレスからのアクセスしか許可しない設定をしようとして、はまりました。
リバースプロキシを経由しないアクセスを拒絶する設定をしようとして、.htaccess に以下を記載しました。Require ip で指定した2つのIPアドレスがリバースプロキシ(仮名:outer.taiyodo.ga)です。
<IfModule mod_authz_core.c>
<RequireAny>
Require all denied
## for reverse proxy
Require ip 123.456.789.1 123.456.789.2
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
Allow from 123.456.789.1 123.456.789.2
</IfModule>
オリジンサーバ(仮名:inner.taiyodo.ga)は名前ベースのバーチャルホストなので、動作確認をするには、テスト用のリバースプロキシ(Nginx)を作り、Windowsのhostsファイルで、outer.taiyodo.gaをNginxのIPアドレスに設定してアクセスする必要がありました。
Nginxのリバースプロキシの設定:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name outer.taiyodo.ga;
location / {
proxy_pass https://inner.taiyodo.ga/;
proxy_set_header Authorization "Basic dXNlcjpwYXNzd29yZA==";
}
ssl_certificate /etc/letsencrypt/live/outer.taiyodo.ga/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/outer.taiyodo.ga/privkey.pem; # managed by Certbot
}
server {
listen 80;
listen [::]:80;
server_name outer.taiyodo.ga;
location / {
proxy_pass http://inner.taiyodo.ga/;
proxy_set_header Authorization "Basic dXNlcjpwYXNzd29yZA==";
}
}
inner.taiyodo.gaはBASIC認証付きにしたので、Authorizationヘッダを加えています。
C:\Windows\System32\drivers\etc\hosts の設定:
192.168.10.128 outer.taiyodo.ga
これでWindowsのブラウザからアクセスすると、Nginx(192.168.10.128)からinner.taiyodo.gaにアクセスすることになるので、Forbiddenになるはずでしたが、ぜんぜん普通にアクセスできちゃいました。
.htaccess にはAll In One WP Security(AIOWPS)やCocoonの設定がいっぱいあったので、そのなかのどれかが干渉しているかも、と、めぼしを付けるまで、丸一日かかりました。で、やっと見つけたのがこれ:
# 6G:[USER AGENTS]
<IfModule mod_setenvif.c>
SetEnvIfNoCase User-Agent ([a-z0-9]{2000,}) bad_bot
SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune)
bad_bot
# Apache < 2.3
<IfModule !mod_authz_core.c>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</IfModule>
# Apache >= 2.3
<IfModule mod_authz_core.c>
<RequireAll>
Require all Granted
Require not env bad_bot
</RequireAll>
</IfModule>
</IfModule>
#AIOWPS_SIX_G_BLACKLIST_END
UAでへんなBOTかどうかチェックして変じゃなかったらアクセス許可、という設定です。へんなBOTだったら拒否、ってやってくれればいいのに。
AIOWPSの該当する箇所がこれ。WPセキュリティ>ファイアウォール>6G ブラックリスト/ファイアウォールルール:
「6Gファイアーウォール保護を有効化」でした。このチェックをはずしたら、ちゃんとForbiddenになってくれました。
機能的には5Gのほうがあるから、まぁいいや、という感じです。
ひさびさにはまった感があった一日でした。