外观
MariaDB 端口管理
端口概述
端口是数据库服务器与客户端通信的通道,合理配置和管理 MariaDB 端口对于数据库安全至关重要。MariaDB 默认使用 3306 端口进行客户端连接,但可以根据需要修改为其他端口。
默认端口
主要端口
| 端口号 | 用途 | 默认状态 |
|---|---|---|
| 3306 | 客户端连接端口 | 开启 |
| 33060 | MySQL X Protocol 端口 | 可选开启 |
| 4567 | Galera Cluster 复制端口 | Galera 集群时开启 |
| 4568 | Galera Cluster IST (Incremental State Transfer) 端口 | Galera 集群时开启 |
| 4444 | Galera Cluster SST (State Snapshot Transfer) 端口 | Galera 集群时开启 |
其他相关端口
| 端口号 | 用途 |
|---|---|
| 22 | SSH 端口(用于远程管理) |
| 80/443 | Web 管理工具端口(如 phpMyAdmin) |
| 9104 | Prometheus MariaDB exporter 端口 |
端口配置
修改默认端口
在 my.cnf 或 my.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 savefirewalld 配置
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 --reloadWindows 防火墙配置
- 打开 "Windows Defender 防火墙" -> "高级设置"
- 右键点击 "入站规则" -> "新建规则"
- 选择 "端口" -> 下一步
- 选择 "TCP" 和 "特定本地端口",输入 MariaDB 端口号
- 选择 "允许连接" -> 下一步
- 选择适用的网络类型 -> 下一步
- 输入规则名称(如 "MariaDB 端口")-> 完成
- 在入站规则中找到新创建的规则,右键点击 "属性" -> "作用域"
- 在 "远程 IP 地址" 中添加允许访问的 IP 地址或 IP 段
远程访问配置
配置远程访问
- 修改
bind-address参数,允许远程连接:
ini
[mysqld]
bind-address = 0.0.0.0- 创建允许远程访问的用户:
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?
解决方法:
- 检查
my.cnf或my.ini文件中的port参数是否正确设置 - 检查
bind-address参数是否允许客户端连接 - 检查防火墙是否允许新端口的访问
- 确保客户端连接时使用了正确的端口号
如何确认 MariaDB 正在监听指定端口?
使用 netstat 或 ss 命令查看:
bash
ss -tuln | grep 3307如何限制只有特定 IP 可以访问 MariaDB?
- 在
my.cnf或my.ini文件中配置bind-address参数 - 使用防火墙规则限制访问 IP
- 创建只允许特定 IP 访问的数据库用户
为什么不推荐使用默认端口?
- 默认端口更容易成为自动扫描和攻击的目标
- 使用非默认端口可以减少不必要的连接尝试
- 提高数据库的安全性,增加攻击者的探测难度
如何配置 Galera Cluster 端口?
在 my.cnf 或 my.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最佳实践
- 使用非默认端口:修改默认的 3306 端口,减少自动扫描风险
- 限制监听地址:仅绑定到必要的 IP 地址,避免使用 0.0.0.0
- 配置防火墙:限制只有特定 IP 可以访问数据库端口
- 使用 SSL/TLS:对数据库连接进行加密
- 结合连接控制:限制失败连接尝试,防止暴力破解
- 定期监控:监控端口状态、连接数和流量
- 使用 SSH 隧道:对于远程访问,优先使用 SSH 隧道
- 最小权限原则:数据库用户只授予必要的权限,限制访问 IP
- 定期更新:保持 MariaDB 和操作系统的更新,修复安全漏洞
- 文档化:记录端口配置和安全策略,便于团队协作和维护
结论
端口管理是 MariaDB 安全的重要组成部分,通过合理配置端口、限制访问、监控状态,可以显著提高数据库的安全性。在生产环境中,建议采用多层安全策略,包括非默认端口、防火墙限制、SSL/TLS 加密和连接控制等,以保护 MariaDB 数据库免受未授权访问和攻击。
定期审查端口配置和安全策略,结合监控工具及时发现异常情况,是确保 MariaDB 端口安全的关键。通过实施这些最佳实践,可以有效降低数据库被攻击的风险,保障数据的安全性和完整性。
