iptables: permite conexiones a un puerto solo para direcciones IP con estado establecido en un puerto diferente

iptables: permite conexiones a un puerto solo para direcciones IP con estado establecido en un puerto diferente

Quiero permitir conexiones en el puerto x para direcciones IP que tienen un estado "establecido" en el puerto y.

¿Es esto factible simplemente usando iptables?

Respuesta1

¿Quizás puedas usar el golpe de puerto? Abrir el puerto cuando se establece una conexión TCP, podría ser posible: http://en.wikipedia.org/wiki/Port_knocking

Respuesta2

La respuesta es "más o menos". Necesitará instalar ipsetel paquete y asegurarse de que su kernel sea ipsetcompatible.

Primero tendrás que crear un "Conjunto de IP" con tiempo de espera:

ipset create MySet hash:ip timeout 60

luego agregue una regla que restablecerá el tiempo de espera para cada paquete establecido

iptables -A INPUT -p tcp --dport $port1 -m state --state ESTABLISHED -j SET --add-set MySet src

finalmente, agregue un conjunto de reglas para permitir el acceso al segundo puerto solo si la fuente ha sido registrada y elimine otras

iptables -A INPUT -p tcp --dport $port2 -j Port2_Test
iptables -A Port2_Test -m state --state ESTABLISHED -j ACCEPT
iptables -A Port2_Test -m state --state NEW -m set --match-set MySet src -j ACCEPT
iptables -A Port2_Test -p tcp -j REJECT

EDITAR

Me acabo de dar cuenta de que también es posible utilizar la recentextensión Match. Lo haces así:

-A INPUT -p tcp --dport $portY -m state --state ESTABLISHED -m recent --name YThenX --set -j ACCEPT

...    

-A INPUT -p tcp --dport $portX -j Port2_Test

...

-A Port2_Test -m state --state ESTABLISHED -j ACCEPT
-A Port2_Test -m state --state NEW -m recent --name YThenX --rcheck --seconds $timeout --reap $timeout -j ACCEPT
-A Port2_Test -p tcp -j REJECT

información relacionada