内容提要
HostGuard 是一款 Linux 主机安全工具,通过 Web 控制台集成 SSH 登录检测、恶意 IP 自动封禁、安全组规则、端口监听与操作审计。它支持两种防护模式,可识别 SSH 端口并管理 Docker 端口,通过 Docker Compose 部署,由 Nginx 提供 HTTPS 访问。
延伸解读
SSH 防护的封禁逻辑与共享出口风险
HostGuard 的 SSH 防护以来源 IP 为封禁对象,无效用户或允许用户连续密码失败达到阈值(默认 3 次/10 分钟)会触发永久封禁,需手动解除。这意味着如果多个管理员共用同一 NAT 或 VPN 出口,其中一人的失败登录可能导致整个出口 IP 被封锁,影响其他人。部署后应核对允许登录的用户名和实际管理网络,避免误伤。
两种防护模式的适用场景与注意事项
HostGuard 提供公网行为防护和严格来源准入两种模式。前者允许公网建立 SSH 连接,再根据登录行为封禁,适合管理员公网 IP 经常变化的情况;后者仅允许配置的 IP 或 CIDR 连接,其他来源在网络层丢弃,适合有固定办公出口或 VPN 的场景。需注意,严格模式中的允许来源仍受登录失败封禁规则约束,加入名单不代表可以无限尝试密码。
Docker 端口映射下的安全组控制要点
HostGuard 的安全组规则可以覆盖宿主机直接监听的服务以及 Docker 使用 ports 发布的端口。对于 Docker 发布端口,控制的是外部客户端访问的宿主机端口,而非容器内部端口。例如端口映射为 8443:443 时,需要控制的对外入口是 TCP 8443。配置规则前,可通过端口监听页面确认服务实际监听地址和关联的 Docker 容器信息,避免规则错位。
部署架构与安全隔离设计
HostGuard 通过 Docker Compose 启动三个服务:backend 使用 host 网络和 host PID,并授予 NET_ADMIN、SYS_PTRACE 权限以管理防火墙和读取进程信息;frontend 监听 TCP 19443 提供 Web 控制台;docker-metadata 无网络、移除所有 capabilities,仅通过 Unix Socket 提供 Docker 元数据。这种设计在功能必要性与最小权限之间做了平衡,但 backend 的高权限也意味着需确保其镜像来源可信。
Q&A
HostGuard 是什么?它主要解决哪些问题?
HostGuard 是一款 Linux 主机安全工具,通过 Web 控制台集成 SSH 登录检测、恶意 IP 自动封禁、安全组规则、端口监听和操作审计。它主要解决 SSH 开放后登录失败、无效用户探测和暴力破解持续出现的问题,以及防火墙规则复杂、Docker 发布端口是否受控、修改规则可能锁死服务器等日常运维难题。
HostGuard 的 SSH 自动封禁规则是怎样的?
HostGuard 默认持续读取 systemd journal 中的 SSH 登录事件,识别无效用户名、密码认证失败等行为,并通过 nftables 或 iptables 封禁来源 IP。无效用户或不在允许名单中的用户名命中登录事件后永久封禁来源 IP;允许用户在统计窗口内连续密码认证失败达到阈值(默认 3 次,窗口 10 分钟)后永久封禁来源 IP。成功认证会重置连续失败计数,永久封禁需管理员手动解除。
HostGuard 的两种 SSH 防护模式有什么区别?分别适合什么场景?
HostGuard 提供两种模式:公网行为防护允许公网来源建立 SSH 连接,再根据登录行为执行封禁,适合管理员公网 IP 经常变化、需要从不同网络登录的场景;严格来源准入仅允许配置的 IP 或 CIDR 连接 SSH,其他来源在网络层被丢弃,适合有固定办公出口、固定 VPN 出口或明确运维网段的场景。严格模式中的允许来源仍受登录失败封禁规则约束。
HostGuard 如何管理 Docker 发布端口的安全组规则?
HostGuard 的安全组规则可以覆盖宿主机直接监听的服务以及 Docker 使用 ports 发布的端口。对于 Docker 发布端口,HostGuard 会按外部客户端访问的宿主机端口进行控制。例如端口映射为 8443:443,需要控制的对外入口就是 TCP 8443。
如何部署 HostGuard?需要哪些前置条件?
部署 HostGuard 需要一台安装了 Docker Engine 和 Docker Compose 插件的 Linux 主机,并确认 SSH 服务正在运行。默认部署使用 systemd journal,因此优先使用具备 systemd 和 SSH journal 记录的 Linux 环境。部署时创建 /data/hostguard/ 目录,编写 docker-compose.yaml,导入提供的 Docker 镜像 tar 包,然后执行 docker compose up -d 启动服务。
HostGuard 首次登录如何获取初始密码?
空数据库首次启动时,HostGuard 会创建 admin 管理员,并将随机初始化密码写入宿主机数据目录。可以通过 sudo cat backend/data/bootstrap-password 查看初始密码,使用 admin、初始化密码和页面图形验证码登录。密码文件仅允许文件所有者读写;已有账号不会因为重启服务而被重置。首次登录后,在“用户中心”设置专用密码,新密码至少需要 12 个字符。
HostGuard 如何通过 Nginx 配置 HTTPS 访问?
对外管理时,可以使用宿主机 Nginx 提供 HTTPS。仓库已提供 deploy/hostguard.nginx.conf,访问链路为:浏览器 HTTPS :443 → 宿主机 Nginx → 127.0.0.1:19443 前端 → 127.0.0.1:19080 后端 API。部署前准备好域名解析、宿主机 Nginx 和有效 TLS 证书,然后编辑配置,将 hostguard.example.com 和证书路径替换为实际值,复制到 /etc/nginx/conf.d/hostguard.conf,执行 sudo nginx -t 测试并 sudo systemctl reload nginx 重载。