天天看點

如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊

如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊

在這篇指導教程中,我會示範如何安裝并配置 fail2ban 來保護 ssh 伺服器以避免來自遠端ip位址的暴力攻擊。

<a target="_blank"></a>

$ sudo yum install fail2ban

在fedora上安裝fail2ban,簡單地運作以下指令:

在ubuntu,debian 或 linux mint上安裝fail2ban:

$ sudo apt-get install 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, [email protected], [email protected]]

# 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連接配接到伺服器模拟一個暴力破解攻擊。與此同時,監控 /var/log/fail2ban.log,該檔案記錄在fail2ban中發生的任何敏感事件。

$ sudo tail -f /var/log/fail2ban.log

如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊

根據上述的日志檔案,fail2ban通過檢測ip位址的多次失敗登入嘗試,禁止了一個ip位址192.168.1.8。

由于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)

chain output (policy accept)

chain fail2ban-ssh (1 references)

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位址清單。

如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊

為了解鎖特定的ip位址:

$ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8

如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊

注意,如果你停止了fail2ban 服務,那麼所有的ip位址都會被解鎖。當你重新開機 fail2ban,它會從/etc/log/secure(或 /var/log/auth.log)中找到異常的ip位址清單,如果這些異常位址的發生時間仍然在禁止時間内,那麼fail2ban會重新将這些ip位址禁止。

一旦你成功地測試了fail2ban之後,最後一個步驟就是在你的伺服器上讓其在開機時自動啟動。在基于debian的發行版中,fail2ban已經預設讓自動啟動生效。在基于red-hat的發行版中,按照下面的方式讓自動啟動生效。

在 centos/rhel 6中:

$ sudo chkconfig fail2ban on

$ sudo systemctl enable fail2ban

在該教程中,我示範了如何安裝并配置fail2ban來保護一個ssh伺服器。當然fail2ban可以緩解暴力密碼攻擊,但是請注意,這并不能保護ssh伺服器避免來自複雜的分布式暴力破解組織,這些攻擊者通過使用成千上萬個機器控制的ip位址來繞過fail2ban的防禦機制。

----------------------------------------------------------------------------------------------------------------------------

繼續閱讀