ipset + iptables 白名单端口后误封自己的应急自解封命令

9次阅读

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

ipset + iptables 白名单端口后误封自己的应急自解封命令

如果你用 ipset 配合 iptables 做了端口白名单(比如只允许特定 IP 访问 SSH),结果手滑把本机 IP 加进了黑名单集,或漏加了自己 IP 到白名单集,导致 SSH 断连——别慌,只要还有本地控制台(如 VPS 控制台、物理机终端、带 out-of-band 的云平台 console),就能快速自解封

确认问题根源:查 ipset 和 iptables 规则

先登录本地终端,运行以下命令定位是否真被封:

  • ipset list —— 查看所有集合名,确认你用的是哪个黑名单/白名单集(如 blacklistwhitelistssh_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.100ipset 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.v4debian/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 替代逐条添加,提前校验规则文件
text=ZqhQzanResources