杨斌
发布于 2025-09-06 / 13 阅读
0
0

Https请求实际案列流程

一、案列说明

外网用户发送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: 仅需附加 tcp profile,因为它是四层转发,不处理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的 serverssl profile 中上传或配置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类型:

组件

IP地址类型

示例IP地址

说明

第一个 F5 (F5-LTM-1)

公网IP

203.0.113.100

对外服务的VIP,是互联网用户唯一能访问到的入口点。

Nginx-1 / Nginx-2

私有IP

192.168.1.10, 192.168.1.11

位于DMZ区或内部网络,不直接暴露给公网。

第二个 F5 (F5-LTM-2)

私有IP

172.16.1.100

位于更安全的内部网络区域,是安全策略的执行点。

应用服务器 (App-1/2)

私有IP

192.168.2.20, 192.168.2.21

位于最受保护的核心业务区,只处理明文HTTP流量。

(1)为什么这样设计?(核心优势)

  1. 最小化攻击面 (Reduce Attack Surface)

    • 公网IP就像是一个房子的门牌号,暴露得越多,被攻击者发现和扫描的风险就越大。

    • 只将一个公网IP(第一个F5的VIP)暴露给互联网,将后端庞大的基础架构全部隐藏起来,极大地减少了被攻击的可能性。

  2. 增强安全性 (Enhanced Security)

    • 即使黑客通过某种方式攻破了第一个F5或某台Nginx服务器,他进入的也是一个内部私有网络

    • 他无法从互联网直接访问到这些内部组件,必须再突破内部防火墙和第二个F5的安全策略(如IP白名单)才能接触到核心应用服务器。这为防御和响应提供了宝贵的时间。

  3. 节省公网IP资源 (Save Public IP Resources)

    • 公网IPv4地址是稀缺且昂贵的资源。使用私有IP地址为内部大量服务器分配地址,可以节省大量成本。

  4. 灵活的网络管理 (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解密后,才能以明文形式访问内部应用服务器。


评论