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. Django--ORM(模型层)-重点

    一.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发 ...

  2. Python 百分号字符串拼接

    # %s可以接收一切 %d只能接收数字 msg = 'i am %s my hobby is %s' %('lhf','alex') print msg msg2 = 'i am %s my hobb ...

  3. css-选择器性能

    ID选择器 比如#header 类选择器 比如.promo 元素选择器 比如 div 兄弟选择器 比如 h2 + p 子选择器 比如 li > ul 后代选择器 比如 ul a 7. 通用选择器 ...

  4. Linux Install redis

    1.将下载好的压缩包放到/usr/local目录下# tar xzf redis-3.0.2.tar.gz # cd redis-3.0.2 # make//--------------------- ...

  5. java容器的理解(collection)

    容器类(Conllection)对于一个开发者来说是最强大的工具之一,可以大幅提高编程能力.容器是一个将多个元素组合到一个单元的对象,是代表一组对象的对象,容器中的对象成为它的元素. 容器适用于处理各 ...

  6. 如何用java完成一个中文词频统计程序

    要想完成一个中文词频统计功能,首先必须使用一个中文分词器,这里使用的是中科院的.下载地址是http://ictclas.nlpir.org/downloads,由于本人电脑系统是win32位的,因此下 ...

  7. Linux部署项目

    1 安装jdk 第一步:获取Linux系统中jdk安装包和tomcat安装包(后面要用,所以上传两个) 第二步:使用secureCRT客户端工具连到服务器 第三步:使用命令创建一个目录,作为软件的安装 ...

  8. PL/SQL Job

    1. 鼠标右键点击 jobs 弹出 Create Job 对话框,如下图: 2. 在对话框中输入相应的值,如下图: 其中: What                   ——作业执行时将要调用的存储过 ...

  9. Linux下修改tab建为4个空格

    1.编辑 vim /etc/vim/vimrc 2.修改 set ts=4 set expandtab set autoindent 其实只要set ts=4 就ok了.

  10. target=_blank攻击

    [target=_blank攻击] 在<a>标签中加入 rel="noopener noreferrer" 来避免. 参考:https://mathiasbynens. ...