f5源站获取http/https访问的真实源IP解决方案
1.背景
F5负载均衡设备,很多场景下需要采用旁挂的方式部署。为了保证访问到源站的数据流的request和response的TCP路径一致,f5采用了snat机制。但是这样导致源站上看到的来源IP都是snat地址,而看不到真实的访问源地址。
2.http访问
对于HTTP应用可以直接在VS中开启X-Forwarded规则

3.https访问
由于HTTPS应用到达F5的数据都是密文,F5只能看到网络层的地址,4—7层的内容无法看到,所以F5也无法像http应用一样将客户端地址插入到X_forward_for字段;
目前HTTPS应用的加解密工作都是由服务器自身完成的,为了保证F5能够看到4—7层的数据,需要将加解密工作交给F5来做:
1)根证书和KEY文件导入F5设备,F5代替服务器同用户端建立SSL通道;
2)F5将加密数据解密后通过X_forward_for功能插入用户端源IP
3)业务部门将服务器上的443端口更改为80端口即取消证书加解密工作
此过程在原有服务器上进行证书撤销操作,会影响到应用中断,建议重新搭建2台提供相同业务的80端口服务器;
4)F5设备上配置一个测试VS关联新搭建的80服务器及SSL策略,验证F5是否可以成功发布HTTPS业务、HTTPS业务插入源地址等功能。即新建测试的vip,访问端口为443,关联SSL加解密策略,后端关联80的POOL。
VS中

4.非http/https
对于TCP协议则需要通过TCP OPTION来实现客户需求
TCP Options需要配合IRULSE+TCP Profile来实现。
Irulse(当服务建立起连接时,转换客户端的ip地址并以点”.”划分为四个部分,在TCP报头中插入kind为29类型的字段。设置变量,输出log信息。
当服务建立起连接时,转换客户端的ip地址并以点”.”划分为四个部分,在TCP报头中插入kind为29类型的字段。设置变量,输出log信息):
1)irule
when SERVER_CONNECTED {
scan [IP::client_addr] {%d.%d.%d.%d} a b c d
TCP::option set 29 [binary format cccc $a $b $c $d] all
set a [binary format cccc $a $b $c $d]
log "insert ip to tcp option $a"
}
2)Tcp Profile案例(需要在tmsh下运行,其中tcplh3为手动创建的tcp profile名称):
create ltm profile tcp tcplh3 tcp-options “{8 first} {28 last}”
步骤:
1)模拟业务环境,在F5中建立Pool,建立VS,VS关联特定的pool,关联上述指定的iRule脚本和profile;


3)用SshClient登录F5的命令行,运行tcpdump抓取数据包,同时用客户端多次访问VS地址。
抓包命令:tcpdump -s0 -ni 0.0:nnnp host 10.160.100.49 and port 25 -w /var/tmp/test_0907.pcap
即,需要抓10.160.100.49的25端口,保存目录为/var/tmp/,保存文件为test.pcap。
抓包结果如下:


其中1d=29,表示tcp类型为29;06表示字节数
后边的十六进制转换为十进制后即为真实源地址
此时即表明f5已经成功将真实源地址插入到option字段,具体如何读取需服务器端配置。

