Fail2Ban 設定及安裝

BUBU 現在有在使用 WordPress 服務,為了預防被惡意猜帳號及密碼,有一個套件是專門在做這樣子的事情套件是 Fail2Ban 這個服務,以下是安裝流程及簡單設定說明

安裝


先安裝 epel 軟體套件

yum install epel-release -y

再開始安裝 Fail2Ban 服務

yum install fail2ban -y

設定


新增「 jail.local 」檔案,來自訂 fail2ban 設定:

vim /etc/fail2ban/jail.local

[DEFAULT]
# IP 列表白名單
ignoreip = 127.0.0.1/8
# 指令白名單 (預設為空)
ignorecommand =
# 符合觸發條件後鎖定一段時間,使用"-1"為永久封鎖。(單位:秒)
bantime = -1
# 多久時間內,符合"maxretry"則進行封鎖。(單位:秒)
findtime = 300
# 多少失敗次數後進行封鎖
maxretry = 3
#這裡banaction必須用firewallcmd-ipset,這是fiewalll支援的關鍵,如果是用Iptables請不要這樣填寫
banaction = iptables-multiport
action = %(action_mwl)s
backend  = auto

# 要監聽的服務
[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

指令說明:

ignoreip:IP白名單,白名單中的IP不會遮蔽,可填寫多個以(,)分隔
bantime:遮蔽時間,單位為秒(s)
findtime:時間範圍
maxretry:最大次數
banaction:遮蔽IP所使用的方法,上面使用firewalld遮蔽埠
backend:指要用何種方式去偵測 log 檔案是否有異動,可用設定值有三個 gamin | polling | auto
destemail:阻擋發生後通知信要寄給誰

防止 SSH 

如果您還在使用預設SSH埠(22),可能每天都會被掃描,我們可以修改埠儘量避免被掃。

在 「 jail.local」這個設定檔,後面追加下面的內容

[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

指令說明:

[sshd]:名稱,可以隨便填寫
filter:規則名稱,必須填寫位於filter.d目錄裡面的規則,sshd是fail2ban內建規則
port:對應的埠
action:採取的行動
logpath:需要監視的日誌路徑

防止 cc 攻擊

這裡僅以Nginx為例,使用fail2ban來監視nginx日誌,匹配短時間內頻繁請求的IP,並使用firewalld將其IP遮蔽,達到CC防護的作用。

#需要先新建一個nginx日誌匹配規則
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填寫如下內容
[Definition]
failregex =  -.*- .*HTTP/1.* .* .*$
ignoreregex =

jail.local 設定檔

[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /var/log/nginx/*_access.log

上面的配置意思是如果在60s內,同一IP達到20次請求,則將其IP ban 1小時,上面只是為了測試,請根據自己的實際情況修改。logpath為nginx日誌路徑。上面的配置意思是如果在60s內,同一IP達到20次請求,則將其IP ban 1小時,上面只是為了測試,請根據自己的實際情況修改。logpath為nginx日誌路徑。

nginx access log

vim /etc/fail2ban/filter.d/nginx-access-limit.conf

[Definition]
failregex = ^<HOST> - - .*\"(GET|POST).*
ignoreregex =

jail.local 設定檔

[nginx-access-limit]

enabled = true
filter = nginx-access-limit
action = iptables-multiport[name=nginx-access-limit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/access.log
findtime = 5
bantime = 900
maxretry = 100

Error log by llimit_req_zone

vim /etc/fail2ban/filter.d/nginx-req-limit.conf

# Fail2Ban configuration file
#
# supports: ngx_http_limit_req_module module 

[Definition]
failregex = limiting requests, excess:.* by zone.*client: <HOST>
ignoreregex =

jail.local 設定檔

[nginx-req-limit]

enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=nginx-req-limit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 60
bantime = 900
maxretry = 10

 

防止Wordpress

最近 wordpress 很火紅,比較容易被叮上,所以這個安全機制要做的很好。

#需要先新建一個nginx日誌匹配規則
vi /etc/fail2ban/filter.d/wordpress.conf
#填寫如下內容
# WordPress brute force auth filter: /etc/fail2ban/filter.d/wordpress.conf:
#
# Block IPs trying to auth wp wordpress
#
#
#[Definition]
#failregex = ^<HOST> .* "POST .*wp-login.php
#ignoreregex =

[Definition]
failregex = ^<HOST> - - .*(POST|GET)\ .*(xmlrpc.php|wp-login.php|wp-json)
ignoreregex =

jail.local 設定檔

[wordpress]
enabled  = true
port     = http,https
action   = iptables-multiport[name=wordpress, port="http,https", protocol=tcp]
filter   = wordpress
logpath  = /var/log/nginx/access.log
findtime = 1800
bandtime = 1800
maxretry = 10

防 wordpress 被 cc 攻擊

[Definition]
failregex = ^<HOST> .*POST .*xmlrpc\.php.*
ignoreregex =

jail.local 設定檔

[xmlrpc]
enabled = true
filter = xmlrpc
action = iptables[name=xmlrpc, port=http, protocol=tcp]
logpath = /var/log/nginx/access.log
bantime = 43600
maxretry = 2

 Proxmox Web GUI

[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =

jail.local 設定檔

[proxmox-web-gui]
enabled  = true
port     = http,https,8006
filter   = proxmox-web-gui
logpath  = /var/log/daemon.log
maxretry = 3
bantime = 3600

 

常用命令


#啟動
systemctl start fail2ban
#停止
systemctl stop fail2ban
#開機啟動
systemctl enable fail2ban
#檢視被ban IP,其中sshd為名稱,比如上面的[wordpress]
fail2ban-client status sshd
#刪除被ban IP
fail2ban-client set sshd delignoreip 192.168.111.111
#檢視日誌
tail /var/log/fail2ban.log
#查看目前 iptables 狀態
iptables -L
#清除 iptables 規則
iptables -F

 

 

 


參考相關網頁: