Haproxy

用於 http-request 的 HA-Proxy 和 ACL 拒絕

  • December 31, 2021

執行 ha-proxy 1.6。

有人可以告訴我為什麼 ACL 和 http-request 拒絕不起作用嗎?

我嘗試過模式 http、模式 tcp、斜杠結束、路徑中沒有斜杠、path_end、不同的網路遮罩、一個 ip 等。我無法讓它工作。只是沒有訪問控制。我可以從任何地方訪問目錄和文件。

global
 pidfile /var/run/haproxy.pid
 daemon

defaults
 mode tcp
 retries 5
 option redispatch
 option dontlognull
 option tcp-smart-accept
 option tcp-smart-connect


listen front-end
 bind xxx.xxx.xxx.xx1:80
 bind xxx.xxx.xxx.xx2:80
 mode http
 balance roundrobin
 option forceclose
 option http-server-close
 option forwardfor
 maxconn 2000
 timeout http-request 15s
 timeout connect 15s
 timeout server 60s
 timeout client 30s
 timeout http-keep-alive 15s
 acl network_allowed src xxx.xxx.xxx.xx5
 acl inside path_beg,url_dec -i /path/to/directory/
 http-request deny if inside !network_allowed 


 server 1 xxx.xxx.xxx.xx1:80 weight 10 SERVER1 check
 server 2 xxx.xxx.xxx.xx2:80 weight 10 SERVER2 check
 server 3 xxx.xxx.xxx.xx3:80 weight 15 SERVER3 check

嘗試添加-m beg

acl inside path_beg,url_dec -m beg -i /path/to/directory/

另外,你想要達到什麼目的?

正如我在我的伺服器上看到並驗證您的那樣:現在src xxx.xxx.xxx.xx5您可以訪問所有內容,而從其他地址您將403獲得/path/to/directory

curl http://example.com/path/to/directory/
<html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.
</body></html>

但是,如果您添加OR到您的http-request deny

http-request deny if inside OR !network_allowed

那麼您將獲得403除此之外的所有地址src xxx.xxx.xxx.xx5,並且您將從該地址獲得403哪種/path/to/directory

行為是正確的?

引用自:https://serverfault.com/questions/815676