Introducción
En el mundo de la administración de servidores y redes, la seguridad es uno de los pilares más importantes. iptables es una herramienta esencial para cualquier administrador de sistemas Linux, ya que permite gestionar el tráfico de red mediante la creación de reglas de firewall personalizadas. Ya sea que desees permitir, bloquear o redirigir el tráfico a través de tu red, iptables ofrece un control detallado y poderoso.
En este artículo, aprenderás qué es iptables, cómo funciona y cómo puedes usarlo para proteger tu sistema.
¿Qué es iptables?
Iptables es una utilidad de línea de comandos que permite definir reglas para filtrar el tráfico de red en sistemas operativos Linux. Estas reglas se aplican a diferentes tablas, cada una con un propósito específico, permitiendo un control detallado del tráfico entrante y saliente.
Algunas de las características principales de iptables son:
- Control del tráfico entrante y saliente.
- Redirección y NAT (Network Address Translation).
- Gestión de diferentes tipos de tráfico (TCP, UDP, ICMP).
- Bloqueo de IPs o rangos de IPs específicos.
En el diagrama a continuación se muestra cómo puedes tener distribuido una red de ejemplo y algunas reglas que podemos configurar.
Básicamente el diagrama muestra tres interfaces, red interna (ens192), red de aplicaciones web (ens224) y red externa (ens160).
Algunas reglas que vamos aplicar en el diagrama mostrado son las siguientes:
- Crear las reglas necesarias para que los equipos de la red interna y externa no tengan resultados al hacer uso del comando ping.
- Crear varias reglas para que los equipos de la red interna puedan salir a Internet y tener tráfico WEB (puertos 80/TCP y 443/TCP).
- Los usuarios de la red interna tengan acceso al servidor Web.
- Permitir el acceso al servidor FTP desde la red interna y denegar acceso desde la red externa al servicio.
- Los usuarios de la red interna puedan conectarse a través de SSH.
Desarrollo
Habilitar el reenvío de paquetes IPv4 permanentemente
Para hacer que esta configuración sea persistente y se mantenga activa después de reiniciar, necesitamos editar el archivo de configuración del sistema.
Abre el archivo
/etc/sysctl.conf
con un editor de texto (usandonano
o tu editor preferido):sudo nano /etc/sysctl.conf
Buscamos la siguiente línea (debería estar comentada con un
#
):# net.ipv4.ip_forward=1
Descomentamos esta línea eliminando el
#
al inicio:net.ipv4.ip_forward=1
Guardamos el archivo y cierra el editor (en
nano
, guarda presionandoCtrl + O
y luego sal conCtrl + X
).Para aplicar los cambios sin reiniciar el sistema, ejecutamos el siguiente comando:
sudo sysctl -p
Enrutamiento
El primero para que se puedan aplicar las reglas iptables es que las redes conozcan las rutas y puedan comunicarse correctamente a través de la máquina Ubuntu, se debe configurar las rutas en los dispositivos de cada red. Por ejemplo, las rutas en los dispositivos de las tres redes (10.10.10.0/24, 172.16.10.0/24 y 192.168.0.0/24) para que sepan cómo llegar a las otras redes a través de la máquina Ubuntu:
Red 10.10.10.0/24:
Se configura una ruta predeterminada en los dispositivos de esta red para que apunte a la IP de la interfaz ens192 de la máquina Ubuntu (10.10.10.10). De esta manera, los dispositivos de la red 10.10.10.0/24 sabrán que cualquier tráfico destinado a otras redes debe pasar por la máquina Ubuntu, se hace de la siguiente manera:
1 | sudo ip route add default via 10.10.10.10 |
Red 172.16.10.0/24:
Realiza un procedimiento similar en los dispositivos de esta red. Configura una ruta predeterminada para que apunte a la IP de la interfaz ens224 de la máquina Ubuntu (172.16.10.10), se hace de la siguiente manera:
1 | sudo ip route add default via 172.16.10.10 |
Red 192.168.0.0/24:
Configuramos una ruta predeterminada en los dispositivos de esta red para que apunte a la IP de la interfaz ens160 de la máquina Ubuntu (192.168.0.26).
Si deseamos que el tráfico hacia las redes 10.10.10.0
y 172.16.10.0
pase por la IP 192.168.0.26
de nuestra interfaz ens160
en Windows, los comandos serían:
1 2 | route add 10.10.10.0 mask 255.255.255.0 192.168.0.26 route add 172.16.10.0 mask 255.255.255.0 192.168.0.26 |
Para hacer las rutas permanentes (para que persistan después del reinicio):
Si deseamos que las rutas se mantengan después de reiniciar el dispositivo, utiliza el parámetro -p
para hacerlas permanentes antes del add.
Una vez aplicado el enrutamiento se verifica mediante pruebas de PING entre las redes, como se muestra en la siguiente imagen:
Aplicando reglas en el firewall
Aplicando las reglas para impedir que los equipos de la red interna y externa no tengan resultados al hacer uso del comando ping.
# Bloquear todo el tráfico ICMP (ping) entre la red interna (ens192) y externa
1 2 3 4 | sudo iptables -A FORWARD -i ens192 -o ens160 -p icmp -j DROP sudo iptables -A FORWARD -i ens160 -o ens192 -p icmp -j DROP sudo iptables -A FORWARD -i ens224 -o ens160 -p icmp -j DROP sudo iptables -A FORWARD -i ens160 -o ens224 -p icmp -j DROP |
Reglas para que los equipos de la red interna puedan salir a Internet y tener tráfico WEB (puertos 80/TCP y 443/TCP).
# Permitir tráfico web (HTTP, puerto 80/TCP y HTTPS 443) desde la red interna (ens192) a Internet (ens160)
1 2 3 | sudo iptables -A FORWARD -i ens224 -o ens160 -p tcp --dport 80 -j ACCEPT sudo iptables -A FORWARD -i ens224 -o ens160 -p tcp --dport 443 -j ACCEPT sudo iptables -A FORWARD -i ens160 -o ens224 -m state --state ESTABLISHED,RELATED -j ACCEPT |
Los usuarios de la red interna tengan acceso al servidor Web.
# Permitir tráfico web (HTTP, puerto 80/TCP y HTTPS 443) desde la red interna servidor web (ens224) a red interna cliente (ens192)
1 2 3 | sudo iptables -A FORWARD -i ens192 -o ens224 -p tcp --dport 80 -j ACCEPT sudo iptables -A FORWARD -i ens192 -o ens224 -p tcp --dport 443 -j ACCEPT sudo iptables -A FORWARD -i ens224 -o ens192 -m state --state ESTABLISHED,RELATED -j ACCEPT |
El acceso al servidor web, desde la red interna puede observarse en la siguiente imagen:
# Permitir FTP desde la red interna cliente (ens192) a servidor web (ens224) y bloqueo FTP desde la externa
1 2 3 | sudo iptables -A FORWARD -i ens192 -o ens224 -p tcp --dport 21 -j ACCEPT sudo iptables -A FORWARD -i ens160 -o ens224 -p tcp --dport 21 -j DROP sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT |
La conexión FTP a servidor con reglas y conexión aceptada desde cliente interno, puede observarse en la siguiente imagen:
Los usuarios de la red externa puedan conectarse a través de SSH, al igual que los de la red interna.
# Permitir SSH desde la red interna cliente (ens192) a servidor web (ens224)
1 2 | sudo iptables -A FORWARD -i ens192 -o ens224 -p tcp --dport 22 -j ACCEPT sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT |
La conexión ssh establecida desde red interna, puede observarse establecida en la siguiente imagen:
En resumen, iptables es una herramienta crucial para la gestión del tráfico de red en sistemas Linux. Desde su instalación hasta la configuración de reglas personalizadas para controlar el acceso a tu servidor, has aprendido cómo utilizar comandos clave para mejorar la seguridad de tu sistema.
Si bien este artículo cubre lo básico, iptables es increíblemente versátil. Te recomiendo seguir explorando la documentación oficial de iptables y experimentar con reglas más avanzadas.
¿Tienes alguna pregunta o te gustaría compartir tu experiencia configurando iptables? ¡Déjame un comentario!
La seguridad en sistemas Linux es un tema cada vez mas relevante, y herramientas como iptables nos brindan el control necesario para proteger nuestros servidores. Mantente siempre informado y actualizado para garantizar un entorno seguro y confiable.