Taxa de limitação de solicitações de um único IP por atraso

1

Alguém conhece uma maneira de usar o HAProxy para adicionar solicitações recebidas a um atraso depois que um determinado número máximo de solicitações chegou e não apenas rejeitar ou enviar um código de status, enfileirar solicitações de um endereço IP específico e, se não forem muitas, permitir uma vez que o número tenha reduzido o suficiente.

Usando a documentação, todas as partes acima parecem possíveis independentemente, embora combinado pareça ser um problema.

Eu tenho o seguinte no meu front end:

#Add counter to ip in ratelimiting table
tcp-request content track-sc0 src table ratelimiting

# if alot of requests (more than 1000) - reject
acl mark_alot_of_requests sc0_conn_rate(ratelimiting) gt 1000
tcp-request content reject if mark_alot_of_requests TRUE

#If concurrent requests >= 100 from a single IP return 429
acl mark_too_many_requests sc0_conn_cur(ratelimiting) ge 100
use_backend 429_slow_down if mark_too_many_requests

Então

backend 429_slow_down
    mode http
    timeout tarpit 5s
    reqitarpit .
    errorfile 500 /etc/haproxy/errors/429.http
    http-request tarpit

Meu tarpit é que, embora diminuiu a velocidade, mas não se comporta da maneira que eu pensava inicialmente.

A tabela ratelimiting é criada no listen da seguinte forma:

listen ratelimiting
    mode http
    stick-table type ip size 1m expire 1h store conn_rate(5000),conn_cur

Muito obrigado

    
por Nick Sorbie 03.05.2017 / 17:24

0 respostas

Tags