Fail2ban详细教程,解决网站被扫描、CC攻击、ssh暴力破解、防爬虫等问题
最近網站總是被高頻度掃描,導致數據庫連接過多,打開頁面報“Error establishing a database connection“錯誤。最開始寫了個監控網站的腳本,一旦發現網站打不開,重啟數據庫就好了。但是這幾天網站掛掉的頻率越來越高,不得不開始尋找新的辦法了。
對于網站被惡意掃描、暴力破解、CC 攻擊這一系列攻擊,都有相似的特征,即高頻率發請求導致主機資源使用率飆高。對于這些問題,必須要做兩件事,一個是識別惡意發請求的 IP,并封禁;二個是實現網站緩存、靜態化等功能減少數據庫查詢。今天介紹下識別頻繁發請求的 IP 并封 IP 的工具。
調研了 cckiller、Wordfence Security、fail2ban 這三個工具,最終選擇了 fail2ban。
fail2ban、cckiller、Wordfence Security 對比分析
首先是 cckiller,是國內大佬實現的 linux 輕量級 cc 防御工具。是根據當前 http 連接數計算并發量,如果某個 ip 的并發量大于某個值則在 iptables 中封禁該 ip。是個不錯的工具,但有兩個小問題。一個是只能根據某個時刻計算并發量封 IP,不能計算某個時間段的總請求數來封 IP;二個是兼容性不太好,適合在 centos 上運行,但個人習慣用 ubuntu。
其次是 Wordfence Security,wordpress 安全插件。據說可以根據某個時間段訪問網站總次數超過閾值后,封禁該 IP。但是問題較多,該插件比較龐大,只為了這個功能安裝插件不劃算;沒有漢化;該功能好像要付費才能用的更流暢。簡單試了下,不太合適。
最終選擇了 fail2ban,有以下優點。
fail2ban 功能特色
根據實時日志,統計請求數量,如果某個時間段,某種請求超過了閾值,就可以封禁該 IP
支持 yum/apt 一鍵安裝。
配置簡單,配置文件幾行配置就能實現需求
支持多種監控。簡單舉幾個例子。可以讀取 ssh 的登錄日志,如果某個 ip 在某個時間段登錄失敗次數過多,則封該 ip;讀取 apache 訪問日志,如果某個 ip 在某個時間段防問次數過多,則封該 ip
支持郵件通知。
Fail2ban 安裝步驟&使用教程
使用場景:操作系統是 ubuntu,web 服務器為 apache。將 3 分鐘內請求數量超過 300 次的 ip 視為惡意掃描 IP 直接封禁。(其他操作系統和 web 服務器配置流程基本一樣)
安裝 fail2ban
fail2ban 配置原理介紹
主要是配置/etc/fail2ban/jail.conf 文件
ssh 日志監控
enabled=true,表示開啟監控
filter 在/etc/fail2ban/filter.d/sshd.conf 中定義,主要定義了找到錯誤日志的正則
Logpath ssh 日志存放路徑
默認 findtime 為 600 秒
錯誤次數閾值為 6 次。
該配置意思為:實時監控 ssh 登錄日志(/var/log/auth.log),如果某個 ip 在 600 秒內登錄錯誤了 6 次(根據 filter 正則判斷),則封禁該 IP
apache 日志監控
enabled=true,表示開啟監控
filter 在/etc/fail2ban/filter.d/ php-url-fopen.conf 中定義,主要定義了匹配訪問日志的正則。其中 fail2ban 默認的正則有點問題,需要稍微修改下,修改后如下
Logpath apache 日志存放路徑
findtime 為 180 秒
訪問次數閾值為 200 次。
該配置意思為:實時監控 apache 訪問日志(/var/log/apache2/access.log),如果某個 ip 在 180 秒內訪問了 200 次(根據 filter 正則判斷),則封禁該 IP
Fail2ban 管理&常用命令
使用三方 smtp 服務器發送通知郵件
由于騰訊云的 25 端口有限制不能使用系統自帶的 sendmail,需要調用三方的 stmp 服務器,如 163 服務器,并使用端口為 465 的 ssl 協議發送郵件。配置如下
安裝 mail ,apt-get install heirloom-mailx
修改/etc/nail.rc(ubuntu16.04 為/etc/s-nail.rc、centos 為/etc/mail.rc)
添加
發郵件測試
echo “郵件內容”.|mail -v -s “郵件標題” xxxx@qq.com
jail.conf 中 mta 改為 mail,即可
?
總結
以上是生活随笔為你收集整理的Fail2ban详细教程,解决网站被扫描、CC攻击、ssh暴力破解、防爬虫等问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机软考培训网校,计算机软考培训中心
- 下一篇: java在mysql读取数据库数据库数据