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
參考相關網頁:
- CentOS 7 Fail2ban 抵檔重複登入失敗的 IP
- CentOS 7 – 設定 Fail2Ban – 防止暴力破解工具
- CentOS 7安裝fail2ban+Firewalld防止SSH爆破與CC攻擊
- 在 CentOS 中使用 Fail2ban 阻止暴力攻擊 WordPress
- [Network] Fail2ban 指南 – 搭配Nginx (DDoS、Request Limit)
- Vesactp使用Fail2ban防護WordPress xmlrpc.php被CC攻擊。
- fail2ban教學
- Fail2ban 攔截暴力入侵 WordPress
- Set up Fail2ban for Proxmox Web GUI
- fail2ban: 新手老手 root 網管都要練的金鐘罩
- 在 CentOS 中使用 Fail2ban 阻止暴力攻擊 WordPress
- iptables 执行清除命令 iptables -F 要非常小心的