Como o connlimit no iptables deveria funcionar?

Como o connlimit no iptables deveria funcionar?

Eu queria definir um limite para o número de conexões simultâneas permitidas no meu servidor web. Tentei as seguintes regras em um kernel iptables (v1.4.19.1) 3.14.4-200.fc20.x86_64 com uma política DROP padrão para a cadeia INPUT na filtertabela:

-A INPUT -p tcp --dport 80 -m connlimit --connlimit-upto 10 -j WEB
-A WEB -j ACCEPT

Então, acessei o servidor com 50 conexões simultâneas usando o benchmark Apache:

$ ab -kc 50 -t 10 http://mysite.com/

Mas, quando olho para o log de acesso do servidor, ainda consigo ver algumas centenas de linhas de solicitações bem-sucedidas. Espero que a connlimitregra entre em vigor e elimine todas as conexões. Há algo errado com minhas regras ou com minha interpretação de conexões simultâneas?

Responder1

Depois de muitos testes, descobri que ter uma política de descarte padrão não é suficiente,

*filter
-F
-X
:INPUT DROP [0:0]

É muito importante não presumir que isso seria seguido. A connlimitregra só entraria em vigor se vocêexplicitamenteadicione uma regra de eliminação no final da cadeia:

-A INPUT -j DROP

Funciona agora mesmo com uma simultaneidade inferior ao limite especificado:

$ ab -kc 7 -t 6 http://mysite.com/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking mysite.com (be patient)
apr_pollset_poll: The timeout specified has expired (70007)

O importante é testar. Não tenho certeza se você classificaria isso como um bug.

informação relacionada