一文打尽端口复用 VS Haproxy端口复用
字数 1509 2025-08-15 21:33:39

HAProxy端口复用技术详解

一、HAProxy概述

HAProxy是一个使用C语言开发的高性能负载均衡代理软件,主要特点包括:

  • 提供TCP和HTTP应用程序代理
  • 免费、快速且可靠
  • 支持四层代理(传输层)和七层代理(应用层)
  • 支持ACL(访问控制列表),可灵活配置路由
  • 通过Cygwin编译后可在Windows平台运行

二、核心配置详解

1. 配置文件结构

HAProxy配置文件由两部分组成:

全局配置(global)

  • 定义HAProxy进程管理安全及性能相关参数

代理设定(proxies)

  • defaults:为其他配置段提供默认参数
  • frontend:定义监听套接字,接受客户端请求
  • backend:定义后端服务器
  • listen:组合frontend和backend功能

2. 关键配置示例

global
    log global
    mode tcp
    option dontlognull
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend main
    mode tcp
    bind *:8888
    option forwardfor except 127.0.0.1
    option forwardfor header X‐Real‐IP
    
    # ACL规则配置
    acl is‐proxy‐now urlp_reg(proxy) ^(http|https|socks5)$
    
    # 流量分发
    use_backend socks5 if is‐proxy‐now
    use_backend http

backend socks5
    mode tcp
    timeout server 1h
    server ss 127.0.0.1:50000

backend http
    mode tcp
    server http 127.0.0.1:80

三、端口复用实现思路

1. 思路一(四层负载)

  • 在传输层进行负载均衡
  • 根据协议类型进行分发(如HTTP流量发给HTTP服务,RDP发给RDP服务)

2. 思路二(七层负载)

  • 在应用层进行负载均衡
  • 判断应用类型进行分发(如HTTP分发到HTTP服务,否则发送到其他服务)

四、具体实现步骤(以思路一为例)

1. 捕获TPKT信息

TPKT是应用层数据传输协议标识,常见协议的TPKT如下:

协议 TPKT标识
SSH 535348
RDP 030000
HTTP(GET) 474554
HTTP(POST) 504f53
HTTP(PUT) 505554
HTTP(DELETE) 44454c
HTTP(OPTIONS) 4f5054
HTTP(HEAD) 484541
HTTP(CONNECT) 434f4e
HTTP(TRACE) 545241
HTTPS 160301

2. 编写ACL规则

frontend main
    mode tcp
    bind *:8888
    
    # 设置检查延迟
    tcp‐request inspect‐delay 3s
    
    # 定义ACL规则
    acl is_http req.payload(0,3) ‐‐m bin 474554 504f53 505554 44454c 4f5054 484541 434f4e 545241
    acl is_ssh req.payload(0,3) ‐‐m bin 535348
    acl is_rdp req.payload(0,3) ‐‐m bin 030000
    
    # 设置四层允许通过
    tcp‐request content accept if is_http
    tcp‐request content accept if is_ssh
    tcp‐request content accept if is_rdp
    tcp‐request content accept
    
    # 流量分发
    use_backend http if is_http
    use_backend ssh if is_ssh
    use_backend rdp if is_rdp
    use_backend socks5

backend socks5
    mode tcp
    timeout server 1h
    server ss 127.0.0.1:50000

backend http
    mode tcp
    server http 127.0.0.1:80

backend ssh
    mode tcp
    server ssh 127.0.0.1:22

backend rdp
    mode tcp
    server rdp 192.168.213.129:3389

3. 端口重定向技术

Linux系统(使用iptables)

iptables ‐‐t nat ‐‐A PREROUTING ‐‐i eth0 ‐‐p tcp ‐‐‐dport 80 ‐‐j REDIRECT ‐‐‐to‐port 8888

Windows系统(使用netsh)

netsh interface portproxy add v4tov4 listenport=80 connectport=8888 connectaddress=127.0.0.1

注意:Windows下需要在端口启动前添加转发规则,且需要重启相关服务

五、实验验证

实验环境

  • Target1: Ubuntu 16.04 x64 (IP:192.168.213.128)

    • 开放22端口(SSH)
    • 开放80端口(HTTP)
  • Target2: Win7 x64 (IP:192.168.213.129)

    • 开放3389端口(RDP)

