使用 fail2ban 防止暴力破解 ssh 及 vsftpd 密碼

轉載請註明《文章來源:http://www.centos.bz/2012/04/prevent-ssh-break-in-with-fail2ban/
 php

此文介紹一個linux下經過監控日誌防止密碼被暴力破解的軟件-fail2ban。fail2ban支持經常使用的服務,如sshd, apache, qmail, proftpd, sasl, asterisk等的密碼驗證保護,當發現暴力破解的跡像時,能夠經過iptables, tcp-wrapper, shorewall等方式阻止此IP的訪問。python

python安裝

安裝fail2ban須要Python >= 2.4,能夠直接執行python查詢版本號,但fail2ban 2.4有一個bug,因此仍是推薦安裝2.5以上的python。
python安裝方法:linux

  1. cd /tmp
  2. wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tgz
  3. tar xzf Python-2.7.3.tgz
  4. cd Python-2.7.3
  5. ./configure
  6. make && make install
  7. rm -rf /usr/bin/python
  8. ln -s /tmp/Python-2.7.3/python /usr/bin/

fail2ban安裝

  1. cd /tmp
  2. wget https://github.com/downloads/fail2ban/fail2ban/fail2ban_0.8.6.orig.tar.gz
  3. tar xzf fail2ban_0.8.6.orig.tar.gz
  4. cd fail2ban-fail2ban-a20d1f8/
  5. ./setup.py install
  6. cp files/redhat-initd /etc/init.d/fail2ban
  7. chmod 755 /etc/init.d/fail2ban

配置fail2ban日誌輪循:git

  1. vi /etc/logrotate.d/fail2ban

寫入:github

  1. /var/log/fail2ban.log {
  2. weekly
  3. rotate 7
  4. missingok
  5. compress
  6. postrotate
  7. /etc/init.d/fail2ban restart 1>/dev/null || true
  8. endscript
  9. }

fail2ban使用方法

配置文件:web

  1. /etc/fail2ban/
  2. ├── action.d
  3. │ ├── dummy.conf
  4. │ ├── hostsdeny.conf
  5. │ ├── iptables.conf
  6. │ ├── mail-whois.conf
  7. │ ├── mail.conf
  8. │ └── shorewall.conf
  9. ├── fail2ban.conf
  10. ├── fail2ban.local
  11. ├── filter.d
  12. │ ├── apache-auth.conf
  13. │ ├── apache-noscript.conf
  14. │ ├── couriersmtp.conf
  15. │ ├── postfix.conf
  16. │ ├── proftpd.conf
  17. │ ├── qmail.conf
  18. │ ├── sasl.conf
  19. │ ├── sshd.conf
  20. │ └── vsftpd.conf
  21. ├── jail.conf
  22. └── jail.local

目錄action.d下的文件指定知足條件時執行的一些動做,好比使用iptables禁止ip訪問。
目錄filter.d下的文件定義匹配日誌的正則表達式。
fail2ban.conf文件是配置fail2ban-server程序啓動的一些參數
jail.conf文件包含filter及action的指定。
每一個conf文件可被local文件覆蓋,conf文件第一個被讀取,接着是讀取local文件,因此local文件中定義的參數會覆蓋conf中的參數。因此咱們不須要添加全部的內容到local文件,只須要添加conf文件中你想覆蓋的部分參數就好。正則表達式

防ssh及vsftpd暴力破解實例

創建/etc/fail2ban/jail.local文件,在文件中加入:apache

  1. [vsftpd-iptables]
  2. enabled = true
  3. filter = vsftpd
  4. action = iptables[name=VSFTPD, port=ftp, protocol=tcp]
  5. sendmail-whois[name=VSFTPD, dest=you@mail.com]
  6. logpath = /var/log/secure
  7. maxretry = 3
  8. [ssh-iptables]
  9. enabled = true
  10. filter = sshd
  11. action = iptables[name=SSH, port=ssh, protocol=tcp]
  12. sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com]
  13. logpath = /var/log/secure.log
  14. maxretry = 5

enabled:可選值false,true
filter:指定/etc/fail2ban/filter.d/目錄下的正則文件,如filter = sshd則是指定/etc/fail2ban/filter.d/sshd.conf。
action:指定執行的動做,具體動做文件在/etc/fail2ban/action.d目錄下。
logpath:指定監控日誌的路徑。
maxretry:執行action匹配的次數。
接着執行:centos

  1. service iptables start
  2. service fail2ban start

 

在以前開始使用fail2ban防止vsftpd或ssh暴力破解以後,有必定的效果,但在查看fail2ban.log日誌時,發現一個問題:app

  1. fail2ban.filter : WARNING Unable to find a corresponding IP address for ns.rs996.com

咱們再查看secure日誌:

  1. vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=www.centos.bz rhost=ns.rs996.com

fail2ban是根據rhost取得客戶端的ip,並使用iptables禁止它,但咱們發現ns.rs996.com沒法解析出ip地址,那它的ip去哪了呢?
通過分析得出結論:vsftpd默認對客戶端ip進行反向解析,若是查詢有結果,則把ip解析出來的域名記錄secure日誌中的rhost中,可是此反向解析出來的域名,自己又沒有做A記錄的解析,因此fail2ban再進行此域名的解析時,固然就沒法獲取到IP地址,也就沒法禁止此客戶端的暴力破解行爲。
解決方法:
在vsftpd.conf中添加下面的代碼禁止反向解析:

  1. reverse_lookup_enable=NO

以後重啓vsftpd便可。生效以後不只解決了這個問題,也使得登陸vsftpd再也不停頓幾秒了。
可是/var/log/secure裏記錄ftp登陸失敗有一個缺點,就是用相同的用戶名,不一樣的密碼登陸屢次,只是記錄首次失敗的信息,而以後的就只顯示:last message repeated x times這樣的信息,沒法知足登陸失敗三次的條件,因此就不能阻止此暴力破解,下面是解決這個問題的方法:
一、打開vsftpd.conf,添加以下代碼:

  1. dual_log_enable=YES
  2. use_localtime=YES

二、打開/etc/fail2ban/jail.local,修改如下內容:

  1. [vsftpd-iptables]
  2. ...
  3. logpath = /var/log/vsftpd.log
  4. ...


參考:http://www.fail2ban.org/wiki/index.php/MANUAL_0_8

相關文章
相關標籤/搜索