使用fail2ban在nginx上防止惡意的請求

 系統:Ubuntu 12.04
1.安裝fail2ban
apt-get install fail2ban -ynginx


fail2ban能夠監視你的系統日誌,而後匹配日誌的錯誤信息(正則式匹配)執行相應的屏蔽動做(通常狀況下是調用防火牆屏蔽),如:當有人在試探你的SSH、SMTP、FTP密碼,只要達到你預設的次數,fail2ban就會調用防火牆屏蔽這個IP,並且能夠發送e-mail通知系統管理員,是一款很實用、很強大的軟件!其實fail2ban就是用來監控,具體是調用iptables來實現動做!web

介紹:正則表達式

/etc/fail2ban/action.d #動做文件夾,內含默認文件。iptables以及mail等動做配置
/etc/fail2ban/fail2ban.conf #定義了fai2ban日誌級別、日誌位置及sock文件位置
/etc/fail2ban/filter.d #條件文件夾,內含默認文件。過濾日誌關鍵內容設置
/etc/fail2ban/jail.conf #主要配置文件,模塊化。主要設置啓用ban動做的服務及動做閥值
/etc/rc.d/init.d/fail2ban #啓動腳本文件ssh


[DEFAULT]爲默認的配置配置參數不少,主要介紹幾個經常使用的吧:
ignoreip = 127.0.0.1/8 白名單地址,支持網段,多個地址之間用空格隔開。此地址段的地址不會被封堵。
咱們用默認的[ssh]服務來介紹針對於某一個服務的配置:
enabled = true 是否啓用,沒什麼好說的
port = ssh 封堵端口,支持端口號和協議名兩種方式,多個端口用逗號隔開
filter = sshd 過濾器名稱,默認的過濾器在/etc/fail2ban/filter.d目錄下,以.conf結尾,本例中針對/etc/fail2ban/filter.d/sshd.conf
logpath = /var/log/auth.log 日誌路徑
failregex = reject: RCPT from (.*)[]: 554 過濾的正則表達式,能夠經過多行表示多個規則curl


2.修改配置
在/etc/fail2ban/jail.conf最後一行增長如下內容:
[nginx-get-dos]
enabled = true
port = http,https
filter = nginx-bansniffer
action = iptables[name=nginx, port=http, protocol=tcp]
        sendmail-whois[name=nginx, dest=zhangkai1@yy.com jiangtaoye@yy.com, sender=root]   #配置禁止IP後通知郵件,多我的以空格隔開
logpath = /data2/log/nginx/dylogin-dylogin-web-access.log #設置nginx訪問日誌
maxretry = 300   #測試可設置小一點,例如:3
findtime = 60    
bantime = 3600   #測試可設置小一點,例如:120tcp

在上面的配置中,咱們對每60秒有超過300次訪問的ip,封禁1小時ide


而後建立文件/etc/fail2ban/filter.d/nginx-bansniffer.conf,內容以下:
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =模塊化

最後重啓fail2ban服務便可(/etc/init.d/fail2ban restart)測試


3.配置發送郵件功能
apt-get install sendmail -y
apt-get install mailutils -y
啓動服務
/etc/init.d/sendmail starturl


4.測試fail2ban的效果

curl http://dylogin.duowan.com/   #設置maxretry = 3後,執行3次後能夠看/var/log/fail2ban.log 日誌


2014-08-15 18:33:48,097 fail2ban.filter : INFO   Set maxRetry = 3
2014-08-15 18:33:48,100 fail2ban.filter : INFO   Set findtime = 60
2014-08-15 18:33:48,100 fail2ban.actions: INFO   Set banTime = 120
2014-08-15 18:33:48,112 fail2ban.jail   : INFO   Jail 'ssh' started
2014-08-15 18:33:48,120 fail2ban.jail   : INFO   Jail 'nginx-get-dos' started
2014-08-15 19:22:19,109 fail2ban.actions: WARNING [nginx-get-dos] Ban 113.106.251.83
2014-08-15 19:22:20,953 fail2ban.actions: WARNING [nginx-get-dos] 113.106.251.83 already banned

#設置的bantime = 120,能夠看到2分鐘後解禁了
2014-08-15 19:24:20,103 fail2ban.actions: WARNING [nginx-get-dos] Unban 113.106.251.83


用iptables命令看fail2ban添加的IP封禁規則:

# iptables -nL

相關文章
相關標籤/搜索