必须采用三层防护:一、sshd_config中用AllowUsers ops@10.20.30.40设IP+用户双白名单;二、hosts.allow放行该IP,hosts.deny拒绝ALL;三、iptables仅允许该IP访问22端口并保存规则。

您需要让银河麒麟系统只接受公司堡垒机的SSH连接,其他任何IP地址的SSH请求都必须被拦截,否则运维人员可能从非授权网络直连服务器,造成安全策略失效。
确认SSH服务已启用并监听22端口
执行sudo systemctl status ssh,确认状态为active (running)且Loaded行显示enabled;若未运行,先执行sudo systemctl start ssh && sudo systemctl enable ssh。这一步是后续所有限制生效的前提,【若sshd未启动,所有配置规则均不生效】。
运行sudo ss -tlnp | grep ':22',确保输出中包含sshd进程监听0.0.0.0:22或:::22,表示服务已对外暴露端口。
方法一:用sshd_config实现IP+用户双白名单
此方法最直接、最可靠,适用于堡垒机使用固定IP和专用运维账号的场景。
第一步:编辑主配置文件,sudo vim /etc/ssh/sshd_config
第二步:在文件末尾添加AllowUsers指令,格式为AllowUsers 运维账号@堡垒机IP,例如:AllowUsers ops@10.20.30.40。注意:此处的“运维账号”必须是实际用于堡垒机登录的非root账户,且该账户已在系统中存在。
第三步:保存退出后,执行sudo systemctl restart sshd使配置立即生效。此时除ops@10.20.30.40外,任何其他用户、任何其他IP的组合都将被拒绝连接,返回“Permission denied (publickey,password)”或直接断连。
方法二:用hosts.allow/hosts.deny构建TCP Wrappers层防护
该方法作为补充防线,不依赖sshd_config解析逻辑,但需确认SSH编译时启用了libwrap支持。
方法一:验证TCP Wrappers是否可用
执行ldd /usr/sbin/sshd | grep libwrap.so.0,若无输出,说明SSH未集成该功能,跳过本方法;若有输出(如libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0),继续下一步。
方法二:允许堡垒机IP访问
执行echo "sshd: 10.20.30.40" | sudo tee -a /etc/hosts.allow
方法三:拒绝所有其他IP
执行echo "sshd: ALL" | sudo tee -a /etc/hosts.deny
【注意:hosts.allow优先级高于hosts.deny,二者共存时,匹配allow即放行,不匹配则继续查deny】
方法三:用iptables设置网络层硬隔离
这是最底层、最严格的控制方式,即使SSH配置被误改,攻击者也无法建立TCP连接。
第一步:清空现有规则避免冲突,sudo iptables -F INPUT
第二步:放行堡垒机IP对22端口的访问,sudo iptables -A INPUT -s 10.20.30.40 -p tcp --dport 22 -j ACCEPT
第三步:拒绝所有其他来源的22端口请求,sudo iptables -A INPUT -p tcp --dport 22 -j DROP
第四步:保存规则防止重启丢失,银河麒麟V10桌面版执行sudo iptables-save | sudo tee /etc/iptables/rules.v4;OpenKylin系统需配合mm-cli固化,否则重启后规则消失。











