domingo, 31 de marzo de 2013

Primeros pasos, primeros obstáculos (II)



El segundo proyecto que no he conseguido terminar de hacer funcionar es el de realizar un primer firewall interno con iptables para hacer más seguro nuestro ordenador.

Proyecto Firewall Básico - Para proteger la propia máquina:

Para comenzar lo primero es saber la teoría que tiene iptables.

1. Y la mejor manera de entender la teoría es leerte bibliografía que hay en internet como son:
Otro secundario:

2. Aun así, voy a contar un poco en general como se estructura.
Iptables se compone de 3 tablas principales (y una menos "importante" llamada RAW, para configurar excepciones en el seguimiento de paquetes) y cada tabla tiene unas cadenas definidas para cada acción a realizar:
  • Filter(Por defecto):Filtrado de paquetes. 
    • INPUT: Filtrado de paquetes que llegan al firewall. 
    • OUTPUT: Filtrado de los paquetes de salida. 
    • FORWARD: Permite el paso de paquetes a otra dirección del firewall.
  • Nat: Enrutamiento de direcciones de red. 
    • PREROUTING: Chequea la dirección de red antes de reenviarla. 
    • OUTPUT: Interpretación de las direcciones de Red de los paquetes que salen del firewall. 
    • POSTROUTING: Tratamiento de la dirección IP después del enrutado. 
  • Mangle: Modificación de las cabeceras de TCP.
    • PREROUTING 
    • POSTROUTING 
    • INPUT 
    • OUTPUT 
    • FORWARD

3. Todas estas tablas tienen un orden dentro flujo de los paquetes por el firewall, visualizar aquí.

4. Y luego existen acciones definidas como aceptar (ACCEPT), rechazar sin notificación (DROP), rechazar con notificación a través de ICMP (REJECT), enmascaramiento de la dirección IP origen de forma dinámica (MASQUERADE), enmascaramiento de la dirección IP destino (DNAT) y enmascaramiento de la dirección IP origen de forma estática (SNAT).

5. En general, hay dos mentalidades para hacer un firewall, que el filtrado por defecto sea aceptar (ACCEPT) e ir filtrando lo que no quieres bloqueando una a una las reglas; o denegar por defecto (DROP) e ir abriendo mediante las reglas las conexiones o servicios que deseas permitir o habilitar.

6. Las reglas pueden tener diferentes estados como son nuevo(NEW), establecido(ESTABLISHED), relacionado(RELATED) o invalido(INVALID).

7. Es necesario establecer los servicios con su puerto, por lo que mediante la wikipedia podemos obtener una tabla básica con la lista de puertos (privados) ya definidos.

8. Un par de órdenes muy útiles son:
- iptables -nvL  (Que muestra el listado detallado de las reglas establecidas)
- iptables-save > copia.bkp (Vuelca todas las reglas de iptables al fichero copia.bkp)
- iptables-restore copia.bkp (Restaura el back-up de reglas de iptables)

9. Forma de generar el firewall a partir de un shell script: 
  1. Generar un shell script con VIM (o Nano o VI) y guardarlo como fw.sh
  2. Darle permisos de ejecución al fichero:  sudo chmod u+x fw.sh  o también,  sudo chmod 744 fw.sh 
  3. Realizar la ejecución del shell script: sudo sh fw.sh

El shell script establecido para generar el firewall es:


En conclusión, los problemas en este proyecto han sido:
  • El primer problema que he tenido y como siempre el más tonto: cuidado con los "copy-paste" entre editores (especialmente pdf,doc,..) pues te pueden meter caracteres con formatos que la shell rechaza y te puedes tirar bastante tiempo pensando dónde estás fallando cuando el código esta "perfectamente".
  • El siguiente problema ha sido la de enfocar el firewall de la propia máquina a bloqueo por defecto (DROP) todas las tablas. Lo que no conseguía siquiera hacer que internet fuera. Pero es posible que esto tenga que ver por realizar todas las pruebas en una máquina virtual con un livecd (de la distribución bugtraq, la cual me está gustando cada vez más), ya que puede perder el enlace de internet del SSOO principal con la máquina virtual al manipular el firewall, supongo claro.
Cuando tenga tiempo, realizaré uno basado en aceptar por defecto e ir cerrando los que no queramos, además de un firewall susodicho dentro de una red, donde las reglas vendrán establecidas mediante el paso (FORWARD) de paquetes entre dos redes. Para esto último, necesitaría tener VNX.

No hay comentarios:

Publicar un comentario