Búsqueda de sitios web

Ubuntu Iptables: ¿Cómo controlar el tráfico de red usando iptables?


“…Una utilidad de Unix en el espacio de usuario que brinda a los administradores del sistema la capacidad de configurar las reglas de filtrado de paquetes IP implementadas por el módulo de filtro de red del Kernel. ” Iptables actúa como un cortafuegos utilizando reglas de filtrado de paquetes basadas en varios criterios, como la dirección IP, el puerto y los protocolos.

Esta guía discutirá cómo configurar y usar las reglas de iptables en un sistema Ubuntu para asegurar su red. Ya sea que sea un usuario novato de Linux o un administrador de sistemas experimentado, de esta guía, y de una forma u otra, aprenderá algo útil sobre iptables.

Iptables viene preinstalado en Ubuntu y en la mayoría de las distribuciones basadas en Debian. Ubuntu también empaqueta el firewall GUFW, una alternativa gráfica que puede usar para trabajar con iptables.

NOTA: Para usar y configurar iptables, necesitará privilegios sudo en su sistema. Puede obtener más información sobre sudo en el siguiente tutorial.

Ahora que sabe qué es Iptables, ¡vamos a sumergirnos!

¿Cómo usar iptables para administrar el tráfico IPv4?

Para usar Iptables para la gestión de tráfico y red IPv4, debe comprender lo siguiente:

El comando Iptables

Iptables ofrece una selección de opciones que le permiten personalizar y ajustar sus reglas de iptables. Analicemos algunos de estos parámetros y veamos qué hacen.

NOTA: Puede configurar un conjunto de reglas que administran un subconjunto específico, conocido como cadenas de iptables.

Parámetros de Iptables

Antes de comenzar a crear y configurar las reglas de iptables, primero comprendamos los conceptos básicos de iptables, como la sintaxis general y los argumentos predeterminados.

Considere el siguiente comando:

sudo iptables -I INPUT -s 192.168.0.24 -j DROP

El comando anterior le dice a iptables que cree una regla en la cadena. La regla elimina todos los paquetes de la dirección IP 192.168.0.24.

Examinemos el comando, línea por línea, para entenderlo mejor.

  • El primer comando iptables llama a la utilidad de línea de comandos iptables.

  • El siguiente es el argumento -I utilizado para la inserción. El argumento de inserción agrega una regla al comienzo de la cadena de iptables y, por lo tanto, se le asigna una prioridad más alta. Para agregar una regla en un número específico de la cadena, use el argumento -I seguido del número donde se debe asignar la regla.

  • El argumento -s ayuda a especificar la fuente. Por lo tanto, usamos el argumento -s seguido de la dirección IP.

  • El parámetro -j con iptables especifica el salto a un objetivo específico. Esta opción establece la acción que realizarán las Iptables una vez que haya un paquete coincidente. Iptables ofrece cuatro objetivos principales de forma predeterminada, que incluyen: ACEPTAR, ELIMINAR, REGISTRAR y RECHAZAR.

Iptables ofrece una selección de parámetros que puede usar para configurar varias reglas. Los diversos parámetros que puede usar para configurar las reglas de iptables incluyen:

-p –protocol

Especifica el protocolo de conexión; por ejemplo, TCP, UDP, etc.

-d –destination

Especifica el destino, que puede ser una dirección, un nombre de red o un nombre de host.

-j –jump

Establece la acción que iptables llevará a cabo después de encontrar un paquete.

-o –out-interface

Establece la interfaz a través de la cual iptable envía el paquete.

-i –in-interface

Establece la interfaz utilizada para establecer paquetes de red.

-c –set-counters

Permite al administrador configurar los contadores de bytes y paquetes para una regla específica.

-g –goto chain

El parámetro especifica que el procesamiento debe continuar en la cadena establecida por el usuario al regresar.

-f –fragment

Le dice a iptables que aplique la regla solo al segundo y siguientes fragmentos de los paquetes fragmentados.

Opciones de Iptables

El comando iptables admite una amplia gama de opciones. Algunos comunes incluyen:

-D –delete

Elimina una regla de la cadena especificada

-F –flush

Elimina todas las reglas, una a la vez

-L –list

Muestra todas las reglas en la cadena especificada

-I –insert

Inserta una regla en la cadena especificada (pasada como un número, cuando no hay ningún número especificado; la regla se agrega en la parte superior)

