F5 源地址转换模式 后端server查看client地址的三种方式
背景:解决SNAT带来的地址审计问题
一. 基于http协议的解决方案
实现方式:在http头部插入源地址。
在新建http profile并开启Insert X-Forward-For功能,其余选项保持不变。再在vs里调用该http profile。
抓包如下所示,可以看到在http头部 X-Forward-For字段插入了客户端源地址。
注意:要求经过F5的流量是明文的,密文的需要解密。
二、基于tcp协议解决方案
实现方式,在tcp option 中插入源地址。
1、tcp option简介
- 常见option
- 字段格式
(1)EOL和NOP Option(Kind 0、Kind 1)只占1 Byte,没有Length和Value字段;
(2)NOP用于 将TCP Header的长度补齐至32bit的倍数(由于Header Length字段以32bit为单位,因此TCP Header的长度一定是32bit的倍数);
(3)SACK-Premitted Option占2 Byte,没有Value字段;
(4)其余Option都以1 Byte的“Kind”开头,指明Option的类型;Length指明Option的总长度(包括Kind和Length)
(5)对于收到“不能理解”的Option,TCP会无视掉,并不影响该TCP Segment的其它内容;
2、在F5上进行tcp option插入操作
(1)命令行创建tcp profile,通过在tcp选项28中嵌入版本号(一个字节)和IPv4地址(四个字节)作为覆盖路径功能的一部分来支持客户端IP可见性。
1 | 格式: |
(2)创建irule
1 | when SERVER_CONNECTED { |
(3)在vs中调用http profile和irule。
(4)抓包测试如下所示,当建立完握手之后,snat地址与后台建立连接时会在tcp option中携带客户端IP地址(这是16进制的字符,转换为10进制便是客户端真实地址)。
三、通过syslog进行源地址审计的方案
实现方式:通过syslog发送客户端信息到syslog服务器实现对源地址审计,适用于TCP,UDP。
1、创建日志pool
此处步骤省略
2、配置irule
1 | when CLIENT_ACCEPTED { |
3.抓包测试,通过抓包可以发现F5把客户端信息发给了syslog服务器。