如何分析Haproxy端口复用
发布时间 - 2023-05-29 00:00:00 点击率:次本文作者: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协议:
前三个包为三次握手,第四个包的起始三位,便是我们需要的tpkt,例如ssh为535348。
rdp协议:030000
速查:
| 协议 | 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
开启22端口、80端口
Target2:Win7 x64
IP:192.168.213.129
开启3389端口
启动haproxy,-f 指定配置文件,开启8888端口表示启动成功。-d:调试模式,可不加。
HTTP协议:访问靶机的8888端口,流量被haproxy分发至本机的80。
RDP协议:访问靶机的8888端口,流量被haproxy分发至192.168.213.129的3389。
SSH协议:访问靶机的8888端口,流量被haproxy分发至本机的22。
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日志有记录,说明流量由80先到8888,再回到80。
Windows:netsh(需要重启web服务)
netsh interface portproxy add v4tov4 listenport=80 connectport=8888 connectaddress=127.0.0.1
注意:如果在windows下启用端口重定向,需要在端口启动前添加netsh端口转发规则。
# 配置文件
# 应用层
# 四层
# 发至
# 重定向
# 后端
# 重启
# 本机
# 数据包
# 转发给
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速选择适合个人网站的云服务器配置?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
装修招标网站设计制作流程,装修招标流程?
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Laravel中的withCount方法怎么高效统计关联模型数量
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何快速生成可下载的建站源码工具?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
如何实现建站之星域名转发设置?
专业商城网站制作公司有哪些,pi商城官网是哪个?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
千库网官网入口推荐 千库网设计创意平台入口
iOS UIView常见属性方法小结
网站制作报价单模板图片,小松挖机官方网站报价?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
如何基于PHP生成高效IDC网络公司建站源码?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
如何选择PHP开源工具快速搭建网站?
如何在Windows服务器上快速搭建网站?
中山网站制作网页,中山新生登记系统登记流程?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何在阿里云香港服务器快速搭建网站?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
如何在IIS7上新建站点并设置安全权限?
,怎么在广州志愿者网站注册?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
如何构建满足综合性能需求的优质建站方案?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
网站优化排名时,需要考虑哪些问题呢?
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
七夕网站制作视频,七夕大促活动怎么报名?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
如何快速搭建自助建站会员专属系统?
Laravel怎么使用Intervention Image库处理图片上传和缩放
javascript中的try catch异常捕获机制用法分析
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
php打包exe后无法访问网络共享_共享权限设置方法【教程】
如何在万网利用已有域名快速建站?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
如何在局域网内绑定自建网站域名?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口


l规则进行转发
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