本文作者:Spark(Ms08067内网安全小组成员)
Spark微信(欢迎骚扰交流):
1.概述
优点:
-
大型业务领域应用广泛
-
支持四层代理(传输层)以及七层代理(应用层)
-
支持acl(访问控制列表),可灵活配置路由
-
windows使用cygwin编译后可运行(可跨平台)
-
定义haproxy进程管理安全及性能相关的参数
-
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
80 :
3.思路
(1) 思路一(通用)
(2) 思路二
4.步骤
以思路一为例:
-
通过wireshark捕获tpkt(应用层数据传输协议)信息
-
编写acl规则路由进行流量分发
-
添加后端server
-
原始接口接管
-
完成
4.1 捕获tpkt
ssh协议:
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 |
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上。
5.实验
-
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日志:
6.端口重定向
-
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端口转发规则。
-
https://www.cnblogs.com/readygood/p/9776403.html
-
https://blog.csdn.net/qq_28710983/article/details/82194404
-
https://wenku.baidu.com/view/9f509844e2bd960591c67723.html?fr=search-1-wk_seaincome
一文打尽 Linux/Windows端口复用实战
扫描二维码,加入内网小组,一起畅游内网!
扫描下方二维码学习更多安全知识!
本文始发于微信公众号(Ms08067安全实验室):一文打尽端口复用 VS Haproxy端口复用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论