
Quiero limitar las conexiones FTP simultáneas a mi servidor FreeBSD con el firewall pf. Por ejemplo, solo son posibles 10 conexiones simultáneas al puerto 20 o 21 desde una IP de origen.
Utilizo para esto esta regla:
pass in quick proto tcp from any to em0 port {20, 21} keep state (max-src-conn 10)
El problema es que cada carga o descarga produce una entrada de estado con el estadoFIN_WAIT_2:FIN_WAIT_2cuando esté terminado. Este estado sólo será eliminado cuando eltcp.finwaitse alcanza el tiempo de espera. Después de 10 de estos estados FIN_WAIT no acepta la nueva conexión de datos del servidor. Esto es un problema cuando intenta descargar o cargar varios archivos secuencialmente con un único inicio de sesión ftp.
¿Alguien tiene una buena solución para este problema?
Respuesta1
Esto podría hacerse fácilmente con rctl
. Ejecutaría el demonio ftp con un UID único y limitaría la cantidad de procesos a este UID. Eso es todo.
Es posible que necesites recompilar el kernel con
options RACCT
options RCTL
y luego puedes usar rctl así:
rctl -a user:ftp:maxproc:deny=11
Échale un vistazo man rctl
y te encantará ;)