验证方法

  1. 启动HAProxy服务:

    haproxy -f haproxy.cfg -d
    
  2. 验证各协议转发:

    • HTTP协议:访问靶机8888端口 → 转发至本机80端口
    • RDP协议:访问靶机8888端口 → 转发至192.168.213.129的3389端口
    • SSH协议:访问靶机8888端口 → 转发至本机22端口
  3. 端口重定向验证:

    • 访问80端口 → 重定向到8888 → HAProxy转发回80
    • 通过HAProxy日志确认流量路径

六、高级配置技巧

  1. 日志分析

    • HAProxy日志可以记录所有转发事件,用于调试和审计
  2. 性能调优

    • timeout connect:连接超时设置
    • timeout client:客户端超时设置
    • timeout server:服务器端超时设置
  3. 安全增强

    • 使用option forwardfor添加真实IP头
    • 通过ACL实现精细的访问控制

七、参考资源

  1. HAProxy官方配置手册
  2. TPKT协议详解
  3. HAProxy ACL应用
  4. 端口复用技术白皮书
HAProxy端口复用技术详解 一、HAProxy概述 HAProxy是一个使用C语言开发的高性能负载均衡代理软件,主要特点包括: 提供TCP和HTTP应用程序代理 免费、快速且可靠 支持四层代理(传输层)和七层代理(应用层) 支持ACL(访问控制列表),可灵活配置路由 通过Cygwin编译后可在Windows平台运行 二、核心配置详解 1. 配置文件结构 HAProxy配置文件由两部分组成: 全局配置(global) : 定义HAProxy进程管理安全及性能相关参数 代理设定(proxies) : defaults :为其他配置段提供默认参数 frontend :定义监听套接字,接受客户端请求 backend :定义后端服务器 listen :组合frontend和backend功能 2. 关键配置示例 三、端口复用实现思路 1. 思路一(四层负载) 在传输层进行负载均衡 根据协议类型进行分发(如HTTP流量发给HTTP服务,RDP发给RDP服务) 2. 思路二(七层负载) 在应用层进行负载均衡 判断应用类型进行分发(如HTTP分发到HTTP服务,否则发送到其他服务) 四、具体实现步骤(以思路一为例) 1. 捕获TPKT信息 TPKT是应用层数据传输协议标识,常见协议的TPKT如下: | 协议 | TPKT标识 | |------|----------| | SSH | 535348 | | RDP | 030000 | | HTTP(GET) | 474554 | | HTTP(POST) | 504f53 | | HTTP(PUT) | 505554 | | HTTP(DELETE) | 44454c | | HTTP(OPTIONS) | 4f5054 | | HTTP(HEAD) | 484541 | | HTTP(CONNECT) | 434f4e | | HTTP(TRACE) | 545241 | | HTTPS | 160301 | 2. 编写ACL规则 3. 端口重定向技术 Linux系统(使用iptables) : Windows系统(使用netsh) : 注意:Windows下需要在端口启动前添加转发规则,且需要重启相关服务 五、实验验证 实验环境 Target1 : Ubuntu 16.04 x64 (IP:192.168.213.128) 开放22端口(SSH) 开放80端口(HTTP) Target2 : Win7 x64 (IP:192.168.213.129) 开放3389端口(RDP) 验证方法 启动HAProxy服务: 验证各协议转发: HTTP协议 :访问靶机8888端口 → 转发至本机80端口 RDP协议 :访问靶机8888端口 → 转发至192.168.213.129的3389端口 SSH协议 :访问靶机8888端口 → 转发至本机22端口 端口重定向验证: 访问80端口 → 重定向到8888 → HAProxy转发回80 通过HAProxy日志确认流量路径 六、高级配置技巧 日志分析 : HAProxy日志可以记录所有转发事件,用于调试和审计 性能调优 : timeout connect :连接超时设置 timeout client :客户端超时设置 timeout server :服务器端超时设置 安全增强 : 使用 option forwardfor 添加真实IP头 通过ACL实现精细的访问控制 七、参考资源 HAProxy官方配置手册 TPKT协议详解 HAProxy ACL应用 端口复用技术白皮书