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

Genial!, creo que tengo un pato de goma de mi hijo en el baño xD pero si comienzo a usarlo entonces me voy a ahorrar mas de la mitad de los post en el foro y la gente que pueda tener los mismos problemas no va a encontrar una respuesta :P

Me sale mas fácil hacer un barco de papel, lo pondré al lado de mi monitor.

Al final el baneo lo hice baneando la ip por completo y luego habilitandole el acceso al puerto 22 y finalmente guardando las reglas y al final una tarea programada para eliminar las reglas.

Código (php) [Seleccionar]
<?php
system
(
'sudo iptables -I INPUT -s '.escapeshellarg($_SERVER['HTTP_WIM_REAL_IP']).' -j DROP && '.
'sudo iptables -I INPUT -p tcp -s '.escapeshellarg($_SERVER['HTTP_WIM_REAL_IP']).' --dport 22 -j ACCEPT && '.
'sudo service iptables save && '.
'echo "sudo iptables -D INPUT -s '.escapeshellarg($_SERVER['HTTP_WIM_REAL_IP']).' -j DROP ; sudo iptables -D INPUT -p tcp -s '.escapeshellarg($_SERVER['HTTP_WIM_REAL_IP']).' --dport 22 -j ACCEPT ; sudo service iptables save;" | sudo at now + '.(int)$unban_minutes.' minutes'
);

MinusFour

#11
Cita de: cpu2 en 10 Mayo 2015, 03:03 AM
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.

No digo que una política DROP no sea mejor, es la manera en la que planteaste la solución. Si puedes usar una política DROP, pero tienes que agregar reglas ACCEPT para tus puertos.

Si usas una politica DROP:
Código (bash) [Seleccionar]

iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 80 -j ACCEPT


Pero las reglas para banear las vas a tener que insertar a partir del indice 3.

Código (bash) [Seleccionar]

sudo iptables -I INPUT 3 -s x.x.x.x -j DROP


Si pones tus reglas al principio de la tabla puedes perder la conexion porque el DROP pasa antes que el ACCEPT. Si pones tus reglas al final de la tabla el ACCEPT del puerto 80 hace ACCEPT antes que llegue a los drops del puerto 80. Es decir la gente que baneaste puede seguir accediendo al sistema atraves de los puertos que habilitaste.

Si usas una poltica ACCEPT:

Código (bash) [Seleccionar]

iptables -P ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 1.2.3.4 -j ACCEPT


Para banear gente, simplemente agregas al final de la tabla tu regla:

Código (bash) [Seleccionar]

sudo iptables -A INPUT -p tcp -s x.x.x.x -j DROP


En ambos casos:

1.2.3.4 viene siendo tu ip.
x.x.x.x viene siendo la ip que quieres banear.

La diferencia entre las dos politicas, es que usando una politica DROP es mas restrictiva.
Cita de: WHK en 10 Mayo 2015, 03:51 AM
Genial!, creo que tengo un pato de goma de mi hijo en el baño xD pero si comienzo a usarlo entonces me voy a ahorrar mas de la mitad de los post en el foro y la gente que pueda tener los mismos problemas no va a encontrar una respuesta :P

Me sale mas fácil hacer un barco de papel, lo pondré al lado de mi monitor.

Al final el baneo lo hice baneando la ip por completo y luego habilitandole el acceso al puerto 22 y finalmente guardando las reglas y al final una tarea programada para eliminar las reglas.

Código (php) [Seleccionar]
<?php
system
(
'sudo iptables -I INPUT -s '.escapeshellarg($_SERVER['HTTP_WIM_REAL_IP']).' -j DROP && '.
'sudo iptables -I INPUT -p tcp -s '.escapeshellarg($_SERVER['HTTP_WIM_REAL_IP']).' --dport 22 -j ACCEPT && '.
'sudo service iptables save && '.
'echo "sudo iptables -D INPUT -s '.escapeshellarg($_SERVER['HTTP_WIM_REAL_IP']).' -j DROP ; sudo iptables -D INPUT -p tcp -s '.escapeshellarg($_SERVER['HTTP_WIM_REAL_IP']).' --dport 22 -j ACCEPT ; sudo service iptables save;" | sudo at now + '.(int)$unban_minutes.' minutes'
);


Yo pense que querias agregar solo una regla para que no te banee a ti. En lugar de agregar la regla que permite acceso al SSH por cada IP, mejor simplemente agrega una regla para permitir acceso SSH al principio de la tabla:

Código (bash) [Seleccionar]

iptables -I INPUT -p tcp --dport 22 -j ACCEPT


Igual si los baneas, les estas permitiendo acceso SSH asi que es mejor dejar el acceso abierto a SSH en lugar de agregar una regla nueva por cada IP.

WHK