I was wonder whether NetScale, F5 or Zeus ADC will also have similar issue?

Thanks + Happy Friday

Henry PAN

2015-08-14 7:16 GMT-07:00 Amol <[email protected]>:

> Hello,
> I am been trying to configure my Haproxy for rate limiting our customer
> usage, and wanted to know/understand some of my options
> what i am trying to achieve is to throttle any clients requests/api calls
> that can take lead to high load and can kill my servers.
>
> First of all here is my configuration i have so far from reading a few
> articles
>
> frontend www-https
>    bind xx.xx.xx.xx:443 ssl crt xxxx.pem ciphers AES128+EECDH:AES128+EDH
> no-sslv3 no-tls-tickets
>
>    # Table definition
>    stick-table type ip size 100k expire 30s store
> gpc0,conn_cur,conn_rate(3s),http_req_rate(10s),http_err_rate(10s)
>    # Allow clean known IPs to bypass the filter
>    tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
>    # this is sending data  defined in the stick-table and storing it the
> stick-table since by default nothing is restored in it
>    tcp-request connection track-sc0 src
>    # Shut the new connection as long as the client has already 10 opened
>    tcp-request connection reject if { src_conn_cur ge 40 }
>    # if someone has more than 100 connections in over a period of 3
> seconds, REJECT
>    tcp-request connection reject if { src_conn_rate ge 40 }
>    # tracking connections that are not rejected from clients that don't
> have 10 connections/don't have 10 connections/3 seconds
>    #tcp-request connection reject if { src_get_gpc0 gt 0 }
>
>    acl abuse_err src_http_err_rate ge 10
>    acl flag_abuser_err src_inc_gpc0 ge 0
>    acl abuse src_http_req_rate ge 250
>    #acl flag_abuser src_inc_gpc0 ge 0
>    #tcp-request content reject if abuse_err flag_abuser_err
>    #tcp-request content reject if abuse flag_abuser
>
>    use_backend backend_slow_down if abuse
>    #use_backend backend_slow_down if flag_abuser
>    use_backend backend_slow_down if abuse_err flag_abuser_err
>    default_backend www-backend
>
> backend www-backend
>        balance leastconn
>        cookie BALANCEID insert indirect nocache secure httponly
>        option httpchk HEAD /xxx.php HTTP/1.0
>        redirect scheme https if !{ ssl_fc }
>        server A1 xx.xx.xx.xx:80 cookie A check
>       server A2 yy.yy.yy.yy:80 cookie B check
>
> backend backend_slow_down
>       timeout tarpit 2s
>       errorfile 500 /etc/haproxy/errors/429.http
>       http-request tarpit
>
>
> What i am doing here is that if the http_req_rate > 250 then i want to
> send them to a another backend which gives them a rate limiting message or
> if the number of concurrent connections are > 4, then i want to rate limit
> their usage and allow on 40 connections to come in.
>
> Please feel free to critique my config. Now on to questions,
>
> 1) is rate limiting based on IP a good way to do this or has anyone tried
> of other ways?
> 2) Am i missing anything critical in the configuration?
> 3) when does the src_inc_gpc0 counter really increment? does it increment
> for every subsequent request from the client in the given timeframe, i have
> seen it goes from 0 to 6 during my test but wasn't sure about it
> 4) can i not rate limit by just adding the maxconn to the server in the
> backend or will that throttle everyone instead of the rogue IP...
>
> well this is it for now...might have more questions later...)
>
>
>
>
>
>
>


-- 
Thanks

Henry PAN
Sr. Storage Architect
(425) 525-3328

Reply via email to