banhack233
HOST PROTECTION, MADE PRACTICAL
海外与跨时区v0.2.3

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

海外与跨时区使用

面向英文运维人员及跨时区团队。命令帮助和诊断输出使用英文;内置通知支持英文、简体中文。English · 命令参考

选择平台

平台 条件与范围
Linux amd64 / arm64 root 或 sudo、curl、CA 证书;自启动/更新依赖 systemd;封禁需要 nft 或 iptables;可读取的 SSH 认证文本日志
Windows amd64 / arm64 管理员 PowerShell、Windows OpenSSH 日志、Windows 防火墙;使用 SYSTEM 计划任务
macOS amd64 / arm64 sudo、launchd、认证文本日志,以及管理员维护的 PF 规则

安装器提供二进制和安全配置,不自动启动首次安装的防护服务。secure-ssh、keepalive、恶意程序扫描仅支持 Linux。详见平台边界与平台部署步骤。已经是 root 时,Linux 示例可省略 sudo。

Linux 首次部署

安装最新已发布正式版:

curl -fsSL https://raw.githubusercontent.com/neko233-com/banhack233/main/scripts/install.sh | sh
sudoedit /etc/banhack233/config.json

在现有 notifications 对象中设置以下字段,保留其他字段:

{
  "language": "en",
  "timezone": "UTC"
}

这是配置片段,不能覆盖整个配置文件。完整英文 Linux 示例使用英文通知、UTC、dry-run,不启用外部通知或地区例外。Windows/macOS 应保留 init-config 生成的平台路径,不要直接套用 Linux 路径。

保持 dry_run=true,核实 ssh_ports 与实际 SSH 监听端口一致,将公司/VPN 的公网出口 IPv4、IPv6 加入 ignore_ips。服务端看到的是公网出口,不是笔记本私网地址或 MAC。运行前替换 YOUR_PUBLIC_IP:

sudo banhack233 whitelist YOUR_PUBLIC_IP
sudo banhack233 config-check
sudo banhack233 notify-test -channel console
sudo banhack233 doctor
sudo banhack233 install-autostart
sudo systemctl status banhack233 --no-pager
sudo journalctl -u banhack233 -n 50 --no-pager

选择单一权威认证日志来源;只有 journald 的系统需先配置 SSH 文本日志导出。通过真实登录事件确认读取游标推进。不要用生产防火墙重放历史日志,也不要从唯一救援地址故意输错密码;可使用隔离 dry-run 回放验收。

观察 dry-run 并确认救援登录后,再开启实际封禁:

sudo banhack233 enable-production
sudo systemctl restart banhack233
sudo banhack233 status
sudo banhack233 auto-update -enable
sudo banhack233 auto-update -status

每日更新会安装校验通过的正式版并重启受管服务,保留配置、白名单与状态。详见更新与回滚。其他 SSH 封禁工具如同时运行,也必须维护一致的例外,避免重复封禁。

语言与时区

  • notifications.language:en 或 zh-CN;缺省/空值维持中文,兼容已有配置。
  • notifications.timezone:UTC、Local,或 Europe/London、America/New_York、Asia/Shanghai 等 IANA 时区。程序包含时区数据库,兼容精简系统和 Windows;命名时区支持夏令时。
  • Telegram、Discord、Slack、Feishu/Lark、通用 webhook、邮箱均可单独设置 language;渠道缺省/空值继承全局语言。
  • 翻译内置标题、字段、原因、时长和默认测试消息。自定义规则名、测试文字、进程详情、GeoIP 数据库地名保留原文。location_language 仅控制附加中文地名行,与正文 language 独立。
  • 通知时间包含数字 UTC 偏移,JSON 使用 RFC 3339 表示同一时刻;Discord 机器时间戳仍为 UTC。不修改日志时间、封禁时长、报告文件名、系统时钟或每日更新调度时间。

混合语言团队示例,合并到 notifications:

