Configuración ssh
Configuración ssh (/etc/ssh/sshd_config)
# === Configuracion de red ===
ListenAddress {ip}
Port {puerto ssh} # Puerto no estandar
# === Protocolos permitidos ===
Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key # Modern, fast, secure
# Regenerate keys: ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
# Solo usar algoritmos modernos
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
# === Autenticacion ===
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
UsePAM yes
# === Politicas de sesion ===
X11Forwarding
PermitTunnel no
PermitUserEnvironment no
TCPKeepAlive no # Prevent connection hijacking
ClientAliveInterval 300 # 5 minute idle timeout
ClientAliveCountMax 2
IgnoreRhosts yes
UseDNS no
# === Logging ===
SyslogFacility AUTH
LogLevel VERBOSE # Logs fingerprints for key tracking
# === Restricciones de usuarios ===
MaxAuthTries 3
MaxSessions 2
LoginGraceTime 30
AllowGroups ssh-user
# No permite a los usuarios logearse en el propio jumpserver
Match Group ssh-user
ForceCommand /sbin/nologin
Creación de usuarios y gestión de claves
El primer paso es crear el usuario y añadirlo al grupo ssh-user
groupadd ssh-user
useradd -m -G ssh-user usuario_prueba
El siguiente paso es crear un par de claves y mover la clave pública al directorio de claves del usuario (/home/nombre_de_usuario/.shh/authorized_keys)
Configuración de firewall
Para acabar de configurar el servidor tenemos que configurar el firewall, y además, para forzar que las conexiones SSH se realicen únicamente a través del jumpserver, debemos permitir solo las conexiones entrantes al puerto {puerto ssh} (el puerto no estándar configurado en sshd_config) desde la dirección IP del cliente que se conectará al jumpserver.
# Configuración en el jumpserver
sudo ufw allow from {Rango de red permitido en CIDR} to any port {puerto ssh} proto tcp
# Configuración en el resto de servidores
sudo ufw allow from {IP del jumpserver} to any port 22 proto tcp
Configuración de usuario
Y por último, la configuración del usuario (~/.ssh/config)
# SSH Jump Server
Host jumpserver
HostName {ip}
User {usuario}
Port {puerto ssh}
IdentityFile ~/.ssh/id_ed25519
# Servidores internos via jumpserver
Host *.tudominio.com
ProxyJump jumpserver
User {usuario}
IdentityFile ~/.ssh/id_ed25519
Host ejemplo1.tudominio.com
HostName 1.2.3.4
Host ejemplo2.tudominio.com
HostName 2.3.4.5
Configuración MFA
El multifactor es un estandar de seguridad que requiere múltiples formas de autenticación antes de permitir el acceso a un sistema. Es mejor práctica aplicarlo también al acceso SSH.
En este caso usaremos Google Authenticator, que genera códigos TOTP (Time-based One-Time Password) en el móvil. Para ello instalamos el paquete libpam-google-authenticator en el jumpserver
apt-get install libpam-google-authenticator
Después editamos el archivo /etc/pam.d/sshd para añadir la siguiente línea al final del archivo:
auth required pam_google_authenticator.so
Finalmente editamos el archivo /etc/ssh/sshd_config para asegurarnos de que la autenticación por PAM está habilitada:
UsePAM yes
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
Cada usuario debe configurar su MFA ejecutando el comando google-authenticator. Esto generará un código QR que puede escanearse con la aplicación Google Authenticator en el móvil.
google-authenticator
# Make tokens “time-base””: yes
# Update the .google_authenticator file: yes
# Disallow multiple uses: yes
# Increase the original generation time limit: no
# Enable rate-limiting: yes
Conclusiones y posibles mejoras
Con este proyecto hemos conseguido reducir la superficie de ataque y mejorar la seguridad general del entorno de red, sin comprometer la funcionalidad del sistema. El resto de servidores son accesibles únicamente a través del jumpserver y el propio jumpserver no permite acceso directo.
Posibles mejoras:
- Implementar políticas de auditoría más estrictas
- Utilizar herramientas de detección de intrusiones (IDS)
- Configurar sistemas de alerta automatizados