主動式防火墻fail2ban的安裝與配置
Linux、網(wǎng)絡(luò)和安全服務(wù)器、網(wǎng)絡(luò)和安全對于一個成熟的網(wǎng)站來說,每天沒有受到幾次攻擊是說不過去的。
之前我寫過一個shell script,實現(xiàn)過“主動式防火墻”,即從訪問特征中找到潛在的威脅,通過iptables防火墻直接deny。大致原理也很簡單:
cat 日志,并通過awk從日志中分離出來源ip
通過sort + uniq -c 對IP和訪問數(shù)量進行統(tǒng)計
獲取訪問量最高的幾個來源,一旦達到閥值啟動iptables策略進行封堵。
這樣一個腳本只要定期通過cron服務(wù)調(diào)用就可以實現(xiàn)主動防火墻的效果。但時間一長,這個方法的弊端就體現(xiàn)出來,首先是不夠靈活,對于時間的粒度調(diào)整和黑白名單的設(shè)置上就很麻煩;其次是這種方法僅能針對某一種服務(wù),例如apache的80號,對于類似全端口掃描之類的聯(lián)合攻擊反而起不到應有的作用。
本來我打算用python寫一個綜合的入侵日志分析+iptables調(diào)用框架,沒想到確實有先人已經(jīng)早我很久實現(xiàn)了,這就是本文要介紹的fail2ban。
安裝fail2ban
還是ubuntu,apt庫中就有這個項目apt-get install fail2ban
service fail2ban start 啟動這個服務(wù)。
如果確實需要源碼編譯,可以到該項目的主頁下載源碼,安裝過程更接近于python擴展的安裝。需要說明的是fail2ban是基于gamin服務(wù)框架的,編譯時需要安裝python-gamin的支持庫。
配置服務(wù)
apt方式安裝后,/etc/fail2ban目錄下有幾個配置文件 fail2ban.conf 主要是定義了服務(wù)器的日志和監(jiān)聽端口什么的,可以不去理會,直接打開jail.conf
[DEFAULT]為默認的配置配置參數(shù)很多,主要介紹幾個常用的吧:
ignoreip = 127.0.0.1/8 白名單地址,支持網(wǎng)段,多個地址之間用空格隔開。此地址段的地址不會被封堵。
bantime = 600 封堵時間,單位是秒
maxretry = 3 個人覺得這個配置有點誤導,其實是過濾器(后面說)過濾出來的日志中符合規(guī)則需要封堵的次數(shù)。
我們用默認的[ssh]服務(wù)來介紹針對于某一個服務(wù)的配置:
enabled = true 是否啟用,沒什么好說的
port = ssh 封堵端口,支持端口號和協(xié)議名兩種方式,多個端口用逗號隔開
filter = sshd 過濾器名稱,默認的過濾器在/etc/fail2ban/filter.d目錄下,以.conf結(jié)尾,本例中針對/etc/fail2ban/filter.d/sshd.conf
logpath = /var/log/auth.log 日志路徑
maxretry = 6 最大重試次數(shù),同上
過濾器的配置其實很簡單,需要懂得使用正則表達式來進行日志過濾,
failregex = reject: RCPT from (.*)[]: 554 過濾的正則表達式,可以通過多行表示多個規(guī)則。
fail2ban還有一個客戶端工具叫做 fail2ban-client ,可以通過它完成整個fail2ban的配置,相對來說比較簡單,這里也就不累述了。
其他
個人覺得這個fail2ban是很方便的一個工具,幾乎不需要太多的配置??赡苡械娜诵枰ㄟ^程序端,例如php進行防火墻的操作,正如我現(xiàn)在所做的一樣,程序會定期將IP寫入一個文件中,通過過濾器直接取出ip進行封堵即可。