-C –check

Consultas para la coincidencia de una regla; requisito en una regla especificada

-v –verbose

Muestra más detalles cuando se usa con el parámetro -L

-N –new-chain <name>

Agrega una nueva cadena definida por el usuario

-X –delete-chain <name>

Elimina una cadena específica definida por el usuario

Tablas Iptables

El kernel de Linux tiene tablas predeterminadas que albergan un conjunto de reglas relacionadas. Estas tablas predeterminadas tienen un conjunto de cadenas predeterminadas, pero los usuarios pueden personalizar las reglas agregando reglas definidas por el usuario.

NOTA: Las tablas predeterminadas dependerán en gran medida de la configuración de su Kernel y de los módulos instalados.

Aquí están las tablas de iptables predeterminadas:

1: Las tablas de filtros

La tabla de filtros es una tabla predeterminada que contiene cadenas utilizadas para el filtrado de paquetes de red. Algunas de las cadenas predeterminadas en esta tabla incluyen:

Chain Description
Input Iptables use this chain for any incoming packets to the system, i.e., packets going to local network sockets.
Output Iptables use the output chain for locally generated packets, i.e., packets going out of the system.
Forward This chain is what the Iptables use for packets routed or forwarded via the system.

2: Las tablas NAT

NAT o tabla de direcciones de red es un dispositivo de enrutamiento que se utiliza para modificar las direcciones IP de origen y de destino en un paquete de red. El uso principal de la tabla NAT es conectar dos redes en un rango de direcciones privadas con la red pública.

NAT se desarrolló para admitir el enmascaramiento de direcciones IP reales, lo que permite que los rangos de direcciones IP privadas lleguen a la red externa. Esto ayuda a proteger los detalles sobre las redes internas para que no se revelen en las redes públicas.

La tabla NAT se emplea cuando un paquete inicia una nueva conexión.

Iptables tiene una tabla predeterminada para el direccionamiento NAT. Esta tabla tiene tres cadenas principales:

Chain Description
PREROUTING Allows the modification of packet information before arriving in the INPUT chain—used for incoming packets
OUTPUT Reserved for packets created locally, i.e., before network routing occurs
POSTROUTING Allows the modification of outgoing packets— Packets leaving the OUTPUT chain

El siguiente diagrama muestra una descripción general de alto nivel de este proceso.

Utilice el siguiente comando para ver sus tablas de enrutamiento NAT.

iptables -t nat -n -v -L

3: Las mesas destrozadas

La tabla mangle se usa principalmente para modificaciones especiales de paquetes. En términos simples, se usa para modificar los encabezados IP de un paquete de red. La modificación de paquetes puede incluir cambiar un valor TTL del paquete, cambiar los saltos de red válidos para un paquete, etc.

La tabla contiene las siguientes cadenas predeterminadas:

POSTROUTING

Se utiliza para paquetes salientes

INPUT

Se utiliza para paquetes que llegan directamente al servidor.

OUTPUT

Se utiliza para paquetes locales.

Forward

Reservado para paquetes enrutados a través del sistema

4: Las mesas crudas

El propósito principal de la tabla sin procesar es configurar excepciones para paquetes que no están destinados a ser manejados por el sistema de seguimiento. La tabla sin formato establece una marca NOTRACK en los paquetes, lo que hace que la función de conntrack ignore el paquete.

Conntrack es una función de red del kernel de Linux que permite que el kernel de Linux rastree todas las conexiones de red, lo que permite que el kernel identifique los paquetes que componen un flujo de red.

La tabla raw tiene dos cadenas principales:

Chain Description
PREROUTING Reserved for packets received by network interfaces
OUTPUT Reserved for packets initiated by local processes

5: La mesa de seguridad

El uso principal de esta tabla es configurar el mecanismo de seguridad interno Security Enhancement for Linux (SELinux) que marca los paquetes. La marca de seguridad se puede aplicar por conexión o paquete.

Se utiliza para las reglas de control de acceso obligatorio y es la segunda tabla a la que se accede después de la tabla de filtros. Ofrece las siguientes cadenas predeterminadas:

Chain Description
INPUT Reserved for incoming packets to the system
OUTPUT Used for locally created packets
FORWARD Used for packets routed through the system

