Configuración de firewall en Linux: guía práctica paso a paso

configuracion-de-firewall-en-linux
configuracion-de-firewall-en-linux

La configuración de firewall en Linux es una tarea fundamental para controlar el tráfico de red y proteger el sistema frente a accesos no autorizados. Mediante herramientas como UFW, Firewalld o iptables, puedes permitir únicamente las conexiones necesarias, bloquear puertos y definir reglas específicas según cada servicio. En esta guía aprenderás a configurar un firewall paso a paso y a comprobar que sus reglas funcionan correctamente.

La configuración de firewall en Linux es especialmente importante cuando el equipo está conectado a Internet, funciona como servidor, aloja una web, permite acceso por SSH o ejecuta servicios internos que no deberían estar disponibles para cualquiera.

La idea central es sencilla: permitir solo lo necesario y denegar el resto.

👉 Y recuerda, si quieres aprender más de Linux, pincha en este curso de Linux gratis

👉 También te dejo por aquí una guía de comandos Linux por categorías

Qué es un firewall y qué problema resuelve

Un firewall filtra conexiones de red según reglas. Esas reglas pueden tener en cuenta el puerto, el protocolo, la interfaz de red, la dirección IP de origen o destino y el sentido del tráfico.

Por ejemplo, un servidor web normalmente necesita aceptar conexiones en:

  • 80/tcp para HTTP.
  • 443/tcp para HTTPS.
  • 22/tcp para SSH, aunque lo ideal es limitarlo si es posible.

Pero ese mismo servidor no debería aceptar conexiones externas a una base de datos local, a un panel interno o a servicios de administración que solo deberían estar disponibles desde la propia máquina o desde una red privada.

El firewall en Linux no sustituye otras medidas de seguridad. No arregla contraseñas débiles, aplicaciones vulnerables ni servicios mal configurados. Lo que sí hace es reducir superficie de exposición: si un servicio no necesita recibir tráfico desde fuera, el firewall puede impedir que ese servicio sea accesible.

La estrategia recomendada: denegar por defecto y permitir lo necesario

Una configuración prudente parte de una política clara:

  • Denegar por defecto el tráfico entrante.
  • Permitir solo los servicios que realmente deben recibir conexiones.
  • Mantener permitido el tráfico saliente salvo que exista una razón concreta para restringirlo.

El tráfico entrante es el que llega desde otra máquina hacia tu sistema. Aquí es donde suele estar el mayor riesgo en servidores conectados a Internet.

El tráfico saliente es el que inicia tu propio sistema hacia fuera. Por ejemplo, cuando el servidor descarga actualizaciones, consulta DNS, conecta con una API externa o obtiene certificados TLS. En muchos servidores pequeños se deja permitido por defecto porque bloquearlo exige conocer muy bien todas las dependencias del sistema.

Una regla práctica:

  • Si no sabes por qué un puerto debe estar abierto, no lo abras.
  • Si un servicio solo se usa localmente, no lo expongas a la red.
  • Si un servicio administrativo debe estar accesible, limita quién puede acceder.

Antes de tocar el firewall: inventario mínimo

Antes de ejecutar comandos conviene responder unas preguntas:

  1. ¿Cómo accedo al servidor ahora mismo?
  2. ¿Uso SSH? ¿En qué puerto?
  3. ¿Desde qué IP o red necesito administrar el sistema?
  4. ¿Qué servicios públicos ofrece la máquina?
  5. ¿Qué servicios existen pero no deberían ser públicos?

Puedes revisar puertos en escucha con:

ss -tulpn

La salida muestra procesos que están escuchando conexiones. No todo lo que aparece ahí está necesariamente expuesto a Internet, porque puede estar ligado a 127.0.0.1 o a una interfaz privada, pero es un buen punto de partida.

También puedes revisar la IP local y las interfaces:

ip addr

Esta comprobación evita abrir reglas por costumbre. Lo correcto es configurar el firewall según los servicios reales del sistema.

No bloquear tu propio acceso SSH

El error más peligroso al configurar un firewall en Linux, es activar una política restrictiva sin permitir antes el acceso SSH. Si estás conectado por SSH y bloqueas el puerto equivocado, puedes quedarte fuera.

Antes de activar reglas restrictivas, confirma el puerto de SSH:

