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 filter
tabela:
-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 connlimit
regra 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 connlimit
regra 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.