Como o connlimit no iptables deveria funcionar?

3

Eu queria definir um limite para o número de conexões simultâneas permitidas no meu servidor web. Eu 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 em filter table:

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

Em seguida, acessei o servidor com 50 conexões simultâneas usando o benchmark do apache:

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

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

    
por Question Overflow 13.05.2014 / 12:10

1 resposta

1

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

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

É muito importante não assumir que isso seria seguido. A regra connlimit só funcionaria se você explicitamente adicionar uma regra de eliminação no final da cadeia:

-A INPUT -j DROP

Funciona agora mesmo com uma concorrência menor que o 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.

    
por 14.05.2014 / 04:47

Tags