fail2ban可以監視你的系統日志,然后匹配日志的錯誤信息(正則式匹配)執行相應的屏蔽動作(一般情況下是防火牆),而且可以發送e-mail通知系統管理員!
fail2ban運行機制:簡單來說其功能就是防止暴力破解。工作的原理是通過分析一定時間內的相關服務日志,將滿足動作的相關IP利用iptables加入到dorp(丟棄)列表一定時間。
fail2ban 官方網址:http://www.fail2ban.org
文章的主要內容: 1. 安裝fail2ban 2. 配置fail2ban 3. fail2ban的常用命令以及詳解 4.郵件預警 5.注意事項
1. 安裝fail2ban
源碼安裝:
1.1 下載安裝包並解壓
cd /tmp && wget https://github.com/fail2ban/fail2ban/archive/0.8.14.tar.gz && tar -xvzf 0.8.14.tar.gz
1.2 查看安裝需要的環境
[root@vultr fail2ban-0.8.14]# cd /tmp/fail2ban* && cat README.md Installation: ------------- **It is possible that Fail2ban is already packaged for your distribution. In this case, you should use it instead.** Required: - [Python >= 2.4](http://www.python.org) Optional: - [pyinotify >= 0.8.3](https://github.com/seb-m/pyinotify) - Linux >= 2.6.13 - [gamin >= 0.0.21](http://www.gnome.org/~veillard/gamin) To install, just do: tar xvfj fail2ban-0.8.12.tar.bz2 cd fail2ban-0.8.12 python setup.py install This will install Fail2Ban into /usr/share/fail2ban. The executable scripts are placed into /usr/bin, and configuration under /etc/fail2ban. Fail2Ban should be correctly installed now. Just type: fail2ban-client -h to see if everything is alright. You should always use fail2ban-client and never call fail2ban-server directly.
我把README.md里的主要內容貼出來了。
環境檢查
[root@localhost ~]# python -V Python 2.7.5 [root@localhost ~]# uname -r 3.10.0-693.el7.x86_64
1.3 安裝fail2ban
cd /tmp/fail2ban-* && python setup.py install
echo $?
生成服務啟動腳本並開機自啟:
cp /tmp/fail2ban-*/files/redhat-initd /etc/init.d/fail2ban /sbin/chkconfig fail2ban on
yum安裝:
yum install fail2ban
fail2ban的配置文件路徑:/etc/fail2ban
fail2ban安裝目錄:/usr/share/fail2ban
日志文件:/var/log/fail2ban.log
達到閾值之后的執行的動作的配置文件: action.d/
包含所有的過濾規則:filter.d/
2. 配置fail2ban並實現防暴力破解
官方的文檔寫到:在配置時,我們應該避免修改由fail2ban安裝創建的文件,我們應該去編寫具有.local擴展名的新文件。在.local新文件里配置的內容會覆蓋jail.conf內容里相同的值。
當我們的配置發生改變了我們可以使用 fail2ban-client reload ,來加載新的配置。
2.1配置fail2ban
編輯配置文件 jail.local 並實現防暴力破解
vim /etc/fail2ban/jail.d/jail.local
文件內容:
#defalut這里是設定全局設置,如果下面的監控沒有設置就以全局設置的值設置。 [DEFAULT] # 用於指定哪些地址ip可以忽略 fail2ban 防御,以空格間隔。 ignoreip = 127.0.0.1/8 # 客戶端主機被禁止的時長(默認單位為秒) bantime = 3600 # 過濾的時長(秒) findtime = 600 # 匹配到的閾值(次數) maxretry = 3 [ssh-iptables] # 是否開啟 enabled = true # 過濾規則 filter = sshd # 動作 action = iptables[name=SSH, port=ssh, protocol=tcp] # 日志文件的路徑 logpath = /var/log/secure # 匹配到的閾值(次數) maxretry = 3
在這里需要注意一點就是:我們上面的action設置的時候,port=ssh,如果我們更改了sshd服務的端口號,我能需要在這里設置對應的端口號,否則配置不生效。
2.2 防暴力破解測試
在上面配置好了之后,我們需要讓配置生效:
fail2ban-client reload
測試:故意輸入錯誤密碼3次,再進行登錄時,會拒絕登錄
[root@121~]# ssh 192.168.1.121 root@192.168.1.121's password: Permission denied, please try again. root@192.168.1.121's password: Permission denied, please try again. root@192.168.1.121's password: Permission denied (publickey,password). [root@121~]# ssh 192.168.1.121 ssh: connect to host 192.168.1.121 port 22: Connection refused
我們可以查看當前被禁止登陸的ip:
[root@121]# fail2ban-client status ssh-iptables Status for the jail: ssh-iptables |- filter | |- File list: /var/log/secure #日志文件路徑 | |- Currently failed: 0 #當前失敗次數 | `- Total failed: 3 #總失敗次數 `- action |- Currently banned: 1 #當前禁止的ip數量 | `- IP list: 192.168.1.112 #當前禁止的ip `- Total banned: 1 #禁止的ip總數
3. fail2ban常用的命令
3.1 啟動暫停查看狀態
systemctl start/restart/stop/status fail2ban
3.2 fail2ban-client
start | 啟動fail2ban server和監獄 |
reload | 重新加載配置文件 |
stop | 暫停fail2ban和監獄 |
status | 查看運行的監控服務數量和列表 |
set loglevel | 設置日志等級,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG |
get loglevel | 獲取當前日志的等級 |
set <JAIL> idle on|off | 設置某個監控(監獄)的狀態。 |
set <JAIL> addignoreip <IP> | 設置某個監控(監獄)可以忽略的ip |
set <JAIL> delignoreip <IP> | 刪除某個監控(監獄)可以忽略的ip |
set <JAIL> banip <IP> | 將ip加入 監控(監獄) |
set <JAIL> unbanip <IP> | 將ip從監控(監獄)移除 |
還有很多沒有列出來,我只在列出了我常用的一些。
3.3 fail2ban-regex
測試篩選規則設否匹配當前的日志格式:
fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf
4. fail2ban郵件預警
fail2ban 利用sendmail 進行發郵件也可以用mail進行發郵件,在嘗試了sendmail無果后,決定使用mail。
具體步驟:
4.1 在/etc/mail.rc末尾配置發件人的信息:
set ssl-verify=ignore set from=djx set smtp=smtps://mail.163.com:25 set smtp-auth-user=dj set smtp-auth-password= set smtp-auth=login set nss-config-dir=/root/.certs
4.2 然后在jail.local(自己的配置文件里),加入:
mail-whois[name=SSH, dest=1120@qq.com, sender=djx@163.com]
dest 是填入收件人郵箱
sender 是填入 發送郵箱
最后重新加載下配置即可。
注意的問題:
時區問題:
http://www.fail2ban.org/wiki/index.php/FAQ_english:If time reference is not the same everywhere, then fail2ban won't ban any IP!
當我們更改了時區后,然后日志的時間並沒有修改過來,導致兩者的時間不一致,這樣fail2ban的工作就失效了
解決辦法:重啟日志服務:systemctl restart rsyslog,保證兩者的時間一致。
修改端口問題:
sshd更改端口號后使用fail2ban需要注意在填寫配置的時候也需要更改端口號。否則會出現就算會將ip添加到防火牆,但是由於我更改了端口號,是起不到禁止作用的。
解決方法:配置文件中 action = iptables[name=SSH, port=ssh, protocol=tcp] ,port位置修改為新的端口。
fail2ban一鍵安裝腳本和fail2ban防cc攻擊在端午節后會寫出來。