Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So analysieren Sie die Wiederverwendung von Haproxy-Ports

So analysieren Sie die Wiederverwendung von Haproxy-Ports

WBOY
WBOYnach vorne
2023-05-29 09:25:411747Durchsuche

Autor dieses Artikels: Spark (Mitglied des Intranet-Sicherheitsteams Ms08067)

1. Überblick

Haproxy ist eine leistungsstarke Lastausgleichs-Proxy-Software, die in C-Sprache entwickelt wurde und TCP- und HTTP-Anwendungs-Proxy kostenlos und schnell bereitstellt und zuverlässig.
Ähnlich wie frp kann es mit einer Konfigurationsdatei + einem Server ausgeführt werden.
Vorteile:

Weit verbreitet in großen Geschäftsfeldern

Unterstützt Vierschicht-Proxy (Transportschicht) und Siebenschicht-Proxy (Anwendungsschicht)

Unterstützt ACL (Zugriffskontrollliste) und kann Routing flexibel konfigurieren

Windows-kompiliert mit cygwin Runnable (plattformübergreifend)

Access Control Lists (ACL) sind Listen von Anweisungen, die auf Router-Schnittstellen angewendet werden. Diese Anweisungslisten werden verwendet, um dem Router mitzuteilen, welche Datenpakete akzeptiert werden können und welche Datenpakete abgelehnt werden müssen.

2. Konfiguration

Offizielles Konfigurationshandbuch: https://cbonte.github.io/haproxy-dconv/2.2/configuration.html
Die Konfigurationsdatei besteht aus globaler Konfiguration und Proxy-Konfiguration:
Global Konfiguration (global): Definieren Sie Parameter im Zusammenhang mit der Sicherheit und Leistung des Haproxy-Prozessmanagements

Proxy-Einstellungen (Proxys):

Standards: Geben Sie Standardparameter für andere Konfigurationsabschnitte an. Die Standardkonfigurationsparameter können durch die nächsten „Standardeinstellungen“ zurückgesetzt werden

Frontend: Definieren Sie eine Reihe von Listening-Sockets. Diese Sockets können Client-Anfragen annehmen und Verbindungen mit ihnen herstellen.

Backend: Definieren Sie „Backend“-Server. Der Front-End-Proxyserver sendet kurzfristige Anfragen an diese Server.

listen: Definieren Sie den Listening-Socket und den Backend-Server, ähnlich wie beim Zusammenfügen der Frontend- und Backend-Segmente.

Beispiel:

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
Konzentrieren Sie sich auf Frontend und Backend.

Sie müssen ACL-Regeln schreiben und die Weiterleitung im Frontend konfigurieren. Wenn beispielsweise HTTP-Verkehr eingeht, wird er an den Webdienst weitergeleitet; wenn RDP-Verkehr eingeht, wird er an den RDP-Dienst weitergeleitet.
Spezifische Vorgänge müssen im Backend geschrieben werden, die auf welches Ziel und welchen Port übertragen werden sollen.

Drei Ideen

(1) Idee 1 (allgemein)

Schreiben Sie ACL-Regeln, laden Sie sie auf die vierte Schicht (Transportschicht) und verteilen Sie sie entsprechend dem Protokolltyp. Zum Beispiel: wenn Sie auf http stoßen Datenverkehr, senden Sie ihn an den HTTP-Dienst, wenn Sie auf RDP stoßen, senden Sie ihn an den RDP-Dienst usw.

(2) Idee 2

Schreiben Sie ACL-Regeln, führen Sie das Laden auf der siebten Schicht (Anwendungsschicht) durch und bestimmen Sie den Anwendungstyp für die Verteilung. Wenn beispielsweise http angetroffen wird, verteilen Sie ihn andernfalls an den http-Dienst Senden Sie es an den xxx-Dienst.

Vier Schritte

Nehmen Sie Idee 1 als Beispiel:

Erfassen Sie TPKT-Informationen (Application Layer Data Transfer Protocol) über Wireshark.

Schreiben Sie ein ACL-Regelrouting für die Verkehrsverteilung.

Backend-Server hinzufügen.

Übernahme der ursprünglichen Schnittstelle

Abgeschlossen

4.1 tpkt erfassen

Informationen zu tpkt finden Sie bei Baidu oder sehen Sie sich den Referenzlink an

Nach dem Drei-Wege-Handshake beginnt die Datenübertragung auf Anwendungsebene.
Verwenden Sie Wireshark, um Pakete zu erfassen:
SSH-Protokoll:

So analysieren Sie die Wiederverwendung von Haproxy-Ports

Die ersten drei Pakete sind Drei-Wege-Handshakes, und die ersten drei Ziffern des vierten Pakets sind die tpkt, die wir benötigen, zum Beispiel ist ssh 535348.

rdp-Protokoll: 030000

Schnellcheck: So analysieren Sie die Wiederverwendung von Haproxy-Ports

ProtokollTPKTSSH535348R DP 030000HTTP(GET)474554HTTP(POS)504f53HTTP(PUT)505554HTTP(DEL)44454cHT. TP(OPT)4f5054HTTP( HEA )484541HTTP(CON)434f4eHTTP(TRA)545241HTTPS160301

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端口

So analysieren Sie die Wiederverwendung von Haproxy-Ports

Target2:Win7 x64

IP:192.168.213.129

开启3389端口

So analysieren Sie die Wiederverwendung von Haproxy-Ports

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

So analysieren Sie die Wiederverwendung von Haproxy-Ports

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

So analysieren Sie die Wiederverwendung von Haproxy-Ports

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

So analysieren Sie die Wiederverwendung von Haproxy-PortsSSH协议:访问靶机的8888端口,流量被haproxy分发至本机的22。

So analysieren Sie die Wiederverwendung von Haproxy-Ports

haproxy日志:

So analysieren Sie die Wiederverwendung von Haproxy-Ports

六、端口重定向

为了不影响常规的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可以正常访问:

So analysieren Sie die Wiederverwendung von Haproxy-Ports

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

So analysieren Sie die Wiederverwendung von Haproxy-Ports

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

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

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

Das obige ist der detaillierte Inhalt vonSo analysieren Sie die Wiederverwendung von Haproxy-Ports. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen