[Linux][Network] fail2ban安裝紀錄

[Linux][Network] fail2ban安裝紀錄

OS Version: Ubuntu 16.04 LTS

 

Fail2ban是一套免費偵測來源IP在有惡意行為發生時,可以透過iptables自動進行封鎖的軟體,以下記錄相關的安裝和設定過程,

首先進行套件的安裝,輸入以下指令

apt-get install fail2ban

可以輸入以下指令來確定安裝版本號,

fail2ban-server -V

fail2ban預設的設定檔是jail.conf,但是官方建議不要直接修改jail.conf,而是複製一份自己的設定檔出來,在自己的設定檔內做修改會比較好,所以先複製一份自己的設定檔出來,

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

接著就可以來修改自己的設定檔了,首先利用vim來做修改,

vim /etc/fail2ban/jail.local

在預設的欄位中有一個設定值叫【ignoreip】,在此處設定IP後fail2ban就會自動忽略來自這些IP的連線,這可以避免自己因為不小心被自己封鎖的窘境,剩下的bantime、findtime、maxretry則是根據自己的情況來做調整就好,

在jail.local底下會有很多的預設過濾模組,有的是已經預測啟動,有的則無,可以依照自己的情況來選擇,如果想要的模組沒有在預設清單中的話,那就要自己寫一個,位置就放在/etc/fail2ban/filter.d/底下,以Nginx-DDOS為例子,下面的檔名其實可以自行決定,自己可以分辨就好,

vim /etc/fail2ban/filter.d/nginx-ddos.conf

然後輸入以下內容,

 

[Definition]

# Option:  failregex

# Notes.:  Regexp to catch a generic call from an IP address.

# Values:  TEXT

#

failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"$



# Option:  ignoreregex

# Notes.:  regex to ignore. If this regex matches, the line is ignored.

# Values:  TEXT

#

ignoreregex =

主要這份檔案要有的是failregex的地方,要根據你要參考的log檔格式來設計正規表達式,接著存檔離開後回到jail.local內,

vim /etc/fail2ban/jail.local

然後在你想要的位置上寫入【nginx-ddos】的區塊,區塊名稱最好跟filter.d中的設定檔一致會比較好判別,並且在區塊中填入下列內容,

 

[nginx-ddos]

# Based on apache-badbots but a simple IP check (any IP requesting more than

# 240 pages in 60 seconds, or 4p/s average, is suspicious)

# Block for two full days.

# @author Yannick Warnier

enabled = true

port    = http,https

filter  = nginx-ddos

logpath = /var/log/nginx/www.trendforce.com_*.log



findtime = 60

bantime  = 172800

maxretry = 180

enabled = true代表這個過濾模組要啟用,logpath則是代表所要參考的log檔案位置,filter = nginx-ddos(這個名字就一定要跟filter.d內的檔名一模一樣才行),則是指放在filter.d底下的設定檔名稱,另外,findtime、bantime和maxretry都可以在各自的模組底下各別的設定,沒設定的就會參考預設設定,下面是在fail2ban資料夾底下的一些檔案說明,

/etc/fail2ban/jail.d/底下的檔案會設定預設那些模組是要啟用的,可以在這邊各自設定,也可以統一寫在defaults-debian.conf或jail.local內,如下圖,

啟動上面的模組後,可以利用fail2ban-client status的指令來檢查載入的模組有哪一些,

fail2ban-client status

特殊設定說明

一般都是依照原始的預設值頂多修改log路徑或啟不啟用而已,但很多時候會有另一歇的特別需求,這時候就需要進行一些調整,

舉例來說我希望在同一個過濾模組內可以直些完成http和https的檢查和封鎖,這時候就可以在模組內寫入以下設定,

 

[nginx-login]
enabled = true
filter = nginx-login
action = iptables-multiport[name=NoLoginFailures, port="http,https"</span>]
logpath = /var/log/nginx/access*.log
bantime = 600
maxretry = 6

 

要注意的地方是跟預設不一樣的地方,主要是在action這個設定上,預設可能不會自動載入多port的檢查模組,如果要自己各別指定的話,就要利用在/etc/fail2ban/action.d/底下的模組來做搭配,上面紅色的地方就會跟預設不太一樣,以上。

 

Reference:

https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-ubuntu-14-04

Add a Comment