Reglas de iptables no se aplican

Iniciado por ccrunch, 24 Mayo 2014, 23:43 PM

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

ccrunch

En principio no me interesaba guardar un log de paquetes descartados pero ya que lo dices te haré caso.

Forward veo que está en DROP, así que da igual que no tenga reglas porque no voy a enrutar paquetes, así que quiero descartarlos todos, o eso pienso yo.

Respecto a OUTPUT:
iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Es eso a lo que te refieres?
Disculpa tantas preguntas pero con iptables lo he tomado ayer mismo, lo único que vi antes lo vi de pasadas. Si sigues viendo algo mal avísame, o si ves algún error.

Salu2

cpu2

Pero si dejas asi OUTPUT no podras hacer nada, compruebalo si quieres.

Simplemente estas dejando paso a los paquetes establecidos y relacionados, y tu cuando haces una peticion al exterior OUTPUT salen con la bandera NEW.

Antes dijiste algo de http, pues seria algo asi.

iptables -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT

Esta seria global para eth0 y wlan0, siempre puedes adaptarlas para cada interface destino direccion etc...

Pero no podras acceder a webs por su nombre, si no dejas paso a el puerto 53 que tendrias que saber que es el de las DNS.

iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

Antes de aplicar esas dos reglas intenta acceder a una web, y luego las aplicas y asi vas experimentando.

Un saludo.

P.D: No tranquilo pregunta lo que quieras, ami estos temas me gustan, sobre  todo los de PF, pero si apenas hay gente que use iptables por aqui imaginate PF.

ccrunch

Hola, y no existe alguna opción de que no tenga que ponerlo a mano todos los puertos que quiera usar, y que se permitan los de STATE NEW o similar?

Y por último, yo pongo esas órdenes en /etc/rc.local, cuál es el funcionamiento de que cuando se ejecuta eso, la manera de cargar las órdenes, quiero decir, yo primero lo pongo todo a drop y luego voy abriendo, iptables lee rc.local o lee algún fichero suyo propio?

Salu2

cpu2

Cita de: ccrunch en 27 Mayo 2014, 14:02 PM
Hola, y no existe alguna opción de que no tenga que ponerlo a mano todos los puertos que quiera usar, y que se permitan los de STATE NEW o similar?

Podrias crear una macro como hice con el interface, si tienes un grupo de instrucciones similares, puedes agrupar los puertos en un variable.

iptables -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 23 --syn -m state --state NEW -j ACCEPT

--------------------------------

PORTS = "80,23"

iptables -A OUTPUT -p tcp --dport $PORTS --syn -m state --state NEW -j ACCEPT


Esa orden vale como esas dos. Eso macro me la acepta, en OpenBSD, y me la  traduce en dos, espero que ati tambien. Lo mejor de hacer macros solo tienes que modificar la variable, imaginate que tienes un FW de muchas reglas.

Pero si dejas pasar a  todos los STATE NEW es como si no hicieras nada, pero que dices.

Cita de: ccrunch en 27 Mayo 2014, 14:02 PMY por último, yo pongo esas órdenes en /etc/rc.local, cuál es el funcionamiento de que cuando se ejecuta eso, la manera de cargar las órdenes, quiero decir, yo primero lo pongo todo a drop y luego voy abriendo, iptables lee rc.local o lee algún fichero suyo propio?

El funcionamiento no deja de ser como otro sricpt, puedes usar el orden que quieras mientras que lo pongas en DROP. Simplemente esta primero por orden, nada mas.

Se que iptables tenia un directorio dedicado a el, pero yo lo que hacia es como mencione antes ejecutarlo desde el inicio, en OpenBSD se inicia desde /etc/rc.

Un saludo.

ccrunch

Hola, me da este error al ejecutar el script:
iptables v1.4.14: invalid port/service `80,53' specified
Try `iptables -h' or 'iptables --help' for more information.


Por otra parte, creí que era algún parámetro estaba mal puesto así que busqué y cambié de sitio el --syn a esto:
iptables -A OUTPUT -p tcp --syn --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --syn --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 --syn -m state --state NEW -j ACCEPT

Al aplicar el script no me da ningún error aunque tampoco me permite ningún tráfico saliente.