{
  "language": "en",
  "timezone": "UTC",
  "feishu": {"language": "zh-CN", "location_language": "zh-CN"},
  "discord": {"language": "en"},
  "email": {"language": "en"}
}

下载/构建二进制后,为尚不存在的配置创建英文版本:

sudo banhack233 init-config -language en -timezone UTC

已有文件会被拒绝覆盖;请编辑其语言字段,不要用 -force,后者会替换整个配置。修改后先 config-check 再重启。语言/时区功能需要 v0.2.3 或以上版本;旧版会拒绝新字段。

选择通知渠道

渠道 所需信息
Telegram Bot token、目标 chat ID;可选话题 ID
Discord 目标频道的 incoming webhook
Slack 工作区 incoming webhook
Lark / 飞书 对应租户的自定义机器人 webhook;可选签名密钥
邮箱 支持用户名/密码或应用凭据的 TLS SMTP 服务;可单独设置认证用户名
通用 webhook 可访问的 json/text 接收端,或支持的平台格式

通知指南包含凭据、服务环境、重试、测试和 SMTP 认证边界。notify-test 会实际向所选且启用的目标发送消息;未配置目标和凭据前保持渠道关闭。

网络、代理与离线安装

安装/更新需要 HTTPS 访问 GitHub、API 与重定向后的 Release 资产域名。通知只需访问已启用渠道。SSH 检测与本地防火墙执行不依赖通知服务在线;失败消息进入有界队列。

HTTP 通知与 Go 更新器读取各自进程环境的 HTTPS_PROXY、HTTP_PROXY、NO_PROXY。systemd 可通过 drop-in 指定私有 EnvironmentFile。防护服务和 banhack233-update.service 独立,需要代理时分别配置。终端 export 不会自动进入 systemd 或 Windows SYSTEM 任务;SMTP 使用直连 TCP,不走 HTTP 代理。保持 CA 证书与主机时间正确,不关闭证书校验。

无法访问 GitHub 的机器,可在有网络的电脑从同一个已发布 Release 下载对应系统/架构资产与 SHA256SUMS.txt,通过可信通道传入。Linux amd64 示例,在下载目录执行:

(
  set -eu
  test ! -e /usr/local/bin/banhack233
  test ! -e /etc/banhack233/config.json
  awk '$2 == "banhack233-linux-amd64" {print}' SHA256SUMS.txt > binary.sha256
  test "$(wc -l < binary.sha256)" -eq 1
  sha256sum -c binary.sha256
  chmod +x banhack233-linux-amd64
  ./banhack233-linux-amd64 version
  sudo install -m 755 banhack233-linux-amd64 /usr/local/bin/banhack233
  sudo banhack233 init-config -language en -timezone UTC
)

逐条执行,前一步成功再继续。这是首次安装流程;已有主机按备份与回滚处理。macOS 用 shasum -a 256,Windows 用 Get-FileHash -Algorithm SHA256,对照精确资产条目并使用各平台路径。校验和验证相对于 Release 清单的完整性,不是独立发布签名。自动更新需要联网;离线主机可关闭。

地理位置为可选项

新默认配置全球统一使用 5 次阈值;region_rules 是显式可选覆盖,已有配置保留已写入的地区例外。GeoIP 仅补充信息,不是设备身份或恶意证据。数据库缺失时使用基础阈值,IPv6 防护不依赖地理查询。首次防护不要求下载 GeoIP 或调用外部定位接口。共享出口应优先使用明确白名单,不因国家归属就信任整个地区。

获取帮助

支持英文 Issue。提供版本、系统/架构、执行命令、预期行为、退出码和脱敏后的相关日志;不要上传完整配置、环境变量、SSH 密码、token、webhook URL 或私有状态文件。排障指南覆盖日志、通知与恢复。HTML 页面提供对应语言、源码标签和 Release 链接;正式版同时提供离线 HTML 包。