El orden seguro
sudo ufw allow OpenSSH
sudo ufw show added
sudo ufw enable
sudo ufw status
Mientras ufw está desactivado, ufw status solo muestra Status: inactive y oculta tus reglas. Por eso usas show added para comprobarlas.
Por SSH, ufw enable avisa de que puede interrumpir las conexiones y pide confirmación. El manual advierte de que activarlo puede cortar las conexiones existentes. En nuestra prueba la sesión abierta siguió funcionando, pero no cuentes con ello.
Qué pasa si te equivocas
La política por defecto es denegar el tráfico entrante. Activamos ufw sin ninguna regla para SSH y la siguiente conexión falló así:
ssh: connect to host server port 22: Connection timed out
Tu sesión abierta es tu vía de vuelta: añade la regla desde ahí. Si ya no está, necesitas la consola de tu proveedor de hosting. Un firewall en la nube delante del servidor es otra cosa distinta, y ufw no puede abrirlo.
Una red de seguridad para servidores remotos
Antes de activar ufw, programa un comando que lo vuelva a desactivar:
sudo systemd-run --on-active=5min --unit=ufw-undo ufw --force disable
sudo ufw enable
Prueba una conexión nueva desde otro terminal. Si funciona, cancela el temporizador:
sudo systemctl stop ufw-undo.timer
Si te quedas fuera, espera unos seis minutos, ya que el temporizador puede retrasarse hasta un minuto, y ufw se desactiva solo.
Qué regla usar
| Quieres | Comando |
|---|---|
| Puerto estándar | sudo ufw allow OpenSSH |
| Lo mismo, sin el perfil | sudo ufw allow 22/tcp |
| Otro puerto | sudo ufw allow 2222/tcp |
| Solo desde una dirección | sudo ufw allow from 203.0.113.10 to any port 22 proto tcp |
| Limitar las conexiones repetidas | sudo ufw limit OpenSSH |
El perfil OpenSSH siempre significa el puerto 22. Para verlo, ejecuta sudo ufw app info OpenSSH. Viene con el paquete openssh-server, así que sin ese paquete el nombre es desconocido.
Qué hace limit
ufw limit deniega una dirección que abre 6 o más conexiones en 30 segundos. En nuestra prueba, cinco accesos seguidos funcionaron y el sexto falló con esto:
ssh: connect to host server port 22: Connection refused
Esto también te afecta a ti. Un bucle de comandos scp o una ejecución de Ansible que abre muchas conexiones lo activará, y el mensaje parece indicar que sshd se ha detenido. Reutilizar una conexión ayuda: mira la multiplexación SSH.
Frena el adivinar contraseñas, pero no sabe si un acceso tuvo éxito. Para eso, usa fail2ban. La protección real contra el adivinar contraseñas es no tener acceso con contraseña.
Cambiar el puerto de SSH
Añade primero la regla nueva y quita la antigua solo después de haber entrado por el puerto nuevo:
sudo ufw allow 2222/tcp
# change the port in sshd and test it
sudo ufw delete allow OpenSSH
El procedimiento completo, incluido el socket en las versiones recientes de Ubuntu, está en cómo cambiar el puerto de SSH.
Eliminar una regla
Por número, o repitiendo la regla después de delete:
sudo ufw status numbered
sudo ufw delete 2
sudo ufw delete allow 22/tcp
Las reglas aparecen dos veces, para IPv4 y para IPv6, y los números cambian después de cada borrado, así que vuelve a listarlas antes de borrar otra. Además, una regla creada con allow OpenSSH y otra creada con allow 22/tcp son entradas separadas, así que puedes acabar con las dos.
Preguntas
¿Cómo compruebo si ufw permite SSH?
Con ufw activo, ejecuta sudo ufw status y busca 22/tcp, OpenSSH o tu puerto con ALLOW. Con ufw inactivo, status oculta las reglas: usa sudo ufw show added.
¿Cuál es la diferencia entre ufw allow ssh y ufw allow OpenSSH?
ufw allow ssh usa el puerto de /etc/services y aparece como 22/tcp. ufw allow OpenSSH usa el perfil de aplicación que instala el paquete openssh-server, también para 22/tcp. Sirven los dos. Ninguno sigue un puerto que hayas cambiado en sshd_config.
¿ufw protege los puertos publicados por Docker?
No. La documentación de Docker dice que los puertos publicados de los contenedores se saltan las reglas de ufw.