6. Servicio MySQL
Configuraciones para servicio de bases de datos MySQL.
Eliminar usuarios anónimos y bases de datos por defecto
Desde terminal
mysql_secure_installation
Securizar copias de seguridad
Desde terminal
mysqldump -u root -p --all-databases | gzip | openssl enc -aes-256-cbc -e > backup.sql.gz.enc
Mejorar autenticación de usuarios
Desde mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
Aplicar control de permisos sobre bases de datos internas y tablas
Desde mysql
REVOKE ALL PRIVILEGES ON *.* FROM 'usuario'@'host';
GRANT SELECT, INSERT ON database_name.* TO 'usuario'@'host';
No permitir conexiones remotas para usuario root
Desde mysql
UPDATE mysql.user SET host='localhost' WHERE user='root';
FLUSH PRIVILEGES;
Implementar monitoreo por login fallido
Desde mysql
SELECT * FROM mysql.general_log WHERE command_type = 'Connect' AND argument LIKE '%Access denied%';
Limitar tamaño de consultas para evitar sobrecargas al servidor
Desde fichero /etc/mysql/my.cnf
[mysqld]
max_allowed_packet = 16M
Configurar cifrado en comunicaciones internas
Desde fichero /etc/mysql/my.cnf
[mysqld]
ssl-cipher = DHE-RSA-AES256-SHA:AES128-SHA
Configurar conexiones con seguridad SSL
Desde fichero /etc/mysql/my.cnf
[mysqld]
require_secure_transport = ON
Configurar tiempo de espera en conexiones inactivas
Desde fichero /etc/mysql/my.cnf
[mysqld]
wait_timeout = 300
interactive_timeout = 300
Limitar conexiones máximas por usuario
Desde fichero /etc/mysql/my.cnf
[mysqld]
max_connections = 100
max_user_connections = 10
Configurar logs
Desde fichero /etc/mysql/my.cnf
[mysqld]
audit_log_format = JSON
audit_log = /var/log/mysql_audit.log
Limitar acceso sobre archivos de logs y tablas temporales por ingresos no autorizados
Desde fichero /etc/mysql/my.cnf
[mysqld]
secure-file-priv = /var/lib/mysql-files
Configurar políticas de expiración de contraseñas
Desde fichero /etc/mysql/my.cnf
[mysqld]
default_password_lifetime = 90