Capítulo 3 · 3.4
Un cortafuegos con ufw (o nftables)
En la red de WebOké, todo el tráfico entrante hacia su VPS está abierto. Usted decide qué entra mediante un cortafuegos en su servidor. Así permite solo lo necesario, como SSH y su sitio web.
Atención: Abra SSH antes de activar el cortafuegos. Si no lo hace, se quedará fuera. Si aun así ocurre, desactive el cortafuegos a través de la consola (consulte Sin acceso: ya no puede entrar en su servidor).
ufw en Debian y Ubuntu
ufw es una capa sencilla sobre el cortafuegos de Linux. En Ubuntu ya viene instalado; en Debian, instálelo así:
anna@web1:~$ sudo apt install ufw
anna@web1:~$ sudo ufw allow OpenSSH
anna@web1:~$ sudo ufw allow 80,443/tcp
anna@web1:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
anna@web1:~$ sudo ufw status verbose
Status: active
Default: deny (incoming), allow (outgoing), disabled (routed)
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80,443/tcp ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80,443/tcp (v6) ALLOW IN Anywhere (v6)
Todo lo que no permita se rechaza. Las reglas se aplican automáticamente también a IPv6. Los puertos 80 y 443 solo los necesita para un sitio web (capítulo 5). Si utiliza Caddy con HTTP/3, abra también sudo ufw allow 443/udp.
Comandos útiles de ufw
| Comando | ¿Qué hace? |
|---|---|
sudo ufw status numbered | Muestra las reglas con un número |
sudo ufw delete 3 | Elimina la regla 3 |
sudo ufw allow from 198.51.100.7 to any port 22 proto tcp | Abre un puerto solo para una dirección IP |
sudo ufw limit OpenSSH | Rechaza temporalmente una dirección que inicia 6 o más conexiones en 30 segundos |
sudo ufw disable | Desactiva el cortafuegos (por ejemplo, a través de la consola si se ha quedado fuera) |
Sin ufw: nftables
En Debian, nftables es el cortafuegos que funciona por debajo. Si no quiere usar ufw, escriba usted mismo las reglas en /etc/nftables.conf. Una base sencilla para IPv4 e IPv6 a la vez:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
iif "lo" accept
meta l4proto { icmp, ipv6-icmp } accept
tcp dport { 22, 80, 443 } accept
}
}
anna@web1:~$ sudo nft -c -f /etc/nftables.conf
anna@web1:~$ sudo systemctl enable --now nftables
Con nft -c compruebe primero el archivo. Utilice ufw o nftables, no ambos a la vez.
En AlmaLinux y Rocky Linux ya viene instalado firewalld: sudo firewall-cmd --permanent --add-service=http --add-service=https y sudo firewall-cmd --reload. Allí SSH está abierto de forma predeterminada.
Consejo: ¿Utiliza Docker? Los puertos que publica con Docker se saltan ufw. Por eso, lea Docker y el cortafuegos: publicar puertos de forma segura.
