jueves, 19 de junio de 2008

Configurar Firewall en gnuLinux



Un firewall o cortafuegos es un software a través del cual nos podemos conectar a una red como internet, y que sirve como filtro sobre el tráfico que por él pasa, en ambas direcciones.

Vamos a usar la herramienta iptables, que seguramente ya esté instalada en vuestros sistemas gnuLinux. Esta herramienta nos permite configurar reglas del sistema, creándonos un firewall adaptado a nuestras necesidades.

A continuación voy a explicaros con un poco de detalle como funciona este comando, aunque haré uso de conocimientos básicos de redes. Luego hablaré de los pasos a seguir para una configuración habitual de un firewall doméstico.




FUNCIONAMIENTO IPTABLES:

Cada una de las reglas que definiremos tiene asociada una acción (target), que indican lo que se debe hacer ante un paquete de datos recibido. Las acciones más comunes son ACCEPT, DROP y REJECT; pero hay otras opciones como LOG, MIRROR,...
El sistema de filtrado se divide en 3 grupos o tablas, donde cada una tiene varios chains a las que puede pertenecer un paquete:
  • filter: Tabla por defecto, para los paquetes que se refieren a nuestra máquina:
      • INPUT: Paquetes recibidos para nuestro sistema.
      • FORWARD: Paquetes enrutados a través de nuestro sistema.
      • OUTPUT: Paquetes generados en nuestro sistema y que son enviados.
  • nat: Tabla referida a los paquetes enrutados en un sistema con Masquerading:
      • PREROUTING: Para alterar los paquetes según entran.
      • OUTPUT: Para alterar paquetes generados localmente antes de enrutar.
      • POSTROUTING: Para alterar los paquetes cuando están a punto para salir.
  • mangle: Alteraciones más especiales de paquetes:
      • PREROUTING: Para alterar los paquetes entrantes antes de enroutar.
      • OUTPUT: Para alterar los paquetes generados localmente antes de enrutar.

Los comandos básicos de iptables son:
  • Crear nueva regla: iptables -A [chain] [especificacion_de_la_regla] [opciones]
  • Insertar regla en una posición determinada: iptables -I [chain] [posicion] [especificacion_de_la_regla] [opciones]
  • Borrar regla en una posición determinada: iptables -D [chain] [posicion]
  • Borrar todas las reglas: iptables -F [chain]
  • Listar las reglas: iptables -L [chain]
Recordar que a la hora de evaluar las reglas, es MUY IMPORTANTE el orden de las reglas, ya que se envaluan desde la primera hasta la última en orden estricto.

Las especificaciones de las reglas pueden ser:
  • -p [protocolo]: Protocolo del paquete.
  • -s [origen]: Dirección origen del paquete.
  • -d [destino]: Dirección destino del paquete.
  • -i [interfaz_de_entrada]: Especificación del interfaz por el que se recibe un paquete.
  • -o [interfaz_de_salida]: Interfaz por el que se va a enviar un paquete.
  • [!] -f: Especifica que la regla se refiere al segundo y siguientes fragmentos de un paquete fragmentado. Si se antepone el carácter !, se refiere sólo al primer paquete, o a los paquetes NO fragmentados.
  • -j [target]: Nos permite establecer la acción.


CONFIGURAR UN BUEN FIREWALL DOMÉSTICO:

Lo más usual de un sistema doméstico sería:
  • Permita realizar conexiones TCP hacia el exterior.
  • NO permita realizar conexiones TCP desde el exterior a nuestra máquina.
  • Permita el tráfico de paquetes TCP (no conexiones) en ambas direcciones.
  • NO permita el tráfico UDP desde el exterior a nuestra máquina.
  • NO aplicar restricciones al tráfico sobre una intranet.
Ejemplo para una configuración básica. Supongamos una red doméstica habitual con por ejemplo 2 tarjetas de red (eth0 para una tarjeta de red ethernet, y ethn1 para una tarjeta inalámbrica).

Ejecutar como ROOT los siguiente comandos (IMPORTANTE: Conservar el orden y las mayúsculas):
  • iptables -A INPUT -i lo -j ACCEPT
  • iptables -A INPUT -i eth0 -j ACCEPT
  • iptables -A INPUT -i ethn1 -j ACCEPT
  • iptables -A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable
(Posibles valores: icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited e icmp-host-prohibited)

  • iptables -A INPUT -p udp --source-port 53 -j ACCEPT
(Permitimos las DNS que suelen usar el puerto 53)
  • iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
  • iptables -L -v (Vemos la configuración creada)

Los comandos para salvar y guardar la configuración del firewall son:
  • iptables-save -c > fichero: Salvamos la configuración del firewall en un fichero.
  • iptables-restore -c <>: Restaura la configuración del firewall de un fichero.

Si deseamos que esta configuración se mantenga cada vez que arranquemos el sistema, únicamente deberemos añadir el comando iptables-restore -c <> en un script de arranque.


Para tener una fuente de información más amplia sobre un firewall e iptables:
Fuente: linuxcpp

No hay comentarios: