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 filter
la 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 connlimit
regla 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 connlimit
regla 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.