Curso de Linux / Proteger un servidor: cuentas, SSH, cortafuegos y actualizaciones

Proteger un servidor Linux es una combinación de varias medidas que permiten solo las cuentas y puertos necesarios, limitan los privilegios de administración y mantienen actualizaciones de seguridad y métodos de recuperación. Al cambiar la política de acceso remoto, asegúrese de mantener la sesión actual y la consola, y verifique que se pueda establecer una nueva conexión antes de aplicar las siguientes restricciones.

Al cambiar las reglas mientras mantiene la conexión remota, debe realizar primero verificación de conexión SSH y preparación de recuperación mediante consola virtual. Solo cierre la sesión existente después de confirmar con la nueva conexión.

El estándar para la práctica de configuración del sistema es Ubuntu 26.04 LTS y VMs de instalación general de la serie Rocky Linux 9. En contenedores, WSL u otras versiones, la configuración de servicios y paquetes puede variar. Preparar primero la recuperación de consola y la verificación de la versión se indica en Crear un entorno de práctica con máquina virtual.

Verificar la exposición actual y las rutas de recuperación antes de cambiar

id
getent group sudo
getent group wheel
sudo ss -lntup
systemctl --failed

Ubuntu generalmente usa el grupo sudo y Rocky Linux el grupo wheel en la política de privilegios de administrador, pero se debe verificar la configuración real de sudoers. Compare los puertos de red con los servicios instalados y sus propósitos reales. Detenga o desactive los servicios que no se usan después de verificar el impacto, y configure el firewall para permitir solo la comunicación necesaria. Los grupos de seguridad en la nube y el firewall del host son capas separadas.

Asegúrese de que los medios de recuperación distintos de SSH, como la consola de la máquina virtual o la consola serie en la nube, estén realmente disponibles. Antes de los cambios, registre el estado del firewall, la configuración de SSH y la información de las cuentas, y haga una copia de seguridad de los archivos de configuración. No asuma que una nueva conexión está permitida solo porque la sesión actual siga activa.

Ajustar la política SSH después de verificar la autenticación mediante clave

Verifique en una nueva sesión si la cuenta de administración normal puede usar tanto la autenticación de clave como sudo. Para restringir la autenticación por contraseña, primero compruebe qué valores se aplican en el archivo Include, la sección Match y la configuración inicial en la nube del sistema de destino. Añadir el mismo elemento varias veces en el archivo de configuración puede diferir del valor realmente aplicado.

sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T | grep -E "^(port|permitrootlogin|passwordauthentication|pubkeyauthentication) "

sshd -t comprueba la validez de la configuración y la coherencia de las claves del servidor; no prueba el inicio de sesión de un usuario. -T muestra la configuración efectiva y, si existen reglas Match, debe añadirse -C con el contexto real de conexión. Tras comprobarla, recargue el servicio apropiado de la distribución y pruebe un inicio de sesión nuevo. Si falla, restaure la configuración desde la sesión que mantiene abierta o desde la consola y repita las comprobaciones.

Activar UFW en Ubuntu tras permitir el acceso de administración

A continuación se muestra un servidor de práctica donde SSH utiliza realmente el TCP 22. Si se trata de un puerto personalizado, debe reemplazar todos los 22 por el valor real. En lugar de permitir SSH desde toda la Internet, se puede restringir a fuentes de administración de confianza, pero si se especifica incorrectamente la dirección de salida de NAT o VPN, se bloqueará el acceso. Primero lea el estado, luego agregue las reglas de permiso necesarias y, finalmente, actívelas.

sudo ufw status verbose
sudo ufw --dry-run allow 22/tcp
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status numbered

Esta regla permite 22/tcp a todas las fuentes, así que no la considere como la versión final de la política de operación pública en Internet. Después de verificar la conexión desde una nueva terminal, restringa las reglas según los servicios necesarios y las fuentes correspondientes. Primero verifique las reglas más restrictivas, luego elimine las reglas más amplias y vuelva a comprobar la conexión. La eliminación debe dirigirse únicamente a las reglas precisas comparando la lista numerada actual con el estado original.

Rocky Linux firewalld distingue entre zonas y configuraciones permanentes

sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone

Identifique la zona que utiliza realmente la interfaz. Sustituya REPLACE_WITH_ACTIVE_ZONE por ese nombre y compruebe con --info-service=ssh que el servicio ssh define el puerto SSH que utiliza su servidor. Pruebe primero la regla en la configuración activa (runtime); solo después guarde la misma regla en la configuración persistente (permanent).

zone=REPLACE_WITH_ACTIVE_ZONE
sudo firewall-cmd --info-service=ssh
sudo firewall-cmd --zone="$zone" --add-service=ssh
sudo firewall-cmd --zone="$zone" --list-all
sudo firewall-cmd --permanent --zone="$zone" --add-service=ssh
sudo firewall-cmd --permanent --zone="$zone" --list-all

runtime y permanent son diferentes, y si recarga, los cambios de runtime que no se hayan guardado pueden desaparecer. Por el contrario, si copia todo el runtime a permanent sin excepción, incluso se pueden mantener permisos temporales. Al revertir, elimine solo las reglas que se agregaron esta vez y que no existían antes de cada configuración. No elimine las reglas que permiten el acceso de administración actual antes de verificar el acceso alternativo.

Gestionar también las actualizaciones y SELinux

sudo apt update
apt list --upgradable
sudo dnf check-update
getenforce

El primer bloque es un ejemplo de consulta en Ubuntu, y el segundo en Rocky Linux. dnf check-update puede devolver el estado 100 si hay actualizaciones, así que distíngalo de errores de ejecución normales. La instalación real se realiza después de revisar copias de seguridad, impacto en servicios y la necesidad de reinicio. Después de la actualización, verifique no solo la versión, sino también la respuesta del servicio y el estado tras el reinicio.

En Rocky Linux, SELinux (Security-Enhanced Linux) controla el acceso mediante etiquetas de archivos y políticas de procesos. No desactive SELinux inmediatamente si un servicio web no puede leer un archivo; en su lugar, verifique los permisos, las etiquetas y los registros de auditoría. Las rutas fuera de los directorios predeterminados pueden requerir políticas de etiquetas permanentes adecuadas y restorecon. SELinux y el firewall son tipos de restricciones diferentes.

Documentación oficial