如何分析Haproxy端口復(fù)用

如何分析Haproxy端口復(fù)用,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)容縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

本文作者:Spark(Ms08067內(nèi)網(wǎng)安全小組成員)

一、概述

Haproxy是一個(gè)使用c語言開發(fā)的高性能負(fù)載均衡代理軟件,提供tcp和http的應(yīng)用程序代理,免費(fèi)、快速且可靠。
類似frp,使用一個(gè)配置文件+一個(gè)server就可以運(yùn)行。
優(yōu)點(diǎn):

大型業(yè)務(wù)領(lǐng)域應(yīng)用廣泛

支持四層代理(傳輸層)以及七層代理(應(yīng)用層)

支持acl(訪問控制列表),可靈活配置路由

windows使用cygwin編譯后可運(yùn)行(可跨平臺)

訪問控制列表(Access Control Lists,ACL)是應(yīng)用在路由器接口的指令列表,這些指令列表用來告訴路由器哪些數(shù)據(jù)包可以接受,哪些數(shù)據(jù)包需要拒絕。

二、配置

官方配置手冊:https://cbonte.github.io/haproxy-dconv/2.2/configuration.html
配置文件由全局配置和代理配置組成:
全局配置(global):定義haproxy進(jìn)程管理安全及性能相關(guān)的參數(shù)

代理設(shè)定(proxies):

defaults:為其他配置段提供默認(rèn)參數(shù),默認(rèn)配置參數(shù)可由下一個(gè)"defaults"重新設(shè)定

frontend:定義一系列監(jiān)聽的套接字,這些套接字可接受客戶端請求并與之建立連接

backend:定義"后端"服務(wù)器,前端代理服務(wù)器將會把哭護(hù)短的請求調(diào)度至這些服務(wù)器

listen:定義監(jiān)聽的套接字和后端的服務(wù)器,類似于將frontend和backend段放在一起

示例:

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規(guī)則
  acl is‐proxy‐now urlp_reg(proxy) ^(http|https|socks5)$
# 分發(fā)到對應(yīng)的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

重點(diǎn)關(guān)注frontend和backend。
Frontend中需要編寫acl規(guī)則,配置轉(zhuǎn)發(fā)。比如,當(dāng)http流量來的時(shí)候,轉(zhuǎn)發(fā)給web服務(wù);當(dāng)rdp流量來的時(shí)候,轉(zhuǎn)發(fā)給rdp服務(wù)。
Backend中需要編寫具體的操作,就是轉(zhuǎn)達(dá)到哪個(gè)目標(biāo)的哪個(gè)端口。

三、思路

(1) 思路一(通用)

編寫acl規(guī)則,在四層(傳輸層)進(jìn)行負(fù)載,根據(jù)協(xié)議類型進(jìn)行分發(fā),例如:遇到http流量發(fā)送給http服務(wù),遇到rdp發(fā)送給rdp服務(wù)等。

(2) 思路二

編寫acl規(guī)則,在七層(應(yīng)用層)進(jìn)行負(fù)載,判斷應(yīng)用類型進(jìn)行分發(fā),例如,遇到http分發(fā)到http服務(wù),否則發(fā)送到xxx服務(wù)。

四、步驟

以思路一為例:

通過wireshark捕獲tpkt(應(yīng)用層數(shù)據(jù)傳輸協(xié)議)信息

編寫acl規(guī)則路由進(jìn)行流量分發(fā)

添加后端server

原始接口接管

完成

4.1 捕獲tpkt

關(guān)于tpkt可百度或查看參考鏈接
三次握手后,開始應(yīng)用層數(shù)據(jù)傳輸。
使用wireshark抓包:
ssh協(xié)議:
如何分析Haproxy端口復(fù)用

前三個(gè)包為三次握手,第四個(gè)包的起始三位,便是我們需要的tpkt,例如ssh為535348。
rdp協(xié)議:030000

如何分析Haproxy端口復(fù)用速查:

協(xié)議TPKT
SSH535348
RDP030000
HTTP(GET)474554
HTTP(POS)504f53
HTTP(PUT)505554
HTTP(DEL)44454c
HTTP(OPT)4f5054
HTTP(HEA)484541
HTTP(CON)434f4e
HTTP(TRA)545241
HTTPS160301

4.2 編寫acl規(guī)則

global
defaults
  timeout connect 5000
  timeout client 50000
  timeout server 50000
frontend main
  mode tcp
  bind *:8888
# 重點(diǎn):編寫acl規(guī)則進(jìn)行轉(zhuǎn)發(fā)
  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
# 設(shè)置四層允許通過
  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
# 分發(fā)到對應(yīng)的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

該配置文件的功能是監(jiān)聽8888端口,將http流量(速查表中http協(xié)議的8種tpkt)轉(zhuǎn)發(fā)到本地的80上,將ssh流量轉(zhuǎn)發(fā)到本地的22端口上,將rdp流量轉(zhuǎn)發(fā)到另一主機(jī)的3389上。

五、實(shí)驗(yàn)

Target1:Ubuntu 16.04 x64

IP:192.168.213.128

開啟22端口、80端口

如何分析Haproxy端口復(fù)用

Target2:Win7 x64

IP:192.168.213.129

開啟3389端口

如何分析Haproxy端口復(fù)用

啟動(dòng)haproxy,-f 指定配置文件,開啟8888端口表示啟動(dòng)成功。-d:調(diào)試模式,可不加。

如何分析Haproxy端口復(fù)用

HTTP協(xié)議:訪問靶機(jī)的8888端口,流量被haproxy分發(fā)至本機(jī)的80。

如何分析Haproxy端口復(fù)用

RDP協(xié)議:訪問靶機(jī)的8888端口,流量被haproxy分發(fā)至192.168.213.129的3389。

如何分析Haproxy端口復(fù)用SSH協(xié)議:訪問靶機(jī)的8888端口,流量被haproxy分發(fā)至本機(jī)的22。

如何分析Haproxy端口復(fù)用

haproxy日志:

如何分析Haproxy端口復(fù)用

六、端口重定向

為了不影響正常的80端口的訪問,將過來的80端口流量轉(zhuǎn)發(fā)到8888端口上。這樣用戶正常訪問80端口時(shí),流量會先轉(zhuǎn)發(fā)到8888端口上,再由haproxy轉(zhuǎn)發(fā)回80端口。

  • Linux:iptables(不需要重啟服務(wù))

iptables ‐t nat ‐A PREROUTING ‐i eth0 ‐p tcp ‐‐dport 80 ‐j REDIRECT ‐‐to‐port 8888

訪問80可以正常訪問:

如何分析Haproxy端口復(fù)用

Haproxy日志有記錄,說明流量由80先到8888,再回到80。

如何分析Haproxy端口復(fù)用

  • Windows:netsh(需要重啟web服務(wù))

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

注意:如果在windows下啟用端口重定向,需要在端口啟動(dòng)前添加netsh端口轉(zhuǎn)發(fā)規(guī)則。

看完上述內(nèi)容,你們掌握如何分析Haproxy端口復(fù)用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站欄目:如何分析Haproxy端口復(fù)用
鏈接地址:http://bm7419.com/article28/goegcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、外貿(mào)建站、網(wǎng)站排名、響應(yīng)式網(wǎng)站用戶體驗(yàn)、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)