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解决方案的更多相关文章

  1. 在容器服务中获取客户端真实源 IP

    适用范围:腾讯云容器服务(Tencent Kubernetes Engine ,TKE), 以下简称 TKE. 为什么需要获取客户端真实源 IP? 当需要能感知到服务请求来源去满足一些业务需求时,就需 ...

  2. 如何绕过CDN找源站ip?

    这是一个总结帖,查了一下关于这个问题的国内外大大小小的网站,对其中说的一些方法总结归纳形成,里面具体发现ip的方法不是原创,所有参考的原贴都也贴在了后面,大家可以自行看看原贴. 首先,先要明确一个概念 ...

  3. nginx反向代理https访问502, nginx反向代理, 支持SNI的https回源,SNI源点,nginx反向代理报错

    正常nginx配置了SSL是可以通过HTTPS访问后端的,但是对有配置SNI + https后端的支持有点麻烦. 编译安装nginx后,看一下是否支持SNI /usr/local/nginx/sbin ...

  4. 镜像回源主要用于无缝迁移数据到OSS,即服务已经在自己建立的源站或者在其他云产品上运行,需要迁移到OSS上,但是又不能停止服务,此时可利用镜像回写功能实现。

    管理回源设置_管理文件_开发指南_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/31865.html 通过回源设置,对于获取数据的请求以多种 ...

  5. Discuz x3.2利用阿里云cdn处理https访问亲测教程

    第一步配置cdn和https 1.首先去阿里云.腾讯云.七牛云等申请免费https证书 2.虚拟主机是不能直接支持https的,需要cdn处理后才可以,并且端口是80 3.开启cdn加速处理,(买一个 ...

  6. 【转载】绕过CDN找到源站的思路

    [原文:https://mp.weixin.qq.com/s/8NUvPqEzVjO3XbmCBukUvQ] 绕过CDN的思路 网上有很多绕过CDN的思路,但是存在很多问题,以下是收集并总结的思路.站 ...

  7. OkHttp配置HTTPS访问+服务器部署

    1 概述 OkHttp配置HTTPS访问,核心为以下三个部分: sslSocketFactory() HostnameVerifier X509TrustManager 第一个是ssl套接字工厂,第二 ...

  8. Windows下Nginx配置SSL实现Https访问(包含证书生成)

    Vincent.李   Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...

  9. CentOS搭建svn服务器支持https访问

    在CentOS6.3 64位机器上配置SVN服务器,并设置只允许HTTPS连接,可以配置多个repos源,每个源都拥有自己的组和成员,用于权限控制. 安装相关软件 Apache yum install ...

随机推荐

  1. beyondCompare工具使用

    1.下载beyondcompare  (从官网下载) 2.载入.class文件比对 参见: beyond compare 对class文件反编译及比较  (https://blog.csdn.net/ ...

  2. Delphi 中的颜色常量及效果图

    颜色名称   颜色效果   Hex HTML clBlack   $000000 #000000 clMaroon   $000080 #800000 clGreen   $008000 #00800 ...

  3. UNITY 多个子MESH与贴图的对应关系

    多个贴图时,与子MESH一一对应,如果多了 ...还待研究如何对应

  4. Zabbix 3.0 LTS安装配置

    关于Zabbix监控项类型的官网介绍: https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes zabbix ...

  5. MyEclipse反向生成Java代码 ,Reverse Engineering-->Java Source Folder-->没有提供任何条目

    在web项目名称上,手动执行一遍Add Hibernate Capabilities,然后再去DB Browser中进行反向生成pojo实体类和hbm.xml映射文件!,具体生成反向代码的配置如下图所 ...

  6. DO and DOES Reduction

    DO and DOES Reduction Share Tweet Share Tagged With: DO and DOES Reductions ‘Do’ and ‘does’ can be r ...

  7. easyui分页,根据网友的一段代码优化了一下

    千言万语尽在代码中,可以自己看,不清楚留言吧! <%@ Page Language="C#" AutoEventWireup="true" CodeBeh ...

  8. C#中Graphics的画图代码【转】

    我要写多几个字上去 string str = "Baidu"; //写什么字? Font font = Font("宋体",30f); //字是什么样子的? B ...

  9. Javascript中的this之我见

    来源:http://www.blogjava.net/baoyaer/articles/105864.html 在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如C++.C#和Java等都 ...

  10. python字典dict的成对运算

    dict = {'age': 18, 'name': 'jin', 'sex': 'male', }# for k,v in dict.items():# print(k,v)# v1 = dict[ ...