银河麒麟系统需用rich-rule精确控制ssh访问:先停用全局ssh服务,再逐条添加回环及指定ip的accept规则,最后加reject规则并重载。

银河麒麟操作系统默认使用 firewalld 作为系统防火墙,要实现仅允许指定 IP 访问 SSH(22 端口),必须绕过 --add-service=ssh 这种全局放行方式,改用 rich-rule 精确控制源地址;否则规则形同虚设,任何 IP 都能连接。
确认 firewalld 状态并清理干扰规则
执行 sudo firewall-cmd --state 确保输出为 running;若未运行,先执行 sudo systemctl start firewalld && sudo systemctl enable firewalld。
检查当前是否已存在全局 SSH 规则:sudo firewall-cmd --permanent --list-all | grep ssh。如果输出包含 services: ssh,必须立即移除:sudo firewall-cmd --permanent --remove-service=ssh。【不移除会导致后续 rich-rule 完全失效】
执行 sudo firewall-cmd --reload 使移除生效——这一步不可跳过,否则新规则不会按预期匹配。
添加白名单 rich-rule(含回环与管理IP)
方法一:逐条添加可信源地址(推荐,可控性强)
第一步:放行本机回环地址,避免 ssh localhost 或脚本本地调用失败:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="127.0.0.1" port port="22" protocol="tcp" accept'。
第二步:添加你的运维跳板机或堡垒机 IP(例如 192.168.5.10):sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.5.10" port port="22" protocol="tcp" accept'。
第三步:如服务器有内网管理口(如 10.10.20.5),也需单独加一条,【不能写成 10.10.20.0/24 网段,firewalld 对子网匹配不稳定,必须精确到单 IP】。
方法二:批量添加多个 IP(适合固定管理集群)
对每个目标 IP 执行一次命令,例如:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.8" port port="22" protocol="tcp" accept' → sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.9" port port="22" protocol="tcp" accept'。
注意:每条命令末尾的空格必须严格清除,source address="203.0.113.8 "(末尾多空格)将导致规则静默失效,firewall-cmd --permanent --list-rich-rules 查不到该条。
设置明确拒绝规则并重载
在所有 accept 规则添加完毕后,执行:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="22" protocol="tcp" reject'。
这条规则必须放在最后,firewalld 按顺序匹配,提前加会导致白名单被跳过。
执行 sudo firewall-cmd --reload 应用全部变更。此时其他 IP 尝试 SSH 会立即收到 Connection refused,而非超时——这是规则生效的明确信号。











