El firewall es una de las herramientas esenciales para proteger servidores y dispositivos conectados a la red. En el caso de Ubuntu, existen diversas opciones para gestionar el filtrado de paquetes, siendo UFW (Uncomplicated Firewall) y IPTables las más utilizadas.
En este artículo, explicaremos cómo funcionan, cómo configurarlos y qué prácticas seguir para fortalecer la seguridad de un sistema basado en Ubuntu.
1. Netfilter e IPTables: El núcleo del firewall en Linux
El kernel de Linux incluye el subsistema Netfilter, encargado de gestionar el tráfico de red. Este sistema permite aceptar, modificar o rechazar paquetes en función de reglas establecidas por el usuario.
Para administrar estas reglas, se usa IPTables, que permite definir políticas de seguridad sobre los paquetes que entran, salen o transitan por un servidor. Aunque es potente, su configuración puede ser compleja, por lo que Ubuntu incluye UFW, una interfaz más sencilla para gestionar estas reglas sin necesidad de usar IPTables directamente.
2. UFW: Uncomplicated Firewall, la opción predeterminada en Ubuntu
UFW es una interfaz para IPTables diseñada para simplificar la gestión del firewall. Su objetivo es proporcionar una forma intuitiva de configurar reglas de filtrado de tráfico, ya sea para IPv4 o IPv6.
Activar y desactivar UFW
Por defecto, UFW está desactivado en Ubuntu. Para habilitarlo, se usa:
sudo ufw enable
Para desactivarlo:
sudo ufw disable
Abrir y cerrar puertos con UFW
Para permitir conexiones en un puerto específico, por ejemplo, el puerto 22 (SSH):
sudo ufw allow 22
Para cerrarlo:
sudo ufw deny 22
También es posible especificar el protocolo:
sudo ufw allow 22/tcp
sudo ufw allow 22/udp
Añadir y eliminar reglas
Para agregar una regla en una posición específica dentro de la lista de reglas:
sudo ufw insert 1 allow 80
Para eliminar una regla:
sudo ufw delete allow 80
Permitir acceso desde direcciones IP específicas
Si solo se desea permitir acceso SSH desde una IP concreta, como 192.168.0.2:
sudo ufw allow proto tcp from 192.168.0.2 to any port 22
Para permitir tráfico desde toda una subred:
sudo ufw allow from 192.168.0.0/24 to any port 22
Modo de prueba con –dry-run
Si quieres ver cómo quedarían las reglas antes de aplicarlas, puedes usar:
sudo ufw --dry-run allow http
Esto mostrará las reglas generadas sin aplicarlas.
Consultar el estado del firewall
Para ver el estado actual de UFW:
sudo ufw status
Para una vista más detallada:
sudo ufw status verbose
3. Uso de perfiles de aplicaciones en UFW
Algunas aplicaciones instalan perfiles en /etc/ufw/applications.d/, donde se especifican los puertos y protocolos que utilizan.
Para listar las aplicaciones con perfil de UFW:
sudo ufw app list
Para permitir tráfico a una aplicación específica:
sudo ufw allow "Apache Full"
También se puede restringir el acceso por IP:
sudo ufw allow from 192.168.0.0/24 to any app Samba
Para ver detalles de una aplicación específica:
sudo ufw app info "Apache Full"
4. IP Masquerading: Compartir conexión a Internet
El IP Masquerading permite que dispositivos en una red local accedan a Internet utilizando una única IP pública.
Para habilitarlo en Ubuntu con UFW:
- Habilitar el reenvío de paquetes en /etc/default/ufw:
DEFAULT_FORWARD_POLICY="ACCEPT"
- Editar /etc/ufw/sysctl.conf y descomentar:
net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1
- Configurar reglas en /etc/ufw/before.rules:
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Reenvío de tráfico a través de eth0
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# No eliminar la línea COMMIT o las reglas no se procesarán
COMMIT
- Reiniciar UFW:
sudo ufw disable && sudo ufw enable
5. Configuración avanzada con IPTables
Si prefieres usar IPTables en lugar de UFW, puedes habilitar IP Masquerading con:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
Para permitir el tráfico reenviado:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
Para que estas reglas persistan tras un reinicio, agrégalas a /etc/rc.local.
6. Configuración de logs en el firewall
Los logs permiten detectar intentos de acceso no autorizado y solucionar problemas de conectividad.
Para activar el registro en UFW:
sudo ufw logging on
Para desactivarlo:
sudo ufw logging off
En IPTables, puedes registrar conexiones en el puerto 80 con:
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "HTTP_CONN: "
Los registros se almacenan en /var/log/syslog o /var/log/kern.log.
7. Herramientas adicionales para gestionar el firewall
Si IPTables y UFW no son suficientes para tus necesidades, existen otras herramientas:
- Shorewall: Ideal para redes avanzadas con reglas personalizadas.
- Firewalld: Alternativa moderna a IPTables usada en distribuciones como Fedora.
- Fail2Ban: Protege el servidor bloqueando IPs sospechosas de ataques de fuerza bruta.
8. Recomendaciones finales
- Minimiza los servicios expuestos: Solo permite los puertos estrictamente necesarios.
- Usa listas blancas y negras: Restringe accesos a direcciones IP específicas.
- Habilita logs para auditar la actividad de la red.
- Prueba reglas antes de aplicarlas con
--dry-run
en UFW o agregando reglas temporales en IPTables.
Con estas configuraciones y prácticas recomendadas, puedes proteger eficazmente tu servidor Ubuntu contra accesos no autorizados y mantener un control seguro sobre el tráfico de red.