ヘルプ:リバースプロキシ背後の Web サーバのアクセス制御

提供:あわ自由帳

メインページ > ヘルプ:目次 > ヘルプ:自宅サーバーの管理(CentOS)  > リバースプロキシ背後の Web サーバのアクセス制御

Web サーバのアクセス制御

自宅のサーバ環境には、apache サーバがいくつかあり、IP アドレスを共有するために apache によるリバースプロキシサーバを立てています。

リバースプロキシの背後にある Web サーバで、ブログのコンテンツは見せたいけど、各種ステータスや admin 系の URL は存在していても外に見せたくないことがありますよね。

そんなとき、httpd.conf または conf.d/*.conf に「LAN 上からのアクセスのみ許可する」ディレクティブを書くときは、注意した方が良さそうです。

パッケージされていたりサンプルとして書かれている *.conf ファイルはたいてい、次のような設定になっています。(LAN に振られた IP アドレスを 192.168.1.0/24 とする)

<Directory /var/www/abcde>
    Order deny,allow
    Deny from all
    Allow from 192.168.1
</Directory>

この Web サーバに IP アドレスが専用に割り振ってあるときは、これで OK のはず。問題はリバースプロキシ経由で外からアクセスされる場合で、Web サーバから見ると、同一 LAN 上のクライアント (= リバースプロキシサーバ) からアクセスされているように見えるために、結局外からアクセスされ放題! という状態になってしまいます。

リバースプロキシ場合は Order ディレクティブを逆にしています。
(以下はリバースプロキシサーバが 192.168.1.3 の場合)

<Directory>
    Order allow,deny
    Allow from 192.168.1
    Deny from 192.168.1.3
</Directory>

アクセスはデフォルト拒否
Allow で LAN 上からのアクセスは許可
Deny でリバースプロキシからのアクセスは却下

これで、目的とするアクセス制限ができます。

mod_rpaf などを使用していると、ついついリバースプロキシからのアクセスなのを忘れてしまいがちなので注意しましょう。

設定例

ローカル以外から、apc、OpCache の状態を見られなくする。

リバースプロクシ設定追加

[root@host3 ~]# cat /etc/httpd/conf.d/virtualhost-awajp.com.conf

   <VirtualHost *:443>
       DocumentRoot "/var/www/html/awajp.com"
       ServerName awajp.com:443
       ErrorLog logs/awajp.com-ssl_error_log
       CustomLog logs/awajp.com-access_log combined env=!no_log
       Alias /awstatsreport /var/www/html/awajp.com/awstatsreport
   ## アクセス制限開始
   <Location "/apc">
       Require all denied
       Require ip 127.0.0.1
       Require ip 192.168.1.0/24
   </Location>
   <Location "/opcache-status">
       Require all denied
       Require ip 127.0.0.1
       Require ip 192.168.1.0/24
   </Location>
   ## アクセス制限終わり