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
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
以下是配置文件中的一些重要选项:
- 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 防火墙规则。
1将sshguard.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
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 后端,按以下步骤操作:
1将sshguard.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 无缝集成到你现有的防火墙设置中,提供额外的安全层。
1将sshguard.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
选项的注释。
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)
4保存并重启 SSHGuard 服务:
sudo systemctl restart sshguard
总的来说,SSHGuard 是一款强大且灵活的安全工具,能够有效防护 SSH 服务器免受暴力破解攻击及其他威胁。通过合理的配置,再结合防火墙工具如 UFW、iptables 或 firewalld,可以大大增强服务器的安全性。要了解更多信息,请访问 SSHGuard 官方网站 或使用文档。
最新评论
尝试了一下,居然被你发现了🥹
咦!这个月的视频居然翻译了,站长越来越勤劳了啊!
应该是通过 VMware 更新服务器偷鸡成功🤭
感谢!可以下载,使用多线程下载可以下的更快