Denegar acceso a todos los puertos menos uno en iptables

Iniciado por WHK, 9 Mayo 2015, 06:07 AM

0 Miembros y 1 Visitante están viendo este tema.

WHK

Hola, actualmente en CentOS para denegar el acceso a una ip via iptables lo hago así:

# iptables -I INPUT -s 1.2.3.4 -j DROP && service iptables save

Pero, como hago para que esa ip quede bloqueada para todos los puertos excepto el 22? ya que si por algún error me autobaneo no quiero quedar sin acceso a mi propio servidor :-/ a pesar de que el baneo es temporal deberia esperar mucho antes de poder acceder.

Tampoco me sirve crear una regla que diga que si es mi ip entonces que no me banee ya que mi ip es dinámica a menos que entre via tunnel por otro servidor a modo de rescate pero no cuento con ese segundo servidor.

Por ahi vi una regla con el argumento --destination-port pero como le indico que son todos menos el 22?
Puedo crear una regla que prohiba todo el acceso y luego que permita el acceso a esa misma ip al puerto 22? (se me acaba de ocurrir xDDDD)

WHK

Listo, funcionó :D

# iptables -I INPUT -p tcp -s 1.2.3.4 -j DROP && \
iptables -I INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT && \
service iptables save

MinusFour

Mucho cuidado con el orden de las reglas, volver a insertar la regla con -I te puede dejar sin conexion. Lo mejor seria dejar la regla con el ACCEPT siempre al inicio y usar iptables -A para agregar la regla al final de la tabla. Tambien puedes dejar una regla para no cortar conexiones establecidas. De esta forma, mientres estes logueado por ssh no te tira.

Código (bash) [Seleccionar]

sudo iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# despues agregar reglas, iptables -A
sudo iptables -A INPUT -s x.x.x -j DROP


Mucho cuidado tambien guardando las reglas de iptables. Si reinicias el sistema puedes resetear las reglas de iptables y puedes recuperar rapidamente la conexion. Tecnicamente no es tan riesgoso como cambiar la chain policy a DROP pero es igual de frustrante porque tendrias que obtener una nueva IP.

WHK

Gracias por el consejo, no sabía que estas reglas se eliminaban al reinicio del sistema, esto pasa a pesar de que guardo las reglas con service iptables save?

MinusFour

Cita de: WHK en  9 Mayo 2015, 06:36 AM
Gracias por el consejo, no sabía que estas reglas se eliminaban al reinicio del sistema, esto pasa a pesar de que guardo las reglas con service iptables save?

No, si guardas las reglas de iptables, estas persisten a través de reinicios del sistema. Mi punto es que si te quedaste fuera del sistema por una regla de iptables puedes reiniciar el equipo remotamente y volver a conectarte sin problemas. Si guardas las reglas vas a tener que cambiar de ip, acceder al equipo físicamente o si es una instancia controlada por un servicio web usar una shell de rescate, reinstalar el sistema nuevamente, o levantar un ticket.

En fin, hay formas de recuperar el sistema. Mi punto es que si no estas seguro que las reglas te van a limitar el acceso completamente, es mejor que no las guardes.

yum-kax

WHK, jaja tu forma de plantear la duda y responderte me hizo acordar a esto..

http://www.rubberduckdebugging.com/

No es solo para programación, sino mas bien es un debugging de ideas!
Te recomiendo tenerlo frente a tu pc en todo momento! :)

engel lex

Cita de: yum-kax en  9 Mayo 2015, 16:08 PM
WHK, jaja tu forma de plantear la duda y responderte me hizo acordar a esto..

http://www.rubberduckdebugging.com/

No es solo para programación, sino mas bien es un debugging de ideas!
Te recomiendo tenerlo frente a tu pc en todo momento! :)

excelente! XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

cpu2

No es mejor, establecer una politica DROP en INPUT y luego dejar paso a las direcciones y puertos convenientes?

Código (bash) [Seleccionar]
iptables -F
iptables -X
iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 --syn -m state --state NEW -j ACCEPT


Un saludo.

MinusFour

Cita de: cpu2 en  9 Mayo 2015, 19:49 PM
No es mejor, establecer una politica DROP en INPUT y luego dejar paso a las direcciones y puertos convenientes?

Código (bash) [Seleccionar]
iptables -F
iptables -X
iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 --syn -m state --state NEW -j ACCEPT


Un saludo.


El objetivo parece ser denegar a algunos, no permitir a algunos.

cpu2

Lo se, simplemente dije esto porque seguro que tiene una politica en ACCEPT, desde mi punto de vista y desde el de mucha gente, es mucho mejor tener una politica en DROP, para lo que el quiere hacer.

No colocar un DROP a 1.2.3.4 y luego crear otra con un ACCEPT y el puerto.

Solo dije una recomendacion ya se que el problema no va de eso, la proxima no digo nada.

Un saludo.