Fail2ban 就是一個非常實用的套件!
官方網頁:http://www.fail2ban.org
環境:
- CentOS release 5.8 (Final)
- Dovecot 1.0.7
- Postfix 2.3.3
- fail2ban 0.8.4
若無法安裝,用 # 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
- 沒什麼特別的地方,重點放在log設置位置
logtarget = /var/log/fail2ban.log
- 主要為各個需要偵測的服務設定。
- 範例:
新增 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 ,表示永久阻擋。
- 以上範例參考 CentOS安裝fail2ban記事 編修。
- 比照 jail.local 的設定,由於新增了 dovecot-check,因此也在 filter.d資料夾新增 dovecot-check.conf
- dovecot-check.conf 內容範例:
[Definition]
#掃描log檔時的過濾規則 failregex = (?: Authentication failure|Aborted login|Disconnected).*rip=(?:::f{4,6}:)?(?P<host>\S*), .* #排除部份 ignoreregex = (?: Disconnected: Logged out).*
- failrege:可自行使用正規表示式修改成需要的內容(由於小弟不熟,直接套用網路上的設定後再做測試)
測試 filter 內設定是否正確:
fail2ban-regex [log路徑] [
filter路徑]
fail2ban-regex /var/log/dovecot.log /etc/fail2ban/filter.d/
dovecot-check.conf
-
service fail2ban start
{start|stop|status|restart}
fail2ban-client reload
iptables –L
fail2ban-client status
fail2ban-client status [jail.conf 設定的名稱]
fail2ban-client status
dovecot-check
chkconfig fail2ban on
補充說明:
- 如果在 dovecot 有另外指定log位置,jail.local內的設定要指到相對應的log。
- dovecot 會將登入失敗的訊息會放在 /var/log/secure 及 /var/log/maillog(預設) 內,2邊都做測試會比較保險。
參考:
- http://pulipuli.blogspot.tw/2011/07/centosfail2ban.html#postcata1357703383896_anchor2
- http://dylanc.twbbs.org/?p=454
- http://cyrilwang.blogspot.tw/2012/04/fail2ban.html
- http://www.fail2ban.org/wiki/index.php/Talk:Dovecot
- http://blog.xuite.net/pippeng/blog/63675336
防堵網頁攻擊
回覆刪除# vim /etc/fail2ban/jail.conf
[apache-badbots]
enabled = true
filter = apache-badbots
action = iptables-multiport[name=BadBots, port="http,https"]
logpath = /var/log/httpd/access_log
bantime = 172800
maxretry = 1
[httpd]
enabled = true
filter = httpd
action = iptables[name=httpd, port=80, protocol=tcp]
logpath = /var/log/httpd/access_log
maxretry = 3
bantime = 86400
# vim /etc/fail2ban/filter.d/httpd.conf
[Definition]
failregex = ^ -.*"(GET|POST).*HTTP.*" (202|400|403|404)
http.conf改為
刪除failregex = [[]client < HOST >[]] (File does not exist): .*
--
< HOST > 中間的空白要拿掉
雖然官方文件建議有新的規則要用 name.local 的方式另外建新檔案設定,但是我還是比較習慣修改原檔案
回覆刪除新增 FreeBSD 安裝方式
回覆刪除# cd /usr/ports/security/py-fail2ban
# make install clean
開機時啟動
# vim /etc/rc.conf
加入下面一行
fail2ban_enable="YES"
啟動 fail2ban
# /usr/local/etc/rc.d/fail2ban start
fail2ban 設定檔位置
/usr/local/etc/fail2ban/
設定的部份同 centos
查看 ipfw firewall 是否有阻擋下來
# ipfw list
# vim /etc/fail2ban/jail.conf
回覆刪除[secure-check]
enabled = true
filter = secure-check
action = iptables-multiport[name=secure-check, port="pop3,pop3s,imap,imaps,ssh", protocol=tcp]
sendmail-whois[name=securei-check, dest=dns, sender=fail2ban@chief.com.tw]
logpath = /var/log/secure
# bantime = 60*60*24*5 (5 day)
bantime = 432000
findtime = 180
maxretry = 3
# vim /etc/fail2ban/filter.d/httpd.conf
failregex = authentication failure.* rhost= < HOST >
ignoreregex = (?: Disconnected: Logged out).*