Acelerar conexões de entrada com iptables

1

Eu tenho um DoS ligeiramente auto-infligido acontecendo em algumas circunstâncias, e estou tentando descobrir se eu posso usar o iptables para ajudar a mitigá-lo. A versão curta é "Como posso limitar a taxa de conexões de entrada para um servidor para, digamos, não mais que 2 a cada 5 segundos usando regras iptables?". Li perguntas como esta e, embora conectadas , a resposta lá (que eu tentei - veja abaixo) não consegue o que eu estou procurando.

A versão longa é que nosso aplicativo cliente / servidor mantém conexões ativas e uma das redes de nossos clientes continua sendo desconectada, o que significa que um grande número (15+) clientes são desconectados ao mesmo tempo. Quando a conexão de rede é restaurada, todos tentam se reconectar ao mesmo tempo, causando uma espécie de DoS. A solução de longo prazo é implementar backoff aleatório no código de reconexão do cliente, o qual estamos trabalhando. Enquanto isso, e o que eu tentei até agora é baseado em recursos como a resposta SF acima. De lá, criei estas duas regras:

-A INPUT -p tcp -s 54.208.46.226 --match state --state NEW --match recent --set
-A INPUT -p tcp -s 54.208.46.226 --match state --state NEW --match recent --update --seconds 5 --hitcount 3 -j DROP

Observação Especifiquei um dos nossos próprios endereços IP para teste, para que eu possa tentar conexões desse IP e ver se as conexões estão bloqueadas ou permitidas. Isso funciona, em que a primeira tentativa de conexão é aceita, assim como a segunda. Mas quando uma terceira tentativa é feita dentro de 5 segundos, ela é bloqueada - até aí tudo bem.

O problema é que, se o cliente continuar tentando se conectar (como o código do cliente fará atualmente), ele continuará bloqueado - acho que a segunda regra de atualização atualiza o timestamp, e essa regra diz que deve ser um intervalo de 5 segundos entre tentativas de conexão. Mas o que eu estou procurando é permitir que até 2 conexões sejam bem-sucedidas a cada 5 segundos, independentemente da frequência com que elas tentam se conectarem. Eu especulei que poderia ser o --update flag que estava mantendo o timestamp da tentativa mais recente (ao invés do sucesso mais recente, que é realmente o que eu quero testar). Mudei para --rcheck , mas parece exibir o mesmo comportamento, o que significa que não estou entendendo esse nível de iptable-fu.

Então, para resumir a questão, se tentativas de conexão repetidas estão sendo feitas (várias por segundo), existe um conjunto de regras iptable que permitirá que elas entrem em uma taxa mais baixa (por exemplo, com uma separação de 2,5 segundos em média)? que bloqueá-los completamente após os primeiros 2?

    
por dsl101 04.07.2016 / 10:22

1 resposta

0

Veja a limitação de taxas. Pode limitar as conexões para a taxa especificada. Você provavelmente precisará limitar em uma base por minuto, pois acredito que as taxas são inteiros. Uma taxa de 24 / min deve funcionar.

Você terá que testar para ver como as conexões serão rajadas.

    
por 04.07.2016 / 13:48