Configuro las reglas de eliminación de puertos en CentOS 7, iptables de la siguiente manera:
-I INPUT -p tcp --dport 1 -m recent --set --rsource --name KNOCK1 -m limit --limit 5/min -j LOG --log-prefix "knock 1" --log-level 7
-I INPUT -p tcp --dport 2 -m recent --rcheck --rsource --seconds 20 --name KNOCK1 -m recent --set --rsource --name KNOCK2 -m limit --limit 5/min -j LOG --log-prefix "knock 2" --log-level 6
-I INPUT -p tcp --dport 3 -m recent --rcheck --rsource --seconds 20 --name KNOCK2 -m recent --set --rsource --name OPEN_NOW -m limit --limit 5/min -j LOG --log-prefix "knock 3" --log-level 6
-I INPUT -p tcp --dport 22 -m state --state NEW -m recent --rcheck --rsource --seconds 20 --name OPEN_NOW -j ACCEPT
Luego bloqueé el puerto 22:
iptables -A INPUT -p tcp --dport 22 -j DROP
Funciona correctamente porque antes al enviar la secuencia de puertos, nmap se muestra como:
22/tcp filtered ssh no-response
Y después de enviar las siguientes sondas (en Windows):
nmap -PN --host_timeout 201 --max-retries 0 -p 1 200.xxx.xxx.xxx && nmap -PN --host_timeout 201 --max-retries 0 -p 2 200.xxx.xxx.xxx && nmap -PN --host_timeout 201 --max-retries 0 -p 3 200.xxx.xxx.xxx
Tanto nmap como nc lo muestran como abierto:
nmap:
22/tcp open ssh syn-ack ttl 49
nc:
hostname.xxxx.xxxx [200.xxx.xxx.xxx] 22 (ssh) open
Sin embargo, no puedo ssh en él, usando cualquier cliente (Putty, nc). Se agota el tiempo de espera ya que Iptables está eliminando correctamente los paquetes. Pero el puerto está ABIERTO (ya que las sondas abrieron el puerto), lo que significa que la regla DROP ya no estaba vigente y nmap / nc obtuvo "Ack / Open", ¿no debería poder ssh?