Y por último, en la regla INPUT:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Por qué tengo que dejar RELATED, y no solamente ESTABLISHED?

Salu2

cpu2

Cita de: ccrunch en 27 Mayo 2014, 20:31 PMiptables v1.4.14: invalid port/service `80,53' specified
Try `iptables -h' or 'iptables --help' for more information.


Como pensaba esas macros no son aceptadas por iptables, busca la equivalencia.

Cita de: ccrunch en 27 Mayo 2014, 20:31 PMPor otra parte, creí que era algún parámetro estaba mal puesto así que busqué y cambié de sitio el --syn a esto:
iptables -A OUTPUT -p tcp --syn --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --syn --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 --syn -m state --state NEW -j ACCEPT

Al aplicar el script no me da ningún error aunque tampoco me permite ningún tráfico saliente.

Vamos a ver, si fuera un error de sintaxis el iptables te lo diria como el ejemplo de la macro de arriba.

Por cierto, creo que no viste bien las reglas, tienes que dejar el trafico del puerto 53 (DNS) salir con el protocolo UDP, este servicio usa los dos protocolos, este servicio depende del caso usa TCP claro que no te lo voy a explicar todo.

Yo con esta configuracion puedo navegar.

iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP


##### Cadena INPUT [Entrada] #####
echo "[+] Estableciendo reglas cadena de entrada INPUT..."
### Estado de las reglas

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


##### Cadena OUTPUT [Salida] #####
echo "[+] Estableciendo reglas cadena de entrada OUTPUT..."
### Estado de las reglas

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

iptables -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT



Cita de: ccrunch en 27 Mayo 2014, 20:31 PMY por último, en la regla INPUT:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Por qué tengo que dejar RELATED, y no solamente ESTABLISHED?

Con esta configuracion no te haria falta esa bandera, la necesitarias para transferir datos con FTP, errores de ICMP, conexiones nuevas pero ligadas a las existentes.

Un saludo.

ccrunch

Buenas, ahora todo va bien, este es el resultado:
# Definir la norma de cada cadena básica
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

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

# Output

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

iptables -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 2096 --syn -m state --state NEW -j ACCEPT


Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:httpflags: FIN,SYN,RST,ACK/SYN state NEW
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:httpsflags: FIN,SYN,RST,ACK/SYN state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:2096flags: FIN,SYN,RST,ACK/SYN state NEW


Lo que me extraña ahora es que al arranque no le he permitido el tráfico DHCP (que yo sepa funciona por el puerto 67 con TCP&UDP) y sin embargo al arranque sí que coge IP.

Por lo demás todo bien.

Cómo lo ves ahora?

Salu2

cpu2

Disculpa si te parezco algo estupido, pero porque no investigas tu.

Y bueno sobre que me parece el firewall, pues si no se requiere ninguna cosa especial el firewall se torna basico, simplemente usalo como algo de estudio.

Cualquier cosa ya sabes, pero no voy hacerte yo el trabajo.

Un saludo.


ccrunch


CitarDisculpa si te parezco algo estupido, pero porque no investigas tu.
No tranquilo, sé lo que quieres decir. Lo que pasa es que si alguien no me lo explica por mucho que busque la mayoría de cosas no las entenderé.
Citar
Y bueno sobre que me parece el firewall, pues si no se requiere ninguna cosa especial el firewall se torna basico, simplemente usalo como algo de estudio.

Cualquier cosa ya sabes, pero no voy hacerte yo el trabajo.

Un saludo.

El firewall es para que nadie pueda acceder a mi pc ni me pueda hacer ping o que sepa que estoy en la red, y aunque por una remota posibilidad lograrar infectar debian, no pudieran enviar datos a sus servidores destino, a no ser que sea por http.

Salu2

cpu2

Siempre tienes mas opciones, pero para un FW para un equipo de estacion de trabajo cosas como la regla de http estan bien, puedes dejar paso a paginas o mejor dicho direcciones como por ejemplo esta pagina, pero seria muy restrictivo, ya que no podrias navegar libremente.

Por ejemplo en mi sricpt de PF, solamente dejo salida a las direcciones que me interesa, pero claro no es una simple estacion de trabajo.

Siempre puedes mirar un poco el manual, ya te estoy dando pistas.

Un saludo.