如何在 Linux 上用 Fail2Ban 保護伺服器免受暴力攻擊
Linux 管理員的一個重要任務是保護伺服器免受非法攻擊或訪問。 預設情況下,Linux 系統帶有配置良好的防火牆,比如iptables、Uncomplicated Firewall(UFW),ConfigServer Security Firewall(CSF)等,可以防止多種攻擊。
任何連線到網際網路的機器都是惡意攻擊的潛在目標。 有一個名為 Fail2Ban 的工具可用來緩解伺服器上的非法訪問。
什麼是 Fail2Ban?
Fail2Ban 是一款入侵防禦軟體,可以保護伺服器免受暴力攻擊。 它是用 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 命令或 APT 命令安裝。
$ sudo apt install fail2ban
對於 Fedora,使用 DNF 命令安裝。
$ sudo dnf install fail2ban
對於 CentOS/RHEL,啟用 EPEL 庫或 RPMForge 庫,使用 YUM 命令安裝。
$ sudo yum install fail2ban
對於 Arch Linux,使用 Pacman 命令安裝。
$ sudo pacman -S fail2ban
對於 openSUSE , 使用 Zypper命令安裝。
$ sudo zypper in fail2ban
如何配置 Fail2Ban
預設情況下,Fail2Ban 將所有配置檔案儲存在 /etc/fail2ban/
目錄中。 主配置檔案是 jail.conf
,它包含一組預定義的過濾器。 所以,不要編輯該檔案,這是不可取的,因為只要有新的更新,配置就會重置為預設值。
只需在同一目錄下建立一個名為 jail.local
的新配置檔案,並根據您的意願進行修改。
# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
預設情況下,大多數選項都已經配置的很完美了,如果要啟用對任何特定 IP 的訪問,則可以將 IP 地址新增到 ignoreip
區域,對於多個 IP 的情況,用空格隔開 IP 地址。
配置檔案中的 DEFAULT
部分包含 Fail2Ban 遵循的基本規則集,您可以根據自己的意願調整任何引數。
# nano /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.100/24
bantime = 600
findtime = 600
maxretry = 3
destemail = 2daygeek@gmail.com
ignoreip
:本部分允許我們列出 IP 地址列表,Fail2Ban 不會禁止與列表中的地址匹配的主機bantime
:主機被禁止的秒數findtime
:如果在最近findtime
秒期間已經發生了maxretry
次重試,則主機會被禁止maxretry
:是主機被禁止之前的失敗次數
如何配置服務
Fail2Ban 帶有一組預定義的過濾器,用於各種服務,如 ssh、apache、nginx、squid、named、mysql、nagios 等。 我們不希望對配置檔案進行任何更改,只需在服務區域中新增 enabled = true
這一行就可以啟用任何服務。 禁用服務時將 true
改為 false
即可。
# SSH servers
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
enabled
: 確定服務是開啟還是關閉。port
:指明特定的服務。 如果使用預設埠,則服務名稱可以放在這裡。 如果使用非傳統埠,則應該是埠號。logpath
:提供服務日誌的位置backend
:指定用於獲取檔案修改的後端。
重啟 Fail2Ban
進行更改後,重新啟動 Fail2Ban 才能生效。
[For SysVinit Systems]
# service fail2ban restart
[For systemd Systems]
# systemctl restart fail2ban.service
驗證 Fail2Ban iptables 規則
你可以使用下面的命令來確認是否在防火牆中成功新增了Fail2Ban iptables 規則。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-apache-auth tcp -- anywhere anywhere multiport dports http,https
f2b-sshd tcp -- anywhere anywhere multiport dports 1234
ACCEPT tcp -- anywhere anywhere tcp dpt:1234
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain f2b-apache-auth (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain f2b-sshd (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
如何測試 Fail2Ban
我做了一些失敗的嘗試來測試這個。 為了證實這一點,我要驗證 /var/log/fail2ban.log
檔案。
2017-11-05 14:43:22,901 fail2ban.server [7141]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6
2017-11-05 14:43:22,987 fail2ban.database [7141]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2017-11-05 14:43:22,996 fail2ban.database [7141]: WARNING New database created. Version '2'
2017-11-05 14:43:22,998 fail2ban.jail [7141]: INFO Creating new jail 'sshd'
2017-11-05 14:43:23,002 fail2ban.jail [7141]: INFO Jail 'sshd' uses poller {}
2017-11-05 14:43:23,019 fail2ban.jail [7141]: INFO Initiated 'polling' backend
2017-11-05 14:43:23,019 fail2ban.filter [7141]: INFO Set maxRetry = 5
2017-11-05 14:43:23,020 fail2ban.filter [7141]: INFO Set jail log file encoding to UTF-8
2017-11-05 14:43:23,020 fail2ban.filter [7141]: INFO Added logfile = /var/log/auth.log
2017-11-05 14:43:23,021 fail2ban.actions [7141]: INFO Set banTime = 600
2017-11-05 14:43:23,021 fail2ban.filter [7141]: INFO Set findtime = 600
2017-11-05 14:43:23,022 fail2ban.filter [7141]: INFO Set maxlines = 10
2017-11-05 14:43:23,070 fail2ban.server [7141]: INFO Jail sshd is not a JournalFilter instance
2017-11-05 14:43:23,081 fail2ban.jail [7141]: INFO Jail 'sshd' started
2017-11-05 14:43:23,763 fail2ban.filter [7141]: INFO [sshd] Found 103.5.134.167
2017-11-05 14:43:23,763 fail2ban.filter [7141]: INFO [sshd] Found 103.5.134.167
2017-11-05 14:43:23,764 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170
2017-11-05 14:43:23,764 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170
2017-11-05 14:43:23,765 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170
2017-11-05 14:43:23,765 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170
2017-11-05 15:19:06,192 fail2ban.server [7141]: INFO Stopping all jails
2017-11-05 15:19:06,874 fail2ban.jail [7141]: INFO Jail 'sshd' stopped
2017-11-05 15:19:06,879 fail2ban.server [7141]: INFO Exiting Fail2ban
2017-11-05 15:19:07,123 fail2ban.server [8528]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6
2017-11-05 15:19:07,123 fail2ban.database [8528]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2017-11-05 15:19:07,126 fail2ban.jail [8528]: INFO Creating new jail 'sshd'
2017-11-05 15:19:07,129 fail2ban.jail [8528]: INFO Jail 'sshd' uses poller {}
2017-11-05 15:19:07,141 fail2ban.jail [8528]: INFO Initiated 'polling' backend
2017-11-05 15:19:07,142 fail2ban.actions [8528]: INFO Set banTime = 60
2017-11-05 15:19:07,142 fail2ban.filter [8528]: INFO Set findtime = 60
2017-11-05 15:19:07,142 fail2ban.filter [8528]: INFO Set jail log file encoding to UTF-8
2017-11-05 15:19:07,143 fail2ban.filter [8528]: INFO Set maxRetry = 3
2017-11-05 15:19:07,144 fail2ban.filter [8528]: INFO Added logfile = /var/log/auth.log
2017-11-05 15:19:07,144 fail2ban.filter [8528]: INFO Set maxlines = 10
2017-11-05 15:19:07,189 fail2ban.server [8528]: INFO Jail sshd is not a JournalFilter instance
2017-11-05 15:19:07,195 fail2ban.jail [8528]: INFO Jail 'sshd' started
2017-11-05 15:20:03,263 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167
2017-11-05 15:20:05,267 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167
2017-11-05 15:20:12,276 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167
2017-11-05 15:20:12,380 fail2ban.actions [8528]: NOTICE [sshd] Ban 103.5.134.167
2017-11-05 15:21:12,659 fail2ban.actions [8528]: NOTICE [sshd] Unban 103.5.134.167
要檢視啟用的監獄列表,請執行以下命令。
# fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: apache-auth, sshd
透過執行以下命令來獲取禁止的 IP 地址。
# fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 1
| `- Total failed: 3
`- action
|- Currently banned: 1
| `- IP list: 192.168.1.115
`- Total banned: 1
要從 Fail2Ban 中刪除禁止的 IP 地址,請執行以下命令。
# fail2ban-client set ssh unbanip 192.168.1.115
via: https://www.2daygeek.com/how-to-install-setup-configure-fail2ban-on-linux/
作者:Magesh Maruthamuthu 譯者:Flowsnow 校對:wxy
相關文章
- 如何保護企業免受黑客攻擊?黑客
- 用 Apache 伺服器模組保護您的網站免受應用層 DOS 攻擊Apache伺服器網站
- 一鍵遮蔽惡意IP!保護你的伺服器免受攻擊伺服器
- 如何保護Windows網路免受勒索軟體攻擊Windows
- 在Linux中,如何配置和使用fail2ban來防止暴力攻擊?LinuxAI
- 保護您的資料免受網路攻擊的技巧
- ASLR 是如何保護 Linux 系統免受緩衝區溢位攻擊的Linux
- 通過Fail2ban保護你的雲伺服器AI伺服器
- 微軟打擊PUA,保護使用者免受流氓軟體侵擾微軟
- 如何保護您不瞭解的資料資產免受網路攻擊?
- iOS移動應用安全加固:保護您的App免受惡意攻擊的重要步驟iOSAPP
- 使用 fail2ban 保護 frp 服務AIFRP
- 微軟釋出 ElectionGuard 開源軟體,保護美國大選系統免受攻擊微軟
- [譯文]4種簡單的方法保護您的公司免受網路攻擊
- 使用SRI保護你的網站免受第三方CDN惡意攻擊網站
- 如何保護網路免受DOS和DDOS的侵害呢?
- 如何保護備份資料免受勒索軟體侵害
- 保護你的 Fedora 系統免受這個 DHCP 漏洞
- 用日誌系統保護Linux安全Linux
- 如何在linux伺服器上使用hanlpLinux伺服器HanLP
- 【網路安全技術篇】保護網站免受劫持的方法有哪些?網站
- 保護Linux伺服器安全的四個要點!Linux伺服器
- 使用 badIPs.com 保護你的伺服器,並通過 Fail2ban 報告惡意 IP伺服器AI
- 如何在 CentOS 6/7 上移除被 Fail2ban 禁止的 IPCentOSAI
- 蘋果Mac電腦|保護隨身碟免受病毒感染的有效方法蘋果Mac
- 如何在 Ubuntu 登入螢幕上啟用輕擊Ubuntu
- DNS伺服器保護方法:幾點保護DNS伺服器的有效方法小結DNS伺服器
- 伺服器容錯保護二伺服器
- Gawker攻擊事件暴露密碼保護缺陷事件密碼
- 安全保護路由器防駭客攻擊路由器
- 如何在Linux上使用netstat命令查證DDOS攻擊Linux
- Linux系統安全保護Linux
- 如何在 Linux 上安裝應用程式Linux
- 如何保護好資料伺服器伺服器
- 程式碼伺服器安全保護(二)伺服器
- 如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊AI伺服器
- Linux 基金會網站在離線狀態下仍遭受暴力攻擊Linux網站
- 使用 Rootless Linux 容器保護您的 .NET 雲應用Linux