CentOS 7安裝fail2ban搭配Firewalld防止SSH登入與CC攻擊

Setp 1 檢查 Firewalld是否已啟動,Centos7 預載是Firewalld 所以有安裝iptables記得關閉並啟動firewalld和開啟常用阜號

[root1@xxx ~]# service iptables stop
[root1@xxx ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
[root1@xxx ~]# firewall-cmd --reload
[root1@xxx ~]# firewall-cmd --state
[root1@xxx ~]# systemctl start firewalld
[root1@xxx ~]# systemctl enable firewalld.service

Setp 2 安裝 fail2ban

fail2ban可以監控系統日誌,並且根據一定規則匹配異常IP後使用Firewalld將其阻擋

[root1@xxx ~]# yum -y install epel-release 
[root1@xxx ~]# yum install -y firewalld
[root1@xxx ~]# yum -y install fail2ban

Setp 3 設定規則

安裝成功後fail2ban配置檔案位於/etc/fail2ban,我們新建jail.conf為主配置檔案來覆蓋原先的預設規則,相關的匹配規則位於filter.d目錄

vi /etc/fail2ban/jail.local

[DEFAULT]
 ignoreip = 127.0.0.1/8
 bantime  = 86400
 findtime = 600
 maxretry = 5

 banaction = firewallcmd-ipset
 action = %(action_mwl)s

 backend = systemd 

ignoreip:IP白名單,白名單中的IP不會遮蔽,可填寫多個以(,)分隔
bantime:遮蔽時間,單位為秒(s)
findtime:時間範圍
maxretry:最大次數
banaction:遮蔽IP所使用的方法,上面使用firewalld遮蔽埠

這裡banaction必須用firewallcmd-ipset,這是fiewalll支援的關鍵,如果是用Iptables請不要這樣填寫

ignoreip:IP白名單,白名單中的IP不會遮蔽,可填寫多個以(,)分隔
bantime:遮蔽時間,單位為秒(s)
findtime:時間範圍
maxretry:最大次數
banaction:遮蔽IP所使用的方法,上面使用firewalld遮蔽埠

防止SSH爆破

如果您還在使用預設SSH埠(22),可能每天都會被掃描,我們可以修改埠儘量避免被掃,參考: https://www.moerats.com/archives/394/ ,或者可以使用fail2ban將惡意IP遮蔽。

繼續修改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:需要監視的日誌路徑

到這一步,我們jail.local的規則看起來可能像下面這樣子:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s

[sshd]

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

上面的配置意思是如果同一個IP,在10分鐘內,如果連續超過5次錯誤,則使用Firewalld將他IP ban了。輸入systemctl start fail2ban啟動fail2ban來試試效果。

使用另一臺伺服器不斷嘗試連線SSH,並且不斷的將密碼輸入錯誤,你會發現連續超過5次後直接連不上,說明IP被ban了,可以輸入:fail2ban-client status sshd檢視被ban的IP,如下截圖。

防止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 = /usr/local/nginx/logs/access.log

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

防止Wordpress爆破

如果您經常分析日誌會發現有大量機器人在掃描wordpress登入頁面wp-login.php,雖然對方可能沒成功,但是為了避免萬一還是將他IP幹掉為好。

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

繼續修改jail.local追加如下內容:

[wordpress]
enabled = true
port = http,https
filter = wordpress
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /usr/local/nginx/logs/access.log

當然,別忘記輸入systemctl restart fail2ban重啟fail2ban使其生效。

關於作者 碼農Roy

曾經北漂的工程師,現在專注於.Net Core、WordPress開發


發佈留言