CentOS 7安裝fail2ban+Firewalld防止SSH爆破與CC攻擊
CentOS 7安裝fail2ban+Firewalld防止SSH爆破與CC攻擊說(shuō)明:差不多很多博主都會(huì)遇到被CC攻擊和SSH爆破的情況,這個(gè)時(shí)候就需要做下防御措施了,這里針對(duì)CentOS 7再分享個(gè)簡(jiǎn)單防CC攻擊和SSH爆破的方法。 前言 fail2ban可以監(jiān)視你的系統(tǒng)日志,
CentOS 7安裝fail2ban+Firewalld防止SSH爆破與CC攻擊說(shuō)明:差不多很多博主都會(huì)遇到被CC攻擊和SSH爆破的情況,這個(gè)時(shí)候就需要做下防御措施了,這里針對(duì)CentOS 7再分享個(gè)簡(jiǎn)單防CC攻擊和SSH爆破的方法。 前言 fail2ban可以監(jiān)視你的系統(tǒng)日志,
說(shuō)明:差不多很多博主都會(huì)遇到被CC
攻擊和SSH
爆破的情況,這個(gè)時(shí)候就需要做下防御措施了,這里針對(duì)CentOS 7
再分享個(gè)簡(jiǎn)單防CC
攻擊和SSH
爆破的方法。
fail2ban
可以監(jiān)視你的系統(tǒng)日志,然后匹配日志的錯(cuò)誤信息執(zhí)行相應(yīng)的屏蔽動(dòng)作。網(wǎng)上大部分教程都是關(guān)于fail2ban
+iptables
組合,考慮到CentOS 7
已經(jīng)自帶Firewalld
,所以這里我們也可以利用fail2ban
+Firewalld
來(lái)防CC
攻擊和SSH
爆破。
本教程編輯文件使用vi
命令,如果不會(huì)用的,可以使用比較簡(jiǎn)單的nano
,或者編輯好使用FTP
工具,如WinSCP
登錄VPS
操作。
1、檢查Firewalld是否啟用
#如果您已經(jīng)安裝iptables建議先關(guān)閉
service iptables stop
#查看Firewalld狀態(tài)
firewall-cmd --state
#啟動(dòng)firewalld
systemctl start firewalld
#設(shè)置開(kāi)機(jī)啟動(dòng)
systemctl enable firewalld.service
啟用Firewalld
后會(huì)禁止所有端口連接,因此請(qǐng)務(wù)必放行常用的端口,以免被阻擋在外,以下是放行SSH
端口(22
)示例,供參考:
#放行22端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重載配置
firewall-cmd --reload
#查看已放行端口
firewall-cmd --zone=public --list-ports
2、安裝fail2ban
fail2ban
可以監(jiān)控系統(tǒng)日志,并且根據(jù)一定規(guī)則匹配異常IP
后使用Firewalld
將其屏蔽,尤其是針對(duì)一些爆破/掃描等非常有效。
#CentOS內(nèi)置源并未包含fail2ban,需要先安裝epel源
yum -y install epel-release
#安裝fial2ban
yum -y install fail2ban
安裝成功后fail2ban
配置文件位于/etc/fail2ban
,其中jail.conf
為主配置文件,相關(guān)的匹配規(guī)則位于filter.d
目錄,其它目錄/文件一般很少用到,如果需要詳細(xì)了解可自行搜索。
3、配置規(guī)則
新建jail.local
來(lái)覆蓋fail2ban
的一些默認(rèn)規(guī)則:
#新建配置
vi /etc/fail2ban/jail.local
#默認(rèn)配置
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 86400
findtime = 600
maxretry = 5
#這里banaction必須用firewallcmd-ipset,這是fiewalll支持的關(guān)鍵,如果是用Iptables請(qǐng)不要這樣填寫(xiě)
banaction = firewallcmd-ipset
action = %(action_mwl)s
參數(shù)說(shuō)明:
ignoreip:IP白名單,白名單中的IP不會(huì)屏蔽,可填寫(xiě)多個(gè)以(,)分隔
bantime:屏蔽時(shí)間,單位為秒(s)
findtime:時(shí)間范圍
maxretry:最大次數(shù)
banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口
如果您還在使用默認(rèn)SSH
端口(22
),可能每天都會(huì)被掃描,我們可以修改端口盡量避免被掃。直接輸入命令:vi /etc/ssh/sshd_config
編輯配置文件,然找到#Port22
這一行,將#
號(hào)去掉,并將22
修改為您想設(shè)置的其它端口號(hào),最后保存退出,CentOS7最后再輸入命令systemctl restart sshd.service
重啟sshd
即可。當(dāng)然你也可以使用fail2ban
將惡意IP
屏蔽。
繼續(xù)修改jail.local
這個(gè)配置文件,在后面追加如下內(nèi)容:
[sshd]
enabled = true
filter = sshd
port = 22
action = %(action_mwl)s
logpath = /var/log/secure
參數(shù)說(shuō)明:
[sshd]:名稱,可以隨便填寫(xiě)
filter:規(guī)則名稱,必須填寫(xiě)位于filter.d目錄里面的規(guī)則,sshd是fail2ban內(nèi)置規(guī)則
port:對(duì)應(yīng)的端口
action:采取的行動(dòng)
logpath:需要監(jiān)視的日志路徑
到這一步,我們jail.local
的規(guī)則看起來(lái)可能像下面這樣子:
[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
上面的配置意思是如果同一個(gè)IP
,在10
分鐘內(nèi),如果連續(xù)超過(guò)5
次錯(cuò)誤,則使用Firewalld
將他IP ban
了。輸入systemctl start fail2ban
啟動(dòng)fail2ban
來(lái)試試效果。
使用另一臺(tái)服務(wù)器不斷嘗試連接SSH
,并且不斷的將密碼輸入錯(cuò)誤,你會(huì)發(fā)現(xiàn)連續(xù)超過(guò)5
次后直接連不上,說(shuō)明IP
被ban
了,可以輸入:fail2ban-client status sshd
查看被ban
的IP
,如下截圖。
這里僅以Nginx
為例,使用fail2ban
來(lái)監(jiān)視nginx
日志,匹配短時(shí)間內(nèi)頻繁請(qǐng)求的IP
,并使用firewalld
將其IP
屏蔽,達(dá)到CC
防護(hù)的作用。
#需要先新建一個(gè)nginx日志匹配規(guī)則
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填寫(xiě)如下內(nèi)容
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =
繼續(xù)修改jail.local
追加如下內(nèi)容:
[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
內(nèi),同一IP
達(dá)到20
次請(qǐng)求,則將其IP ban 1
小時(shí),上面只是為了測(cè)試,請(qǐng)根據(jù)自己的實(shí)際情況修改。logpath
為nginx
日志路徑。
如果您經(jīng)常分析日志會(huì)發(fā)現(xiàn)有大量機(jī)器人在掃描wordpress
登錄頁(yè)面wp-login.php
,雖然對(duì)方可能沒(méi)成功,但是為了避免萬(wàn)一還是將他IP
干掉為好。
#需要先新建一個(gè)nginx日志匹配規(guī)則
vi /etc/fail2ban/filter.d/wordpress.conf
#填寫(xiě)如下內(nèi)容
[Definition]
failregex = ^ -.* /wp-login.php.* HTTP/1.."
ignoreregex =
繼續(xù)修改jail.local
追加如下內(nèi)容:
[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
當(dāng)然,別忘記輸入systemctl restart fail2ban
重啟fail2ban
使其生效。
#啟動(dòng)
systemctl start fail2ban
#停止
systemctl stop fail2ban
#開(kāi)機(jī)啟動(dòng)
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
已經(jīng)內(nèi)置很多匹配規(guī)則,位于filter.d
目錄下,包含了常見(jiàn)的SSH/FTP/Nginx/Apache
等日志匹配,如果都還無(wú)法滿足您的需求,您也可以自行新建規(guī)則來(lái)匹配異常IP
。使用fail2ban
+Firewalld
來(lái)阻止惡意IP
是行之有效的辦法,可極大提高服務(wù)器安全。
版權(quán)所有:重慶安菲科技有限公司