Maison  >  Article  >  Opération et maintenance  >  Comment analyser la réutilisation du port Haproxy

Comment analyser la réutilisation du port Haproxy

WBOY
WBOYavant
2023-05-29 09:25:411713parcourir

Auteur de cet article : Spark (membre de l'équipe de sécurité intranet Ms08067)

1. Présentation

#🎜 🎜 #Haproxy est un logiciel proxy d'équilibrage de charge haute performance développé en langage C. Il fournit un proxy d'application TCP et http, gratuit, rapide et fiable.

Similaire à frp, il peut être exécuté à l'aide d'un fichier de configuration + d'un serveur.
Avantages :

Largement utilisé dans les grands domaines d'activité

Prend en charge le proxy à quatre couches (couche de transport) et le proxy à sept couches (couche d'application) #🎜🎜 #

Prend en charge acl (liste de contrôle d'accès) et peut configurer le routage de manière flexible

windows peut être exécuté après la compilation avec cygwin (peut être multiplateforme)

#🎜🎜 #

Les listes de contrôle d'accès (ACL) sont des listes d'instructions appliquées aux interfaces du routeur. Ces listes d'instructions sont utilisées pour indiquer au routeur quels paquets de données peuvent être acceptés et quels paquets de données doivent être rejetés.

2. Configuration

Manuel de configuration officiel :

https://cbonte.github.io/haproxy -dconv/2.2/configuration.html

Le fichier de configuration se compose de la configuration globale et de la configuration du proxy :
Configuration globale (globale) : définit les paramètres liés à la sécurité de la gestion des processus haproxy et performances Proxies :

defaults : Fournissez des paramètres par défaut pour d'autres sections de configuration. Les paramètres de configuration par défaut peuvent être réinitialisés par les prochains "valeurs par défaut"# 🎜🎜#.

frontend : Définir une série de sockets d'écoute pouvant accepter les requêtes des clients et établir des connexions avec eux

backend : Définir le serveur "backend", frontend Le serveur proxy enverra des requêtes à court terme à ces serveurs

écouter : définissez le socket d'écoute et le serveur back-end, de la même manière que si vous réunissiez les segments frontend et backend

#🎜 🎜#

Exemple :

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

Concentrez-vous sur le frontend et le backend.

Vous devez écrire des règles acl et configurer le transfert dans Frontend. Par exemple, lorsque le trafic HTTP arrive, il est transmis au service Web ; lorsque le trafic RDP arrive, il est transmis au service RDP.
Des opérations spécifiques doivent être écrites dans le Backend, qui consiste à transférer vers quel port de quelle cible.

3. Idées

(1) Idée 1 (général) #🎜🎜 #Écrivez des règles acl, chargez-les sur la quatrième couche (couche de transport) et distribuez-les en fonction du type de protocole. Par exemple, lorsque du trafic http est rencontré, il est envoyé au service http, lorsque rdp est rencontré, il est envoyé. au service rdp, etc.

(2) Idée 2

Écrire des règles acl, charger sur la septième couche (couche d'application), déterminer le type d'application à distribuer, par exemple, lorsque http est rencontré, il est distribué au service http, sinon il est envoyé au service xxx.

Quatre étapes

Prenez l'idée 1 comme exemple :

Capturez un tpkt via Wireshark Informations sur le protocole de transfert de données de la couche application

Écrire le routage des règles ACL pour la distribution du trafic

Ajouter un serveur backend

Reprise de l'interface d'origine

# 🎜🎜#Complete

4.1 Capture tpkt

À propos de tpkt peut être trouvé sur Baidu ou consultez le lien de référence #🎜🎜 #Après trois poignées de main, démarrez la transmission des données de la couche application.

Utilisez Wireshark pour capturer des paquets :
protocole ssh :

Les trois premiers paquets sont une poignée de main à trois et les chiffres de départ du quatrième packet are C'est le tpkt dont nous avons besoin, par exemple, ssh est 535348. # 🎜🎜 # Protocole RDP: 030000 # 🎜🎜 ## 🎜🎜 ## 🎜🎜 # Vérification rapide: # 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 # Protocole # 🎜🎜 ## 🎜 🎜#TPKT





Comment analyser la réutilisation du port HaproxySSH

535348

#🎜 🎜## 🎜🎜#RDP

Comment analyser la réutilisation du port Haproxy030000

HTTP(GET)474554HTTP(POS)504f5350555 4 44454c4f5054HTTP(HEA)484541# 🎜🎜# # 🎜🎜 # http (con) # 🎜🎜 ## 🎜🎜 # 434f4e # 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 # http (tra) # 🎜🎜 ## 🎜🎜 # 545241 # 🎜🎜 # # # 🎜🎜#HTTPS160301

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

Comment analyser la réutilisation du port Haproxy

Target2:Win7 x64

IP:192.168.213.129

开启3389端口

Comment analyser la réutilisation du port Haproxy

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

Comment analyser la réutilisation du port Haproxy

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

Comment analyser la réutilisation du port Haproxy

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

Comment analyser la réutilisation du port HaproxySSH协议:访问靶机的8888端口,流量被haproxy分发至本机的22。

Comment analyser la réutilisation du port Haproxy

haproxy日志:

Comment analyser la réutilisation du port 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可以正常访问:

Comment analyser la réutilisation du port Haproxy

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

Comment analyser la réutilisation du port Haproxy

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

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

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

# 🎜🎜#
HTTP(PUT)
HTTP(DEL)
HTTP(OPT) # 🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer