Skip to content

MariaDB 端口管理

端口概述

端口是数据库服务器与客户端通信的通道,合理配置和管理 MariaDB 端口对于数据库安全至关重要。MariaDB 默认使用 3306 端口进行客户端连接,但可以根据需要修改为其他端口。

默认端口

主要端口

端口号用途默认状态
3306客户端连接端口开启
33060MySQL X Protocol 端口可选开启
4567Galera Cluster 复制端口Galera 集群时开启
4568Galera Cluster IST (Incremental State Transfer) 端口Galera 集群时开启
4444Galera Cluster SST (State Snapshot Transfer) 端口Galera 集群时开启

其他相关端口

端口号用途
22SSH 端口(用于远程管理)
80/443Web 管理工具端口(如 phpMyAdmin)
9104Prometheus MariaDB exporter 端口

端口配置

修改默认端口

my.cnfmy.ini 文件中修改 port 参数:

ini
[mysqld]
# 修改 MariaDB 默认端口
port = 3307

绑定 IP 地址

为了提高安全性,建议将 MariaDB 绑定到特定的 IP 地址,而不是监听所有 IP 地址:

ini
[mysqld]
# 只监听本地回环地址
bind-address = 127.0.0.1

# 监听特定 IP 地址
# bind-address = 192.168.1.100

# 监听所有 IP 地址(不推荐)
# bind-address = 0.0.0.0

配置 X Protocol 端口

如果需要使用 MySQL X Protocol,可以启用并配置 mysqlx_port 参数:

ini
[mysqld]
# 启用 X Protocol
mysqlx = ON
# 配置 X Protocol 端口
mysqlx_port = 33060
# 绑定 X Protocol IP 地址
mysqlx_bind_address = 127.0.0.1

端口验证

查看当前端口配置

使用以下命令查看 MariaDB 当前的端口配置:

sql
SHOW VARIABLES LIKE 'port';
-- 查看 X Protocol 端口
SHOW VARIABLES LIKE 'mysqlx_port';

查看监听端口

在 Linux 系统中,可以使用以下命令查看 MariaDB 监听的端口:

bash
# 使用 netstat 命令
netstat -tuln | grep mysql

# 使用 ss 命令
ss -tuln | grep mysql

# 使用 lsof 命令
lsof -i :3306

在 Windows 系统中,可以使用以下命令:

cmd
netstat -ano | findstr :3306

端口安全策略

1. 使用非默认端口

  • 修改默认的 3306 端口,减少自动扫描和攻击的风险
  • 选择 1024-65535 之间的高位端口
  • 避免使用已知服务的端口

2. 限制监听地址

  • 仅绑定到必要的 IP 地址
  • 生产环境中避免绑定到 0.0.0.0(所有 IP 地址)
  • 对于需要远程访问的数据库,考虑使用 VPN 或 SSH 隧道

3. 配置防火墙

  • 使用防火墙限制对数据库端口的访问
  • 只允许特定 IP 地址或 IP 段访问数据库端口
  • 配置防火墙规则,记录所有访问数据库端口的尝试

4. 使用 SSL/TLS 加密

  • 对数据库连接进行 SSL/TLS 加密
  • 配置 MariaDB 要求客户端使用加密连接
  • 定期更新 SSL/TLS 证书

5. 启用连接控制

  • 结合 MariaDB 连接控制插件,限制失败连接尝试
  • 配置合理的连接延迟和阈值
  • 监控连接尝试情况

防火墙配置

Linux 防火墙配置

iptables 配置

bash
# 允许特定 IP 访问 MariaDB 端口
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3307 -j ACCEPT
# 拒绝其他所有 IP 访问 MariaDB 端口
iptables -A INPUT -p tcp --dport 3307 -j DROP
# 保存 iptables 规则
service iptables save

firewalld 配置

bash
# 添加 MariaDB 服务到防火墙
firewall-cmd --permanent --add-service=mysql
# 或添加特定端口
firewall-cmd --permanent --add-port=3307/tcp
# 允许特定 IP 访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3307" accept'
# 重新加载防火墙规则
firewall-cmd --reload

Windows 防火墙配置

  1. 打开 "Windows Defender 防火墙" -> "高级设置"
  2. 右键点击 "入站规则" -> "新建规则"
  3. 选择 "端口" -> 下一步
  4. 选择 "TCP" 和 "特定本地端口",输入 MariaDB 端口号
  5. 选择 "允许连接" -> 下一步
  6. 选择适用的网络类型 -> 下一步
  7. 输入规则名称(如 "MariaDB 端口")-> 完成
  8. 在入站规则中找到新创建的规则,右键点击 "属性" -> "作用域"
  9. 在 "远程 IP 地址" 中添加允许访问的 IP 地址或 IP 段

