Limite de taxa (corte) se exceder n conexões por minuto

2

O que você sugere que eu use para classificar as conexões http de entrada limitadas (get / post) com base em n conexões por minuto?

Se um determinado cliente fizer mais de n conexões em um determinado minuto, elimine todas as outras conexões até o minuto acabar.

Atualmente, uso o nginx e o haproxy, mas estou realmente procurando a melhor ferramenta para o trabalho.

Atualizar

Alguns clientes têm mais conexões permitidas por minuto, haveria uma maneira de adicionar uma regra por cliente? Uma API seria um bônus.

    
por codecompleting 23.01.2012 / 16:30

2 respostas

3

Depende de como graciosamente você deseja aplicar o corte. Para DROP / DENY na camada TCP você pode fazer isso com o iptables com algo como:

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set  
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

Você pode segmentar itens para clientes específicos, com alternativas extras para a segunda regra, por exemplo,

iptables -I INPUT -s 1.2.3.4 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 50 -j DROP
iptables -I INPUT -s 4.3.2.1 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
    
por 23.01.2012 / 16:41
1

Não tenho certeza se o nginx suporta esse tipo de limite. No entanto, você pode usar o módulo iptables limit . Você pode ver esta página para mais explicações.

Aqui está um exemplo para aceitar as novas conexões HTTP a uma taxa de 5 conexões por minuto.

-A FORWARD -d your.server.ip.addr -m state --state NEW -p tcp --dport 80 \
   -m limit --limit 5/minute -j ACCEPT
    
por 23.01.2012 / 16:41