如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊
對於SSH服務的常見的攻擊就是暴力破解攻擊——遠端攻擊者透過不同的密碼來無限次地進行登入嘗試。當然SSH可以設定使用非密碼驗證驗證方式來對抗這種攻擊,例如公鑰驗證或者雙重驗證。將不同的驗證方法的優劣處先放在一邊,如果我們必須使用密碼驗證方式怎麼辦?你是如何保護你的 SSH 伺服器免遭暴力破解攻擊的呢?
fail2ban 是 Linux 上的一個著名的入侵保護的開源框架,它會監控多個系統的日誌檔案(例如:/var/log/auth.log 或者 /var/log/secure)並根據檢測到的任何可疑的行為自動觸發不同的防禦動作。事實上,fail2ban 在防禦對SSH伺服器的暴力密碼破解上非常有用。
在這篇指導教程中,我會演示如何安裝並配置 fail2ban 來保護 SSH 伺服器以避免來自遠端IP地址的暴力攻擊。
在linux上安裝Fail2ban
為了在CentOS 或 RHEL上安裝fail2ban,首先設定EPEL倉庫,然後執行以下命令。
$ sudo yum install fail2ban
在Fedora上安裝fail2ban,簡單地執行以下命令:
$ sudo yum install fail2ban
在ubuntu,Debian 或 Linux Mint上安裝fail2ban:
$ sudo apt-get install fail2ban
為SSH伺服器配置Fail2ban
現在你已經準備好了透過配置 fail2ban 來加強你的SSH伺服器。你需要編輯其配置檔案 /etc/fail2ban/jail.conf。 在配置檔案的“[DEFAULT]”區,你可以在此定義所有受監控的服務的預設引數,另外在特定服務的配置部分,你可以為每個服務(例如SSH,Apache等)設定特定的配置來覆蓋預設的引數配置。
在針對服務的監獄區(在[DEFAULT]區後面的地方),你需要定義一個[ssh-iptables]區,這裡用來定義SSH相關的監獄配置。真正的禁止IP地址的操作是透過iptables完成的。
下面是一個包含“ssh-iptables”監獄配置的/etc/fail2ban/jail.conf的檔案樣例。當然根據你的需要,你也可以指定其他的應用監獄。
$ sudo vi /etc/fail2ban/jail.local
[DEFAULT] # 以空格分隔的列表,可以是 IP 地址、CIDR 字首或者 DNS 主機名 # 用於指定哪些地址可以忽略 fail2ban 防禦 ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24 # 客戶端主機被禁止的時長(秒) bantime = 86400 # 客戶端主機被禁止前允許失敗的次數 maxretry = 5 # 查詢失敗次數的時長(秒) findtime = 600 mta = sendmail [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com] # Debian 系的發行版 logpath = /var/log/auth.log # Red Hat 系的發行版 logpath = /var/log/secure # ssh 服務的最大嘗試次數 maxretry = 3
根據上述配置,fail2ban會自動禁止在最近10分鐘內有超過3次訪問嘗試失敗的任意IP地址。一旦被禁,這個IP地址將會在24小時內一直被禁止訪問 SSH 服務。這個事件也會透過sendemail傳送郵件通知。
一旦配置檔案準備就緒,按照以下方式重啟fail2ban服務。
在 Debian, Ubuntu 或 CentOS/RHEL 6:
$ sudo service fail2ban restart
在 Fedora 或 CentOS/RHEL 7:
$ sudo systemctl restart fail2ban
為了驗證fail2ban成功執行,使用引數'ping'來執行fail2ban-client 命令。 如果fail2ban服務正常執行,你可以看到“pong(嘭)”作為響應。
$ sudo fail2ban-client ping Server replied: pong
測試 fail2ban 保護SSH免遭暴力破解攻擊
為了測試fail2ban是否能正常工作,嘗試透過使用錯誤的密碼來用SSH連線到伺服器模擬一個暴力破解攻擊。與此同時,監控 /var/log/fail2ban.log,該檔案記錄在fail2ban中發生的任何敏感事件。
$ sudo tail -f /var/log/fail2ban.log
根據上述的日誌檔案,Fail2ban透過檢測IP地址的多次失敗登入嘗試,禁止了一個IP地址192.168.1.8。
檢查fail2ban狀態並解禁被鎖住的IP地址
由於fail2ban的“ssh-iptables”監獄使用iptables來阻塞問題IP地址,你可以透過以下方式來檢測當前iptables來驗證禁止規則。
$ sudo iptables --list -n
Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-SSH (1 references) target prot opt source destination DROP all -- 192.168.1.8 0.0.0.0/0 RETURN all -- 0.0.0.0/0 0.0.0.0/0
如果你想要從fail2ban中解鎖某個IP地址,你可以使用iptables命令:
$ sudo iptables -D fail2ban-SSH -s 192.168.1.8 -j DROP
當然你可以使用上述的iptables命令手動地檢驗和管理fail2ban的IP阻塞列表,但實際上有一個適當的方法就是使用fail2ban-client命令列工具。這個命令不僅允許你對"ssh-iptables"監獄進行管理,同時也是一個標準的命令列介面,可以管理其他型別的fail2ban監獄。
為了檢驗fail2ban狀態(會顯示出當前活動的監獄列表):
$ sudo fail2ban-client status
為了檢驗一個特定監獄的狀態(例如ssh-iptables):
$ sudo fail2ban-client status ssh-iptables
上面的命令會顯示出被禁止IP地址列表。
為了解鎖特定的IP地址:
$ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8
注意,如果你停止了Fail2ban 服務,那麼所有的IP地址都會被解鎖。當你重啟 Fail2ban,它會從/etc/log/secure(或 /var/log/auth.log)中找到異常的IP地址列表,如果這些異常地址的發生時間仍然在禁止時間內,那麼Fail2ban會重新將這些IP地址禁止。
設定 Fail2ban 自動啟動
一旦你成功地測試了fail2ban之後,最後一個步驟就是在你的伺服器上讓其在開機時自動啟動。在基於Debian的發行版中,fail2ban已經預設讓自動啟動生效。在基於Red-Hat的發行版中,按照下面的方式讓自動啟動生效。
在 CentOS/RHEL 6中:
$ sudo chkconfig fail2ban on
在 Fedora 或 CentOS/RHEL 7:
$ sudo systemctl enable fail2ban
總結
在該教程中,我演示瞭如何安裝並配置fail2ban來保護一個SSH伺服器。當然fail2ban可以緩解暴力密碼攻擊,但是請注意,這並不能保護SSH伺服器避免來自複雜的分散式暴力破解組織,這些攻擊者透過使用成千上萬個機器控制的IP地址來繞過fail2ban的防禦機制。
via: http://xmodulo.com/how-to-protect-ssh-server-from-brute-force-attacks-using-fail2ban.html
相關文章
- 伺服器如何防禦CC攻擊伺服器
- DDOS伺服器防禦的方法有哪些,如何防禦DDOS攻擊伺服器
- 高防伺服器如何防禦網路攻擊伺服器
- 使用 fail2ban 防 linux ssh 被暴力破解AILinux
- 高防伺服器主要防禦的攻擊伺服器
- Jenkins如何使用CrumbIssuer防禦CSRF攻擊Jenkins
- 網站被攻擊如何防禦網站
- 如何使用負載均衡裝置防禦攻擊負載
- CC攻擊的原理是什麼?如何防禦CC攻擊?
- WEB攻擊與防禦Web
- CSRF攻擊與防禦
- 如何使用Linux命令來防禦網路攻擊?Linux
- 伺服器防禦流量攻擊的簡單方法!伺服器
- 淺談DDOS攻擊攻擊與防禦
- XXE攻擊攻擊原理是什麼?如何防禦XXE攻擊?
- 【知識科普】高防伺服器防禦CC攻擊的原理伺服器
- 如何在 Apache 中抵禦暴力破解和 DDos 攻擊Apache
- 恆訊科技分析:香港伺服器如何防禦勒索病毒的攻擊?伺服器
- 直播行業如何防禦網路攻擊?行業
- 電商平臺如何防禦網路攻擊?
- DevOps 團隊如何防禦 API 攻擊devAPI
- 美國高防伺服器防禦能無視任何攻擊?伺服器
- 【知識分享】伺服器防禦cc攻擊的方法伺服器
- 伺服器被DDOS攻擊防禦的SHELL指令碼伺服器指令碼
- XXE攻擊是什麼?如何有效防禦XXE攻擊?
- web常見的攻擊方式有哪些?如何防禦?Web
- fail2ban 防止ssh暴力破解AI
- 【網路安全】如何有效地防禦DDOS攻擊和CC攻擊?
- CC攻擊原理是什麼?網站被CC攻擊如何防禦?網站
- 什麼是CC攻擊?網站被CC攻擊該如何防禦?網站
- 網際網路公司如何防禦DDoS攻擊?
- Java HTTP Host 頭攻擊原理以及如何防禦JavaHTTP
- 常見網路攻擊有哪些?如何防禦?
- 伺服器為什麼經常被攻擊?DDoS攻擊和防禦介紹伺服器
- 【知識分享】伺服器遭受攻擊的方式,如何抵禦攻擊?伺服器
- 【知識分享】高防伺服器是如果防禦網路攻擊的伺服器
- cc攻擊防禦解決方法
- 淺談DDos攻擊與防禦