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

So analysieren Sie die Wiederverwendung von Haproxy-Ports

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2023-05-29 09:25:41
nach vorne
1941 Leute haben es durchsucht

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
Nach dem Login kopieren
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
Nach dem Login kopieren

该配置文件的功能是监听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
Nach dem Login kopieren

访问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
Nach dem Login kopieren

注意:如果在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!

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage