直接用firewalld富规则可实现仅放行指定ip和端口,因默认拒绝入站无需额外deny;先查活跃区域和端口状态,移除已开放端口,再添加带源ip限制的永久rich rule并重载生效,支持单ip、多ip或子网,最后验证连通性并排查配置问题。

直接用 firewalld 的富规则(rich rule)就能实现,核心是“只放行指定 IP + 指定端口”,其他一概拒绝——firewalld 默认策略本来就是拒绝入站,所以不用额外加 deny 规则。
确认区域和端口基础信息
先查清楚当前生效的区域和目标端口状态:
- 查看活跃区域:firewall-cmd --get-active-zones(通常为 public)
- 确认目标管理端口(比如 22、8080、9001 等)当前是否已开放:firewall-cmd --zone=public --list-ports
- 如果该端口已被全局开放,建议先移除:firewall-cmd --permanent --remove-port=8080/tcp && firewall-cmd --reload
添加带源 IP 限制的永久富规则
以只允许 192.168.5.100 访问管理端口 9001(TCP)为例:
- 执行命令:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.5.100" port port="9001" protocol="tcp" accept'
- 立即重载使规则生效:firewall-cmd --reload
- 验证是否写入永久配置:firewall-cmd --permanent --list-rich-rules
- 检查运行时是否加载:firewall-cmd --list-rich-rules
可选:批量允许多个 IP 或子网
如需放行办公网段(例如 10.10.20.0/24)访问同一端口:
- firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.20.0/24" port port="9001" protocol="tcp" accept'
- 同样执行 firewall-cmd --reload 生效
验证与排查要点
配完别急着退出,务必验证实际连通性:
- 从被允许的 IP 主机上执行:telnet 服务器IP 9001 或 nc -zv 服务器IP 9001
- 从其他未授权 IP 尝试连接,应超时或被拒绝
- 若不生效,依次检查:
– 是否用了 --permanent 并执行了 --reload
– 目标网卡是否绑定在你配置的区域(如 public)
– 是否有更高优先级的 direct 规则或服务冲突(firewall-cmd --direct --get-all-rules)











