fail2ban已将你的IP加入黑名单,需用sudo fail2ban-client banned查全部被封IP,或sudo fail2ban-client get sshd banned查SSH相关IP;若服务未运行则先启动,也可通过iptables或firewalld验证封禁规则。

当你发现SSH无法登录、宝塔面板打不开,而其他网络能正常访问网站时,大概率是fail2ban已将你的本地IP加入黑名单,必须立刻确认当前被封禁的IP列表才能针对性解封。
用fail2ban-client直接查被ban的IP
这是最直接、最权威的方式,命令由fail2ban服务原生提供,结果实时准确,不依赖日志解析或防火墙规则反查。
执行 【sudo fail2ban-client banned】,输出所有jail中当前被封禁的IP,每行一个IP,格式干净无干扰。
如果只想看SSH相关的封禁情况,运行 【sudo fail2ban-client get sshd banned】,它只返回sshd jail里正在生效的IP列表,避免其他服务(如nginx、postfix)的干扰。
注意:该命令要求fail2ban服务正在运行,若提示“Connection refused”,先运行 sudo systemctl start fail2ban 启动服务。
通过防火墙规则反向提取被ban IP
当fail2ban-client不可用或想交叉验证时,可从底层iptables链中抓取真实生效的封禁记录。
方法一:查看f2b-sshd自定义链内容
执行 sudo iptables -L f2b-sshd -n,找到所有以 REJECT 或 DROP 结尾的规则行,每行开头的 source 字段就是被ban的IP。
方法二:批量提取全部封禁IP
运行 sudo iptables -L f2b-sshd -n | awk '$1 ~ /^[0-9]/ && $5 == "REJECT" {print $1}' | sort -u,这条命令自动过滤出有效源IP并去重,适合复制后批量处理。
⚠️ 如果服务器使用firewalld而非iptables,上述命令无效,需改用 sudo firewall-cmd --direct --get-rules ipv4 filter INPUT | grep f2b 配合文本提取。
按jail维度逐个检查状态
fail2ban把不同服务的防护逻辑隔离在独立的jail中,比如sshd、nginx-badbots、postfix等。一个IP可能只在sshd中被ban,却仍能访问网站——所以必须明确目标jail。
第一步:列出所有启用的jailsudo fail2ban-client status,输出中带 enabled 标记的才是实际生效的防护单元。
第二步:对每个启用的jail单独查状态
例如看到 sshd 和 nginx-limit-req 都启用,就分别执行:sudo fail2ban-client status sshdsudo fail2ban-client status nginx-limit-req
第三步:在status输出中定位 Currently banned: 行,其后数字即为当前封禁IP数量;再执行对应 get xxx banned 命令获取具体IP列表。
这一步不能跳过——有些jail(如recidive)会跨服务长期封禁高危IP,仅查sshd可能漏掉真正的问题源头。


















