¿Cómo se supone que funciona connlimit en iptables?

¿Cómo se supone que funciona connlimit en iptables?

Quería establecer un límite para la cantidad de conexiones simultáneas permitidas en mi servidor web. Probé las siguientes reglas en un kernel 3.14.4-200.fc20.x86_64 de iptables (v1.4.19.1) con una política DROP predeterminada para la cadena INPUT debajo de filterla tabla:

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

Luego, llegué al servidor con 50 conexiones simultáneas usando Apache Benchmark:

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

Pero, cuando miro el registro de acceso al servidor, todavía puedo ver unos cientos de líneas de solicitudes exitosas. Espero que la connlimitregla entre en vigor y elimine todas las conexiones. ¿Hay algún problema con mis reglas o mi interpretación de las conexiones concurrentes?

Respuesta1

Después de muchas pruebas, descubrí que tener una política de eliminación predeterminada no es suficiente,

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

Es muy importante no dar por sentado que se cumplirá. La connlimitregla sólo entraría en vigor si ustedexplícitamenteagregue una regla de caída al final de la cadena:

-A INPUT -j DROP

Ahora funciona incluso con una concurrencia inferior al límite 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)

Lo importante es probar. Sin embargo, no estoy seguro de si clasificarías esto como un error.

información relacionada