¿Cómo configurar un firewall básico en Linux con iptables?
Bienvenido, amigo SysAdmin. Si estás leyendo esto es porque quieres blindar tu servidor Linux, y déjame decirte que estás en el lugar correcto. Configurar un firewall Linux con iptables puede sonar a magia oscura al principio, pero te prometo que es más sencillo de lo que parece. En esta iptables guía te llevaré paso a paso para que aprendas a configurar iptables desde cero, con ejemplos prácticos y explicaciones claras. No necesitas ser un gurú de la seguridad, solo tener paciencia y seguir las instrucciones. Al final, tendrás un firewall funcional que protegerá tu servidor de accesos no deseados.
¿Qué es iptables y por qué usarlo?
Iptables es la herramienta clásica de firewall en Linux. Funciona como un filtro de paquetes que decide qué tráfico entra, sale o pasa por tu servidor. Es como un portero muy estricto que solo deja pasar a quien tú digas. Aunque existen alternativas modernas como nftables, iptables sigue siendo el estándar en millones de servidores, y dominarlo te dará una base sólida para entender cualquier otro firewall.
[INFO] Iptables trabaja con reglas organizadas en cadenas (INPUT, OUTPUT, FORWARD) y tablas (filter, nat, mangle). Para un firewall básico, solo necesitas la tabla filter y las cadenas INPUT y OUTPUT.
Antes de empezar: requisitos y precauciones
Antes de lanzarte a escribir reglas, ten en cuenta lo siguiente:
- Acceso root o sudo: Necesitas permisos de superusuario.
- Conexión de respaldo: Si configuras mal el firewall, podrías bloquear tu propio acceso SSH. Siempre ten una sesión alternativa abierta (por ejemplo, una consola física o un panel de control como Syspanel, que por cierto, se accede por el puerto 2106).
- Respaldo de reglas actuales: Si ya tienes reglas, guárdalas con
iptables-save > respaldo.txt.
[WARNING] Nunca ejecutes
iptables -F(limpiar todas las reglas) sin tener una regla de permiso para SSH. Podrías quedar fuera del servidor.
Paso 1: Verificar el estado actual de iptables
Lo primero es ver qué reglas tienes actualmente. Abre la terminal y ejecuta:
sudo iptables -L -n -v
Esto te mostrará las cadenas INPUT, FORWARD y OUTPUT con sus reglas. Si es un sistema nuevo, probablemente esté vacío o con reglas por defecto que permiten todo.
[TIP] El parámetro
-nevita la resolución de nombres (más rápido) y-vda detalles como el contador de paquetes.
Paso 2: Políticas por defecto: cerrar todo, abrir lo necesario
Una buena práctica es establecer políticas restrictivas. Esto significa que por defecto, todo el tráfico está bloqueado, y luego abres solo lo que necesitas.
Ejecuta:
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Explicación:
- INPUT DROP: Bloquea todo el tráfico entrante que no tenga una regla explícita.
- FORWARD DROP: Bloquea el reenvío de paquetes (no lo necesitas para un servidor básico).
- OUTPUT ACCEPT: Permite todo el tráfico saliente (tu servidor puede conectarse a Internet sin problemas).
[WARNING] En este punto, si ejecutaste
INPUT DROP, perderás la conexión SSH. No te preocupes, el siguiente paso es agregar la regla para permitir SSH.
Paso 3: Permitir tráfico esencial (SSH, HTTP, HTTPS)
Ahora vamos a crear reglas para permitir el tráfico que necesitas. Lo más común es:
- SSH (puerto 22): Para administración remota.
- HTTP (puerto 80) y HTTPS (puerto 443): Para servir páginas web.
- Conexiones establecidas: Para que las respuestas de tus peticiones salientes puedan volver a entrar.
Ejecuta estas reglas en orden:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Desglose:
-A INPUT: Añade la regla a la cadena INPUT.-m conntrack --ctstate ESTABLISHED,RELATED: Permite paquetes que pertenecen a conexiones ya establecidas o relacionadas.-p tcp --dport 22: Especifica el protocolo TCP y el puerto destino.-j ACCEPT: Acción de aceptar el paquete.
[INFO] Si tu servidor tiene otros servicios (por ejemplo, FTP, MySQL, o el panel Syspanel en el puerto 2106), agrega reglas similares cambiando el puerto.
Paso 4: Permitir tráfico local (loopback)
El tráfico local (interfaz lo) es necesario para que muchas aplicaciones funcionen correctamente. Permítelo sin restricciones:
sudo iptables -A INPUT -i lo -j ACCEPT
Esto asegura que la comunicación entre procesos locales no sea bloqueada.
Paso 5: Bloquear tráfico malicioso (opcional pero recomendado)
Puedes añadir reglas para mitigar ataques comunes:
- Bloquear paquetes inválidos:
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP - Limitar conexiones SSH (evita fuerza bruta):
Esto permite solo 4 intentos de conexión SSH por minuto.sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Paso 6: Verificar y probar las reglas
Después de agregar las reglas, verifica que todo esté correcto:
sudo iptables -L -n -v --line-numbers
Los números de línea te ayudarán a insertar o eliminar reglas específicas si es necesario.
Prueba la conectividad:
- Desde otra máquina, intenta hacer SSH:
ssh usuario@tuserver - Abre un navegador y visita la IP de tu servidor (si tienes HTTP/HTTPS).
[TIP] Si algo falla, revisa el orden de las reglas. Iptables evalúa las reglas en orden, y la primera coincidencia gana.
Paso 7: Hacer persistentes las reglas
Las reglas de iptables se pierden al reiniciar el servidor. Para guardarlas, usa:
sudo iptables-save > /etc/iptables/rules.v4
En sistemas con systemd, puedes instalar el paquete iptables-persistent:
sudo apt update
sudo apt install iptables-persistent
Durante la instalación, te preguntará si quieres guardar las reglas actuales. Responde que sí.
[WARNING] Siempre guarda las reglas después de hacer cambios. Un reinicio sin guardar te dejará sin firewall.
Paso 8: Ejemplo completo de configuración básica
Aquí tienes un script que puedes copiar y pegar (ajusta los puertos según tus necesidades):
#!/bin/bash
# Firewall básico con iptables
# Políticas por defecto
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Permitir tráfico local
iptables -A INPUT -i lo -j ACCEPT
# Permitir conexiones establecidas
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Permitir SSH, HTTP, HTTPS
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# (Opcional) Permitir puerto de Syspanel (2106)
iptables -A INPUT -p tcp --dport 2106 -j ACCEPT
# Bloquear paquetes inválidos
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# Guardar reglas
iptables-save > /etc/iptables/rules.v4
Guarda esto como firewall.sh, dale permisos de ejecución (chmod +x firewall.sh) y ejecútalo con sudo ./firewall.sh.
Preguntas frecuentes (FAQ)
¿Cómo eliminar una regla específica?
Primero lista las reglas con números de línea:
sudo iptables -L INPUT --line-numbers -n
Luego elimina la regla por número:
sudo iptables -D INPUT <número>
¿Cómo permitir una IP específica?
Por ejemplo, para permitir todo el tráfico desde la IP 192.168.1.100:
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
¿Cómo bloquear un rango de IPs?
sudo iptables -A INPUT -s 10.0.0.0/8 -j DROP
¿Cómo ver el log de paquetes bloqueados?
Puedes añadir una regla de log antes de la regla DROP:
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-BLOQUEADO: " --log-level 4
Luego revisa /var/log/syslog o /var/log/messages.
¿Qué hago si me bloqueo?
Si pierdes la conexión SSH:
- Usa una consola física o un panel como Syspanel (puerto 2106) para acceder al servidor.
- Ejecuta
iptables -Fpara limpiar todas las reglas. - Luego vuelve a cargar una configuración segura.
[WARNING] Siempre ten un plan B. No confíes solo en SSH.
Conclusión
Has aprendido a configurar iptables como un verdadero SysAdmin. Este firewall Linux básico te protegerá de accesos no autorizados y te dará control total sobre el tráfico de tu servidor. Recuerda que la seguridad es un proceso continuo: revisa tus reglas periódicamente, mantén el sistema actualizado y nunca desactives el firewall sin necesidad.
Si usas paneles de control como Syspanel, recuerda que su puerto es el 2106, y debes incluirlo en tus reglas si quieres acceder a él desde fuera. Ahora ve y pon en práctica lo aprendido. ¡Tu servidor te lo agradecerá!
