系统极客一直在努力
专注操作系统及软件使用技能

实用指南:如何使用 SSHGuard 加固 SSH 服务器安全

SSHGuard

SSH(Secure Shell)是服务器管理中的重要工具,能够提供安全的远程访问。但是,SSH 服务器的安全性很大程度上取决于你所采取的防护措施。

SSHGuard 是一款强大的 SSH 安全助手,不仅能有效防范暴力破解攻击,还能应对其他常见威胁,极大提升服务器的安全性。接下来,本文将详细介绍如何在 Linux 系统上安装并配置 SSHGuard,帮助你进一步强化服务器安全。

什么是 SSHGuard?

SSHGuard 工具专为服务器安全防护而设计,特别擅长应付针对 SSH 服务的暴力破解攻击。

作为一款基于日志的入侵防御系统,SSHGuard 能实时监控服务器中的日志文件,识别恶意行为。你可以把它当作服务器的「智能门卫」,一旦检测到可疑活动,它就会自动调用防火墙规则封锁可疑 IP,从而将潜在威胁拒之门外。

SSHGuard 的灵活性和兼容性也是一大优势,比如:

  • 支持多种日志格式,能够适配不同系统和应用程序的日志输出。
  • 能与多种主流防火墙无缝集成,如 firewalld、iptables、nftables、IPFW 和 pf 等。

在 Linux 上安装 SSHGuard

SSHGuard 的安装相对简单,不同 Linux 发行版的操作略有不同。以下是各系统上的安装步骤。

Debian / Ubuntu / Linux Mint

在基于 Debian 的系统上,使用以下命令即可完成安装:

sudo apt install sshguard
在 Ubuntu 上安装 SSHGuard
在 Ubuntu 上安装 SSHGuard

Fedora

1对于 Fedora 用户,可使用 DNF 包管理器安装 SSHGuard:

sudo dnf install sshguard

由于 Fedora 默认使用 Firewalld 防火墙,安装 SSHGuard 时会自动添加 sshguard-firewalld 包。如果使用其他防火墙,可以选择安装 sshguard-iptables 或 sshguard-nftables。

2安装完成后,启用并启动 SSHGuard 服务:

sudo systemctl enable --now sshguard.service

Alma Linux / Rocky Linux

1在基于 RHEL 的发行版中,SSHGuard 包位于 EPEL 仓库,需要先添加 EPEL 仓库:

sudo dnf install epel-releasesudo dnf update

2然后安装 SSHGuard:

sudo dnf install sshguard

上述命令会默认安装 sshguard-firewalld 包。如果使用其他防火墙后端,可以选择 sshguard-iptables 或 sshguard-nftables。

3启用并启动 SSHGuard 服务:

sudo systemctl enable --now sshguard.service

SSHGuard 基本配置

SSHGuard 的主要配置文件是sshguard.conf,通过它你可以定制 SSHGuard 的行为,使其更贴合你的服务器环境和安全需求。

不同 Linux 发行版的配置文件位置略有不同:

  • Debian 系列(如 Debian、Ubuntu 等)位于:
/etc/sshguard/sshguard.conf
  • RHEL 系列(如 Alma Linux、Rocky Linux 和 Fedora)位于
/etc/sshguard.conf
编辑 SSHGuard 主配置文件
编辑 SSHGuard 主配置文件

以下是配置文件中的一些重要选项:

  • BACKEND:指定防火墙后端,如 sshg-fw-nft-sets、sshg-fw-firewalld、sshg-fw-iptables 或 sshg-fw-pf 等。
  • LOGREADER:定义日志读取方式,决定了 SSHGuard 如何检测恶意活动。
  • THRESHOLD:设置触发阻止的滥用次数。例如,设为 10 时,同一 IP 地址失败登录 10 次后将被屏蔽。
  • BLOCK_TIME:定义屏蔽时长(秒),默认为 120 秒,到期自动解封。
  • DETECTION_TIME:设定追踪可疑活动的时间窗口(秒),在此时间段内,重复违规会累计。
  • WHITELIST_FILE:设置白名单文件路径,白名单中的 IP 会永久放行。

通过调整这些配置,你可以根据服务器的攻击频率灵活设定响应策略。如频繁受攻击的服务器,可以降低THRESHOLD并增加BLOCK_TIME

建议先在测试环境中尝试不同配置,找到适合的平衡点,这样既能阻止攻击,又不会影响正常用户。

SSHGuard 配合 UFW/nftables

首先,需要澄清一个常见误解: UFW 是 Ubuntu 等系统的默认防火墙管理工具,它只是一个用户友好的界面,用于管理 iptables 或 nftables 防火墙规则。

1sshguard.conf配置文件中的BACKEND选项设置为/usr/libexec/sshguard/sshg-fw-nft-sets

2如果配置有变动,需要重启 SSHGuard 服务:

sudo systemctl restart sshguard

3要允许 SSHGuard 管理 UFW 规则,需要在 UFW 的before.rules配置文件中添加 SSHGuard 相关设置:

