Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Más Información. Aceptar

Cómo configurar en Linux un Firewall básico con Iptables

Esaú A.
  • Escrito por Esaú A. el 09 de Octubre de 2013
  • 4 min de lectura | Linux
Cómo configurar en Linux un Firewall básico con Iptables

Hace relativamente poco, os comentábamos por encima algunas de las características de configuración de IPtables , una de las mejores medidas de seguridad que se han desarrollado, totalmente configurable a nuestra medida con un par de líneas de comandos.

Hoy hablaremos de los cortafuegos, unos mecanismos bastante extendidos para proteger un equipo o una red de estos. También conocidos como 'firewalls', los podemos encontrar como dispositivos externos al PC (conectados entre la máquina a proteger y la red), o bien como un software implementado sobre un sistema operativo. Los primeros son denominados 'Hardware Firewall' (cortafuegos por hardware) y los segundos, más comunes entre los usuarios 'de a pie' se conocen como 'software firewall' (cortafuegos por software). La cantidad de marcas que fabrican estos dispositivos (Hardware Firewall) sería incontable y casi tendríamos que dedicar un post sólo para enumerarlas; pero para nombrar alguna de las más conocidas tenemos a Cisco o Linksys. Además de las funciones propias de un cortafuegos, estos dispositivos suelen implementar otras características, como pueden ser soportar VPN, QoS, proxis, etc...


Como recordábamos antes, en el tema de los cortafuegos por software, destaca un nombre, IPtables, el cortafuegos que por defecto viene integrado con la mayoría de las distribuciones Linux, y es en el que nos centraremos hoy, no sin mencionar antes los distintos tipos de software firewall que podemos encontrar.

  • Cortafuegos de Estado : Este firewall comprobará el estado del paquete en la transmisión diferenciando entre una nueva conexión y otra ya existente.
  • Cortafuegos de capa de aplicación: Tiene en cuenta el contenido del paquete a nivel de aplicación, pudiendo hacer así un filtrado más específico.
  • Cortafuegos de filtrado de paquetes: Con este tipo analizamos y filtramos los paquetes transmitidos o recibidos, según alguno parámetros designados previamente como por ejemplo direcciones IP, puertos a usar, origen, destino...

Apuntar que un firewall puede contener todas estas capas unas sobre otras, es decir, no son excluyentes unos de otros, pero como con todo, abusar nunca es bueno, y el interponer más capas de las necesarias, lo que hará será ralentizar nuestra red.

Hoy configuraremos un software firewall de filtrado de paquetes con IPtables . Como pudimos ver en el post anterior de IPtables , existen cuatro tablas a aplicar dentro de IPtables: filter, mangle, nat y raw; que a su vez contienen tres cadenas: INPUT, OUTPUT y FORWARD. Vamos a utilizar la tabla 'filter', y lo podemos hacer de dos formas. Una sería aceptar todos los paquetes entrantes al equipo e ir restringiendo uno a uno los paquetes que nos interesen; esta sería la política conocida como ACCEPT. La otra forma de filtrar paquetes sería el opuesto, denegar el acceso a todos los paquetes y se van permitiendo los paquetes que queramos; esta segunda política de filtrado se conoce como DROP.

Para especificar qué tipos de paquetes acceden o salen de nuestro equipo, tenemos que describirlos de una forma determinada para que IPtables nos comprenda. Para esto necesitamos órdenes y parámetros con los que formular la regla debidamente.

Ordenes:

IPtables –F : flush (borrado, vaciado) de todas las reglas IPtables –L : listado de reglas que se están aplicando IPtables –A : añadir regla IPtables –D : borrar una regla

Etc...

Estos son varios de los parámetros que usaremos para configurar las reglas de IPtables.

-p [protocolo] : Protocolo al que pertenece el paquete. -s [origen]: dirección de origen del paquete, puede ser un nombre de host, una dirección IP normal, o una dirección de red (con máscara, de forma dirección/máscara). -d [destino]: Al igual que el anterior, puede ser un nombre de host, dirección de red o dirección IP singular. -i [interfaz-entrada]: Especificación del interfaz por el que se recibe el paquete. -o [interfaz-salida]: Interfaz por el que se va a enviar el paquete. [!] -f: Especifica que la regla se refiere al segundo y siguientes fragmentos de un paquete fragmentado. Si se antepone !, se refiere sólo al primer paquete, o a los paquetes no fragmentados. -j [target]: Nos permite elegir el target al que se debe enviar ese paquete, esto es, la acción a llevar a cabo con él.

Ahora vamos con un ejemplo de una regla que acepta conexiones al puerto 80 del sistema.

iptables -A INPUT -i eth0 -s 0.0.0.0/0 -p TCP --dport www -j ACCEPT

Y aquí la descripción de cada componente del anterior comando:

iptables: comando para IPtables (no hay que olvidar que las reglas son un Shell script) -A: append, opción para añadir la regla INPUT: estado del paquete (al entrar es INPUT) -i eth0: interfaz de red eth0 -s 0.0.0.0/0: dirección de acceso (cualquiera en este caso) -p TCP: tipo de puerto --dport: puerto de destino -j ACCEPT: destino del paquete (se acepta aunque aquí podría ser DROP, LOG, REJECT,..)

Pues ya tenemos y conocemos todo lo básico para crear un firewall por software en Linux a nuestra medida.

Así que ahora pongámonos manos a la obra y lo primero será cortar todas las comunicaciones con esta línea:

sudo iptables -P INPUT DROP

Así lo que decimos a IPtables es que no permita el paso de ningún paquete de datos, y esto incluye incluso los salientes, por lo que si hacemos la comprobación, comprobaremos que no tenemos conexión a Internet. Esto lo podemos arreglar fácilmente si usamos la siguiente línea.

sudo iptables -A INPUT -i lo -j ACCEPT

Muy bien, ahora ya podemos navegar, pero indaguemos en algunas webs y comprobemos que la carga de contenido está restringida, es decir, sí podemos navegar, pero no vemos imágenes, contenido flash y cualquier otro componente de una web de hoy día. Esto se debe a que con la línea anterior hemos permitido el acceso de nuestro equipo (con 'lo' que IPtables traduce como localhost, es decir, nuestro ordenador) a Internet, pero no al contrario. Fijemos entonces una norma que nos permita una navegación adecuada y segura a la par con la siguiente línea de comandos:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Así decimos a IPtables que permita la entrada de datos al equipo, pero únicamente aquellos paquetes que estén relacionados directamente con las solicitudes que nuestro equipo ha emitido.

Pues ya tenemos configurado nuestro cortafuegos por software con IPtables, sólo comentar una última cosa, y es que estas reglas desaparecen al apagar la máquina, por lo que al iniciarlas tendremos que volver a introducirlas. A no ser que programemos un script que se ejecute durante el inicio del sistema: Cómo iniciar iptables al arrancar Linux .

Recuerda que si quieres Certificarte en Linux puedes ver nuestro Curso de preparación para el Exámen 101 LPIC-1 .

Fuentes: comando man de Linux, netfilter.org

Estas son algunas de las empresas que ya confían en OpenWebinars

Profesores y profesionales

Nuestros docentes son profesionales que trabajan día a día en la materia que imparten

Conviértete en profesor de OpenWebinars