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 白名单/黑名单最佳实践配置(非常适合运维服务器),规则更安全、更清晰。