歡迎光臨
每天分享高質量文章

如何在 Linux 上用 Fail2Ban 保護伺服器免受暴力攻擊 | Linux 中國

任何連線到網際網路的機器都是惡意攻擊的潛在標的。 有一個名為 Fail2Ban 的工具可用來緩解伺服器上的非法訪問。
— Magesh Maruthamuthu


本文導航
編譯自 | https://www.2daygeek.com/how-to-install-setup-configure-fail2ban-on-linux/ 
 作者 | Magesh Maruthamuthu
 譯者 | Flowsnow

Linux 管理員的一個重要任務是保護伺服器免受非法攻擊或訪問。 預設情況下,Linux 系統帶有配置良好的防火牆,比如iptables、Uncomplicated Firewall(UFW),ConfigServer Security Firewall(CSF)等,可以防止多種攻擊。

任何連線到網際網路的機器都是惡意攻擊的潛在標的。 有一個名為 Fail2Ban 的工具可用來緩解伺服器上的非法訪問。

什麼是 Fail2Ban?

Fail2Ban[1] 是一款入侵防禦軟體,可以保護伺服器免受暴力攻擊。 它是用 Python 程式語言編寫的。 Fail2Ban 基於auth 日誌檔案工作,預設情況下它會掃描所有 auth 日誌檔案,如 /var/log/auth.log/var/log/apache/access.log 等,並禁止帶有惡意標誌的IP,比如密碼失敗太多,尋找漏洞等等標誌。

通常,Fail2Ban 用於更新防火牆規則,用於在指定的時間內拒絕 IP 地址。 它也會傳送郵件通知。 Fail2Ban 為各種服務提供了許多過濾器,如 ssh、apache、nginx、squid、named、mysql、nagios 等。

Fail2Ban 能夠降低錯誤認證嘗試的速度,但是它不能消除弱認證帶來的風險。 這隻是伺服器防止暴力攻擊的安全手段之一。

如何在 Linux 中安裝 Fail2Ban

Fail2Ban 已經與大部分 Linux 發行版打包在一起了,所以只需使用你的發行包版的包管理器來安裝它。

對於 Debian / Ubuntu,使用 APT-GET 命令[2]或 APT 命令[3]安裝。

  1. $ sudo apt install fail2ban

對於 Fedora,使用 DNF 命令[4]安裝。

  1. $ sudo dnf install fail2ban

對於 CentOS/RHEL,啟用 EPEL 庫[5]或 RPMForge[6] 庫,使用 YUM 命令[7]安裝。

  1. $ sudo yum install fail2ban

對於 Arch Linux,使用 Pacman 命令[8]安裝。

  1. $ sudo pacman -S fail2ban

對於 openSUSE , 使用 Zypper命令[9]安裝。

  1. $ sudo zypper in fail2ban

如何配置 Fail2Ban

預設情況下,Fail2Ban 將所有配置檔案儲存在 /etc/fail2ban/ 目錄中。 主配置檔案是 jail.conf,它包含一組預定義的過濾器。 所以,不要編輯該檔案,這是不可取的,因為只要有新的更新,配置就會重置為預設值。

只需在同一目錄下建立一個名為 jail.local 的新配置檔案,並根據您的意願進行修改。

  1. # cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

預設情況下,大多數選項都已經配置的很完美了,如果要啟用對任何特定 IP 的訪問,則可以將 IP 地址新增到 ignoreip 區域,對於多個 IP 的情況,用空格隔開 IP 地址。

配置檔案中的 DEFAULT 部分包含 Fail2Ban 遵循的基本規則集,您可以根據自己的意願調整任何引數。

  1. # nano /etc/fail2ban/jail.local

  2. [DEFAULT]

  3. ignoreip = 127.0.0.1/8 192.168.1.100/24

  4. bantime = 600

  5. findtime = 600

  6. maxretry = 3

  7. destemail = 2daygeek@gmail.com

