Pengarang artikel ini: Spark (ahli pasukan keselamatan intranet Ms08067)
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.
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.
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.
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.
Ambil idea 1 sebagai contoh:
Tangkap maklumat tpkt (protokol pemindahan data lapisan aplikasi) melalui wireshark<.>
Tulis penghalaan peraturan acl untuk pengedaran trafikTambah pelayan bahagian belakangPengambilalihan antara muka asalSelesai
Selepas jabat tangan tiga hala, penghantaran data lapisan aplikasi bermula.
Gunakan wireshark untuk menangkap paket:
protokol ssh:
protokol rdp: 030000
Semak cepat:
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端口
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日志:
为了不影响常规的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可以正常访问:
Haproxy日志有记录,说明流量由80先到8888,再回到80。
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!