2017-01-04 123 views
0

我正試圖解決現在使用haproxy的情況。默認情況下 HAproxy ACL。阻止所有連接到Haproxy默認情況下,只允許特定IP

  • 場景如下

    • 阻止所有IP允許從特定IP地址的唯一連接
    • 如果任何連接來自whilelist IP,如果應該,如果它超過超過10個併發連接拒絕30秒

    我想這樣做,以減少進入我的服務器的API調用數量。任何人都可以幫助我嗎?

    感謝

  • +0

    你需要做的嘗試,在這一點,並告訴我們,你會被卡住。 HAProxy配置文件可能涉及到某種程度的「編程」,但我懷疑你會發現[服務器故障](http://serverfault.com)比HAProxy問題的Stack Overflow更合適。 –

    回答

    2

    一兩件事情很容易,只需只允許白名單中的IP

    acl whitelist src 10.12.12.23 
    use_backend SOMESERVER if whitelist 
    

    第三 - 限制 - 需要使用stick-tables(有許多數據類型 - 計數器康涅狄格州SESS,HTTP,率...)作爲費率計數器:

    #     max entries    count request in 60s periods 
    stick-table type ip size 200k expire 100s store http_req_rate(60s) 
    

    接下來你必須填寫表格,通過tracking each request例如。通過IP

    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:

    # 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 
    

    例如一些工作配置文件與定製的錯誤:

    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將拋出HTTP 503,errorfile捕獲它們併發送不同的錯誤(使用不同的代碼)。

    /etc/haproxy/errors/401.http內容:

    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內容:

    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>