PF (packet filter) es un filtro de paquetes proveniente de OpenBSD; Incorporado en el sistema base desde NetBSD 4.0 y puede ser usado para implementar firewalls. NetBSD 5.1 incorpora la version 4.2 de pf, por lo que es importante leer la FAQ correspondiente; En esta ocasion, tengo un servidor corriendo ssh/web/dns y varios intentos de login via ssh, asi que decidi implementar una solucion para mitigar los intentos, para ello use PF y NetBSD 5.1; a continuacion detallo el proceso simple; Editamos /etc/lkm.conf y anexamos:
/usr/lkm/pf.o - - - - BEFORENET
En /etc/rc.conf
lkm=YES pf=YES pflogd=YES
y manualmente iniciamos el modulo lkm para pf
$ sudo modload /usr/lkm/pf.o
Una vez realizado el proceso, editamos a conveniencia el archivo /etc/pf.conf y agregamos lo necesario, en mi caso:
int_if = "fxp0" localnet = $int_if:network tcp_services = "{ ssh, smtp, domain, www, pop3, auth, https }" udp_services = "{ domain }" table <bruteforce> persist block quick from <bruteforce> pass inet proto tcp to $localnet port $tcp_services \ keep state (max-src-conn 100, max-src-conn-rate 15/5, \ overload <bruteforce> flush global)
Descripcion:
persist: Mantiene la tabla en memoria, aunque no haya reglas que refieran a ella.
max-src-conn : Indica el numero de conexiones simultaneas provenientes de un host, puedes incrementar o disminuir este valor segun sea el caso.
max-src-conn-rate: Indica la tasa de transferencia permitida por conexion, aqui es 15 conexiones cada 5 segundos, expresada: 15/5
Overload: Toda conexion que exceda la condicion anterior, sera agregada a la tabla bruteforce, y sera bloqueado todo el contenido de la tabla. Para ver la lista de IP baneadas, usa la siguiente linea:
$ sudo /sbin/pfctl -t bruteforce -T show
Con estas adiciones podemos bloquear intentos fallidos via ssh hacia nuestro servidor.