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>