基本運作原理:
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
參考資料