◈ ignoreip:本部分允許我們列出 IP 地址串列,Fail2Ban 不會禁止與串列中的地址匹配的主機
◈ bantime:主機被禁止的秒數
◈ findtime:如果在最近 findtime 秒期間已經發生了 maxretry 次重試,則主機會被禁止
◈ maxretry:是主機被禁止之前的失敗次數

如何配置服務

Fail2Ban 帶有一組預定義的過濾器,用於各種服務,如 ssh、apache、nginx、squid、named、mysql、nagios 等。 我們不希望對配置檔案進行任何更改,只需在服務區域中新增 enabled = true 這一行就可以啟用任何服務。 禁用服務時將 true 改為 false 即可。

  1. # SSH servers

  2. [sshd]

  3. enabled = true

  4. port = ssh

  5. logpath = %(sshd_log)s

  6. backend = %(sshd_backend)s

◈ enabled: 確定服務是開啟還是關閉。
◈ port:指明特定的服務。 如果使用預設埠,則服務名稱可以放在這裡。 如果使用非傳統埠,則應該是埠號。
◈ logpath:提供服務日誌的位置
◈ backend:指定用於獲取檔案修改的後端。

重啟 Fail2Ban

進行更改後,重新啟動 Fail2Ban 才能生效。

  1. [For SysVinit Systems]

  2. # service fail2ban restart

  3. [For systemd Systems]

  4. # systemctl restart fail2ban.service

驗證 Fail2Ban iptables 規則

你可以使用下麵的命令來確認是否在防火牆中成功添加了Fail2Ban iptables 規則。

  1. # iptables -L

  2. Chain INPUT (policy ACCEPT)

  3. target prot opt source destination

  4. f2b-apache-auth tcp -- anywhere anywhere multiport dports http,https

  5. f2b-sshd tcp -- anywhere anywhere multiport dports 1234

  6. ACCEPT tcp -- anywhere anywhere tcp dpt:1234

  7. Chain FORWARD (policy ACCEPT)

  8. target prot opt source destination

  9. Chain OUTPUT (policy ACCEPT)

  10. target prot opt source destination

  11. Chain f2b-apache-auth (1 references)

  12. target prot opt source destination

  13. RETURN all -- anywhere anywhere

  14. Chain f2b-sshd (1 references)

  15. target prot opt source destination

  16. RETURN all -- anywhere anywhere

如何測試 Fail2Ban

