温馨提示×

MariaDB Linux版如何配置防火墙

小樊
34
2025-12-14 10:24:22
栏目: 云计算

MariaDB Linux 版防火墙配置指南

一、准备与确认

  • 确认 MariaDB 正在监听网络端口:默认端口为 3306。可执行:netstat -antlpe | grep 3306ss -lntp | grep 3306 查看监听状态。若未监听,请先启动服务:systemctl start mariadb 并设置开机自启:systemctl enable mariadb。同时,MariaDB 的主配置文件通常为 /etc/my.cnf(或 /etc/my.cnf.d/mariadb-server.cnf),数据目录为 /var/lib/mysql。以上信息有助于判断是防火墙问题还是服务未监听问题。

二、使用 firewalld 放行 MariaDB 端口(推荐)

  • 适用于 CentOS 7/8、RHEL 7/8、Fedora 等使用 firewalld 的系统。
  • 基本操作
    • 查看防火墙状态:firewall-cmd --state
    • 启动/停止/重启:systemctl start|stop|restart firewalld
    • 开机启用/禁用:systemctl enable|disable firewalld
  • 放行 3306 端口(持久化)
    • 开放端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
    • 重新加载:firewall-cmd --reload
    • 验证:firewall-cmd --list-portsfirewall-cmd --query-port=3306/tcp
  • 仅允许指定来源 IP 访问(更安全的做法)
    • 方法一(富规则):firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept' && firewall-cmd --reload
    • 方法二(新建 zone):firewall-cmd --new-zone=mariadb_access --permanent && firewall-cmd --reload;随后 firewall-cmd --zone=mariadb_access --add-source=192.168.1.100 --permanentfirewall-cmd --zone=mariadb_access --add-port=3306/tcp --permanentfirewall-cmd --reload。以上命令按需替换为你实际的客户端 IP端口

三、使用 iptables 放行 MariaDB 端口(旧系统或无 firewalld 时)

  • 适用于 CentOS 6 或仍使用 iptables 的场景。
  • 放行 3306 端口(示例)
    • 所有来源:iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
    • 指定来源:iptables -A INPUT -p tcp -s 192.168.1.100 -m tcp --dport 3306 -j ACCEPT
  • 保存与重启
    • 保存规则(视发行版而定):service iptables saveiptables-save > /etc/sysconfig/iptables
    • 重启生效:service iptables restart
  • 验证:iptables -L -n | grep 3306。注意规则顺序,避免被后续拒绝规则拦截。

四、远程连接仍失败时的排查要点

  • 数据库权限与账户
    • 登录数据库:mysql -uroot -p
    • 授权指定来源:GRANT ALL PRIVILEGES ON *.* TO 'username'@'192.168.1.100' IDENTIFIED BY 'password';(生产环境建议最小权限与专用账户)
    • 刷新权限:FLUSH PRIVILEGES;
    • 若看到错误 1130 - Host ‘x.x.x.x’ is not allowed to connect,通常就是账户来源限制或防火墙未放行所致。
  • MariaDB 绑定地址
    • 编辑配置文件(如 /etc/my.cnf/etc/my.cnf.d/mariadb-server.cnf),确保 bind-address 不是仅 127.0.0.1。需要远程访问时可设为 0.0.0.0(或注释该行以使用默认),然后重启 MariaDB:systemctl restart mariadb
  • 再次验证
    • 在客户端测试:mysql -h <服务器IP> -P 3306 -u <用户> -p。若仍不通,复核防火墙规则与云厂商安全组是否放行 3306/tcp

0