La ciberseguridad es un pilar fundamental en la administración de sistemas y redes modernas. En este artículo, abordaremos mecanismos y buenas prácticas que aumentan la protección de sistemas críticos, como el servicio SSH, la autenticación multi-factor y configuraciones para Apache 2 y MySQL.
Políticas de Contraseñas
Las contraseñas son la primera línea de defensa contra accesos no autorizados. Una política robusta debe garantizar:
- Longitud mínima: Al menos 12 caracteres.
- Complejidad: Inclusión de mayúsculas, minúsculas, números y caracteres especiales.
- Caducidad periódica: Rotación cada 90 días.
- Intentos fallidos: Bloqueo temporal tras varios intentos (p. ej., 5 intentos).
- No reutilización: Historial que impida usar contraseñas antiguas.
Configurar esto en sistemas Linux puede hacerse con PAM (Pluggable Authentication Modules) mediante el archivo /etc/pam.d/common-password
.
Ejemplo correcto:
password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
password required pam_pwhistory.so remember=5
Servicio SSH (Secure Shell)
El servicio SSH permite acceso remoto seguro a sistemas. Algunos ajustes esenciales incluyen:
Editar /etc/ssh/sshd_config
:
# Deshabilitar el acceso de usuario root
PermitRootLogin no
# Cambio del puerto por defecto (22)
Port 2222
# Límite de intentos de conexión
MaxAuthTries 3
# Desactivar autenticación por contraseña
PasswordAuthentication no
# Protocolo y tiempo de inactividad
Protocol 2
ClientAliveInterval 300
ClientAliveCountMax 3
Para fail2ban, configurar en /etc/fail2ban/jail.local
:
[sshd]
enabled = true
bantime = 3600
findtime = 600
maxretry = 3
Autenticación Basada en Llaves SSH
La autenticación mediante llaves SSH elimina la necesidad de contraseñas, utilizando un par de llaves (pública y privada):
Generar Llaves SSH
En el cliente:
ssh-keygen -t ed25519 -a 100 # Más seguro que RSA
Esto generará dos archivos: id_ed25519
(privada) e id_ed25519.pub
(pública).
Instalar la Llave en el Servidor
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@servidor_remoto
La llave se agregará a ~/.ssh/authorized_keys
en el servidor remoto.
Autenticación Multi-Factor (MFA)
El MFA añade una capa extra de seguridad al requerir un segundo factor de autenticación, como un código generado por una aplicación.
Configurando Google Authenticator para SSH
- Instalar el paquete:
sudo apt-get install libpam-google-authenticator
- Configurar en el usuario:
google-authenticator -t -d -f -r 3 -R 30 -w 3
Esto generará un código QR y claves secretas.
- Configurar PAM: Edita
/etc/pam.d/sshd
y añade:
auth required pam_google_authenticator.so
- Habilitar MFA en SSH: Edita
/etc/ssh/sshd_config
:
5.
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
Reinicia el servicio SSH:
sudo systemctl restart sshd
Autenticación Apache 2
Para proteger directorios en Apache 2:
Crear el archivo .htpasswd
:
htpasswd -c /etc/apache2/.htpasswd usuario
Configurar el .htaccess
:
AuthType Basic
AuthName "Acceso Restringido"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
# Cabeceras de seguridad adicionales
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Configurar el virtual host:
<Directory /var/www/html>
Options -Indexes -FollowSymLinks
AllowOverride AuthConfig
Require all granted
</Directory>
Reiniciar Apache:
sudo systemctl restart apache2
Mecánicas de Autenticación MySQL
Fortalecer la autenticación en MySQL es crucial para proteger las bases de datos:
Crear usuarios con autenticación moderna:
CREATE USER 'usuario'@'localhost'
IDENTIFIED WITH caching_sha2_password
BY 'contraseña_segura'
REQUIRE SSL;
Configurar política de contraseñas:
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
Asignar privilegios mínimos necesarios:
GRANT SELECT, INSERT ON base_datos.* TO 'usuario'@'localhost'
WITH MAX_QUERIES_PER_HOUR 1000
MAX_USER_CONNECTIONS 5;
Habilitar SSL:
[mysqld]
require_secure_transport = ON
ssl_cert = /path/to/server-cert.pem
ssl_key = /path/to/server-key.pem
Conclusión
La implementación de estas políticas de seguridad robustas es fundamental para proteger la infraestructura. Se recomienda revisar y actualizar estas configuraciones periódicamente, mantener los sistemas actualizados y monitorear los logs de acceso regularmente.
Deja un comentario