sudo ss -tulpn | grep ssh

En muchas instalaciones SSH usa 22/tcp, pero no lo des por hecho si el servidor ya estaba configurado.

Si usas UFW, permite SSH antes de activar el firewall:

sudo ufw allow OpenSSH

O, si necesitas indicar el puerto de forma explícita:

sudo ufw allow 22/tcp

Si tu IP pública es fija, es mejor limitar SSH a esa IP:

sudo ufw allow from TU_IP_PUBLICA to any port 22 proto tcp

Sustituye TU_IP_PUBLICA por la dirección real desde la que administras el servidor. Esta regla es más segura que abrir SSH para todo Internet.

Una buena práctica cuando trabajas en remoto es mantener abierta la sesión SSH actual mientras pruebas una segunda conexión en otra terminal. No cierres la sesión original hasta confirmar que puedes volver a entrar.

Configuración básica con UFW

UFW es una capa sencilla para gestionar reglas de firewall en Linux. Es habitual en Ubuntu y distribuciones derivadas. Su ventaja es que permite aplicar una política razonable sin escribir reglas complejas.

Instalación en sistemas basados en Debian o Ubuntu:

sudo apt update
sudo apt install ufw

Una configuración base para un servidor web con SSH sería:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Este conjunto hace lo siguiente:

  • Bloquea conexiones entrantes que no tengan una regla explícita.
  • Permite conexiones salientes iniciadas por el servidor.
  • Permite SSH.
  • Permite tráfico web HTTP y HTTPS.
  • Activa el firewall.

Para ver el estado:

sudo ufw status verbose

Para ver reglas numeradas:

sudo ufw status numbered

Las reglas numeradas son útiles cuando necesitas eliminar una entrada concreta:

sudo ufw delete NUMERO_DE_REGLA

No elimines reglas a ciegas. Revisa primero qué regla corresponde a cada número, porque el orden puede cambiar después de borrar una.

Abrir HTTP y HTTPS correctamente

Para una web pública, los puertos habituales son:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

El puerto 80 permite HTTP. Aunque uses HTTPS, muchas configuraciones lo necesitan para redirigir automáticamente a HTTPS o para emitir certificados con Let’s Encrypt mediante validación HTTP.

El puerto 443 permite HTTPS, que debería ser el acceso principal para usuarios reales.

No abras puertos adicionales porque «quizá hagan falta». Por ejemplo, una base de datos como MySQL, MariaDB o PostgreSQL normalmente no debería estar abierta a Internet en un servidor web simple. Si la aplicación corre en la misma máquina, la base de datos puede escuchar solo en localhost.

Limitar reglas por IP

Una regla abierta a todo el mundo es cómoda, pero no siempre necesaria. Para servicios de administración, limitar por IP reduce mucho el riesgo.

Con UFW, puedes permitir un puerto solo desde una IP:

sudo ufw allow from 203.0.113.10 to any port 22 proto tcp

También puedes permitir una red completa:

sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp

Esto tiene sentido en redes internas o VPN. Si administras el servidor desde una IP dinámica, esta estrategia puede ser incómoda, porque tu IP cambiará y tendrás que actualizar la regla.

En ese caso, puedes combinar firewall con otras medidas: claves SSH, desactivar acceso por contraseña, usuarios limitados y herramientas de protección contra fuerza bruta.

Configuración básica con firewalld

firewalld es común en Fedora, CentOS, Rocky Linux, AlmaLinux y otras distribuciones de la familia Red Hat. Funciona con zonas, que representan niveles de confianza para interfaces o redes.

Para comprobar el estado:

sudo firewall-cmd --state

Para ver la zona por defecto:

sudo firewall-cmd --get-default-zone

Para ver reglas activas:

sudo firewall-cmd --list-all

Una configuración básica para permitir SSH, HTTP y HTTPS en la zona por defecto sería:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

La opción –permanent guarda la regla para que sobreviva a reinicios o recargas. El comando –reload aplica los cambios permanentes.

Si necesitas abrir un puerto concreto:

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

Pero antes de abrir puertos manuales, pregunta si ese servicio debe ser público o si puede quedar detrás de un proxy, una VPN o una regla limitada por IP.

Zonas en firewalld sin complicarse demasiado

