Saltar al contenido

Firewall en un VPS con iptables: configuración que no te deja fuera

7 min de lectura Infraestructura
  • iptables
  • firewall
  • vps
  • seguridad
  • linux

Un firewall es la primera línea de defensa de cualquier servidor. En un VPS con Linux, iptables es la herramienta por defecto para gestionarlo, y dominarla es necesario para la seguridad. Si lo configuras mal, puedes quedarte fuera del servidor o, peor, dejarlo expuesto a ataques.

Mi regla es clara: un VPS sin un firewall bien configurado es un objetivo fácil. No se trata solo de bloquear puertos, sino de entender cómo funcionan las cadenas y las políticas para construir una defensa robusta sin complicaciones innecesarias.

Entendiendo iptables: la base del firewall en Linux

iptables es la utilidad de línea de comandos que interactúa con el framework de filtrado de paquetes del kernel de Linux, netfilter. Este framework decide qué hacer con cada paquete de red que entra o sale de tu servidor. No es un servicio que se activa o desactiva; es parte del kernel.

Se basa en reglas agrupadas en cadenas. Las tres cadenas principales para el tráfico que entra y sale son INPUT, OUTPUT y FORWARD. Cuando un paquete llega, pasa por estas cadenas y se aplican las reglas en orden.

Cada cadena tiene una política por defecto: ACCEPT (aceptar todo) o DROP (descartar todo sin notificar al origen). La política por defecto de DROP es la más segura, pero requiere que definas explícitamente qué tráfico permites.

Reglas básicas de iptables para un VPS seguro

La configuración inicial debe permitir el tráfico esencial para la administración y el funcionamiento de tus aplicaciones. Esto incluye SSH, HTTP/HTTPS y el tráfico de respuesta para conexiones salientes.

Primero, vaciamos todas las reglas existentes y configuramos las políticas por defecto a DROP. Esto asegura que empezamos de cero con la máxima seguridad.

# Vaciar todas las reglas y tablas
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X

# Establecer política por defecto a DROP
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

Después, añadimos las reglas para permitir el tráfico necesario.

# Permitir tráfico loopback (esencial para el sistema)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# Permitir conexiones ya establecidas y relacionadas
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Permitir SSH (puerto 22, o el que uses)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Permitir HTTP y HTTPS (puertos 80 y 443)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Permitir ping (ICMP)
sudo iptables -A INPUT -p icmp -j ACCEPT

Esto es un punto de partida. Si utilizas otros servicios como un servidor de base de datos o un panel de control, deberás añadir reglas específicas para sus puertos. Para un control más granular del acceso SSH, puedes combinarlo con herramientas como Fail2Ban para proteger tu VPS de ataques de fuerza bruta.

Persistencia de las reglas: no pierdas tu configuración

Las reglas de iptables se almacenan en la memoria RAM. Si reinicias el servidor, las perderás. Para que persistan, necesitas un mecanismo que las cargue al inicio del sistema. En sistemas basados en Debian/Ubuntu, iptables-persistent es la opción más común.

Instalación y guardado:

sudo apt update
sudo apt install iptables-persistent

# Guardar las reglas actuales
sudo netfilter-persistent save

Si necesitas modificar las reglas en el futuro, las editas con iptables -A o iptables -D (para añadir o borrar), y luego vuelves a ejecutar sudo netfilter-persistent save. Esto reescribirá el archivo de configuración con los cambios.

El tradeoff: control granular vs. complejidad

Configurar iptables directamente te da un control absoluto sobre cada paquete, pero tiene sus inconvenientes.

Lo que ganas:

  • Control total: Decides exactamente qué tráfico entra y sale de tu servidor, a nivel de protocolo, puerto y dirección IP.
  • Rendimiento: iptables opera a nivel de kernel, lo que lo hace extremadamente eficiente y rápido.
  • Estabilidad: Es una tecnología madura y probada, fundamental en cualquier sistema Linux.

Lo que complicas:

  • Curva de aprendizaje: La sintaxis es potente pero puede ser confusa al principio, especialmente con cadenas y módulos avanzados.
  • Riesgo de bloqueo: Un error en una regla puede dejarte fuera del servidor o bloquear servicios esenciales. Siempre prueba en un entorno controlado.
  • Gestión: Para entornos complejos o con muchas reglas dinámicas, la gestión manual puede volverse tediosa y propensa a errores. Para casos más sencillos, herramientas como UFW simplifican mucho la gestión del firewall en un VPS.

Si el objetivo es tener un servidor seguro y accesible, entender iptables es un paso fundamental. Mi recomendación es empezar con lo básico y añadir reglas conforme lo necesites.

Para ir un paso más allá en la seguridad y el acceso a tu VPS, considera implementar una solución como Cloudflare Tunnel para eliminar la exposición de puertos SSH. Y si gestionas más de un VPS, te interesa tener una estrategia sólida de backups automáticos con rsync para evitar desastres.

Lucas Juárez
Lucas Juárez

Técnico freelance especializado en desarrollo a medida, automatizaciones con IA y gestión técnica para negocios en España. Más sobre mí →

Compartir:

¿Necesitas que alguien se ocupe de tu web?

Me encargo de que tu web funcione, esté segura y actualizada. Backups, actualizaciones y soporte directo. Planes desde 49 €/mes.

Chat