CentOS 7安裝fail2ban+Firewalld防止SSH爆破與CC攻擊

準備工做

一、檢查Firewalld是否啓用

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

啓用Firewalld後會禁止全部端口鏈接,所以請務必放行經常使用的端口,以避免被阻擋在外,如下是放行SSH端口(22)示例,供參考:php

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

二、安裝fail2ban

fail2ban能夠監控系統日誌,而且根據必定規則匹配異常IP後使用Firewalld將其屏蔽,尤爲是針對一些爆破/掃描等很是有效。nginx

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

安裝成功後fail2ban配置文件位於/etc/fail2ban,其中jail.conf爲主配置文件,相關的匹配規則位於filter.d目錄,其它目錄/文件通常不多用到,若是須要詳細瞭解可自行搜索。web

三、配置規則

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

#新建配置
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

參數說明:centos

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

參數說明:ssh

[sshd]:名稱,能夠隨便填寫
filter:規則名稱,必須填寫位於filter.d目錄裏面的規則,sshd是fail2ban內置規則
port:對應的端口
action:採起的行動
logpath:須要監視的日誌路徑

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

[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來試試效果。wordpress

使用另外一臺服務器不斷嘗試鏈接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是行之有效的辦法,可極大提升服務器安全。

ref https://www.centos.bz/2018/01/centos-7%E5%AE%89%E8%A3%85fail2banfirewalld%E9%98%B2%E6%AD%A2ssh%E7%88%86%E7%A0%B4%E4%B8%8Ecc%E6%94%BB%E5%87%BB/

相關文章
相關標籤/搜索