Iptables DROPS SSH después de las reglas de eliminación de puertos, pero nmap lo muestra como ABIERTO

2

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?

    
pregunta Jonas 27.08.2017 - 11:35
fuente

1 respuesta

0

Bueno, sí, el problema era, por supuesto, el estado NUEVO solo permitía 1 paquete a SYN, después de lo cual el servidor respondió con SYN / ACK y luego iptables eliminará todos los paquetes siguientes del cliente.

Pero no quería usar -contrack para TODAS las conexiones, ya que simplemente soy paranoico con respecto al rendimiento o cualquier explotación que pudiera aprovechar las conexiones establecidas que de alguna manera superaban las reglas.

Así que agregué --state NEW, RELATED, ESABLISHED solo para el último golpe, y eso me permitió hacer ssh durante 20 segundos, luego se interrumpiría la conexión, pero durante ese tiempo solo ACEPTARÍA mi IP.

    
respondido por el Jonas 29.08.2017 - 06:15
fuente

Lea otras preguntas en las etiquetas