我做了一些失敗的嘗試來測試這個。 為了證實這一點,我要驗證 /var/log/fail2ban.log 檔案。

  1. 2017-11-05 14:43:22,901 fail2ban.server [7141]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6

  2. 2017-11-05 14:43:22,987 fail2ban.database [7141]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'

  3. 2017-11-05 14:43:22,996 fail2ban.database [7141]: WARNING New database created. Version '2'

  4. 2017-11-05 14:43:22,998 fail2ban.jail [7141]: INFO Creating new jail 'sshd'

  5. 2017-11-05 14:43:23,002 fail2ban.jail [7141]: INFO Jail 'sshd' uses poller {}

  6. 2017-11-05 14:43:23,019 fail2ban.jail [7141]: INFO Initiated 'polling' backend

  7. 2017-11-05 14:43:23,019 fail2ban.filter [7141]: INFO Set maxRetry = 5

  8. 2017-11-05 14:43:23,020 fail2ban.filter [7141]: INFO Set jail log file encoding to UTF-8

  9. 2017-11-05 14:43:23,020 fail2ban.filter [7141]: INFO Added logfile = /var/log/auth.log

  10. 2017-11-05 14:43:23,021 fail2ban.actions [7141]: INFO Set banTime = 600

  11. 2017-11-05 14:43:23,021 fail2ban.filter [7141]: INFO Set findtime = 600

  12. 2017-11-05 14:43:23,022 fail2ban.filter [7141]: INFO Set maxlines = 10

  13. 2017-11-05 14:43:23,070 fail2ban.server [7141]: INFO Jail sshd is not a JournalFilter instance

  14. 2017-11-05 14:43:23,081 fail2ban.jail [7141]: INFO Jail 'sshd' started

  15. 2017-11-05 14:43:23,763 fail2ban.filter [7141]: INFO [sshd] Found 103.5.134.167

  16. 2017-11-05 14:43:23,763 fail2ban.filter [7141]: INFO [sshd] Found 103.5.134.167

  17. 2017-11-05 14:43:23,764 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170

  18. 2017-11-05 14:43:23,764 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170

  19. 2017-11-05 14:43:23,765 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170

  20. 2017-11-05 14:43:23,765 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170

  21. 2017-11-05 15:19:06,192 fail2ban.server [7141]: INFO Stopping all jails

  22. 2017-11-05 15:19:06,874 fail2ban.jail [7141]: INFO Jail 'sshd' stopped

  23. 2017-11-05 15:19:06,879 fail2ban.server [7141]: INFO Exiting Fail2ban

  24. 2017-11-05 15:19:07,123 fail2ban.server [8528]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6

  25. 2017-11-05 15:19:07,123 fail2ban.database [8528]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'

  26. 2017-11-05 15:19:07,126 fail2ban.jail [8528]: INFO Creating new jail 'sshd'

  27. 2017-11-05 15:19:07,129 fail2ban.jail [8528]: INFO Jail 'sshd' uses poller {}

  28. 2017-11-05 15:19:07,141 fail2ban.jail [8528]: INFO Initiated 'polling' backend

  29. 2017-11-05 15:19:07,142 fail2ban.actions [8528]: INFO Set banTime = 60

  30. 2017-11-05 15:19:07,142 fail2ban.filter [8528]: INFO Set findtime = 60

  31. 2017-11-05 15:19:07,142 fail2ban.filter [8528]: INFO Set jail log file encoding to UTF-8

  32. 2017-11-05 15:19:07,143 fail2ban.filter [8528]: INFO Set maxRetry = 3

  33. 2017-11-05 15:19:07,144 fail2ban.filter [8528]: INFO Added logfile = /var/log/auth.log

  34. 2017-11-05 15:19:07,144 fail2ban.filter [8528]: INFO Set maxlines = 10

  35. 2017-11-05 15:19:07,189 fail2ban.server [8528]: INFO Jail sshd is not a JournalFilter instance

  36. 2017-11-05 15:19:07,195 fail2ban.jail [8528]: INFO Jail 'sshd' started

  37. 2017-11-05 15:20:03,263 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167

  38. 2017-11-05 15:20:05,267 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167

  39. 2017-11-05 15:20:12,276 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167

  40. 2017-11-05 15:20:12,380 fail2ban.actions [8528]: NOTICE [sshd] Ban 103.5.134.167

  41. 2017-11-05 15:21:12,659 fail2ban.actions [8528]: NOTICE [sshd] Unban 103.5.134.167

要檢視啟用的監獄串列,請執行以下命令。

  1. # fail2ban-client status

  2. Status

  3. |- Number of jail:  2

  4. `- Jail list:   apache-auth, sshd

透過執行以下命令來獲取禁止的 IP 地址。

  1. # fail2ban-client status ssh

  2. Status for the jail: ssh

  3. |- filter

  4. | |- File list: /var/log/auth.log

  5. | |- Currently failed: 1

  6. | `- Total failed: 3

  7. `- action

  8. |- Currently banned: 1

  9. | `- IP list: 192.168.1.115

  10. `- Total banned: 1

要從 Fail2Ban 中刪除禁止的 IP 地址,請執行以下命令。

  1. # fail2ban-client set ssh unbanip 192.168.1.115


via: https://www.2daygeek.com/how-to-install-setup-configure-fail2ban-on-linux/

作者:Magesh Maruthamuthu[11] 譯者:Flowsnow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

Flowsnow ? ? ?
共計翻譯:14 篇
貢獻時間:779 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