El uso de cortafuegos para la protección de nuestros sistemas es una de las principales medidas de seguridad que establecemos siempre. En el mundo Linux existe una inmensa variedad de herramientas que permiten realizar las funciones de un cortafuego, dentro de ellas estan Uncomplicated Firewall(UFW) que viene por defecto en Ubuntu, SuSeFirewall que viene dentro de OpenSuse pero toda la gama Suse lo lleva y otros como el que veremos hoy  Iptables que viene por defecto en Centos, Debian y otras distribuciones. Una lista mas extensa puede ser encontrada en un excelente articulo publicado en The geek stuff sobre los 5 principales cortafuegos en Linux.

netfilter-logoIptables es un programa que permite el filtrado de paquetes para IPv4, permite la traduccion de direcciones y traslación de puertos. Cuando iptables recibe un paquete puede aceptarlo, rechazarlo, eliminarlo o mantenerlo en cola según las reglas que establezcamos.

La configuración de iptables se hace a través de reglas, las mismas deben ser escritas utilizando una sintaxis establecida, pero pueden interpretarse como si establacieramos una regla común. Por ejemplo, la política por defecto es denegar todas las conexiones entrantes, escrito en una regla quedaría

-A INPUT -j REJECT

Si lo que queremos es restringir las entradas a una determinada interfaz de red como por ejemplo el eth0 la regla quedaría:

-A INPUT -i eth0 -j REJECT

Veamos cuales son las partes que conforman las reglas. La opción -A o –append adiciona una regla, específicando a que lista se adiciona, que puede ser de entrada, salida o reenvío. La segunda opción -i permite establecer sobre que interfaz se aplicará la regla y la opción -j la acción a realizar que puede ser aceptar, denegar, o rechazarlo.

Las opciones comunes para usar en iptables son:

  • -A ó –append para agregar una nueva regla.
  • -i ó –in-interface para establecer la interfaz de red de entrada
  • -o ó –out-interface para establecer la interfaz de red de salida
  • -s o –source para establecer la subred o IP para el cual se va a cumplir la regla
  • -p ó –proto para establecer el protocolo para el cual se va a cumplir la regla
  • -j ó –jump para especificar la acción a realizar con el paquete que cumpla con la regla.
  • –dport para establecer el puerto para el cual se va a cumplir la regla

 ¿Dónde se escriben las reglas?

Donde escribir las reglas para el iptables varía en dependencia del sistema. Por ejemplo en Centos el archivo donde escribir las reglas es /etc/sysconfig/iptables, en Ubuntu y Debian se puede modificar el archivo /etc/init.d/iptables, pero el proceso para hacerlo no es así. Las reglas se escriben en un archivo cualquiera pero que empiece con *filter y termine con un COMMIT como por ejemplo este:

*filter

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp --dport 80 -s 10.0.0.0/8 -j ACCEPT

-A INPUT -j REJECT

-A OUTPUT -j ACCEPT

COMMIT

Luego con el comando iptables-restore especificamos el archivo que contiene las reglas

iptables-restore < /etc/reglas-iptables.rules

Se pueden comprobar las reglas usando el comando:

iptables -L

Para salvar las reglas en otro archivo se puede utilizar el comando iptables-save, específicando donde se van a guardar las reglas

iptables-save > /etciptables-up.rules

Esto no quiere decir que se ejecutará cuando inicie el sistema, para ello debemos crear un fichero dentro del directorio /etc/network/if-pre-up.d/ y en su contenido poner

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

Ya con esto garantizamos que las reglas que establecimos se apliquen cuando inicie el sistema. De esta forma queda protegido nuestro equipo filtrando los paquetes y decidiendo que hacer con ellos.