Foro de elhacker.net

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: ccrunch en 24 Mayo 2014, 23:43 pm



Título: Reglas de iptables no se aplican
Publicado por: ccrunch en 24 Mayo 2014, 23:43 pm
Necesito ayuda con una cosa. Estoy en Debian y estoy aplicando unas reglas iptables para hacer más seguro el sistema pero al hacer iptables -L está todo sin reglas y en ACCEPT.

El script es este:

Código
  1. #!/bin/sh
  2.  
  3. IPTABLES=/sbin/iptables
  4.  
  5. if [ ! -x $IPTABLES ]; then
  6.  exit 0
  7. fi
  8.  
  9. if [ "$IFACE" = eth0 ]; then
  10.  
  11.  # 1) Definir la norma de cada cadena básica
  12.  $IPTABLES -P INPUT DROP
  13.  $IPTABLES -P FORWARD DROP
  14.  $IPTABLES -P OUTPUT ACCEPT
  15.  
  16.  # 2) Aceptar paquetes en estado establecido y relacionado
  17.  $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  18.  
  19.  # 4) Optativo: Registrar paquetes que van a ser desechados
  20.  #$IPTABLES -A INPUT -j LOG --log-level debug --log-prefix "Drop INPUT: "
  21.  
  22. fi

Está cogido de la página de debian chile.
He dado los permisos necesarios, primero probé haciendo un ifdown y ifup, luego reiniciar la red, y luego reinicié el sistema y nada, me manda a comer *****. Alguien sabe por qué no funciona?

He probado a poner alguna regla a mano como iptables -P FORWARD DROP y tampoco se aplica, o algo estoy yo haciendo mal.

El script está en /etc/network/if-up.d/firewall

Salu2


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 25 Mayo 2014, 00:36 am
Este es un fragmento de uno de mis antiguos scripts.

Código:
#!/bin/sh
IPTABLES=/sbin/iptables
MODPROBE=/sbin/modprobe
INT_NET=192.168.1.1/24
INTIF=ath0

### Normas actuales y polittcas de las cadenas
echo "[+] Estableciendo politi­ca a las cadenas y cargando modulos..."
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP                                                   
### Cargar modulos de localizacionn de conexionn
modprobe ip_conntrack
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

##### Cadena INPUT [Entrada] #####
echo "[+] Estableciendo reglas cadena de entrada INPUT..."
### Estado de las reglas
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "DROP INV " --log-ip-options --log-tcp-options
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
### Reglas anti-spoofing
iptables -A INPUT -i $INTIF -s $INT_NET -j LOG --log-prefix "SPOOFED PKT "
iptables -A INPUT -i $INTIF -s $INT_NET -j DROP
### Reglas aceptadas
iptables -A INPUT -i $INTIF -p tcp -s $INT_NET --dport 23 --syn -m state --state NEW -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
### Registro de entrada por defecto de la regla
iptables -A INPUT -j NFLOG --nflog-prefix "DROP "

No deja de ser otro sricpt mas, simplemente dile que se ejecute en el strartup del sistema y ya esta, eso es lo que hacia yo en mi Gentoo. Pero si no quieres hacerlo de esa forma, si buscaras un poco encontrarias cosas como esta.

Código:
http://serverfault.com/questions/511099/debian-ignores-etc-network-if-pre-up-d-iptables

Un saludo.


Título: Re: Reglas de iptables no se aplican
Publicado por: ccrunch en 25 Mayo 2014, 21:29 pm
Y una duda más, si creo una máquina virtual para probar que el FW funciona, como irá por adaptador puente eth0 el firewall filtrará también ese tráfico? Es decir, primero saldrá por la eth0 y volverá a entrar para hacer ping y otras cosas al sistema real, habrá algún problema?


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 25 Mayo 2014, 23:31 pm
Intentare responder tus pregunta, por que no veas.

No te hace falta crear una maquina virtual para probar un cortafuegos, pero si la quieres crear adelante.

