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

  • 监控

你的当前情况需要先明确一个关键点:

1️⃣ 当前 openclaw 端口实际上 外部无法访问

netstat 看:

127.0.0.1:18789
127.0.0.1:18791
127.0.0.1:18792

绑定在 127.0.0.1 (loopback),意味着:

  • 只有 本机 localhost 可以访问

  • 任何外部 IP 都无法连接

所以即使在 firewalld 放行,这些端口 仍然不会对外开放

如果你的目标是:

允许 除禁止网段外的所有IP访问 openclaw

则必须先让程序监听 0.0.0.0192.168.0.33

例如:

0.0.0.0:18789
0.0.0.0:18791
0.0.0.0:18792

否则防火墙规则不会生效。


一、firewalld 完整推荐规则

你的需求总结:

条件 规则
192.168.0.1 允许
192.168.0.0/24 禁止
192.168.1.0/24 禁止
192.168.4.0/24 禁止
其他IP 允许 SSH + openclaw

二、开放 openclaw 端口

firewall-cmd --permanent --add-port=18789/tcp
firewall-cmd --permanent --add-port=18791/tcp
firewall-cmd --permanent --add-port=18792/tcp

UDP 5353:

firewall-cmd --permanent --add-port=5353/udp

三、配置 IP 限制规则

1 允许网关

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

2 禁止三个网段

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

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'

四、重新加载

firewall-cmd --reload

五、最终规则验证

firewall-cmd --list-all

应看到:

services: ssh
ports: 18789/tcp 18791/tcp 18792/tcp 5353/udp
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 SSH Openclaw
192.168.0.1
192.168.0.x
192.168.1.x
192.168.4.x
公网IP

服务器访问外网 不受影响


七、非常重要(openclaw 必须改监听地址)

如果你想让别人访问 openclaw,必须看到:

0.0.0.0:18789
0.0.0.0:18791
0.0.0.0:18792

而不是:

127.0.0.1:18789

常见修改方式:

config.yaml
gateway.yaml
server.conf
--host 0.0.0.0