#目的
IISでのアクセス制限でホワイトリスト化しようとした時にX-Fowarded-Forを参照できないっぽい挙動があったので調査
- ELB経由でのIISへのアクセスが目的
- SecurityGroupではなくIIS側でアクセス出来るIPを絞りたかったため
#環境
AWS上のEC2とELBを使用した環境
下記の図のようにELB経由と直アクセスを想定
IP直アクセス(xxx.xxx.xxx.xxxには自分のIP)
ELB経由アクセスの2パターンを準備(10.1.0.17や10.1.0.119はELBのPrivateIP) ー>指定したVPC・Subnetの範囲内でIPが振られるはず
OS情報等
Windows 2012 R2
IIS 8.5.9600.163884
#準備
#AllAllow設定
##AllAllowのみ(デフォルト)
当然だがアクセスできる。ログにも直接アクセスした際のIPとELB経由でのIPが表示されている
※以下ログはxxx.xxx.xxx.xxxを直接アクセス、10.1.0.xxをELB経由とする
2016-03-25 06:49:30 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 304 0 0 20
2016-03-25 06:49:33 10.1.0.236 GET / - 80 - 10.1.0.17 - 304 0 0 15
ELB経由でのアクセスが可能、IP直アクセスは当然Denyの為アクセス不能
ログ上でもアクセス拒否が確認出来る
2016-03-25 07:01:31 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 403 503 5 15
2016-03-25 07:02:18 10.1.0.236 GET / - 80 - 10.1.0.17 - 304 0 0 0
##EnableProxyModeを有効化
画面右側 Edit Feature Settings... から指定
先ほどはアクセスできたELB経由のアクセスが不能となる(ELB経由の場合はIPが10.1.0.119になっているのにアクセス出来ない)
X-Forwarded-Forをみて判別している?
2016-03-25 07:06:42 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 403 503 5 15
2016-03-25 07:07:01 10.1.0.236 GET / - 80 - 10.1.0.119 - 403 503 5 0
##X-Forwarded-Forをログに追加
ログに出力してみてX-Forwarded-Forがあるのかチェック(それを参照していないなら10.1.0.119で入れていたはず)
※_Logging_から_Select Fields..._で追加
ログにX-Forwarded-Forが付与されたことを確認
2016-03-25 07:13:19 10.1.0.236 GET / - 80 - 10.1.0.119 - 403 503 5 0 xxx.xxx.xxx.xxx
##Deny設定を解除
IP直指定のDenyを削除
ELB経由・IP直アクセス共にアクセスが可能であることを確認
2016-03-25 07:16:03 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 200 0 0 15 -
2016-03-25 07:16:59 10.1.0.236 GET / - 80 - 10.1.0.17 - 200 0 0 16 xxx.xxx.xxx.xxx
#AllDeny設定
_Edit IP and Domain Restrictions Settings_から_Access for unspecified clients:_でDenyを指定
##AllDenyのみ
当然ELB経由・IP直アクセス共にアクセス不能
ログ上でもアクセス拒否されていることを確認
2016-03-25 07:18:51 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 403 503 5 15 -
2016-03-25 07:18:56 10.1.0.236 GET / - 80 - 10.1.0.17 - 403 503 5 0 xxx.xxx.xxx.xxx
##AllDeny状態に指定IPでAllowを設定
最初にDeny設定した時の逆の設定を行う
IP直はアクセス可能、ELB経由はアクセスできず(Proxyを有効化していないためX-Forwarded-Forを参照していない)
2016-03-25 07:22:47 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 200 0 0 0 -
2016-03-25 07:23:58 10.1.0.236 GET / - 80 - 10.1.0.119 - 403 503 5 0 xxx.xxx.xxx.xxx
##EnableProxyModeを有効化
再度_EnableProxyMode_を有効化する
IP直はアクセスが可能、ELB経由はアクセス不能
Proxy有効化してもX-Forwarded-Forを参照していないということになる
2016-03-25 07:26:54 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 304 0 0 15 -
2016-03-25 07:26:57 10.1.0.236 GET / - 80 - 10.1.0.17 - 403 503 5 0 xxx.xxx.xxx.xxx
まとめ
ブラックリストでのX-Forwarded-Forは参照するがホワイトリスト化した時のX-Forwarded-Forは参照しないっぽい挙動
DenyはできるのにAllowが出来ないのは何らかのバグなのか自分の設定の問題なのか...