Habiendo visto las Iptables predeterminadas, vayamos un paso más allá y analicemos cómo trabajar con las reglas de iptables.

¿Cómo trabajar con las reglas de iptables?

Las reglas de Iptables se aplican en orden ascendente. Esto significa que la primera regla en un conjunto específico se aplica primero, seguida de la segunda, luego la tercera, y así sucesivamente, hasta la última.

Debido a esta función, iptables le impide agregar reglas en un conjunto usando el parámetro -A; debe usar -I, seguido del número o vaciarlo para agregarlo al principio de la lista.

Mostrando Iptables

Para ver sus iptables, use el comando iptables -L -v para IPv4 e ip6tables -L -v para IPv6.

Inserción de reglas

Para insertar reglas en un conjunto, debe colocarlas en el orden exacto, respetando las reglas utilizadas por la misma cadena. Puede ver la lista de sus reglas de iptables con el comando como se discutió anteriormente:

sudo iptables -L -v

Por ejemplo, para insertar una regla que permita conexiones entrantes al puerto 9001 a través de TCP, debemos especificar el número de regla en la cadena INPUT siguiendo las reglas de tráfico para la web.

sudo iptables -I INPUT 1 -p TCP --dport 9001 -m state --state NEW -j ACCEPT

Una vez que vea las iptables actuales, debería ver la nueva regla en el conjunto.

sudo iptables -L -v

Sustitución de reglas

La funcionalidad de reemplazo funciona de manera similar a insertar, sin embargo, usa el comando iptables -R. Por ejemplo, para modificar la regla anterior y configurar el puerto 9001 para denegar, nosotros:

sudo iptables -R INPUT 1 -p TCP --dport 9001 -m state --state NEW -j REJECT

Eliminación de una regla

Para eliminar una regla, le pasamos el número de regla. Por ejemplo, para eliminar la regla anterior, podemos especificar como:

sudo iptables -D INPUT 1

En la mayoría de las distribuciones de Linux, las iptables están vacías para IPv4 e IPv6. Por lo tanto, si no ha agregado ninguna regla nueva, obtendrá un resultado similar al que se muestra a continuación. Eso es arriesgado porque significa que el sistema permite todo el tráfico entrante, saliente y enrutado.

Veamos cómo configurar iptables:

¿Cómo configurar iptables?

Existen numerosas formas de configurar las reglas de iptables. Esta sección usa ejemplos para mostrarle cómo establecer reglas usando direcciones IP y puertos.

Bloqueando y Permitiendo el Tráfico por Puertos

Puede usar un puerto específico para bloquear o permitir todo el tráfico en una interfaz de red. Considere los siguientes ejemplos:

sudo iptables -A INPUT -j ACCEPT -p TCP --destination-port 1001 -i wlan0

Los comandos anteriores permiten el tráfico en el puerto 1001 TCP en la interfaz wlan0.

sudo iptables -A INPUT -j DROP -p TCP --destination-port 1001 -i wlan0

Este comando hace lo contrario del comando anterior, ya que bloquea todo el tráfico en el puerto 1001 en wlan0.

Aquí hay una inspección detallada del comando:

  • El primer argumento (-A) agrega una nueva regla al final de la cadena de tablas.

  • El argumento INPUT agrega la regla especificada a la tabla.

  • El argumento DROP establece la acción a realizar como ACCEPT y DROP, respectivamente. Esto significa que una vez que se empareja un paquete, se descarta.

  • -p especifica el protocolo como TCP y permite que pase el tráfico en otros protocolos.

  • –destination-port establece la regla para aceptar o descartar todo el tráfico destinado al puerto 1001.

  • -i le dice a iptables que aplique la regla al tráfico que llega a la interfaz wlan0.

NOTA: Iptables no entiende los alias de la interfaz de red. Por lo tanto, en un sistema con más de una interfaz virtual, deberá definir la dirección de destino de forma manual y explícita.

Por ejemplo:

sudo iptables -A INPUT -j DROP -p TCP --destination-port 1001 -i wlan0 -d 192.168.0.24

Lista blanca y lista negra de direcciones IP

Puede crear reglas de firewall usando iptables. Un ejemplo es detener todo el tráfico y permitir el tráfico de red solo desde direcciones IP explícitas.

Ejemplo :

iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A INPUT -i lo -m comment --comment "Allow loopback connections" -j ACCEPT
iptables -A INPUT -p icmp -m comment --comment “Allow Ping to work as expected” -j

ACEPTAR

iptables -A INPUT -s 192.168.0.1/24 -j ACCEPT
iptables -A INPUT -s 192.168.0.0 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

La primera línea establece una regla para permitir todas las direcciones IP de origen en la subred 192.168.0.1/24. También puede usar CIDR o direcciones IP individuales. En el siguiente comando, configuramos la regla para permitir todo el tráfico conectado a las conexiones existentes. En los comandos finales, establecemos una política para INPUT y FORWARD para descartar todo.

Usando iptables en IPv6

El comando iptables solo funciona en IPv4. Para usar iptables en IPv6, debe usar el comando ip6tables. Ip6tables utiliza tablas raw, filter, security y mangle. La sintaxis general de ip6tables es similar a la de iptables, y también admite opciones de coincidencia de iptables como agregar, eliminar, etc.

Considere usar las páginas del manual de ip6tables para obtener más información.

Ejemplo de conjuntos de reglas de iptables para la seguridad de la red

La creación de reglas de firewall adecuadas dependerá principalmente del servicio que se ejecuta en un sistema y los puertos en uso. Sin embargo, aquí hay algunas reglas básicas de configuración de red que puede usar para proteger su sistema:

1: permitir el tráfico de la interfaz de bucle invertido y rechazar todo el bucle invertido procedente de otras interfaces

iptables -A INPUT -i lo -j ACCEPT (You can also use ip6tables)
iptables -A INPUT ! -i lo -s 127.0.0.0 -j REJECT (ip6tables also applicable)

2: Denegar todas las solicitudes de ping

iptables -A INPUT -p icmp -m state --state NEW --icmp-type 8 -j REJECT

3: Permitir conexiones SSH

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

Estos son comandos de ejemplo que puede usar para proteger su sistema. Sin embargo, la configuración dependerá en gran medida de qué o quién desea acceder a varios servicios.

PRECAUCIÓN: si prefiere deshabilitar IPv6 por completo, asegúrese de descomentar la línea, ya que esto ralentizará el proceso de actualización:

precedence ::ffff:0:0/96 100 found in /etc/gai.conf .

Esto se debe a que el administrador de paquetes APT resuelve el dominio espejo en IPv6 debido a la actualización de apt-get.

¿Cómo implementar las reglas de iptables?

Para implementar sus iptables en Ubuntu u otros sistemas basados en Debian, comience creando dos archivos, ip4 e ip6, para sus respectivas direcciones IP.

En cualquiera de los archivos, agregue las reglas que desea aplicar en sus archivos correspondientes: reglas IPv4 en el archivo ip4 y reglas IPv6 en el archivo ip6.

A continuación, necesitamos importar las reglas usando el comando:

sudo iptables-restore < /tmp/ip4 (replace filename for IPv6)

Luego, puede verificar si las reglas se han aplicado usando el comando:

sudo iptables -L -v

Una guía rápida persistente de iptables

Ubuntu, y las distribuciones comunes basadas en Debian, vienen con un paquete persistente de iptables que le permite aplicar sus reglas de firewall fácilmente al reiniciar. El paquete proporciona archivos que puede usar para establecer reglas para IPv4 o IPv6 y puede aplicarse automáticamente al arrancar.

También puede usar reglas de firewall usando UFW o GUFW. Considere el siguiente tutorial para aprender a usar UFW.

¿Cómo instalar iptables-persistente?

Asegúrese de tener instalado iptables-persistent en su sistema. Use dpkg para verificar si tiene el paquete instalado.

Si no, utilice el siguiente comando:

sudo apt-get install iptables-persistent

Se le pedirá dos veces que guarde sus reglas actuales de IPv4 e IPv6. Haga clic en Sí para guardar ambas reglas.

Haga clic en sí para guardar IPv6.

Una vez que se complete la instalación, verifique que tenga el subdirectorio iptables, como se muestra en la imagen a continuación.

Conclusión

En este tutorial, hemos cubierto los conceptos básicos de iptables. Comenzando con trabajar con iptables, comandos básicos, tablas de iptables predeterminadas y parámetros.

Por lo que ha aprendido, debería estar en condiciones de usar iptables para crear reglas de firewall que ayuden a proteger su sistema.