« 惡搞無線網路盜連者 | 首頁 | 2007/06, Vol. 137 PChome Magazine »

2007年06月06日

以 Fail2ban 封鎖嘗試侵入的 IP

基本運作原理: fail2ban (daemon) → 監視 log file → 連續出現多次錯誤訊息 → 封鎖來源 IP

以下是分別在 Fedora Core 3 (python-2.3 & fail2ban 0.6.1) 與 Fedora 7 (python-2.5 & fail2ban 0.8) 針對 sshd 與 proftpd 的防護設置

環境

  • Fedora Core 3
  • python-2.3.4
  • fail2ban 0.6.1 (required: python >= 2.3)

安裝 fail2ban 0.6.1

download page

wget http://fail2ban.sourceforge.net/rpms/fail2ban-0.6.1-2jik.noarch.rpm

rpm -ivh fail2ban-0.6.1-2jik.noarch.rpm

啟用 fail2ban

vi /etc/fail2ban.conf

#以 daemon 方式啟動 fail2ban
background = true

#允許嘗試次數
maxfailures = 3

#觸發 maxfailures 之後的封鎖時間(秒); 設為 -1 表示永遠封鎖
bantime = 600

#以 findtime (秒) 時間內的錯誤記錄作為 maxfailures 的計數基準
findtime = 600

#排除 IP 範圍, 以空白隔開
ignoreip = 127.0.0.1 192.168.0.0/24

#不啟用 mail 通知
[MAIL]

enabled = false

#修改自 VSFTPD, 未提及的部份保持原設定
[PROFTPD]

enabled = true
logfile = /var/log/proftpd/proftpd.log
failregex = no such user|Incorrect password

#未提及的部份保持原設定
[SSH]

enabled = true
logfile = /var/log/secure

service fail2ban start

環境

  • Fedora 7
  • python-2.5
  • fail2ban 0.8 (required: python >= 2.4)

安裝 fail2ban 0.8

download page

yum install python-devel

wget http://nchc.dl.sourceforge.net/sourceforge/fail2ban/fail2ban-0.8.0.tar.bz2

tar jxf fail2ban-0.8.0.tar.bz2

cd fail2ban-0.8.0

python setup.py install

啟用 fail2ban

cd /etc/fail2ban

vi jail.conf

#全域設置
[DEFAULT]

#排除 IP 範圍, 以空白隔開
ignoreip = 127.0.0.1 192.168.0.0/24

#觸發 maxretry 之後的封鎖時間(秒); 設為 -1 表示永遠封鎖
bantime = 600

#以 findtime (秒) 時間內的錯誤記錄作為 maxretry 的計數基準
findtime = 600

#允許嘗試次數
maxretry = 3

#以 iptables 阻擋嚐試登入 sshd 的來源 ip
[ssh-iptables]

enabled = true
filter = sshd #對應 /etc/fail2ban/filter.d
action = iptables[name=SSH, port=ssh, portocol=tcp] #對應 /etc/fail2ban/action.d
logpath = /var/log/secure #這是 Fedora 的 sshd log file
maxretry = 5 #取代全域設定值 (maxretry = 3)

[proftpd-iptables]

enabled = true
filter = proftpd
action = iptables[name=ProFTPD, port=ftp, protocol=tcp]
logpath = /var/log/proftpd/proftpd.log
maxretry = 6

fail2ban-client start


ProFTPD 補充

  • 產生 log 檔:
    • 編輯 proftpd.conf
    • 加入: SystemLog /var/log/proftpd/proftpd.log
  • 若要連密碼錯誤也一併計入 "maxretry":
    • 編輯 /etc/fail2ban/filter.d/proftpd.conf
    • 於 failregex 加入一行: Incorrect password


參考資料

Posted by Jamyy at 2007年06月06日 16:11

Trackback Pings

TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/285

Comments

写得不错,你这里 介绍拉一些我不清楚或者不知道的东西!
而且也感觉兄弟你非常的扎实,不知道我写的简体字你是否认识.
呵呵,一个内地的小sa
祝你快乐,坚持写下去!

Posted by: Anonymous at 2007年06月07日 10:32

謝謝您的鼓勵, 我會繼續努力的 :)

Posted by: Jamyy at 2007年06月07日 12:46

站長您好~~有個小問題請教
我發現後的主機有開了一個port 790
執行netstat -antp 後結果如下
tcp 0 0 0.0.0.0:790 0.0.0.0:* LISTEN 1880/rpc.statd
執行 nmap localhost後結果
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
199/tcp open smux
443/tcp open https
790/tcp open unknown
3000/tcp open ppp
5900/tcp open vnc

不知790這個rpc.statd有什麼做用,是不安全的嗎?

Posted by: 阿榮 at 2007年06月26日 10:57

其實我也不是很了解 rpc.statd 是什麼東西, 在 fedora core distro 中, 它是 nfs-utils package 裡的其中一個成員

以下摘錄自 man page of rpc.statd:
It is used by the NFS file locking service, rpc.lockd, to implement lock recovery when the NFS server machine crashes and reboots.

如果怕不安全, 可以用 tcp_wrapper 來保護它:
vi /etc/hosts.deny
statd: ALL EXCEPT .your.com

Posted by: Jamyy at 2007年06月26日 15:13

站長 您好
我的系統是CENTOS5,我將nfslock這一個服務停掉後,790 PORT就關閉了,因為我這一台NAT主機,不用NFS服務
所以應該是和NFS服務有關吧!

Posted by: 阿榮 at 2007年06月26日 15:53

沒錯, 關掉不需要的服務, 系統會更安全些 (至少漏洞會少一點 :)

Posted by: Jamyy at 2007年06月27日 01:00

站長您好
有個問題是最近nat主機上面logwatch 中一直出現
Connection attempts using mod_proxy:
122.126.102.233 -> mail2.xps.idv.tw:25: 1 Time(s)
122.126.109.47 -> mail2.xps.idv.tw:25: 1 Time(s)
122.126.116.224 -> mail2.xps.idv.tw:25: 1 Time(s)
122.126.98.148 -> mail2.xps.idv.tw:25: 1 Time(s)
可是我並沒有裝proxy的服務,這log看來好像是對方利用proxy和我連線!
目前我想說用iptables 擋掉
/sbin/iptables -A INPUT -i ppp0 -s 122.126.102.233 -j DROP
/sbin/iptables -A INPUT -i ppp0 -s 122.126.109.47 -j DROP
/sbin/iptables -A INPUT -i ppp0 -s 122.126.116.224 -j DROP
/sbin/iptables -A INPUT -i ppp0 -s 122.126.98.148 -j DROP
可是如果每天都不用ip不就麻煩
站長有啥好方法提供一下嗎?

Posted by: 阿榮 at 2007年07月18日 08:49

我只知道 mod_proxy 是 apache http server 的東西
http://httpd.apache.org/docs/2.0/mod/mod_proxy.html

如果把 httpd.conf 裡的 LoadModule proxy_* 都註解掉的話, 應該就不會有這個問題了吧

網路上也有一些關於這個問題的討論, 例如:
http://forums.fedoraforum.org/archive/index.php/t-91619.html
我是在 google 用 attempts using mod_proxy 這幾個字找的

Posted by: Jamyy at 2007年07月18日 09:43

非常感謝這有用的資訊 :Q
0.8.1似乎就不用
於 failregex 加入一行: Incorrect password
最近實在被跳板式FTP攻擊搞到Log有夠肥大的...

Posted by: 那顆爛蔥 at 2007年08月23日 02:39