应默认拒绝公网访问数据库端口,仅允许可信内网IP通过firewalld富规则精确放行,并绑定内网网卡至internal区域、配置服务监听内网地址,形成多层防护。

要保护数据库端口(如 MySQL 的 3306、Redis 的 6379 等)不被公网访问,核心思路是:默认拒绝所有外部连接,只允许可信内网 IP 或指定管理节点访问该端口。firewalld 通过「区域隔离 + 富规则(rich rules)」能精准实现这一目标。
明确数据库端口的访问范围
数据库服务通常只需被应用服务器、运维主机或监控系统访问,绝不能对公网开放。例如:
- Redis 运行在
192.168.1.10:6379 - 应用服务器 IP 是
192.168.1.20 - 运维跳板机 IP 是
192.168.1.100 - 公网地址(如
203.0.113.5)必须被完全阻止
firewalld 默认的 public 区域信任度低,适合外网接口;而 internal 或自定义规则更适合控制内部服务访问。
只允许内网指定 IP 访问数据库端口
使用富规则(rich rule)精确放行,不依赖服务模板,避免误开其他端口:
# 允许 192.168.1.20 访问本机 6379(Redis) sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.20" port port="6379" protocol="tcp" accept' # 允许 192.168.1.100 访问本机 3306(MySQL) sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept'
⚠️ 注意:
--zone=public表示这些规则作用于当前绑定网卡的默认区域(通常是外网口)。如果你的数据库监听在内网网卡(如eth1),更稳妥的做法是将该网卡显式绑定到internal区域:sudo firewall-cmd --permanent --zone=internal --change-interface=eth1
然后再在internal区域添加上述 rich rule。
彻底屏蔽公网对数据库端口的访问
即使没显式放行,firewalld 默认策略也是「拒绝未匹配规则的入站连接」,但为防配置疏漏,可主动加一条高优先级拒绝规则:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
# 拒绝所有公网 IP(非内网段)访问 3306 和 6379 sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 3306 ! -s 192.168.0.0/16 -j REJECT sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 6379 ! -s 192.168.0.0/16 -j REJECT
说明:
-
--direct直接操作底层链,优先级由数字0控制(越小越先匹配) -
! -s 192.168.0.0/16表示「源地址不是 192.168.x.x 内网段」 -
REJECT会返回明确拒绝响应(比DROP更利于排查)
验证与生效
每条命令后执行:
sudo firewall-cmd --reload
检查是否生效:
# 查看所有富规则 sudo firewall-cmd --list-rich-rules # 查看直接规则(direct rules) sudo firewall-cmd --direct --get-all-rules # 测试:从允许的内网 IP telnet 本机 3306,应通;从公网 IP 尝试,应超时或被拒
确保数据库服务本身也配置为仅监听内网地址(如 bind-address = 192.168.1.10),而非 0.0.0.0 —— 防火墙是最后一道防线,不应替代服务层绑定控制。
不复杂但容易忽略

















