2017-01-04 11 views
0

지금 haproxy를 사용하여 시나리오를 해결하려고합니다. 기본 HAproxy ACL. Haproxy에 대한 모든 연결 차단 기본적으로 특정 IP 만 허용

  • 에 의해

    • 블록의 모든 IP 다음과 같은 시나리오는 연결이 whilelist IP에서 오는 경우가에서 10 개 이상의 동시 연결을 초과하는 경우
    • 이 경우 거부해야 특정 IP 주소 만 연결 허용 30 초

    API 호출 수를 줄이기 위해이 작업을 수행하고 싶습니다. 아무도 이것으로 나를 도울 수 있습니까?

    감사

  • +0

    . HAProxy 구성 파일은 일정 수준의 "프로그래밍"을 포함 할 수 있지만 HAProxy 질문에 대해서는 Stack Overflow보다 더 적합한 장소로 [Server Fault] (http://serverfault.com)를 찾을 수 있습니다. –

    답변

    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 예에 의해, 테이블을 채우기해야합니다. 사용자 정의 오류가있는

    # 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 
    

    참고 : 오류 처리가 약간 까다 롭습니다 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에 의해. 위의 오류 백엔드에는 서버 항목이 없으므로 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>