如何使用 SSHGUARD 阻止 SSH 暴力攻擊
概述
SSHGuard是一個(gè)入侵防御實(shí)用程序,它可以解析日志并使用系統(tǒng)防火墻自動(dòng)阻止行為不端的 IP 地址(或其子網(wǎng))。最初旨在為 OpenSSH 服務(wù)提供額外的保護(hù)層,SSHGuard 還保護(hù)范圍廣泛的服務(wù),例如 Vsftpd 和 Postfix。它可以識(shí)別多種日志格式,包括 Syslog、Syslog-ng 和原始日志文件。SSHGuard 與 Fail2ban 非常相似,只是它是用 C 編寫的(Fail2ban 是用 Python 編寫的),更輕巧,提供的功能更少。
在本指南中,我們將演示如何安裝和配置 SSHGuard 以阻止 Linux 服務(wù)器中的 SSH 暴力攻擊。
第一步:在 Linux 上安裝 SSHGuard
在 Debian/Ubuntu 上安裝 SSHGuard
首先,更新軟件包列表,然后使用 apt 軟件包管理器從默認(rèn)存儲(chǔ)庫安裝 SSHGuard。
$ sudo apt update
$ sudo apt install sshguard
安裝后,SSHGuard 服務(wù)會(huì)自動(dòng)啟動(dòng),您可以使用以下命令進(jìn)行驗(yàn)證:
$ sudo systemctl status sshguard
在 Yum/RHEL 系統(tǒng)上安裝 SSHGuard
對(duì)于基于 RHEL 的發(fā)行版,例如 CentOS,首先安裝 EPEL 存儲(chǔ)庫。
$ sudo yum install epel-release
或者
$ sudo dnf install epel-release
有了 EPEL,繼續(xù)使用 dnf 包管理器安裝 SSHGuard。
$ sudo dnf install sshguard
安裝后啟動(dòng)并將 SSHGuard 設(shè)置為隨系統(tǒng)自啟。
$ sudo systemctl start sshguard
$ sudo systemctl enable sshguard
檢查 SSHGuard 運(yùn)行狀態(tài)。
$ sudo systemctl status sshguard
第 二 步:Linux 上的 SSHGuard 配置
SSHGuard 會(huì)主動(dòng)監(jiān)控 /var/log/auth.log、/var/log/secure systemd 日志和 syslog-ng 日志文件以查找失敗的登錄嘗試。
對(duì)于每次不成功的登錄嘗試,遠(yuǎn)程主機(jī)將被禁止一段時(shí)間,默認(rèn)設(shè)置為 120 秒。此后,每次連續(xù)失敗的登錄嘗試,禁令時(shí)間都會(huì)增加 1.5 倍。
禁止違規(guī)主機(jī)的時(shí)間以及其他參數(shù)在 sshguard.conf 文件中指定。您可以使用 vim 編輯器訪問配置文件。
$ sudo vim /etc/sshguard/sshguard.conf
在基于 RHEL 的發(fā)行版上,配置文件位于以下路徑中。
$ sudo vim /etc/sshguard.conf
這是從 Ubuntu / Debian 查看時(shí)的配置文件示例。
主要選項(xiàng):
- BACKEND:指令指向后端可執(zhí)行文件的完整路徑。在這個(gè)例子中,我們看到 IPtables 被設(shè)置為默認(rèn)的防火墻后端。
- THRESHOLD:指令在攻擊者的攻擊分?jǐn)?shù)超過指定值時(shí)阻止攻擊者。
- BLOCK_TIME:選項(xiàng)是在每次連續(xù)失敗的登錄嘗試后阻止攻擊者的秒數(shù)。默認(rèn)情況下,第一次嘗試后設(shè)置為 120。這會(huì)隨著每次連續(xù)失敗的登錄嘗試而增加。
- DETECTION_TIME:選項(xiàng)是指攻擊者在其得分被重置之前被系統(tǒng)注冊(cè)或記住的時(shí)間(以秒為單位)。
- WHITELIST_file:選項(xiàng)指向包含不應(yīng)列入黑名單的主機(jī)的白名單文件的完整路徑。
第三 步:配置 SSHGuard 以阻止 SSH 暴力攻擊
為了抵御暴力攻擊,您需要在以下防火墻上進(jìn)行配置以使用 sshguard。
使用 UFW 阻止 SSH 攻擊
如果您在 Ubuntu / Debian 系統(tǒng)上安裝并啟用了 UFW,請(qǐng)修改 /etc/ufw/before.rules 文件。
$ sudo vim etc/ufw/before.rules
$ sudo vim etc/ufw/before.rules
在“allow all on loopback”部分之后添加以下行。
# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
# hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard
保存文件并重新啟動(dòng) UFW。
$ sudo systemctl restart ufw
現(xiàn)在嘗試使用錯(cuò)誤的憑據(jù)從不同的系統(tǒng)登錄服務(wù)器,并注意在第一次登錄嘗試失敗后您將被鎖定 120 秒。
您可以通過檢查 auth.log 日志文件來驗(yàn)證這一點(diǎn)。
$ sudo tail -f /var/log/auth.log
在下一次失敗的日志嘗試之后,阻塞時(shí)間增加到 240 秒,然后是 480 秒,然后是 960 秒,依此類推。
使用 Firewalld 阻止 SSH 攻擊
如果您正在運(yùn)行 firewalld,請(qǐng)確保已設(shè)置并啟用它。然后執(zhí)行以下命令以在您的首選區(qū)域上啟用 sshguard。
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"
要應(yīng)用更改,請(qǐng)重新加載 Firewalld 和 sshguard。
$ sudo firewall-cmd --reload
$ sudo systemctl restart sshguard
然后驗(yàn)證規(guī)則如下:
$ sudo firewall-cmd —ipset=sshguard4
使用 iptables 阻止 SSH 攻擊
如果您仍在使用 Iptables,首先,在 Iptables 中為 sshguard 創(chuàng)建一個(gè)新的鏈?zhǔn)揭?guī)則,以阻止不需要的訪客。
# iptables -N sshguard
接下來,更新 INPUT 鏈以將流量引導(dǎo)至 sshguard 并阻止來自惡意方的所有流量。
# iptables -A INPUT -j sshguard
要阻止濫用者訪問特定端口,例如 SSH、POP 和 IMAP,請(qǐng)運(yùn)行以下命令:
# iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard
最后,保存規(guī)則以使更改生效。
# iptables-save > /etc/iptables/iptables.rules
第四 步:如何將 SSH 阻止的主機(jī)列入白名單
要將被阻止的主機(jī)列入白名單,只需在白名單文件中指定其主機(jī)名或 IP 地址即可:
/etc/sshguard/whitelist - Ubuntu/Debian
/etc/sshguard.whitelist - RHEL-based distros
之后,請(qǐng)務(wù)必重新啟動(dòng) sshguard 守護(hù)程序和防火墻后端以應(yīng)用更改。
小結(jié)
在本指南中,我們演示了如何在 Linux 系統(tǒng)上使用 SSHGuard 阻止 SSH Bruteforce 攻擊。