HA-Proxy 和 ACL 用于 http 请求拒绝

HA-Proxy 和 ACL 用于 http 请求拒绝

运行 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}

请帮助我理解我的错误。

相关内容