首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HAproxy ACL .默认情况下阻止与Haproxy的所有连接,并且只允许特定的IP。

HAproxy ACL .默认情况下阻止与Haproxy的所有连接,并且只允许特定的IP。
EN

Stack Overflow用户
提问于 2017-01-04 17:03:12
回答 1查看 7.1K关注 0票数 0

我正在尝试使用haproxy来解决一个场景。如下所示

  • 默认情况下阻止所有IP
  • 只允许来自特定IP地址的连接。
  • 如果任何连接来自一个时间点IP,如果它在30秒内超过10个并发连接,则应拒绝它。

我想这样做,以减少对我的服务器的API调用的数量。有谁能帮我一下吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-01-04 21:28:05

前两件事很容易,只允许白色的IP

代码语言:javascript
复制
acl whitelist src 10.12.12.23
use_backend SOMESERVER if whitelist

第三种-节流-需要使用棍子桌 (有许多数据类型-计数器康涅狄格,塞斯,http,速率.)作为费率计数器:

代码语言:javascript
复制
#                    max entries              count request in 60s periods
stick-table type ip   size 200k   expire 100s store http_req_rate(60s) 

接下来,你必须填满桌子,用跟踪每个请求的例子。通过IP

代码语言:javascript
复制
tcp-request content track-sc0 src 
# more info at http://cbonte.github.io/haproxy-dconv/1.5/configuration.html#4.2-tcp-request%20connection

最后,acl:

代码语言:javascript
复制
# is there more than 5req/1min from IP
acl http_rate_abuse sc0_http_req_rate gt 5

# update use_backend condition
use_backend SOMESERVER if whitelisted !http_rate_abuse

例如,一些具有自定义错误的工作配置文件:

代码语言:javascript
复制
global
    log /dev/log    local1 debug

defaults
    log     global
    mode    http
    option  httplog
    retries 3
    option redispatch
    maxconn 2000
    contimeout      5000
    clitimeout      50000
    srvtimeout      50000

frontend http
    bind *:8181

    stick-table type ip   size 200k   expire 100s store http_req_rate(60s)
    tcp-request content track-sc0 src

    acl whitelist src 127.0.0.1
    acl http_rate_abuse sc0_http_req_rate gt 5 
    use_backend error401 if !whitelist
    use_backend error429 if http_rate_abuse
    use_backend realone

backend realone
    server local stackoverflow.com:80

# too many requests
backend error429
    mode http
    errorfile 503 /etc/haproxy/errors/429.http

# unauthenticated
backend error401
    mode http
    errorfile 503 /etc/haproxy/errors/401.http

注意:错误处理有点棘手。由于上面的错误后端缺少服务器条目,haproxy将抛出HTTP503,errorfile捕获它们并发送不同的错误(使用不同的代码)。

示例/etc/haproxy/errors/401.http内容:

代码语言:javascript
复制
HTTP/1.0 401 Unauthenticated
Cache-Control: no-cache
Connection: close
Content-Type: text/html

<html><body><h1>401 Unauthenticated</h1>
</body></html>

示例/etc/haproxy/errors/429.http内容:

代码语言:javascript
复制
HTTP/1.0 429 Too many requests
Cache-Control: no-cache
Connection: close
Content-Type: text/html

<html><body><h1>429 Too many requests</h1>
</body></html>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41469425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档