Linux 使用fail2ban+Firewalld來阻止惡意IP,提高服務器安全。


CentOS 7安裝fail2ban+Firewalld防止SSH爆破與CC攻擊說明:差不多很多博主都會遇到被CC攻擊和SSH爆破的情況,這個時候就需要做下防御措施了,前幾天發過一個防CC腳本,參考: https://www.moerats.com/archives/484/ ,不過對於CentOS 7來說,由於防火牆的因素,配置起來還是有點麻煩的,這里爭對CentOS 7再分享個簡單防CC攻擊和SSH爆破的方法。

前言

fail2ban可以監視你的系統日志,然后匹配日志的錯誤信息執行相應的屏蔽動作。網上大部分教程都是關於fail2ban+iptables組合,考慮到CentOS 7已經自帶Firewalld,所以這里我們也可以利用fail2ban+Firewalld來防CC攻擊和SSH爆破。

本教程編輯文件使用vi命令,如果不會用的,可以使用比較簡單的nano,可以參考: https://www.moerats.com/archives/485/ ,或者使用FTP工具,如WinSCP登錄VPS操作。

准備工作

1、檢查Firewalld是否啟用

#如果您已經安裝iptables建議先關閉 service iptables stop #查看Firewalld狀態 firewall-cmd --state #啟動firewalld systemctl start firewalld #設置開機啟動 systemctl enable firewalld.service

啟用Firewalld后會禁止所有端口連接,因此請務必放行常用的端口,以免被阻擋在外,以下是放行SSH端口(22)示例,供參考:

#放行22端口 firewall-cmd --zone=public --add-port=80/tcp --permanent #重載配置 firewall-cmd --reload #查看已放行端口 firewall-cmd --zone=public --list-ports

2、安裝fail2ban

fail2ban可以監控系統日志,並且根據一定規則匹配異常IP后使用Firewalld將其屏蔽,尤其是針對一些爆破/掃描等非常有效。

#CentOS內置源並未包含fail2ban,需要先安裝epel源 yum -y install epel-release #安裝fial2ban yum -y install fail2ban

安裝成功后fail2ban配置文件位於/etc/fail2ban,其中jail.conf為主配置文件,相關的匹配規則位於filter.d目錄,其它目錄/文件一般很少用到,如果需要詳細了解可自行搜索。

3、配置規則

新建jail.local來覆蓋fail2ban的一些默認規則:

#新建配置 vi /etc/fail2ban/jail.local #默認配置 [DEFAULT] ignoreip = 127.0.0.1/8 bantime = 86400 findtime = 600 maxretry = 5 #這里banaction必須用firewallcmd-ipset,這是fiewalll支持的關鍵,如果是用Iptables請不要這樣填寫 banaction = firewallcmd-ipset action = %(action_mwl)s

參數說明:

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使其生效。

常用命令

#啟動 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

總結

fail2ban已經內置很多匹配規則,位於filter.d目錄下,包含了常見的SSH/FTP/Nginx/Apache等日志匹配,如果都還無法滿足您的需求,您也可以自行新建規則來匹配異常IP。使用fail2ban+Firewalld來阻止惡意IP是行之有效的辦法,可極大提高服務器安全。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM