Fortaleciendo la Seguridad: Políticas de Contraseñas y Autenticación en Servicios Clave

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:

  1. Longitud mínima: Al menos 12 caracteres.
  2. Complejidad: Inclusión de mayúsculas, minúsculas, números y caracteres especiales.
  3. Caducidad periódica: Rotación cada 90 días.
  4. Intentos fallidos: Bloqueo temporal tras varios intentos (p. ej., 5 intentos).
  5. 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

  1. 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.


Publicado

en

por

Etiquetas:

Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *