Introducción a IPTABLES: configura un Firewall en Linux

iptables

Para configurar un firewall o cortafuegos en Linux, podemos hacer uso de iptables, una potente herramienta que parece olvidada por muchos usuarios. Aunque existen otros métodos, como ebtables y arptables para filtrar tráfico a nivel de enlaces, o Squid a nivel de aplicaciones, iptables puede resultar muy útil para la mayoría de los casos, implementando una buena seguridad en nuestro sistema a nivel de tráfico y transporte de red.

El kernel Linux implementa iptables, una parte que se ocupa de filtrar paquetes y que en este artículo te enseñamos a configurar de una forma sencilla. Dicho de forma sencilla, iptables identifica qué información puede entrar y cual no, aislando a tu equipo de posibles amenazas. Y aunque existan otros proyectos como Firehol, Firestarter, etc., muchos de estos programas para firewall usan iptables…

Pues bien, pongámonos manos a la obra, con ejemplos lo entenderéis todo mejor (para estos casos es necesario tener privilegios, por lo que usa sudo delante del comando o hazte root):

La forma general de usar iptables para crear una política de filtrado es:

IPTABLES -ARGUMENTOS I/O ACCIÓN

Donde -ARGUMENTO es el argumento que usaremos, normalmente -P para establecer la política por defecto, aunque existen otros como -L para ver las politicas que tenemos configuradas, -F para eliminar una política creada, -Z para poner a cero los contadores de bytes y paquetes, etc. Otra opción es -A para añadir una política (no por defecto), -I para insertar una regla en una posición concreta, y -D suprimir una regla dada. También habrá otros argumentos para señalar -p protocolos, –sport puerto fuente, –dport para puerto destino, -i interfaz entrante, -o interfaz saliente, -s dirección IP origen y -d dirección IP destino.

entrada-salida iptables

Además I/O representaría si la política se aplica a la entrada INPUT, a la salida OUTPUT o se trata de una redirección de tráfico FORWARD (existen otras como PREROUTING, POSTROUTING, pero no las usaremos). Finalmente, lo que yo he llamado ACCIÓN puede tomar el valor ACCEPT si aceptamos, REJECT si rechazamos o DROP si eliminamos. La diferencia entre DROP y REJECT es que cuando se rechaza un paquete con REJECT, la máquina que lo originó sabrá que ha sido rechazado, pero con DROP se actúa con silencio y el atacante u origen no sabrá que ha pasado, y tampoco sabrá si tenemos un cortafuegos o simplemente ha fallado la conexión. También hay otras como LOG, que mandan un seguimiento del syslog…

Para modificar reglas, podemos editar el fichero de iptables con nuestro editor de texto preferido, nano, gedit,… o crear scripts con reglas (si quieres anularlas, puedes hacerlo poniendo un # delante de la línea para que sea ignorada como un comentario) mediante la consola con comandos como lo explicaremos aquí. En Debian y derivados también se pueden usar las herramientas iptables-save e iptables-restore…

La política más extrema es bloquear todo, absolutamente todo el tráfico, pero esto nos dejará aislados, con:

iptables -P INPUT DROP

Para aceptarlo todo:


iptables -P INPUT ACCEPT

Si queremos que todo el tráfico saliente desde nuestro equipo sea aceptado:


iptables -P OUTPUT ACEPT

La otra acción radical sería borrar todas las políticas de iptables con:


iptables -F

Vamos a reglas más concretas, imagina que tienes un servidor web y por tanto el tráfico por el puerto 80 debe estar permitido:


iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Y si además de la regla anterior, queremos que un equipo con iptables solo sea visto por los equipos de nuestra subred y que pase desapercibido para una red externa:


iptables -A INPUT -p tcp -s 192.168.30.0/24 --dport 80 -j ACCEPT

En la línea anterior, lo que le estamos diciendo a iptables es que se añada una regla -A, para que las entradas INPUT, y el protocolo TCP, por el puerto 80, queden aceptadas. Ahora imagina que quieres que la navegación web sea rechazada para las máquinas locales que pasen a través de la máquina que ejecuta iptables:


iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 DROP

Creo que el uso es sencillo, teniendo en cuenta para qué sirve cada parámetro de iptables, podemos añadir reglas sencillas. Se pueden hacer todas las combinaciones y reglas que imaginemos… Para no extenderme más, solo agregar una cosa más, y es que si la máquina se reinicia, se borrarán las políticas creadas. Las tablas se reinician y quedarán como antes, por eso, una vez tengas bien definidas las reglas, si quieres hacerlas permanentes, debes hacer que se lancen desde /etc/rc.local o si tienes un Debian o derivados usar las herramientas que se nos dan (iptables-save, iptables-restore e iptables-apply).


Etiquetas

Isaac P. E.

Soy un apasionado de la tecnología y me encanta compartir, pero sobre todo aprender cada día más. Me gusta todo lo que tenga que ver con la ciencia y leer sobre esta temática. En mi tiempo libre escribo un libro sobre microprocesadores, mi tema favorito. También me gusta realizar diseños electrónicos en Basic Stamp, Arduino, además me encanta jugar con Linux. Algunos de mis estudios son: - Módulo superior de electrónica y microelectrónica. - Módulo de domótica. - Experto en gestión medioambiental en la empresa. - Técnico en prevención en la industria. - Técnico en montaje y reparación de ordenadores. - Técnico en reparación de portátiles. - Técnico en redes informáticas. - Curso GNU/Linux. Otros conocimientos: inglés, ofimática, programación en diversos lenguajes (C, KOP, VHDL, PBASIC, Arduino y HTML), conocimientos avanzados de Windows y Linux,...

4 comentarios

  1.   Jimmy Olano dijo

    Este es el primer artículo que veo sobre IPTABLES que, aunque denso -requiere un nivel de conocimiento medio-, VA AL GRANO DIRECTAMENTE.

    Recomiendo a todas y todos usarlo como “manual de referencia rápida” ya que está muy bien condensado y explicado. 8-)

  2.   JESÚS dijo

    Me gustaria que hablarais en un proximo articulo sobre si el cambio de systemd en la mayoria de distribuciones de linux, afecta de alguna manera a la seguridad de linux en general, y si este cambio es para mejor o peor del futuro y las distribuciones de linux. Tambien me gustaria saber que se sabe del futuro de devuan (debian sin systemd).
    Muchas Gracias haceis muy buenos articulos.

  3.   Slevin dijo

    Podrias hacer un articulo explicando la tabla mangle?

  4.   Sebastián dijo

    Bloquear unicamente Facebook?

Escribe un comentario