Iptables filtrara las conexiones o protocolos a la interfaz que tu ordenaste, para algo esta la opcion -i, esa opcion significa que esa regla solo se aplica a eth0 en tu caso.

Luego hay reglas como esta.

Código:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Que esta es "global" vamos que se aplica a todas las interfaces, ya que no especificaste alguna.

Y despues de eso intentare responder esta pregunta.

Es decir, primero saldrá por la eth0 y volverá a entrar para hacer ping y otras cosas al sistema real, habrá algún problema?

Si tu politica OUTPUT le permite a la interfaz realizar la conexion que le pediste no habra algun problema.

Código
  1. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Si tienes eso establecido y una politica en OUTPUT DROP, y quieres hacer una peticion ftp o http, no funcionara ya que no estas dejando la salida a los paquetes NEW. Tendrias que hacer algo asi.

Código:
iptables -A OUTPUT -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT

Entonces se dejara salir la conexion, pero claro luego tiene que entrar de nuevo, y de eso se encarga la politica INPUT, si esta no permite las conexiones entrantes a esa direccion tendras prolemas, pero para eso pusiste esta regla.

Código:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Significa que todos los paquetes con las banderas ESTABLISHED,RELATED seran aceptados, si yo realizo una peticion ftp este saldra con el NEW si el servidor remoto la acepta este me enviara otra conexion con la bandera ESTABLISHED y entonces si que podras establecer la conexion.

Pero si alguien remotamente intenta hacer una peticion ftp, este no podra ya que tu politica INPUT no aceptas los paquetes con banderas NEW. Dado que tu politica OUTPUT esta en ACCEPT no tendrias que tener problemas.

Yo si fuera tu entenderia las reglas antes de aplicar nada, y mucho menos hacer un copiar y pegar de un foro o pagina de Debian.

Un saludo.

P.D: No se si eso responde tus preguntas, si no vuelve a formularlas mejor.


Título: Re: Reglas de iptables no se aplican
Publicado por: Jenag en 25 Mayo 2014, 23:50 pm
Ccrunch hola , también puedes hecharle un vistazo a :
https://foro.elhacker.net/buscador-t403983.0.html
https://foro.elhacker.net/buscador-t391339.0.html
https://foro.elhacker.net/buscador-t379532.0.html
https://foro.elhacker.net/buscador-t366614.0.html
Besitos mi robotito favorito seas flexo o bender o.. :-*


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 26 Mayo 2014, 00:12 am
Te recomiendo que ignores esos links que te paso ese usuario, sobre todo el ultimo, si no quieres quedarte mas confuso y perdido, es un sript a base de reglas encontradas por internet me apuesto algo, y es caotico como el solo.

Un saludo.



Título: Re: Reglas de iptables no se aplican
Publicado por: ccrunch en 26 Mayo 2014, 16:47 pm
Ahora he comprobado por casualidad si se estaban aplicando y sí se han aplicado, al reiniciar y sin hacer nada. No se por qué pero ahora ya va.

Y como recomendación, qué filtros me recomendáis dejar para una estación de trabajo?

Yo he mirado esto: http://man-es.debianchile.org/cortafuego.html para estación de trabajo y no entiendo la 2ª y 3ª opción.

Lo que quiero es filtrar por todas las interfaces (solo tengo eth0 y wlan0) todo el tráfico que pasa, eliminar absolutamente todos los paquetes que yo no haya solicitado, es decir, quiero que funcione el tráfico web con un servidor con el cual yo he pedido un establecimiento de conexión, pero que nadie pueda hacerme ping, etc.

Me suena que eso lo hace IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT pero no estoy seguro.

Ahora mismo iptables luce así:
Código:
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 ACCEPT)
target     prot opt source               destination

Salu2


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 26 Mayo 2014, 20:03 pm
Y como recomendación, qué filtros me recomendáis dejar para una estación de trabajo?
Yo he mirado esto: http://man-es.debianchile.org/cortafuego.html para estación de trabajo y no entiendo la 2ª y 3ª opción.

