一、案列说明
外网用户发送https请求,端口为8888,如https://haha.com:8888,经过第一个F5,后转发到2台nginx,2台nginx转发端口为8888的https请求,转发到第二个F5上,在F5进行SSL证书加解密及请求IP白名单管控,第二个F5再转发到2台后台AP服务器,请清晰的划出整个流程图及代码配置。
二、系统架构与数据流详解
整个流程的核心在于:第一个F5和Nginx只做四层TCP转发(透传加密流量),第二个F5才进行七层处理(SSL卸载、安全策略、负载均衡)。
下图清晰地展示了请求的完整流动路径、关键端口的变化以及各组件的职责:
流程图

三、关键节点配置代码示例
1. 第一个 F5 (F5-LTM-1) 配置
角色:四层TCP负载均衡器。
虚拟服务器 (Virtual Server) 配置:
Destination:
203.0.113.100:8888(对外服务的VIP)Pool:
nginx_pool(指向后端两台Nginx服务器)Profile: 仅需附加
tcpprofile,因为它是四层转发,不处理HTTPS协议。
池 (Pool) 配置 (
nginx_pool):bash
ltmm pool nginx_pool { members { 192.168.1.10:8888 { address 192.168.1.10 } # Nginx-1 IP 192.168.1.11:8888 { address 192.168.1.11 } # Nginx-2 IP } load-balancing-mode round-robin monitor tcp }
2. Nginx 服务器配置
角色:四层TCP代理,透传加密流量。
Nginx 配置片段 (
/etc/nginx/nginx.conf):nginx
# 在stream模块中配置,用于四层TCP转发 stream { upstream backend_f5 { server 172.16.1.100:8888; # 第二个F5的IP和端口 } server { listen 8888; # 监听8888端口的TCP流量 proxy_pass backend_f5; proxy_connect_timeout 30s; proxy_timeout 30m; # 注意:这里没有SSL和HTTP配置,纯粹转发TCP流 } }
3. 第二个 F5 (F5-LTM-2) 配置
角色:安全网关,进行SSL卸载、安全策略和实施七层负载均衡。
虚拟服务器 (Virtual Server) 配置:
Destination:
172.16.1.100:8888(监听Nginx转发来的流量)Pool:
app_server_pool(指向最终应用服务器)Profiles:
Protocol:
http(必须,因为要处理HTTP协议)SSL:
serverssl(必须,用于SSL Termination解密)
iRules 配置 (用于IP白名单):
tcl
# 1. 首先创建一个Data Group,命名为whitelist_dg,类型为ip ltmm data-group internal whitelist_dg { type ip records { 10.10.0.0/16 { } # 允许整个办公网段 203.0.113.50 { } # 允许特定合作伙伴IP 198.51.100.123 { } # 允许管理员IP } } # 2. 创建一个iRule并附加到Virtual Server上 when CLIENT_ACCEPTED { # 检查客户端源IP是否不在白名单Data Group中 if { not [class match [IP::client_addr] equals whitelist_dg] } { log local0. "Access denied from IP: [IP::client_addr]" # 直接丢弃连接,不返回任何响应,增强安全性 discard } # 如果IP在白名单中,则不做任何处理,允许请求继续 }池 (Pool) 配置 (
app_server_pool):bash
ltmm pool app_server_pool { members { 192.168.2.20:8080 { address 192.168.2.20 } # App Server 1 192.168.2.21:8080 { address 192.168.2.21 } # App Server 2 } load-balancing-mode least-connections-members monitor http }SSL证书配置:
在F5-LTM-2的
serversslprofile 中上传或配置SSL证书和私钥(用于域名haha.com)。
4. 后台服务器配置
角色:简单的HTTP应用服务器。
无需配置任何SSL证书。
只需在
8080端口上提供HTTP服务。Web应用(如Nginx, Apache)配置示例:
nginx
server { listen 8080; server_name localhost; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ =404; } }
四、各组件IP地址详解
根据之前的流程图,明确每个组件的IP类型:
(1)为什么这样设计?(核心优势)
最小化攻击面 (Reduce Attack Surface):
公网IP就像是一个房子的门牌号,暴露得越多,被攻击者发现和扫描的风险就越大。
只将一个公网IP(第一个F5的VIP)暴露给互联网,将后端庞大的基础架构全部隐藏起来,极大地减少了被攻击的可能性。
增强安全性 (Enhanced Security):
即使黑客通过某种方式攻破了第一个F5或某台Nginx服务器,他进入的也是一个内部私有网络。
他无法从互联网直接访问到这些内部组件,必须再突破内部防火墙和第二个F5的安全策略(如IP白名单)才能接触到核心应用服务器。这为防御和响应提供了宝贵的时间。
节省公网IP资源 (Save Public IP Resources):
公网IPv4地址是稀缺且昂贵的资源。使用私有IP地址为内部大量服务器分配地址,可以节省大量成本。
灵活的网络管理 (Flexible Network Management):
私有IP地址空间(如
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16)可以自由规划,无需申请。可以在内部随意调整服务器IP而无需更改对外服务的公网IP,对外保持了稳定性。
(2)数据包地址是如何变化的?
当一个数据包穿过这个架构时,其源和目标IP地址的变化如下所示:

在这种典型的企业级部署中:
只有一个公网IP:即第一个F5负载均衡器上的虚拟IP(VIP),它作为所有流量的唯一入口。
全部使用私有IP:其后所有的服务器(Nginx、第二个F5、应用服务器)都部署在私有网络内,通过防火墙策略进行隔离和访问控制。
这种设计在安全性、成本效益和运营灵活性之间取得了最佳平衡,是业界强烈推荐的最佳实践。
五、总结与关键点
SSL卸载位置:仅在第二个F5 (F5-LTM-2) 上进行。这是整个架构的安全核心,所有HTTPS流量在此被解密,从而可以实施基于HTTP协议(第七层)的安全策略(如IP白名单)。
流量类型:
用户 -> F5-1 -> Nginx -> F5-2:这段链路流转的是加密的HTTPS流量(端口均为8888)。F5-1和Nginx只看到TCP数据包,看不到HTTP内容。F5-2 -> App Server:这段链路是明文的HTTP流量(端口8080)。
F5-1与Nginx的角色:它们都工作在四层(TCP层),只是简单地进行流量分发和透传,不关心也不处理应用层的内容。它们不需要SSL证书。
安全边界:第二个F5 (F5-LTM-2) 是内部网络的安全网关,所有入站连接在此经过严格的白名单验证和SSL解密后,才能以明文形式访问内部应用服务器。