Las zonas permiten tratar redes de forma distinta. Por ejemplo:

  • Una interfaz pública puede usar una zona restrictiva.
  • Una red privada puede tener más permisos.
  • Una interfaz de confianza puede permitir servicios internos.

Para un servidor sencillo, muchas veces basta con usar la zona por defecto y mantener reglas mínimas. Las zonas se vuelven más útiles cuando el sistema tiene varias interfaces o participa en redes con distintos niveles de confianza.

Puedes ver las zonas disponibles con:

sudo firewall-cmd --get-zones

Y revisar la zona activa:

sudo firewall-cmd --get-active-zones

No hace falta convertir una configuración simple en una arquitectura compleja. Si solo tienes una interfaz pública y pocos servicios, una zona bien configurada puede ser suficiente.

nftables, iptables y el contexto actual

Linux ha tenido varias formas de gestionar filtrado de paquetes. Durante años, iptables fue la herramienta más conocida. En sistemas modernos, nftables es el reemplazo principal a bajo nivel.

UFW y firewalld suelen actuar como herramientas de alto nivel. Por debajo, según la distribución y versión, pueden apoyarse en nftables o en compatibilidad con iptables.

Para la mayoría de administradores, no hace falta escribir reglas nftables desde cero en un servidor simple. Es más importante entender la política de seguridad y usar bien la herramienta de la distribución.

El riesgo de mezclar herramientas es real. Si configuras reglas manuales con iptables o nftables y además usas UFW o firewalld, puedes terminar con un estado difícil de entender.

Recomendación práctica para la configuración de firewall en Linux:

  • Elige una herramienta principal.
  • Usa UFW en sistemas donde encaje bien, como Ubuntu.
  • Usa firewalld en distribuciones donde sea el estándar.
  • Evita mezclar reglas manuales salvo que sepas exactamente cómo interactúan.

Comprobar reglas activas

Después de configurar el firewall, no basta con asumir que todo está bien. Hay que comprobarlo.

Con UFW:

sudo ufw status verbose

Con firewalld:

sudo firewall-cmd --list-all

También puedes revisar puertos en escucha desde el propio servidor:

ss -tulpn

Esta comprobación responde a una pregunta interna: qué servicios están escuchando.

Pero hay otra pregunta igual de importante: qué puede alcanzar una máquina externa. Para eso conviene probar desde fuera del servidor, por ejemplo desde tu equipo local o desde otra máquina.

Una prueba básica de conectividad:

curl -I http://TU_DOMINIO_O_IP
curl -I https://TU_DOMINIO_O_IP

Para SSH:

ssh usuario@TU_SERVIDOR

Si un servicio debería estar cerrado, también conviene comprobar que no responde desde fuera. No pruebes solo lo que quieres permitir; prueba también lo que quieres bloquear.

Persistencia de reglas

Un firewall que funciona hasta el siguiente reinicio no está bien terminado.

UFW guarda sus reglas de forma persistente cuando se usa su interfaz normal. Puedes comprobar si está activo con:

sudo ufw status

En firewalld, recuerda que las reglas temporales y permanentes no son lo mismo. Si añades una regla sin –permanent, puede perderse tras una recarga o reinicio.

Ejemplo permanente:

sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Una buena verificación después de reiniciar el servidor es:

sudo systemctl status ufw

Conclusión

Una correcta configuración de firewall en Linux permite reducir la superficie de ataque y mantener bajo control las conexiones entrantes y salientes. Sin embargo, antes de aplicar nuevas reglas, conviene comprobar qué puertos y servicios necesita realmente el sistema para evitar bloqueos accidentales. Además, revisar periódicamente la configuración ayuda a mantener una política de seguridad clara, actualizada y adaptada al entorno.

UFW facilita este trabajo en sistemas como Ubuntu. firewalld encaja muy bien en distribuciones de la familia Red Hat. nftables e iptables forman parte del contexto técnico, pero no siempre es necesario gestionarlos directamente para tener una configuración segura y mantenible.

Lo importante para una buena configuración de firewall en Linux es no tratar el firewall como un trámite. Revisa servicios, abre solo lo imprescindible, protege SSH, comprueba las reglas, prueba desde fuera y asegúrate de que todo persiste tras reiniciar. Con esa base, el servidor queda mucho menos expuesto y la administración diaria sigue siendo sencilla.

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *