前輩丟出個功課找些好方法來自動偵測+阻擋。
Fail2ban 就是一個非常實用的套件!
官方網頁:http://www.fail2ban.org
環境:
- CentOS release 5.8 (Final)
- Dovecot 1.0.7
- Postfix 2.3.3
- fail2ban 0.8.4
安裝:#
yum -y install fail2ban
若無法安裝,用
# yum search fail2ban 也無法找到套件,需編輯以下資料。
# vim /etc/yum.repos.d/CentOS-Base.repo
[atrpms]
name=Red Hat Enterprise Linux $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
gpgcheck=1
enabled=1
套件架構:
- 安裝位置:/etc/fail2ban
- 設定檔:
- fail2ban.conf fail2ban 設定
- jail.conf 各服務阻擋參數設定
2013.03.19 取自官方文件Every .conf file can be overridden with a file named .local. The .conf file is read first, then .local, with later settings overriding earlier ones. Thus, a .local file doesn't have to include everything in the corresponding .conf file, only those settings that you wish to override.
因此有任何客製化的設定,要另外建立 jail.local
- filter.d/*. conf 過濾規則、判斷式
- jail.conf 內的各個設定,必須在filter.d有一個對應的 conf 檔案。
例如:在 jail.conf內新增 [dovecot-check] 設定,且filter設為 dovecot-check,那就必須在 filter.d資料夾新增 dovecot-check.conf
fail2ban.conf 設置說明:
- 沒什麼特別的地方,重點放在log設置位置
logtarget = /var/log/fail2ban.log
jail.local 設置說明:
- 主要為各個需要偵測的服務設定。
- 範例:
新增 dovecot-check 設定
[dovecot-check]
enabled = true
#過濾名稱,對應filter.d/*.conf
filter = dovecot-check
#iptables設定
action = iptables-multiport[name=dovecot-check, port="pop3,pop3s,imap,imaps", protocol=tcp]
sendmail-whois[name=dovecot, dest=xxx@example.com, sender=xxx@example.com]
#需要掃描的記錄檔
logpath = /var/log/secure
#排除的ip、網域
ignoreip = 168.192.0.1 192.168.1.0/24
#阻擋的時間,-1表示永久阻擋
bantime = 86400
#監視的log時間區段
findtime = 300
#最高嘗試錯誤次數
maxretry = 3
其中部份參數說明如下:
-
action中的port:可直接打上標準的服務名稱或是port number。
- sendmail-whois中的dest:預設是寄到 root ,也就是本機端的root帳戶的信箱。
- sendmail-whois中的sender:這個設定會顯示在寄信的來源位置,預設是 fail2ban@mail.com 。
sendmail-whois 可省略。
- logpath:mail log預設值是 /var/log/secure。每個Linux發行版的服務記錄登入訊息的位置都不太一樣,dovecot會將訊息記錄在 /var/log/secure ,因此參數必須設置成此路徑。
- maxretry:最高嘗試錯誤次數。一旦登入錯誤超過這個次數,fail2ban就會發生阻擋事件,將該IP擋在門外。預設是使用 [DEFAULT] 區塊中的maxretry ,可另外在這邊重新指定。實際上,嘗試登入時可以比maxretry還多一次,例如maxretry = 3,那麼登入時可以錯誤4次才會被擋下。
- bantime:發生阻擋事件之後,阻擋該IP的時間。預設是用 [DEFAULT] 區塊中的 bantime ,單位是秒,也就是10分鐘。但是這個阻擋時間實在太短,有人設定為 86400,也就是一整天。若設定為 -1 ,表示永久阻擋。
filter.d/*. conf設置說明:
測試 filter 內設定是否正確:
啟動 fail2ban 的服務:
-
service fail2ban start
{start|stop|status|restart}
重新載入 fail2ban 的設定:
查看iptable的設定:
查看 fail2ban 的狀態:
查看某服務過濾情況:
設定 fail2ban 開機時自動啟動:
補充說明:
- 如果在 dovecot 有另外指定log位置,jail.local內的設定要指到相對應的log。
- dovecot 會將登入失敗的訊息會放在 /var/log/secure 及 /var/log/maillog(預設) 內,2邊都做測試會比較保險。
參考: