23 abril, 2024

IsProto

Soluciones para Redes e Internet

iptables

Si hablamos de un firewall o cortafuegos integrado a tu sistema, iptables es una de las mejores herramientas para filtrar el tráfico de tu red utilizando reglas sencillas.

¿Qué es iptables?

Iptables es una utilidad de filtrado de red. Su función principal es gestionar el tráfico entrante y saliente, funcionando como una herramienta de administración para paquetes utilizando el protocolo IPv4 e IPv6.

El comando para el protocolo IPv4 es iptables, mientras que para el protocolo IPv6 es ip6tables, siguiendo la misma sintaxis de éste documento.

Las reglas de filtrado en iptables son definidas por el usuario, las cuáles se pueden agregar utilizando el comando iptables, seguido de la bandera -A para agregar una regla al final de las reglas actuales o -I para agregar una nueva regla al principio.

iptables

Sintaxis

La sintaxis más común para establecer una regla de filtrado utilizando el comando iptables es la siguiente:

iptables [-bandera] [INPUT / OUTPUT / FORWARD] -s/d[dirección ip] -i [interfaz] -p [protocolo] -j [ACCEPT / DROP]

De acuerdo a la sintaxis anterior, la bandera puede ser -A, -C o -D para la opción de tráfico deseado, en donde INPUT significa el tráfico entrante, OUTPUT el tráfico saliente y FORWARD el tráfico que se transfiere.

La opción -i significa la interfaz de red sobre la cual queremos aplicar la regla de filtrado, por ejemplo eth0 para una interfaz configurada para ethernet, o wlan0 para una interfaz inalámbrica. En caso de no especificarse, se aplica la regla para todas las interfaces de red disponibles.

La opción -s se utiliza como source (origen) de una dirección IP, es decir que la regla aplica para la dirección IP mostrada, utilizado con la directiva INPUT. En el caso de la opción -d es utilizada para destino, es decir para aplicar la regla a la dirección IP destino mostrada en compañía de OUTPUT.

Para especificar el protocolo con la opción -p, siendo optativa esta opción, se puede utilizar tcp, udp u otro protocolo de red involucrado para la definición de la regla de filtrado.

Finalmente, la opción -j nos permite especificar la política que queremos aplicar para la regla, en donde ACCEPT es una política de admisión, es decir que se admite el tráfico definido en la regla, mientras que DROP es una política de restricción, es decir el tráfico para la regla definida se rechaza.

Ejemplos de filtrado con Iptables

Para mostrar como es el funcionamiento de iptables, a continuación les mostramos algunos ejemplos de cómo llevar a cabo algunas reglas de filtrado, un ejemplo básico del uso del firewall o cortafuegos.

Nota importante: Hay que tener mucho cuidado al establecer políticas o reglas de filtrado restrictivas para servidores VPS, remotos o dedicados, salvo que tengas control físico de tu dispositivo, podría llegar a ser inutilizable tu servicio si bloqueas tu propio acceso.

Inicialización del Firewall – Comandos generales

Antes de aplicar cualquier regla, es importante mostrar la forma de eliminar las reglas existentes, lo cual se debe utilizar como precaución, por ejemplo al establecer nuevas reglas o eliminar reglas anteriores debido a bloqueos indeseables.

Para limpiar las reglas existentes es suficiente utilizar la opción -F, ejecutando el siguiente comando:

iptables -F

En caso de tener definidas reglas en otras tablas, tal vez sea necesario eliminar las reglas existentes en esas tablas también, por ejemplo reglas de NAT (Network Address Translation) o de Mangle (Marcado de paquetes).

iptables -F -t nat

iptables -F -t mangle

Establecer políticas de filtrado con iptables

Las políticas de filtrado consisten en la definición del comportamiento general del firewall con respecto al tráfico. Las políticas de filtrado se pueden establecer para cada tipo de tráfico: INPUT, OUTPUT y FORWARD.

Las políticas del tráfico se puede establecer de forma permisiva (ACCEPT, todo el tráfico se acepta salvo que se establezcan reglas contrarias) o restrictiva (DROP, todo el tráfico se prohibe, salvo el que se permita a través de las reglas, útil para una red interna o zona desmilitarizada).

Ejemplo de establecimiento de políticas

Ejemplo de política permisiva: Para establecer políticas permisivas, establecemos las siguientes reglas (configuración por defecto al resetear reglas)

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

Ejemplo de política restrictiva: Las siguientes políticas se pueden establecer para el caso de una red interna o para permitir determinado tráfico exclusivamente.

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

Nota importante: En el caso de políticas restrictivas se debe establecer obligatoriamente otras reglas para permitir tráfico de determinadas IP o puertos, o por lo contrario se bloqueará el acceso a la red de forma completa.

Firewall simple con iptables

La funcionalidad de iptables como firewall más sencillo consiste en establecer el filtrado de tráfico para una dirección IP de la siguiente forma:

iptables -A INPUT -s [dirección IP] -j DROP

Este comando agrega una regla de rechazo de todo el tráfico entrante que proviene de la dirección IP indicada, es decir un bloqueo total del tráfico de esa dirección IP. Esta regla es bastante útil en el caso de un ataque de denegación de servicio distribuido (DDoS) o ataque de malware, adware u otro tipo al servidor.

Filtrado de tráfico dirigido a algún puerto

En ocasiones el filtrado de tráfico solamente queremos establecerlo para determinados puertos o tráfico proveniente de algún protocolo.

Por ejemplo, si deseamos bloquear el tráfico entrante dirigido al puerto 9999 de nuestra interfaz de red, ejecutamos el siguiente comando:

iptables -A INPUT -p tcp –dport 9999 -j DROP

Con éste comando se bloquea todo el tráfico del protocolo TCP/IP, sin embargo se puede omitir todo el tráfico de cualquier protocolo eliminando la opción -p.

Enlistar las reglas actuales de iptables

Para mostrar las reglas actuales del cortafuegos, escribimos el siguiente comando:

iptables -L

iptables

Cuidados al automatizar las reglas

Cuando automatizamos el establecer reglas del cortafuegos como servicio habilitado desde el inicio, si no estamos totalmente seguros de las reglas que queremos establecer, podríamos bloquear nuestro servidor si no tenemos acceso físico.

Ten particular cuidado al establecer políticas restrictivas con iptables, nunca bloquees tu puerto 22, 21 o similar si utilizas un acceso remoto, por ejemplo ssh, sftp, ftp, telnet o scp.

Una forma sencilla de evitar el riesgo, es establecer reglas de filtrado en iptables siempre incluyendo puertos o determinadas IP exteriores para el caso de bloquear algún tipo de tráfico malicioso.