sudo vi /etc/ufw/before.rules

在「allow all on loopback」部分之后添加以下几行,创建 SSHGuard 专用链:

# 创建 SSHGuard 专用链
-A ufw-before-input -j SSHGUARD
-A ufw-before-output -j SSHGUARD
-A ufw-before-forward -j SSHGUARD
编辑 before.rules 配置文件
编辑 before.rules 配置文件

4重启 UFW 服务:

sudo systemctl restart ufw

配置完成后,SSHGuard 就能够与 UFW/nftables 联动,为你的服务器提供保护,有效防御暴力 SSH 攻击。

5你可以使用以下命令,列出 SSHGuard nftables 表中的被阻止的 IP 地址:

sudo nft list table sshguard

6还可以查看日志文件来监控 SSHGuard 的操作记录:

sudo tail -f /var/log/auth.log

SSHGuard 配合 iptables

如果使用 iptables 作为 SSHGuard 后端,按以下步骤操作:

1sshguard.conf配置文件中的BACKEND选项设置为/usr/libexec/sshguard/sshg-fw-iptables

2如果配置有变动,需重启 SSHGuard 服务:

sudo systemctl restart sshguard

3创建 SSHGuard 专用的 iptables 链:

sudo iptables -N sshguard

4将所有 SSH 流量(TCP 22 端口)引导至该链:

sudo iptables -A INPUT -p tcp --dport 22 -j sshguard

5使用 iptables-persistent 保存规则:

sudo apt install iptables-persistent
sudo iptables-save -f /etc/iptables/rules.v4

6可以通过以下命令,查看 SSHGuard 阻止的 IP 地址列表:

sudo iptables -L sshguard -n

7还可以实时监控 SSHGuard 的操作:

sudo journalctl -u sshguard -f

这个命令会显示 SSHGuard 的实时日志,让你可以看到它是如何响应潜在攻击的。

SSHGuard 配合 firewalld

Firewalld 是 RHEL 系列发行版(如 Alma Linux、Rocky Linux 和 Fedora)中广泛使用的防火墙管理工具。它支持防火墙区域的概念,可以为不同的网络连接或接口定义不同的信任级别。

你也可以将 firewalld 作为 SSHGuard 的后端,这种配置方式特别适合已经在使用 firewalld 的系统,它能让 SSHGuard 无缝集成到你现有的防火墙设置中,提供额外的安全层。

1sshguard.conf配置文件中的BACKEND选项设置为/usr/libexec/sshguard/sshg-fw-firewalld

2如果配置有变动,需重启 SSHGuard 服务:

sudo systemctl restart sshguard

SSHGuard 会将被阻止的 IP 地址添加到sshguard4 (用于 IPv4 地址)和sshguard6 (用于 IPv6 地址)这两个 ipset 规则中,这些规则会被添加到 firewalld 的「public」区域。

3(可选)如果你使用了不同的 firewalld 区域,可以按照以下方式设置规则。将<zone-name>替换为你想要使用的具体区域名称:

sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard4 drop"
sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard6 drop"

4重新加载 firewalld 服务让更改生效:

sudo systemctl reload firewalld

5要查看当前被 SSHGuard 阻止的 IP 地址列表,可以使用以下命令:

  • 对于 IPv4 地址:
sudo firewall-cmd --info-ipset=sshguard4
  • 对于 IPv6 地址:
sudo firewall-cmd --info-ipset=sshguard6

6你还可以实时监控 SSHGuard 的活动:

sudo journalctl -u sshguard -f

添加白名单

在 SSHGuard 中设置白名单可以让你信任的 IP 地址不至于被误封,下面我们就来看看如何配置。

1去掉sshguard.conf配置文件中WHITELIST_FILE选项的注释。

指定 WHITELIST_FILE 配置文件路径
指定 WHITELIST_FILE 配置文件路径

2白名单文件的位置因 Linux 发行版而异:

  • 在 Debian 系统(如 Ubuntu)上位于:
/etc/sshguard/whitelist
  • 在基于 RHEL 的系统(如 Alma、Rocky 和 Fedora)上位于:
/etc/sshguard.whitelist

3在白名单文件中添加信任的 IP 地址或网络范围::

192.168.0.34        # 单个 IP 地址
192.168.0.0/24      # 网络范围
myhost.domain.com   # 完全限定域名(FQDN)
编辑 SSHGuard 白名单配置文件
编辑 SSHGuard 白名单配置文件

4保存并重启 SSHGuard 服务:

sudo systemctl restart sshguard

总的来说,SSHGuard 是一款强大且灵活的安全工具,能够有效防护 SSH 服务器免受暴力破解攻击及其他威胁。通过合理的配置,再结合防火墙工具如 UFW、iptables 或 firewalld,可以大大增强服务器的安全性。要了解更多信息,请访问 SSHGuard 官方网站 或使用文档

赞(0) 赞赏

评论 抢沙发

微信赞赏