应使用firewalld的rich rule绑定源地址与端口,如执行firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="3306" protocol="tcp" accept'并重载,同时确保未全局开放3306端口。

在 Linux 系统中,用 firewalld 限制数据库端口(如 MySQL 默认的 3306)仅对特定网段开放,是生产环境的标准做法。关键不是“放行端口”,而是“只让指定网段连这个端口”——既要加白名单规则,又要避免默认放通带来的风险。
确认当前防火墙状态与区域
先确保 firewalld 正常运行,并明确规则作用的 zone(通常为 public):
- 检查服务状态:
sudo systemctl status firewalld,未运行则执行sudo systemctl enable --now firewalld - 查看默认 zone:
sudo firewall-cmd --get-default-zone(常见输出为public) - 确认网卡绑定的 zone:
sudo firewall-cmd --get-active-zones
用 rich rule 精确控制网段访问数据库端口
直接开 3306 端口(--add-port=3306/tcp)会让所有 IP 都能连,不安全。应使用 rich rule 绑定源地址和端口:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 允许网段
192.168.10.0/24访问 3306:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="3306" protocol="tcp" accept' - 允许多个网段(例如再加
172.16.5.0/24):重复执行同类型命令即可 - 立即重载生效:
sudo firewall-cmd --reload
验证规则是否生效
检查 rich rule 是否已写入配置:
- 列出当前 zone 的 rich rules:
sudo firewall-cmd --list-rich-rules(应看到含source address="192.168.10.0/24"的条目) - 确认 3306 没有被全局开放:
sudo firewall-cmd --list-ports应不显示3306/tcp(说明没用--add-port,符合预期) - 从目标网段内机器测试连接:
mysql -h [服务器IP] -P 3306 -u user -p
额外加固建议
避免遗漏导致误放通:
- 不要同时执行
--add-port=3306/tcp,否则会覆盖 rich rule 的限制效果 - 若已有其他规则允许全网访问 3306,先清除:
sudo firewall-cmd --permanent --remove-port=3306/tcp再重载 - 云服务器还需检查平台侧安全组(如阿里云、AWS),确保其也只放行对应网段
- 数据库服务本身建议绑定到内网地址(如
bind-address = 192.168.10.100),而非0.0.0.0










