0

0

如何分析Haproxy端口复用

WBOY

WBOY

发布时间:2023-05-29 09:25:41

|

2042人浏览过

|

来源于亿速云

转载

本文作者:spark(ms08067内网安全小组成员)

一、概述

Haproxy是一个使用c语言开发的高性能负载均衡代理软件,提供tcp和http的应用程序代理,免费、快速且可靠。
类似frp,使用一个配置文件+一个server就可以运行。
优点:

大型业务领域应用广泛支持四层代理(传输层)以及七层代理(应用层)支持acl(访问控制列表),可灵活配置路由windows使用cygwin编译后可运行(可跨平台)

访问控制列表(Access Control Lists,ACL)是应用在路由器接口的指令列表,这些指令列表用来告诉路由器哪些数据包可以接受,哪些数据包需要拒绝。

二、配置

官方配置手册:https://cbonte.github.io/haproxy-dconv/2.2/configuration.html
配置文件由全局配置和代理配置组成:
全局配置(global):定义haproxy进程管理安全及性能相关的参数

代理设定(proxies):

defaults:为其他配置段提供默认参数,默认配置参数可由下一个"defaults"重新设定

frontend:定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接

backend:定义"后端"服务器,前端代理服务器将会把哭护短的请求调度至这些服务器

listen:定义监听的套接字和后端的服务器,类似于将frontend和backend段放在一起

示例:

global
defaults
  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)$
# 分发到对应的backend
  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

重点关注frontend和backend。
Frontend中需要编写acl规则,配置转发。比如,当http流量来的时候,转发给web服务;当rdp流量来的时候,转发给rdp服务。
Backend中需要编写具体的操作,就是转达到哪个目标的哪个端口。

三、思路

(1) 思路一(通用)

编写acl规则,在四层(传输层)进行负载,根据协议类型进行分发,例如:遇到http流量发送给http服务,遇到rdp发送给rdp服务等。

(2) 思路二

编写acl规则,在七层(应用层)进行负载,判断应用类型进行分发,例如,遇到http分发到http服务,否则发送到xxx服务。

四、步骤

以思路一为例:

通过wireshark捕获tpkt(应用层数据传输协议)信息

编写acl规则路由进行流量分发

添加后端server

原始接口接管

完成

4.1 捕获tpkt

关于tpkt可百度或查看参考链接
三次握手后,开始应用层数据传输。
使用wireshark抓包:
ssh协议:
如何分析Haproxy端口复用

前三个包为三次握手,第四个包的起始三位,便是我们需要的tpkt,例如ssh为535348。
rdp协议:030000

如何分析Haproxy端口复用速查:

协议 TPKT
SSH 535348
RDP 030000
HTTP(GET) 474554
HTTP(POS) 504f53
HTTP(PUT) 505554
HTTP(DEL) 44454c
HTTP(OPT) 4f5054
HTTP(HEA) 484541
HTTP(CON) 434f4e
HTTP(TRA) 545241
HTTPS 160301

4.2 编写acl规则

global
defaults
  timeout connect 5000
  timeout client 50000
  timeout server 50000
frontend main
  mode tcp
  bind *:8888
# 重点:编写acl规则进行转发
  tcp‐request inspect‐delay 3s
  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
# 分发到对应的backend
  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

该配置文件的功能是监听8888端口,将http流量(速查表中http协议的8种tpkt)转发到本地的80上,将ssh流量转发到本地的22端口上,将rdp流量转发到另一主机的3389上。

五、实验

Target1:Ubuntu 16.04 x64

IP:192.168.213.128

HueBit AI
HueBit AI

一站式AI艺术创作工具

下载

开启22端口、80端口

如何分析Haproxy端口复用

Target2:Win7 x64

IP:192.168.213.129

开启3389端口

如何分析Haproxy端口复用

启动haproxy,-f 指定配置文件,开启8888端口表示启动成功。-d:调试模式,可不加。

如何分析Haproxy端口复用

HTTP协议:访问靶机的8888端口,流量被haproxy分发至本机的80。

如何分析Haproxy端口复用

RDP协议:访问靶机的8888端口,流量被haproxy分发至192.168.213.129的3389。

如何分析Haproxy端口复用SSH协议:访问靶机的8888端口,流量被haproxy分发至本机的22。

如何分析Haproxy端口复用

haproxy日志:

如何分析Haproxy端口复用

六、端口重定向

为了不影响常规的80端口访问,将输入的80端口流量重定向到8888端口。当用户以正常方式访问80端口时,流量将转发到8888端口,然后由haproxy再次转发回80端口。

  • Linux:iptables(不需要重启服务)

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

访问80可以正常访问:

如何分析Haproxy端口复用

Haproxy日志有记录,说明流量由80先到8888,再回到80。

如何分析Haproxy端口复用

  • Windows:netsh(需要重启web服务)

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

注意:如果在windows下启用端口重定向,需要在端口启动前添加netsh端口转发规则。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

6

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

6

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

8

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

14

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

17

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

2

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

130

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

8

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

208

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号