远程访问配置

配置远程访问

  1. 修改 bind-address 参数,允许远程连接:
ini
[mysqld]
bind-address = 0.0.0.0
  1. 创建允许远程访问的用户:
sql
-- 创建允许从任意 IP 访问的用户
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password';

-- 创建允许从特定 IP 访问的用户
CREATE USER 'remote_user'@'192.168.1.200' IDENTIFIED BY 'password';

-- 授予权限
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;

使用 SSH 隧道访问

对于需要安全远程访问的场景,推荐使用 SSH 隧道:

bash
# 创建 SSH 隧道
ssh -L 3307:localhost:3306 user@remote_server

# 然后通过本地端口 3307 访问远程数据库
mysql -u username -p -h 127.0.0.1 -P 3307

端口监控

监控工具

  • Netstat/ss:查看当前监听端口和连接
  • lsof:查看端口占用情况
  • Prometheus + Grafana:监控端口流量和连接数
  • Nagios/Zabbix:监控端口可用性

监控指标

  • 端口监听状态
  • 连接数(当前连接数、最大连接数)
  • 连接来源分布
  • 连接失败次数
  • 端口流量

常见问题

如何查看 MariaDB 当前使用的端口?

sql
SHOW VARIABLES LIKE 'port';

或使用系统命令:

bash
netstat -tuln | grep mysql

修改端口后无法连接到 MariaDB?

解决方法

  1. 检查 my.cnfmy.ini 文件中的 port 参数是否正确设置
  2. 检查 bind-address 参数是否允许客户端连接
  3. 检查防火墙是否允许新端口的访问
  4. 确保客户端连接时使用了正确的端口号

如何确认 MariaDB 正在监听指定端口?

使用 netstatss 命令查看:

bash
ss -tuln | grep 3307

如何限制只有特定 IP 可以访问 MariaDB?

  1. my.cnfmy.ini 文件中配置 bind-address 参数
  2. 使用防火墙规则限制访问 IP
  3. 创建只允许特定 IP 访问的数据库用户

为什么不推荐使用默认端口?

  • 默认端口更容易成为自动扫描和攻击的目标
  • 使用非默认端口可以减少不必要的连接尝试
  • 提高数据库的安全性,增加攻击者的探测难度

如何配置 Galera Cluster 端口?

my.cnfmy.ini 文件中添加以下配置:

ini
[mysqld]
# Galera Cluster 配置
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_address = gcomm://192.168.1.100,192.168.1.101,192.168.1.102
wsrep_node_address = 192.168.1.100
wsrep_node_name = node1

# Galera 端口配置
# 复制端口(默认 4567)
wsrep_provider_options = "gmcast.listen_addr=tcp://0.0.0.0:4567"
# IST 端口(默认 4568)
# wsrep_provider_options = "ist.recv_addr=192.168.1.100:4568"
# SST 端口(默认 4444)
# wsrep_sst_receive_address = 192.168.1.100:4444

最佳实践

  1. 使用非默认端口:修改默认的 3306 端口,减少自动扫描风险
  2. 限制监听地址:仅绑定到必要的 IP 地址,避免使用 0.0.0.0
  3. 配置防火墙:限制只有特定 IP 可以访问数据库端口
  4. 使用 SSL/TLS:对数据库连接进行加密
  5. 结合连接控制:限制失败连接尝试,防止暴力破解
  6. 定期监控:监控端口状态、连接数和流量
  7. 使用 SSH 隧道:对于远程访问,优先使用 SSH 隧道
  8. 最小权限原则:数据库用户只授予必要的权限,限制访问 IP
  9. 定期更新:保持 MariaDB 和操作系统的更新,修复安全漏洞
  10. 文档化:记录端口配置和安全策略,便于团队协作和维护

结论

端口管理是 MariaDB 安全的重要组成部分,通过合理配置端口、限制访问、监控状态,可以显著提高数据库的安全性。在生产环境中,建议采用多层安全策略,包括非默认端口、防火墙限制、SSL/TLS 加密和连接控制等,以保护 MariaDB 数据库免受未授权访问和攻击。

定期审查端口配置和安全策略,结合监控工具及时发现异常情况,是确保 MariaDB 端口安全的关键。通过实施这些最佳实践,可以有效降低数据库被攻击的风险,保障数据的安全性和完整性。