やりたいこと
- LB配下のサーバ内ApacheでBasic認証とIP制限をする
- 同一サーバ内に同じドキュメントルートでフロント画面と管理画面がある
- フロント画面(front-website.com)はIP制限なし、Basic認証あり
- 管理画面(backend-website.com)はIP制限あり、Basic認証なし
構成
- サーバにはフロント画面(front-website.com)と管理画面(backend-website.com)がある
- LB1台、サーバ1台
- CentOS7
- Apache2.4
- AWS
実際に設定した内容 ※該当箇所のみ抜粋
- allow_ip1~allow_ip3のIPアドレスが管理画面(backend-website.com)
<VirtualHost *:80>
ServerName front-website.com
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options FollowSymLinks ExecCGI Includes
DirectoryIndex index.html index.php
AllowOverride All
EnableMMAP Off
EnableSendfile Off
</Directory>
<Location "/">
## ★Basic認証設定★
AuthType Basic
AuthUserFile /etc/httpd/conf/.htpasswd
AuthGroupFile /dev/null
AuthName "Basic Auth"
Require valid-user
## ★ヘルスチェックからBasic認証を外す★
Satisfy Any
SetEnvIf Request_URI "/health.html" healthcheck
Order Deny,Allow
Deny from all granted
Allow from env=healthcheck
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName backend-website.com
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options FollowSymLinks ExecCGI Includes
DirectoryIndex index.html index.php
AllowOverride All
EnableMMAP Off
EnableSendfile Off
</Directory>
<Location "/">
Require all denied
Satisfy Any
SetEnvIf X-Forwarded-For "123\.123\.123\.123.*" allow_ip1 ★許可するIPアドレス1
SetEnvIf X-Forwarded-For "456\.456\.456\.456.*" allow_ip2 ★許可するIPアドレス2
SetEnvIf X-Forwarded-For "789\.789\.789\.789.*" allow_ip3 ★許可するIPアドレス3
Order Deny,Allow
Deny from all
Allow from env=allow_ip1
Allow from env=allow_ip2
Allow from env=allow_ip3
</Location>
</VirtualHost>
つまづいたところ
ApacheでのIP制限がうまくいかない問題
原因
- ApacheがリモートIPアドレスを拾うことが出来ていなかったため設定が反映されなかった。
- 以下の設定だとアクセス時のIPはLBのIPをApacheが判断してしまい、allow_ipでアクセスしてもアクセス不可能でした。
もともと設定していた悪い例
<VirtualHost *:80>
ServerName backend-website.com
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options FollowSymLinks ExecCGI Includes
DirectoryIndex index.html index.php
AllowOverride All
EnableMMAP Off
EnableSendfile Off
</Directory>
<Location "/">
Require all denied
Require ip 123.123.123.123 allow_ip1 ★許可するIPアドレス1
Require ip 456.456.456.456 allow_ip2 ★許可するIPアドレス2
Require ip 789.789.789.789 allow_ip3 ★許可するIPアドレス3
</Location>
</VirtualHost>