一文打尽端口复用 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)
验证方法
-
启动HAProxy服务:
haproxy -f haproxy.cfg -d -
验证各协议转发:
- 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实现精细的访问控制
- 使用