Skip to main content

firewall-cmd命令安全加固OpenClaw服务器

你当前的 rich rule 写反了方向
destination address目标地址,表示“发往某个网段的流量”,而你需要的是 限制来源地址 (source) 访问本机。

因此规则应全部使用 source address

另外还要注意 规则优先级顺序

  • 允许 192.168.0.1

  • 再拒绝 192.168.0.0/24

  • 再拒绝 192.168.1.0/24

  • 再拒绝 192.168.4.0/24

否则 192.168.0.1 可能被 /24 规则误拦截。


一、先删除错误规则

firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" destination address="192.168.4.0/24" reject'
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" destination address="192.168.1.0/24" reject'
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.0.1" accept'

二、按正确逻辑添加规则

1 允许网关访问

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.1" accept'

2 禁止 192.168.0.0/24 访问(排除网关)

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" reject'

3 禁止其它两个网段

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" reject'

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.4.0/24" reject'

三、确保 SSH 开放

你已经有:

services: ssh

如果需要可以再确认:

firewall-cmd --permanent --add-service=ssh

四、重新加载规则

firewall-cmd --reload

五、最终预期结果

firewall-cmd --list-rich-rules

应该类似:

rule family="ipv4" source address="192.168.0.1" accept
rule family="ipv4" source address="192.168.0.0/24" reject
rule family="ipv4" source address="192.168.1.0/24" reject
rule family="ipv4" source address="192.168.4.0/24" reject

六、实现效果

来源IP 是否能访问
192.168.0.1 ✅ 允许
192.168.0.x ❌ 禁止
192.168.1.x ❌ 禁止
192.168.4.x ❌ 禁止
其他公网IP ✅ 可访问 SSH

并且:

  • 服务器访问外网不受影响

  • 默认 SSH 对外开放


七、生产环境更严谨写法(推荐)

只限制 SSH 而不是全部流量:

rule family="ipv4" source address="192.168.1.0/24" service name="ssh" reject

否则会影响:

  • ping

  • http

  • agent

  • 监控

如果你需要,我可以给你一份 企业级 firewalld SSH 白名单/黑名单最佳实践配置(非常适合运维服务器),规则更安全、更清晰。