![HA-Proxy 和 ACL 用于 http 请求拒绝](https://linux22.com/image/693704/HA-Proxy%20%E5%92%8C%20ACL%20%E7%94%A8%E4%BA%8E%20http%20%E8%AF%B7%E6%B1%82%E6%8B%92%E7%BB%9D.png)
运行 ha-proxy 1.6。
有人能告诉我为什么 ACL 和 http 请求拒绝不起作用吗?
我尝试过 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
答案1
尝试添加-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
行为是正确的?
答案2
不确定这是否有意义,但这个想法是限制仅 HA 子网的处理
https://www.haproxy.com/blog/introduction-to-haproxy-acls/
#此 ACL 的主要目标是如果请求不是来自 HAproxy 主机子网 192.168.1.0/24 (在黑名单中定义为 192.168.1.0/24),则拒绝访问后端。 acl onlyhaprx01 path -i -m beg / use_backend websrv if onlyhaprx01 http-request denied if [path -i -m beg /] !{src -f /etc/haproxy/blacklist.acl}
请帮助我理解我的错误。