■条件
-
Reverse Proxy
を使用し、各種コンテナに振り分けている - IP制限は各コンテナで行う
- WEBサーバはApache(2.4)を使用している
- 各コンテナのIPアドレスは「172.16.0.xxx」と仮定
- ホスト側のIPアドレスは「192.168.10.xxx」と仮定
■Reverse Proxy
を気にせずIP制限をした場合
<VirtualHost *:80>
ServerName www.local.com
ServerAlias www.local.com *.local.com
DocumentRoot /var/html
<Directory "/var/html">
Require all denied
Require ip 192.168.10.100
Require ip 192.168.10.101
</Directory>
</VirtualHost>
上記の設定は「192.168.10.100」と「192.168.10.101」からのアクセスのみを許可したい場合の設定です。
ですが、「192.168.10.100」からアクセスを行ってもエラーとなります。
Reverse Proxy
を使用している場合、IPアドレスが「172.16.0.xxx」となる為、「Require ip」と条件が一致しません。
元のIPアドレスはX-Forwarded-For
などに設定されています。
では、どのように設定すればX-Forwarded-For
で制限を指定することが出来るのか?
mod_remoteip
で解決することができます。
■mod_remoteipを使用してIP制限をした場合
<VirtualHost *:80>
ServerName www.local.com
ServerAlias www.local.com *.local.com
DocumentRoot /var/html
RemoteIPHeader X-Forwarded-For
<Directory "/var/html">
Require all denied
Require ip 192.168.10.100
Require ip 192.168.10.101
</Directory>
</VirtualHost>
RemoteIPHeader を記載します。
※Directory
の中には記載できません
上記のようにRemoteIPHeader
を設定した後、Require ip
で比較されるIPアドレスはX-Forwarded-For
になります。
■Debianで「mod_remoteip」を有効にする
a2enmod remoteip
■Alpineで「mod_remoteip」を有効にする
sed -i -e 's/#\(LoadModule remoteip_module\)/\1/' /usr/local/apache2/conf/httpd.conf
■関連