手滑误封SSH可本地终端自救:先用ipset list和iptables -L定位问题,再flush集合或删除规则恢复访问,随后补加本机IP、检查规则顺序、添加保底ACCEPT规则并持久化,最后通过ipset test、自动脚本和规则注释预防误操作。

如果你用 ipset 配合 iptables 做了端口白名单(比如只允许特定 IP 访问 SSH),结果手滑把本机 IP 加进了黑名单集,或漏加了自己 IP 到白名单集,导致 SSH 断连——别慌,只要还有本地控制台(如 VPS 控制台、物理机终端、带 out-of-band 的云平台 console),就能快速自解封。
确认问题根源:查 ipset 和 iptables 规则
先登录本地终端,运行以下命令定位是否真被封:
-
ipset list—— 查看所有集合名,确认你用的是哪个黑名单/白名单集(如blacklist、whitelist、ssh_whitelist) -
iptables -t filter -L INPUT -n --line-numbers—— 找到含-m set --match-set的规则行号和集合名 -
ipset list whitelist 2>/dev/null | grep $(hostname -I | awk '{print $1}')—— 快速检查本机主 IP 是否在白名单里(替换whitelist为你的集合名)
立即清空或临时禁用相关规则
最稳妥的应急操作是临时绕过限制,恢复访问后再精细修复:
-
方法一(推荐):临时清空黑名单集
ipset flush blacklist(若你用的是黑名单模式,且规则是-m set --match-set blacklist src -j DROP) -
方法二:临时清空白名单集(仅限白名单模式)
ipset flush whitelist,然后立刻补加自己:ipset add whitelist $(hostname -I | awk '{print $1}') -
方法三:临时删除 iptables 中的匹配规则
iptables -t filter -D INPUT 5(把5换成上一步查到的对应行号)
补救后验证并加固
恢复 SSH 后,别急着退出,马上检查并加固:
- 重新加载白名单:确保本机 IP 已加入,例如
ipset add whitelist 192.168.1.100或ipset add whitelist $(hostname -I | awk '{print $1}') - 检查规则顺序:
iptables -t filter -L INPUT -n --line-numbers,确认白名单ACCEPT规则在DROP规则之前 - 加一条「保底 ACCEPT」规则(调试期可用):
iptables -I INPUT -s $(hostname -I | awk '{print $1}') -p tcp --dport 22 -j ACCEPT,再保存:iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)或对应持久化路径
预防下次误操作
白名单类规则天生高危,建议日常加这几条习惯:
- 所有
ipset add前,先ipset test whitelist X.X.X.X确认未存在 - 写脚本自动加本机 IP:
ipset add whitelist $(ip route get 1 | awk '{print $7; exit}') 2>/dev/null || true - 关键规则加注释:
iptables -A INPUT -m set --match-set whitelist src -p tcp --dport 22 -m comment --comment "SSH whitelist" -j ACCEPT - 用
iptables-restore替代逐条添加,提前校验规则文件










