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遮蔽埠
Table of Contents
防止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使其生效。