IPアドレス直のサーバーアクセスを403制限しつつ、ロードバランサのヘルスチェックを通すapacheconfの設定
ポイント
- 一番初めにローディングされる
VirtualHostディレクティブがデフォルトサーバーとなるため、Include順を考慮したconfファイルを命名する - ファイル命名規則のInclude順でデフォルトサーバーは自明だが、明示的に
ServerName anyですべてのホスト名を捕まえている - デフォルトサーバーは
:80と:443ポートごとに設定が必要。<VirtualHost *:*>だと、うまく動かない - デフォルトサーバーは
httpd -Sで確認する
httpd -S
httpd -S
VirtualHost configuration:
*:80 is a NameVirtualHost
default server any (/usr/local/httpd-2.4/conf/extra/httpd-vhosts.conf:1)
port 80 namevhost any (/usr/local/httpd-2.4/conf/extra/httpd-vhosts.conf:1)
port 80 namevhost webapp.com (/usr/local/httpd-2.4/conf/extra/httpd-vhosts.conf:28)
*:443 is a NameVirtualHost
default server any (/usr/local/httpd-2.4/conf/extra/httpd-vhosts.conf:15)
port 443 namevhost any (/usr/local/httpd-2.4/conf/extra/httpd-vhosts.conf:15)
port 443 namevhost webapp.com (/usr/local/httpd-2.4/conf/extra/httpd-vhosts.conf:45)
設定
-
:80と:443それぞれのポートでデフォルトのバーチャルホストを定義する - ドキュメントルートを
/var/www/_defaultに設定して、ロードバランサのヘルスチェックファイル/hb.html=>/var/www/_default/hb.htmlを作成 - ヘルスチェック=
hb.htmlはELB=サブネットワークにだけ公開したいので、リモートアドレスをRemoteIPTrustedProxyでX-Forwarded-For偽装をはじく。 - リモートアドレスがtrustでなければ、X-Forwarded-Forを剥がしてクライアントの本来のリモートアドレスを採用する
-
:443のデフォルトサーバーはアクセス不要なので全拒否
path/to/httpd//conf/_default.conf(デフォルトサーバー)
<VirtualHost *:80>
DocumentRoot "/var/www/_default/"
ServerName any
<Directory "/var/www/_default/">
Require all granted
</Directory>
# リモートアドレスがプロキシーのRemoteIPTrustedProxyアドレス帯ならば、X-Forwarded-Forを採用する。X-Forwarded-Forがなければリモートアドレスを採用する=ロードバランサである
# リモートアドレスがプロキシーのRemoteIPTrustedProxyアドレス帯でなれけば、X-Forwarded-Forを剥がして、リモートアドレスを採用する=プロキシーを経由しないインターネットアクセス
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 172.21.0.0/16
# リモートアドレスがプロキシーのRemoteIPTrustedProxyアドレス帯ならば、X-Forwarded-Forを採用する。X-Forwarded-Forがなければリモート
アドレスを採用する=ロードバランサである
# リモートアドレスがプロキシーのRemoteIPTrustedProxyアドレス帯でなれけば、X-Forwarded-Forを剥がして、リモートアドレスを採用する=プ
ロキシーを経由しないインターネットアクセス
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 172.21.0.0/16
# サブネットワーク直の侵入のみ許可する
<Location />
<RequireAll>
Require ip 172.21.0.0/16
</RequireAll>
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerName any
<Location />
Require all denied
</Location>
</VirtualHost>

