Bloquear fuerza bruta / DOS al servicio SSH

Es fácilmente adaptable a cualquier otro protocolo TCP y puede mitigar ataques DOS no muy agresivos.

Ejemplo: Si en menos de 5 minutos (300 segundos) una IP origen ha realizado más de 20 intentos o accesos por ssh, se bloquea durante 5 Minutos. Esta regla no se aplicará a la dirección IP 192.168.1.50. Se registra la actividad en logs (ej: /var/log/messages).

iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.50 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 20 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: "
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 20 --name SSH -j DROP

NOTA: Para el ejemplo dado, el espacio de tiempo especificado que permite un máximo de peticiones ssh, no puede ser diferente a la cantidad de tiempo que la IP estará bloqueada (5 minutos).

Ejemplo de log.

Jan 18 01:26:55 localhost kernel: [ 6303.990034] SSH SCAN blocked: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=61544 DF PROTO=TCP SPT=40048 DPT=22 WINDOW=43690 RES=0x00 SYN URGP=0 
Jan 18 01:26:58 localhost kernel: [ 6306.362580] SSH SCAN blocked: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=18355 DF PROTO=TCP SPT=40049 DPT=22 WINDOW=43690 RES=0x00 SYN URGP=0 
Jan 18 01:26:59 localhost kernel: [ 6307.362942] SSH SCAN blocked: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=18356 DF PROTO=TCP SPT=40049 DPT=22 WINDOW=43690 RES=0x00 SYN URGP=0