如何分析Haproxy端口复用

本文作者: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段放在一起

示例:

globaldefaults  log global  mode tcp  option dontlognull  timeout connect 5000  timeout client 50000  timeout server 50000frontend 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 httpbackend socks5  mode tcp  timeout server 1h  server ss 127.0.0.1:50000backend 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规则

globaldefaults  timeout connect 5000  timeout client 50000  timeout server 50000frontend 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 socks5backend socks5  mode tcp  timeout server 1h  server ss 127.0.0.1:50000backend http  mode tcp  server http 127.0.0.1:80backend ssh  mode tcp  server ssh 127.0.0.1:22backend 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端口

如何分析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端口转发规则。

看完上述内容,你们掌握如何分析Haproxy端口复用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

文章标题:如何分析Haproxy端口复用,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/24337

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月10日 下午11:54
下一篇 2022年9月10日 下午11:56

相关推荐

  • 如何使用mediacreationtool重装系统

    根据目前的测试,使用这个方法可以解决的问题包括但不限于: 1.系统组件损坏,部分系统文件缺失; 2.升级到11月更新后Windows 10出现的开始菜单、任务栏图标无法使用的情况; 3.在Windows 10 10565之后的版本使用PowerShell重置命令导致自带应用和应用商店无法使用的情况(…

    2022年9月1日
    44600
  • sqlmap _dns注入配置方法是什么

    网上针对sqlmap进行dns注入的相关文章太少,只是简单介绍了下–dns-domain参数,相关的实战文章要么就写的模糊或者一笔带过,搞的云里雾里(主要是菜,关键还没大佬带)。然后自己参考网上的方法自己重新搞了一遍。 需要准备的东西,sqlmap、windows盲注一个、两个域名、一台…

    2022年9月16日
    35500
  • TraceId怎么搭配ELK使用

    需求分析 先分析一下,我们想实现的核心功能是搜索,必然是用 ES 实现,那问题就转换成如何将日志收集并存储到 ES。 日志大家都不陌生了,可以在控制台打印,也可以存入文件,那能不能直接输入 ES 呢,好像没听说过。 这里就要用到 Logstash 来收集日志,Spring 默认的日志框架 Logba…

    2022年9月20日
    60700
  • apache flink任意jar包上传导致远程代码执行的示例分析

    漏洞描述: 2019年11月11号,安全工程师Henry Chen披露了一个Apache Flink未授权上传jar包导致远程代码执行的漏洞。由于Apache Flink Dashboard 默认无需认证即可访问,通过上传恶意jar包并触发恶意代码执行,从而获取shell。 影响范围 <= 1…

    2022年9月18日
    75300
  • usmt.ppkg文件有什么作用

    “usmt.ppkg”是windows自带的系统还原功能的系统备份文件;Windows系统还原是在不需要重新安装操作系统,也不会破坏数据文件的前提下使系统回到原有的工作状态,PBR恢复功能的备份文件就是“usmt.ppkg”。 本教程操作环境:windows10系统、DELL G3电脑。 usmt.…

    2022年9月10日
    3.6K00
  • 如何进行Linux恶意软件SkidMap分析

    挖掘加密货币恶意软件仍然是一个普遍的威胁。网络罪犯也越来越多地探索新的平台和方法来进一步利用挖矿恶意软件——从移动设备、Unix和类Unix系统到服务器和云环境。 攻击者不断提升恶意软件抵御检测的能力。例如,将恶意软件与看门狗组件捆绑在一起,以确保非法的加密货币挖掘活动在受感染的机器中持续存在,或者…

    2022年9月20日
    61600
  • 怎么用javascript实现自定义事件功能

    概述 自定义事件很难派上用场? 为什么自定义事件很难派上用场,因为以前js不是模块化开发,也很少协作。因为事件本质是一种通信方式,是一种消息,只有存在多个对象,多个模块的情况下,才有可能需要用到事件进行通信。而现在有了模块化之后,已经可以使用自定义事件进行各模块间协作了。 哪里用得到自定义事件? 事…

    2022年8月27日
    37100
  • excel下拉列表怎么填充颜色

    excel下拉列表填充颜色的方法: 1、首先打开软件,然后点击“数据有效性”选择“数据有校性”。 2、之后在允许中选择“序列”并输入下拉值,在依次选择“条件格式—>等于”。 3、在设置格式的值中输入对应的值,选择右侧的下拉,点击“自定义格式”。 4、之后在字体任务选择栏右下方选择颜色。 5、最…

    2022年8月27日
    3.9K00
  • windows会声会影如何保存视频

    会声会影保存视频的方法 1、首先我们点击上方的“分享”按钮。 2、然后就可以选择我们需要保存的视频格式了。 3、我们还可以勾选“与项目设置相同”,这样就能直接保存和原视频一模一样的格式。 4、然后在下方设置文件名,点击右边文件夹图标设置保存位置,再点击“开始”。 5、最后只要等待视频成功保存就可以了…

    2022年9月15日
    29400
  • 电脑键盘锁住了如何解决

    键盘锁住了的解决方法 1、如果着急打字的话,按“ctrl”加“win”键加“o”键,调出软键盘打字。 2、右键点击此电脑的“管理”,点击进入“系统工具”。 3、点击“设备管理器”,点击“键盘”。 4、右键点击“更新驱动程序”即可。 读到这里,这篇“电脑键盘锁住了如何解决”文章已经介绍完毕,想要掌握这…

    2022年9月6日
    44200
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部