2011年4月7日 星期四

Postfix & Fail2ban–Part 1

公司最近有二台Postfix一直被SPAM困擾,奇怪的是有一台Postfix每次被當成SPAM時,找來找去都找不到Policy有問題,就把Postfix重開就好了,所以感覺是被SPAM用到掛了,所以就被SPAM拿來寄信了,因此為了想要徹底這個問題,本想寫一支Script來跑iptables,後來遇到問題,就上網找相關資料時.在酷學園發現有Fail2ban,因此便利用Google大神來找相關資料,果然找到許多可用的資料,因此就馬上裝來試用,目前用了一天下來,還感覺不出來好用的,但是看到iptables可以自動加入Deny名單,這點就真的太躦了,解決了我的困擾,以下就大概寫一下安裝方式

小弟的環境是用CentOS 5.4,因此當然就用yum啦

在安裝之前建議各位可以先到這裡

http://www.fail2ban.org/wiki/index.php/Downloads

安裝Yum所需的server路徑,安裝好了就可以直接用yum –y install fail2ban,小弟剛開始安裝裝成0.6版的,後再升級二次到最新的0.82版(這個真的很奇怪-_-")

接著當然就是設定啦

到/etc/fail2ban/下,修改jail.conf(這是開啟要用fail2ban的那些功能及使用方式),新增一個開啟,小弟設定如下:

  1. bantime = 86400(要用iptables擋多久--秒)
  2. findtime = 21600(要監控多久時間--秒)
  3. maxretry = 3(在監控時間內被Try幾次--次數)

以上這三點都有預設值,各位可以自行斟酌,接著就是設定/etc/fail2ban/fail2ban.conf

logtarget = SYSLOG 改成

logtarget = /var/log/fail2ban.log(這是為了將Log單獨出來記錄,預設不改會記錄在message裡),再接下來就是設定要監控那個服務

[postfix-iptables]

enabled = true
filter = postfix
action = iptables[name=SMTP, port=smtp, protocol=tcp]
sendmail-whois[name=Postfix, dest=yourname@yourdomainname]
logpath = /var/log/maillog
maxretry= 3

小弟是用postfix的,所以用postfix-iptables來命名(這會出現在後續的police裡),以上就設定好了,接著再到/etc/fail2ban/filter.d裡設定postfix.conf新增要抵擋那些訊息,設定如下:

failregex = reject: RCPT from (.*)\[<HOST>\]: 554
reject: RCPT from (.*)\[<HOST>\]: 550 5.1.1
reject: RCPT from (.*)\[<HOST>\]: 450 4.7.1
reject: RCPT from (.*)\[<HOST>\]: 554 5.7.1
reject: RCPT from (.*)\[<HOST>\]: 450 4.1.1
reject: RCPT from (.*)\[<HOST>\]: 450 4.1.8
reject: RCPT from unknown(.*)\[<HOST>\]: 504 5.5.2

這是當fail2ban預到以上這些,像504 5.5.2時,就開始進入準備防範

若在3小時內出現相同IP3次,就加入Iptables裡的Drop名單內

另小弟是用postfix,而在jail.conf裡我們有設定用sendmail-whois這個actione,所以還修改一個地方,所以小弟到/etc/fail2ban/action.d裡修改sendmail-whois.conf,將所有sendmail-whois.conf裡的sendmail改成sendmail.postfix,如下:(這樣就可以寄通知信了,小弟有換成mail結果不行,應該是利用postfix來寄信,所以就改成這樣子)

[Definition]

# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = printf %%b "Subject: [Fail2Ban] <name>: started
From: Fail2Ban <<sender>>
To: <dest>\n
Hi,\n
The jail <name> has been started successfully.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail.postfix -f <sender> <dest>

最後當然是下chkconfig fail2ban on

再用service fail2ban start就可以啦

要看目前狀況,可以用fail2ban-client status查看目前有那些policy在執行,如下:

1

若是要看詳細的,可以用fail2ban-client status postfix-iptables(Policy name),如下:

2

也可以用iptables看Drop了那些IP,如下:

3

而當有發現被擋的IP時,也會發MaIl通知,就是我們設定action裡的sendmail-whois的設定內容,Mail畫面如下:

4

以上就是fail2ban的大致設定內容與方法,小弟若有找到其它方式時,會再繼續更新