はじめに
こちらの記事で、リバースプロキシ経由でWEBサーバーを立ち上げました。(実際は、Raspberry Piではなく、Ubuntu ServerをインストールしたPCですが、やり方は一緒です。)
ところが、WEBサーバーへのアクセス記録が、リバースプロキシとしたSynology NASのIPアドレスになっています。
たとえば、404エラーの記録。

接続は、下の図のようになってますので、リバースプロキシとしたSynology NASのIPアドレス192.168.9.99が記録されています。

これでは、IPアドレスでのアクセス制御や、WordPressプラグインWP Statisticsを使ったアクセス統計ができないので、対策します。
対策
リバースプロキシ カスタムヘッダー
まずは、Synology NASのリバースプロキシのカスタムヘッダーを追加し、クライアントのIPアドレスをWEBサーバーに送るように設定します。
Synology NASのリバースプロキシ設定は、こちらを参照ください。
ヘッダー名:X-Forwarded-For、値:$proxy_add_x_forwarded_for

Apache2 mod_remoteip
次にWEBサーバー側で、Apache2のモジュール、mod_remoteip を有効にします。
sudo a2enmod remoteip
/etc/apache2/apache2.conf を編集します。
sudo nano /etc/apache2/apache2.conf
おおよそ160行目あたりの<Directory />の前から編集。赤字を追加します。
160 RemoteIPHeader X-Forwarded-For #追加
161 RemoteIPTrustedProxy 192.168.9.99 #リバースプロキシのIPアドレス
162 <Directory />
163 Options FollowSymLinks
164 AllowOverride None
165 Require all denied
166 </Directory>
167
168 <Directory /usr/share>
169 AllowOverride None
170 Require ip 192.168.9.0/24 #192.168.9.*からのみアクセスできるようにする
171 # Require all granted #先頭に#をつけてコメントアウト
172 </Directory>
173
174 <Directory /var/www/>
175 Options FollowSymLinks
176 AllowOverride All
177 Require all granted
178 </Directory>
161行目は、IPアドレスの偽装に影響されないための設定です。
170行目は、/usr/shareにあるサイトのアクセスを、ローカルIPアドレスに制限しています。
phpMyAdminはここにインストールされるため、設定を追加しています。
Apache2を再起動します。
sudo systemctl restart apache2
外部からアクセスして確認
WEBサーバーへアクセスします。今回は404エラーとして記録されるように、わざと存在しないページにアクセスしました。スマホで、Wi-FiをOFFにすれば、外部からのアクセスになります。

リバースプロキシのIPアドレスではなく、クライアントのIPアドレスが記録されるようになりました。
おわりに
この設定で、リバースプロキシを経由したWEBサーバーへのアクセスでも、クライアントのIPアドレスを認識できるようになりました。
また、/usr/shareへアクセス制限もかけ、phpMyAdminをインストールした場合でも、外部からアクセスできないようにできました。
ただ、クライアントIPアドレスは、簡単に偽装できるとのことで、心配なので、普段はphpMyAdminは機能しないようにしています。
くれぐれも、セキュリティにはお気をつけください。
コメント