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















 
 
 
 
 
 
 