Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk menganalisis penggunaan semula port Haproxy

Bagaimana untuk menganalisis penggunaan semula port Haproxy

WBOY
WBOYke hadapan
2023-05-29 09:25:411709semak imbas

Pengarang artikel ini: Spark (ahli pasukan keselamatan intranet Ms08067)

1 Gambaran Keseluruhan

Haproxy dibangunkan menggunakan bahasa c High -perisian proksi pengimbangan beban prestasi, menyediakan proksi aplikasi TCP dan HTTP, percuma, pantas dan boleh dipercayai.
Sama seperti frp, ia boleh dijalankan menggunakan fail konfigurasi + pelayan.
Kelebihan:

Digunakan secara meluas dalam bidang perniagaan yang besar

Menyokong proksi empat lapisan (lapisan pengangkutan) dan proksi tujuh lapisan (lapisan aplikasi)

Menyokong acl ( Senarai Kawalan Akses), penghalaan boleh dikonfigurasikan secara fleksibel

Windows boleh dijalankan selepas menyusun dengan cygwin (boleh merentas platform)

Senarai Kawalan Akses (ACL) adalah digunakan dalam penghala Senarai arahan untuk antara muka Senarai arahan ini digunakan untuk memberitahu penghala paket data mana yang boleh diterima dan paket data mana yang perlu ditolak.

2. Konfigurasi

Manual konfigurasi rasmi: https://cbonte.github.io/haproxy-dconv/2.2/configuration.html
Fail konfigurasi terdiri daripada konfigurasi global dan konfigurasi proksi:
Konfigurasi global (global): Mentakrifkan parameter yang berkaitan dengan keselamatan dan prestasi pengurusan proses haproksi

Tetapan proksi (proksi) :

lalai: Sediakan parameter lalai untuk bahagian konfigurasi lain Parameter konfigurasi lalai boleh ditetapkan semula dengan "lalai" seterusnya

depan: Tentukan satu siri soket pendengaran, ini. soket boleh menerima permintaan pelanggan dan mewujudkan sambungan dengannya

belakang: Tentukan pelayan "belakang", dan pelayan proksi bahagian hadapan akan menghantar permintaan jangka pendek kepada pelayan ini

dengar: Tentukan soket mendengar dan pelayan hujung belakang, sama seperti menyatukan segmen hujung hadapan dan hujung belakang

Contoh:

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

Fokus pada hujung hadapan dan hujung belakang.
Anda perlu menulis peraturan acl dan mengkonfigurasi pemajuan dalam Frontend. Sebagai contoh, apabila trafik HTTP datang, ia dimajukan ke perkhidmatan web; apabila trafik RDP datang, ia dimajukan kepada perkhidmatan RDP.
Operasi khusus perlu ditulis dalam Backend, iaitu memindahkan ke sasaran dan port mana.

Tiga idea

(1) Idea 1 (umum)

Tulis peraturan acl pada lapisan empat (lapisan penghantaran) untuk menjalankan beban dan mengagihkannya mengikut jenis protokol Contohnya, apabila trafik http ditemui, ia dihantar ke perkhidmatan http, apabila rdp ditemui, ia dihantar ke perkhidmatan rdp, dsb.

(2) Idea 2

Tulis peraturan acl, jalankan beban pada lapisan ketujuh (lapisan aplikasi), tentukan jenis aplikasi untuk pengedaran, contohnya, apabila menghadapi pengedaran http ke perkhidmatan http, jika tidak dihantar ke perkhidmatan xxx.

Empat Langkah

Ambil idea 1 sebagai contoh:

Tangkap maklumat tpkt (protokol pemindahan data lapisan aplikasi) melalui wireshark<.>

Tulis penghalaan peraturan acl untuk pengedaran trafik

Tambah pelayan bahagian belakang

Pengambilalihan antara muka asal

Selesai

4.1 Tangkap tpkt

Mengenai tpkt, sila rujuk Baidu atau lihat pautan rujukan

Selepas jabat tangan tiga hala, penghantaran data lapisan aplikasi bermula.
Gunakan wireshark untuk menangkap paket:
protokol ssh:

Bagaimana untuk menganalisis penggunaan semula port Haproxy

Tiga paket pertama ialah jabat tangan tiga hala, dan tiga digit pertama paket keempat ialah tpkt kita need , contohnya ssh ialah 535348.

protokol rdp: 030000

Semak cepat: Bagaimana untuk menganalisis penggunaan semula port Haproxy

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

Bagaimana untuk menganalisis penggunaan semula port Haproxy

Target2:Win7 x64

IP:192.168.213.129

开启3389端口

Bagaimana untuk menganalisis penggunaan semula port Haproxy

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

Bagaimana untuk menganalisis penggunaan semula port Haproxy

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

Bagaimana untuk menganalisis penggunaan semula port Haproxy

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

Bagaimana untuk menganalisis penggunaan semula port HaproxySSH协议:访问靶机的8888端口,流量被haproxy分发至本机的22。

Bagaimana untuk menganalisis penggunaan semula port Haproxy

haproxy日志:

Bagaimana untuk menganalisis penggunaan semula 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可以正常访问:

Bagaimana untuk menganalisis penggunaan semula port Haproxy

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

Bagaimana untuk menganalisis penggunaan semula port Haproxy

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

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

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

Atas ialah kandungan terperinci Bagaimana untuk menganalisis penggunaan semula port Haproxy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam