NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

BIG-IP で X-Forwarded-For を設定する

X-Forwarded-For (XFF) とは

HTTP ヘッダフィールドの一つ。
HTTP プロキシサーバー、または、負荷分散装置(ロードバランサ)を経由して、ウェブサーバに接続するクライアントの送信元 IP アドレスを、特定する際に使用されます。
具体的には、このフィールドに、クライアントやプロキシサーバーの IP アドレスを追加します。
出典:http://ja.wikipedia.org/wiki/X-Forwarded-For

XFF フィールドのフォーマットは下記のとおりです。

X-Forwarded-For: client1, proxy1, proxy2

BIG-IP では、XFF を有効にして、クライアントの IP アドレスを HTTP ヘッダに挿入する事が可能です。

Local Traffic > Profiles から Services の[HTTP]をクリックします。
f:id:FriendsNow:20140615203025p:plain

[Create]をクリックします。
f:id:FriendsNow:20140615203032p:plain

Insert X-Forwarded-For チェックボックスで[Enabled]を選択し[Finished]をクリックします。
f:id:FriendsNow:20140615203039p:plain

Virtual Server の HTTP Profile に作成した Profile を適用し[Update]をクリックします。
f:id:FriendsNow:20140615203046p:plain

クライアントから、Virtual Server へ HTTP で接続し、テストしてみます。

# telnet 192.168.100.100 80
Trying 192.168.100.100...
Connected to 192.168.100.100 (192.168.100.100).
Escape character is '^]'.
GET / HTTP1.0

HTTP/1.1 200 OK

サーバー側で、XFF にクライアントの IP が挿入されている事を確認できました。

# tcpdump -i eth1 -s 1024 -A dst 192.168.100.1 and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 1024 bytes
04:16:48.235669 IP 192.168.100.254.54660 > 192.168.100.1.http: S 3271548268:3271548268(0) win 4380 <mss 1460,nop,wscale 0,nop,nop,timestamp 2671669740 0,sackOK,eol>
E..@..@...-...d...d....P...l........T).............
.>q.........
04:16:48.245252 IP 192.168.100.254.54660 > 192.168.100.1.http: . ack 529739997 win 4380 <nop,nop,timestamp 2671669750 5520969>
E..4..@...-...d...d....P...m..0............
.>q..T>I
04:16:48.245258 IP 192.168.100.254.54660 > 192.168.100.1.http: P 0:50(50) ack 1 win 4380 <nop,nop,timestamp 2671669750 5520969>
E..f..@...-l..d...d....P...m..0............
.>q..T>IGET / HTTP1.0
X-Forwarded-For: 192.168.100.10