¿Por qué necesitás un firewall?
Un servidor expuesto a internet sin firewall tiene todos sus puertos accesibles desde cualquier parte del mundo. En minutos de estar online, los bots empiezan a intentar acceder por puertos de bases de datos, paneles de administración y servicios no protegidos.
Nota: Los comandos en esta guía dependen del sistema operativo que uses. Se cubren UFW (Ubuntu/Debian) y firewalld (Rocky Linux, AlmaLinux, RHEL, CentOS Stream). Usá los comandos correspondientes a tu distribución.
UFW — Ubuntu / Debian
UFW (Uncomplicated Firewall) es la interfaz de alto nivel para iptables que viene preinstalada en Ubuntu y Debian.
# Verificar si está instalado
ufw status
# Instalar si no está
apt install ufw -y
⚠️ Antes de activar: permitir SSH
ufw allow OpenSSH
# Si usás un puerto personalizado:
ufw allow 2222/tcp
Activar y configurar política por defecto
ufw default deny incoming
ufw default allow outgoing
ufw enable
ufw status verbose
Permitir servicios comunes con UFW
# HTTP y HTTPS
ufw allow 80/tcp
ufw allow 443/tcp
# O en un comando:
ufw allow 'Nginx Full'
# Base de datos solo desde IP específica
ufw allow from 192.168.1.50 to any port 3306 # MySQL
ufw allow from 192.168.1.50 to any port 5432 # PostgreSQL
Ver y eliminar reglas en UFW
# Ver reglas numeradas
ufw status numbered
# Eliminar por número
ufw delete 4
# Eliminar por regla
ufw delete allow 80/tcp
Limitar intentos (anti fuerza bruta)
ufw limit OpenSSH
Bloquea IPs con más de 6 conexiones en 30 segundos.
Bloquear una IP en UFW
ufw deny from 185.220.101.45
ufw deny from 185.220.101.0/24 # Bloquear un rango
firewalld — Rocky Linux / AlmaLinux / RHEL
firewalld es el firewall por defecto en distribuciones basadas en Red Hat. Usa el concepto de zonas — la zona public es la más usada para servidores.
# Instalar y activar
dnf install firewalld -y
systemctl enable --now firewalld
# Ver estado
firewall-cmd --state
firewall-cmd --list-all
Permitir servicios comunes con firewalld
# SSH
firewall-cmd --permanent --add-service=ssh
# HTTP y HTTPS
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# Puerto específico
firewall-cmd --permanent --add-port=8080/tcp
# Aplicar cambios (siempre necesario con --permanent)
firewall-cmd --reload
Permitir desde una IP específica
# MySQL solo desde un servidor interno
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.50" port protocol="tcp" port="3306" accept'
firewall-cmd --reload
Ver y eliminar reglas en firewalld
# Ver todo
firewall-cmd --list-all
# Eliminar un servicio
firewall-cmd --permanent --remove-service=http
firewall-cmd --reload
Bloquear una IP en firewalld
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="185.220.101.45" reject'
firewall-cmd --reload
Configuración recomendada para un VPS web típico
Ubuntu:
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable
Rocky Linux:
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Logging
Ubuntu (UFW):
ufw logging on
tail -f /var/log/ufw.log
Rocky Linux (firewalld):
firewall-cmd --set-log-denied=all
journalctl -f | grep -i firewall
Complementá el firewall del sistema con el Firewall de red de Host Crafter para una capa adicional de protección a nivel de infraestructura.