banhack233
HOST PROTECTION, MADE PRACTICAL
排障与 FAQv0.2.3

fail2ban / sshguard 风格 · 系统巡检 · 保活 · 通知 · 自启动

排障与常见问题

先定位“日志输入 → 计数 → 防火墙 → 通知”中的哪一层出了问题。status 会执行巡检;只观察时先确认 malware.direct_kill=false。命令参数见 命令参考,已知实现问题见 工作原理。

服务在运行,但没有封禁

检查 如何判断 下一步
真正使用的配置 systemctl cat banhack233 的 ExecStart 与预期一致吗 核对 -config,文件缺失会回退默认值
运行模式 dry_run=true 或 action=notify 吗 这是观察/通知模式,不会写真实封禁
白名单 来源是否落在某个 ignore_ips 或 CIDR 内 可信来源被跳过属于预期
日志输入 文件存在、可读、最近确有新失败日志吗 默认 start_at_end=true 首次跳过旧日志;journal-only 需先接入文本日志
计数条件 用户拆分、成功重置、地区阈值是否改变了预期 用隔离回放验证;显式地区配置会覆盖全球统一的默认阈值
后端动作 服务日志有 scan error / no nft or iptables found 吗 修复权限/后端;有 nft 但运行失败不会切换 iptables
端口与平台 SSH 是否在 TCP 22;是否使用 Windows/macOS 对照平台限制,规则存在不等于实际阻断

Linux 采集命令:

banhack233 version
sudo systemctl cat banhack233
sudo systemctl status banhack233 --no-pager
sudo journalctl -u banhack233 -n 100 --no-pager
sudo banhack233 ban-list

仅对主机实际使用的后端查询:sudo nft list table inet banhack233,或 sudo iptables -S INPUT / sudo ip6tables -S INPUT。iptables 的列表可能含其他系统规则,不要全部删除。

没输错五次,为什么已经触发

默认只计明确密码失败。跨文件重复转发、共享用户名、历史回放或自定义宽泛正则仍会增加计数;Windows 已保存事件 ID 并去重。用 safe-ssh 核对策略,再回放最小日志样本。

根据真实原始日志回放确认来源。若需求是“只统计密码错误”,替换规则的 patterns,使用 密码专用片段,同时保留成功重置和公司出口白名单。

白名单加了仍然连不上

白名单写入配置后需要重启。它不会创建网络层允许规则,也不会解除其他程序的封禁。检查服务器看到的出口 IP、IPv6、CIDR 是否正确;按 误封恢复步骤 显式解封,再检查云防火墙和 sshd 自身限制。MAC 地址无法穿过公网路由直接用于这种客户端识别。

期限到了还没解封,或者重启后状态不一致

检查守护进程是否活跃、是否改成 dry-run、上一次释放是否报错、是否还有另一条规则或用户计数对应的有效封禁。系统时钟变化也会影响记录的时间。内核规则和状态文件不是同一份数据:停服务、重启主机、手工清规则或恢复旧状态都需要分别核对两层。

自定义动作不提供通用自动撤销。不要为了“重置计数”直接删除生产状态文件:它同时保存到期释放所需的信息。

SSH 保活写了但仍断线

sudo sshd -t
sudo sshd -T
sudo sshd -T -C user=root,addr=203.0.113.10,host=client.example

用实际用户和来源替换最后一行,检查有效值中的 clientaliveinterval、clientalivecountmax、passwordauthentication、permitrootlogin 和 port。检查 Include/Match、服务 reload、新登录会话、客户端休眠和网络中断。24h 不是可用性保证;业务 TCP 长连接还受协议心跳和应用/代理超时约束。OpenSSH 有效配置测试

keepalive -write 不会自动应用 TCP 全局参数;只有明确使用 -tcp 才会写它们。它也不代表可以覆盖应用主动断开的逻辑。

通知没有收到或延迟

逐个渠道验证:

banhack233 notify-test -channel feishu
banhack233 notify-test -channel telegram
banhack233 notify-test -channel discord
banhack233 notify-test -channel slack
banhack233 notify-test -channel webhook:custom-json
banhack233 notify-test -channel email

Feishu/Lark 核对 webhook 与签名 secret、系统时间;Discord/Slack 核对对应渠道地址与权限;通用 webhook 核对 format、headers 和接收端日志。邮箱核对 SMTP 授权方式,使用自定义服务器时同时填 host 和 port。不要在工单里粘贴凭据。

独立工作协程每秒检查批次,每渠道 10 秒超时;失败渠道从持久队列重试,最长 24 小时。已检查 Telegram/飞书业务错误。仍应核对实收、队列与日志,见 通知排障。

扫描结果与报告

“没有明显特征”不能证明主机无入侵。临时目录程序和挖矿工具可能合法;巡检始终只读,手动清理默认关闭且限定已知入侵程序名。先核对路径、报告和持久化证据。

手动 malware-scan -name incident-review 会写报告;命令输出的路径是依据。报告名精确到秒,同名同秒会在名字后增加序号,避免覆盖已有报告。报告目录中所有 .txt 都参与按修改时间保留 N 份的淘汰,长期证据请复制到独立归档。

最小问题报告

提交 GitHub Issue 时附以下内容,原始凭据和完整生产配置留在本机:

版本/提交:
操作系统、架构、自启动方式:
SSH 实际监听端口、IPv4/IPv6:
命令(敏感值已替换)、退出码、发生时间/时区:
预期行为 / 实际行为:
实际 -config 路径及相关字段(已脱敏):
最少几行可复现的认证日志(保持结构,IP/用户名用占位值):
相关 scan error / 目标后端规则:
独立状态目录、dry_run=true 下能否复现:

webhook URL、签名 secret、SMTP 授权码、Authorization header 必须移除;IP、用户名、主机名和报告中的进程参数按需匿名化。不要上传整个 state.json 或真实 config.json。