ポート8080でリッスンしているApache(LAMP)バックエンドのグループのリバースプロキシとしてnginxをセットアップしています。
また、nginxサーバーのプロキシIPを含めるように各バックエンドサーバーのmod_rpaf.conf
ファイルを構成しました。
<IfModule mod_rpaf.c>
RPAF_Enable On
RPAF_ProxyIPs 127.0.0.1 192.168.0.1 # <- nginx server IP
RPAF_Header X-Forwarded-For
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
</IfModule>
Nginxからの接続を拒否するようにhttpd.conf
を構成するにはどうすればよいですか?
私は以下を試しました:
<Directory "/var/www/html">
Order allow,deny
Allow from 192.168.0.1
Allow from 127
Deny from all
</Directory>
しかし、これはnginxプロキシ自体と他のIPへのアクセスを制限しているようです。
これはmod_rpaf
がクライアントIPを転送するためですか?もしそうなら、どうすればこれを回避できますか?
Mod_rpafモジュールは実際のクライアントIPを転送するため、独自のhttpd.conf
ファイルを介したApacheバックエンドサーバーへのパブリックアクセスをブロックすることはできません。
いくつかのIPtablesルールを設定すると、クライアントの実際のIPの転送に影響を与えることなく、nginxリバースプロキシを除くすべてのユーザーのポート8080へのアクセス(パブリックアクセス)がブロックされます。
実行:
#iptables -A INPUT -p tcp --dport 8080 -s 192.168.0.1 -j ACCEPT
#iptables -A INPUT -p tcp --dport 8080 -j DROP
#service iptables save
#service iptables restart
ポート8080でのApacheバックエンドサーバーへのアクセスは、nginxプロキシのみに制限されるようになりました。
次のように、allow/deny_statementsの順序を変更する必要があると思います。
<Directory "/var/www/html">
Order deny,allow
Deny from all
Allow from 192.168.0.1
Allow from 127
</Directory>
なぜなら( order-docs )
注文は次のいずれかです。
Allow、Deny-最初に、すべてのAllowディレクティブが評価されます。少なくとも1つが一致する必要があります。一致しない場合、要求は拒否されます。次に、すべてのDenyディレクティブが評価されます。一致するものがある場合、リクエストは拒否されます。最後に、AllowまたはDenyディレクティブに一致しない要求は、デフォルトで拒否されます。
Deny、Allow-最初に、すべてのDenyディレクティブが評価されます。一致するものがある場合、Allowディレクティブにも一致しない限り、要求は拒否されます。 AllowまたはDenyディレクティブに一致しないリクエストはすべて許可されます。
docs からの例:
Orderを使用すると、DenyディレクティブとAllowディレクティブを組み合わせて、実際に入れたいグループに制限していることを確認できます。
Order deny,allow
Deny from all
Allow from dev.example.com