Configurar el acceso remoto a una base de datos MariaDB requiere un equilibrio preciso entre conectividad y seguridad. El objetivo es permitir que una IP externa específica se conecte al puerto 3306 sin exponer el servidor a todo internet. Este proceso involucra la configuración de firewalld y el ajuste de las directivas de escucha de MariaDB.
1. El desafío del firewall
Al intentar restringir el acceso mediante firewalld, es común encontrar errores de sintaxis al definir las rich rules. Un error frecuente es el INVALID_RULE: unknown element, que suele ocurrir al intentar dividir la regla en varias líneas sin el escape correcto de caracteres.
La regla correcta para permitir el tráfico desde la IP 190.212.124.115 hacia el puerto 3306 es la siguiente:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="190.212.124.115" port port="3306" protocol="tcp" accept'2. Configuración de MariaDB
Por defecto, MariaDB está configurado para escuchar solo en 127.0.0.1. Para permitir conexiones remotas, es necesario modificar el archivo de configuración /etc/mysql/mariadb.conf.d/50-server.cnf y cambiar la directiva bind-address a 0.0.0.0.
bind-address = 0.0.0.0Tras este cambio, es indispensable reiniciar el servicio para aplicar los cambios: sudo systemctl restart mariadb. Se puede verificar que el servicio está escuchando correctamente con ss -tulnp | grep 3306.
3. Automatización mediante script
Para evitar errores manuales y facilitar la replicación, he consolidado el proceso en un script de Bash. Este script no solo configura el firewall y MariaDB, sino que también crea un usuario restringido (RegUCM) con acceso limitado únicamente a la base de datos necesaria.
#!/bin/bash
set -e
# 1. Abrir puerto 3306 para IP específica
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="190.212.124.115" port port="3306" protocol="tcp" accept'
sudo firewall-cmd --reload
# 2. Configurar MariaDB para aceptar conexiones externas
MYSQL_CONF="/etc/mysql/mariadb.conf.d/50-server.cnf"
sudo sed -i 's/^bind-address\s*=.*/bind-address = 0.0.0.0/' "$MYSQL_CONF"
sudo systemctl restart mariadb
# 3. Crear usuario RegUCM con acceso a portal
sudo mariadb <root para conexiones remotas. Crear un usuario con privilegios limitados a una base de datos específica es una práctica de seguridad fundamental.La historia detrás de la nota
Automatizar este proceso no solo ahorra tiempo, sino que elimina el riesgo de cometer errores de sintaxis en el firewall que podrían dejar el servicio inaccesible o, peor aún, demasiado abierto.