目的
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
準備
1. IISをWindowsへ追加
2. IP制限を使用するため IP and Domain Restrictions も合わせて導入
3. 導入後テストアクセス用のページを準備、その後IP直アクセスとELB経由でのアクセスが出来ることを確認
4. IP制限を設定する
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
AllAllowに指定IPのみDeny設定
ELB経由でのアクセスが可能、IP直アクセスは当然Denyの為アクセス不能
1. IP直アクセス
2. ELB経由
ログ上でもアクセス拒否が確認出来る
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直アクセス共にアクセス不能
1. IP直アクセス
2. ELB経由
ログ上でもアクセス拒否されていることを確認
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設定した時の逆の設定を行う
1. IP直アクセス
2. ELB経由
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を有効化する
1. IP直アクセス
2. ELB経由
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が出来ないのは何らかのバグなのか自分の設定の問題なのか…