TCP三次握手
注:option是在传输层,业务服务器默认只读网络层
f5源站获取http/https访问的真实源IP解决方案的更多相关文章
- 在容器服务中获取客户端真实源 IP
适用范围:腾讯云容器服务(Tencent Kubernetes Engine ,TKE), 以下简称 TKE. 为什么需要获取客户端真实源 IP? 当需要能感知到服务请求来源去满足一些业务需求时,就需 ...
- 如何绕过CDN找源站ip?
这是一个总结帖,查了一下关于这个问题的国内外大大小小的网站,对其中说的一些方法总结归纳形成,里面具体发现ip的方法不是原创,所有参考的原贴都也贴在了后面,大家可以自行看看原贴. 首先,先要明确一个概念 ...
- nginx反向代理https访问502, nginx反向代理, 支持SNI的https回源,SNI源点,nginx反向代理报错
正常nginx配置了SSL是可以通过HTTPS访问后端的,但是对有配置SNI + https后端的支持有点麻烦. 编译安装nginx后,看一下是否支持SNI /usr/local/nginx/sbin ...
- 镜像回源主要用于无缝迁移数据到OSS,即服务已经在自己建立的源站或者在其他云产品上运行,需要迁移到OSS上,但是又不能停止服务,此时可利用镜像回写功能实现。
管理回源设置_管理文件_开发指南_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/31865.html 通过回源设置,对于获取数据的请求以多种 ...
- Discuz x3.2利用阿里云cdn处理https访问亲测教程
第一步配置cdn和https 1.首先去阿里云.腾讯云.七牛云等申请免费https证书 2.虚拟主机是不能直接支持https的,需要cdn处理后才可以,并且端口是80 3.开启cdn加速处理,(买一个 ...
- 【转载】绕过CDN找到源站的思路
[原文:https://mp.weixin.qq.com/s/8NUvPqEzVjO3XbmCBukUvQ] 绕过CDN的思路 网上有很多绕过CDN的思路,但是存在很多问题,以下是收集并总结的思路.站 ...
- OkHttp配置HTTPS访问+服务器部署
1 概述 OkHttp配置HTTPS访问,核心为以下三个部分: sslSocketFactory() HostnameVerifier X509TrustManager 第一个是ssl套接字工厂,第二 ...
- Windows下Nginx配置SSL实现Https访问(包含证书生成)
Vincent.李 Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...
- CentOS搭建svn服务器支持https访问
在CentOS6.3 64位机器上配置SVN服务器,并设置只允许HTTPS连接,可以配置多个repos源,每个源都拥有自己的组和成员,用于权限控制. 安装相关软件 Apache yum install ...
随机推荐
- nginx压缩,缓存
https://www.darrenfang.com/2015/01/setting-up-http-cache-and-gzip-with-nginx/ https://www.linuxdashe ...
- 尚硅谷springboot学习11-占位符
1.随机数 2.占位符获取之前配置的值,如果没有可以使用:指定默认值
- 尚硅谷redis学习9-发布订阅
是什么? 图示说明 命令 例子
- 1.加快Xshell客户端连接到CentOS的速度
1.编辑打开ssh的配置文件 /etc/ssh/sshd_config 找到里面的UseDNS yes修改为:#UseDNS no service sshd restart
- MOBA项目问题记录
1,动态变化的文本,使用较多时,耗时大,原因:只要字符串发生改变就会重绘,原理:每个字符的宽度不一样 项目中使用了网上写的一个文本控件,大概类型UGUI的东西,实现了字符缓存,绘制过的字符就不会再重建 ...
- spark1.6.1 on yarn搭建部署
注:本文是建立在hadoop已经搭建完成的基础上进行的. Apache Spark是一个分布式计算框架,旨在简化运行于计算机集群上的并行程序的编写.该框架对资源调度,任务的提交.执行和跟踪,节点间的通 ...
- PHP对redis操作详解
/*1.Connection*/$redis = new Redis();$redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1 ...
- redisclient can not connect
假如采用传统请执行一下命令: systemctl stop firewalld systemctl mask firewalld 并且安装iptables-services: yum install ...
- python list元素为dict时的排序
# 简单的dict lst = [('d', 2), ('a', 4), ('b', 3), ('c', 2)] # 按照value排序 lst.sort(key=lambda k: k[1]) pr ...
- 初级JS
唐太宗 李世民 杀了大哥 和弟弟 登上的皇位 一个人当皇帝 排他性是指一种物品具有可以阻止其他人使用该物品的特性. 排他性思想: 在程序中但凡是遇到只让自己怎么样,不让别人怎么样的效果,都 ...