Te recomiendo un cortafuegos con politica DROP, y a partir de hay ir abriendo los protocolos que quieras, piensa que un cortafuegos en DROP es menos propenso a los "fallos" o problemas de seguridad que uno en ACCEPT.

Venga va, que la segunda regla ya te la explique antes, y la tercera queda bastante claro, todas las conexiones entrantes "conexiones nuevas" son aceptadas en todas las interfaces menos en eth0. Ignora todas esas reglas, cada maquina y red es un mundo diferente a lo mejor esas reglas no se adaptan a ti, no te hace falta nada de eso.

Lo que quiero es filtrar por todas las interfaces (solo tengo eth0 y wlan0) todo el tráfico que pasa, eliminar absolutamente todos los paquetes que yo no haya solicitado, es decir, quiero que funcione el tráfico web con un servidor con el cual yo he pedido un establecimiento de conexión, pero que nadie pueda hacerme ping, etc.

Pues como te dije antes, politica DROP y deja operativo lo que te interese, si dejas la politica en DROP esta automaticamente bloqueara los icmp, a o ser que le dijas que los acepte.

Simplemente tienes que preocuparte de abrir, es lo mejor. Si lees el fragmento de srcipt que te deje en el primer comentario lo veras.

Un saludo.

P.D: Te recomiendo que dejes los tutos, si no quieres acabar con un FW como el user de arriba.


Título: Re: Reglas de iptables no se aplican
Publicado por: ccrunch en 26 Mayo 2014, 20:20 pm
Los tutos son para guiarme, algún día tendré que entender el funcionamiento del IPTABLES aunque me lo explicaron por encima.

El script ahora está así:

Código:
#Definir la norma de cada cadena básica
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#Aceptar paquetes en estado establecido y relacionado
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Y la salida de iptables -L es:
Código:
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 ACCEPT)
target     prot opt source               destination

Qué te parece esta configuración?

Salu2


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 26 Mayo 2014, 20:53 pm
Pues mal, que quieres que te diga, ninguna regla para logear paquetes descartados, OUTPUT en ACCEPT y FORWARD sin ninguna regla.

Porque no intentas establecer la conexion con el Server? Con la politica OUTPUT en DROP.

Un saludo.


Título: Re: Reglas de iptables no se aplican
Publicado por: ccrunch en 26 Mayo 2014, 21:11 pm
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:
Código:
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


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 27 Mayo 2014, 12:13 pm
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.

Código:
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.

Código:
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.


Título: Re: Reglas de iptables no se aplican
Publicado por: 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?

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


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 27 Mayo 2014, 14:47 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.

Código:
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.

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?

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.


Título: Re: Reglas de iptables no se aplican
Publicado por: ccrunch en 27 Mayo 2014, 20:31 pm
Hola, me da este error al ejecutar el script:
Código:
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:
Código:
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:
Código:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Por qué tengo que dejar RELATED, y no solamente ESTABLISHED?

Salu2


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 28 Mayo 2014, 10:11 am
Código:
iptables 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.

Por otra parte, creí que era algún parámetro estaba mal puesto así que busqué y cambié de sitio el --syn a esto:
Código:
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.

Código:
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


Y por último, en la regla INPUT:
Código:
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.


Título: Re: Reglas de iptables no se aplican
Publicado por: ccrunch en 28 Mayo 2014, 21:22 pm
Buenas, ahora todo va bien, este es el resultado:
Código:
# 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
Código:
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


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 30 Mayo 2014, 14:25 pm
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.



Título: Re: Reglas de iptables no se aplican
Publicado por: ccrunch en 30 Mayo 2014, 15:38 pm

Citar
Disculpa 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


Título: Re: Reglas de iptables no se aplican
Publicado por: xv0 en 30 Mayo 2014, 19:55 pm
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.