我的博客已迁移到xdoujiang.com请去那边和我交流
一、基础环境
1、fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作
(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,
fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的软件!

2、版本
cat /etc/debian_version 
7.4

3、ip
10.131.172.202

二、安装fail2ban
1、apt或dpkg安装
apt-get -y install fail2ban
或
dpkg -i fail2ban_0.8.6-3wheezy3_all.deb

PS:下载地址
http://ftp.cn.debian.org/debian/pool/main/f/fail2ban/fail2ban_0.8.6-3wheezy3_all.deb

2、查看配置
ll /etc/fail2ban/
drwxr-xr-x 2 root root 4096 Jun 19 14:15 action.d
-rw-r--r-- 1 root root  853 Nov 29  2011 fail2ban.conf
drwxr-xr-x 2 root root 4096 Jun 19 15:43 filter.d
-rw-r--r-- 1 root root 7347 Jun 19 15:51 jail.conf

3、修改配置支持ssh和apache
cat /etc/fail2ban/jail.local(PS:这个配置文件一定是以.local结尾的)
[DEFAULT]
ignoreip = 127.0.0.1/8 172.31.0.0/24 10.0.0.0/8 192.168.0.0/24
bantime = 86400
maxretry = 10
findtime = 600
[ssh-iptables]
enabled = true
port = 55000
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
[apache]
enabled  = true
port     = 80,443
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6
[apache-noscript]
enabled  = true
port     = 80,443
filter   = apache-noscript
logpath  = /var/log/apache*/*error.log
maxretry = 6
[apache-overflows]
enabled  = true
port     = 80,443
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2
[apache-nohome]
enabled  = true
port     = 80,443
filter   = apache-nohome
logpath  = /var/log/apache*/*error.log
maxretry = 2
PS:我这里ssh端口是55000 apache是80
netstat -tupnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:55000           0.0.0.0:*               LISTEN      29921/sshd      
tcp        0      0 127.0.0.1:9898          0.0.0.0:*               LISTEN      30949/barad_agent
tcp6       0      0 :::80                   :::*                    LISTEN      3964/apache2    
tcp6       0      0 :::55000                :::*                    LISTEN      29921/sshd  

4、重启服务
/etc/init.d/fail2ban restart
[ ok ] Restarting authentication failure monitor: fail2ban.

5、查看日志
2015-06-19 22:06:37,139 fail2ban.server : INFO   Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.6
2015-06-19 22:06:37,140 fail2ban.jail   : INFO   Creating new jail 'apache'
2015-06-19 22:06:37,140 fail2ban.jail   : INFO   Jail 'apache' uses Gamin
2015-06-19 22:06:37,149 fail2ban.filter : INFO   Added logfile = /var/log/apache2/svn_error.log
2015-06-19 22:06:37,150 fail2ban.filter : INFO   Set maxRetry = 6
2015-06-19 22:06:37,151 fail2ban.filter : INFO   Set findtime = 600
2015-06-19 22:06:37,151 fail2ban.actions: INFO   Set banTime = 86400
2015-06-19 22:06:37,154 fail2ban.jail   : INFO   Creating new jail 'apache-noscript'
2015-06-19 22:06:37,154 fail2ban.jail   : INFO   Jail 'apache-noscript' uses Gamin
2015-06-19 22:06:37,155 fail2ban.filter : INFO   Added logfile = /var/log/apache2/svn_error.log
2015-06-19 22:06:37,155 fail2ban.filter : INFO   Set maxRetry = 6
2015-06-19 22:06:37,156 fail2ban.filter : INFO   Set findtime = 600
2015-06-19 22:06:37,157 fail2ban.actions: INFO   Set banTime = 86400
2015-06-19 22:06:37,161 fail2ban.jail   : INFO   Creating new jail 'apache-overflows'
2015-06-19 22:06:37,161 fail2ban.jail   : INFO   Jail 'apache-overflows' uses Gamin
2015-06-19 22:06:37,161 fail2ban.filter : INFO   Added logfile = /var/log/apache2/svn_error.log
2015-06-19 22:06:37,162 fail2ban.filter : INFO   Set maxRetry = 2
2015-06-19 22:06:37,163 fail2ban.filter : INFO   Set findtime = 600
2015-06-19 22:06:37,163 fail2ban.actions: INFO   Set banTime = 86400
2015-06-19 22:06:37,166 fail2ban.jail   : INFO   Creating new jail 'ssh-iptables'
2015-06-19 22:06:37,167 fail2ban.jail   : INFO   Jail 'ssh-iptables' uses Gamin
2015-06-19 22:06:37,167 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2015-06-19 22:06:37,167 fail2ban.filter : INFO   Set maxRetry = 5
2015-06-19 22:06:37,169 fail2ban.filter : INFO   Set findtime = 600
2015-06-19 22:06:37,169 fail2ban.actions: INFO   Set banTime = 86400
2015-06-19 22:06:37,188 fail2ban.jail   : INFO   Creating new jail 'apache-nohome'
2015-06-19 22:06:37,188 fail2ban.jail   : INFO   Jail 'apache-nohome' uses Gamin
2015-06-19 22:06:37,189 fail2ban.filter : INFO   Added logfile = /var/log/apache2/svn_error.log
2015-06-19 22:06:37,189 fail2ban.filter : INFO   Set maxRetry = 2
2015-06-19 22:06:37,190 fail2ban.filter : INFO   Set findtime = 600
2015-06-19 22:06:37,191 fail2ban.actions: INFO   Set banTime = 86400
2015-06-19 22:06:37,194 fail2ban.jail   : INFO   Jail 'apache' started
2015-06-19 22:06:37,196 fail2ban.jail   : INFO   Jail 'apache-noscript' started
2015-06-19 22:06:37,197 fail2ban.jail   : INFO   Jail 'apache-overflows' started
2015-06-19 22:06:37,198 fail2ban.jail   : INFO   Jail 'ssh-iptables' started
2015-06-19 22:06:37,200 fail2ban.jail   : INFO   Jail 'apache-nohome' started

6、查看iptables已经生效了
iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-apache-nohome  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
fail2ban-ssh-iptables  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 55000
fail2ban-apache-overflows  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
fail2ban-apache-noscript  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
fail2ban-apache  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
Chain fail2ban-apache (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
Chain fail2ban-apache-nohome (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
Chain fail2ban-apache-noscript (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
Chain fail2ban-apache-overflows (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
Chain fail2ban-ssh-iptables (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

7、使用fail2ban-client命令查看状态
fail2ban-client status
Status
|- Number of jail:    5
- Jail list:        apache, apache-overflows, apache-nohome, apache-noscript, ssh-iptables

8、更细致的查看某个项
fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
|  |- File list:    /var/log/auth.log 
|  |- Currently failed:    0
|  `- Total failed:    0
`- action
   |- Currently banned:    0
   |  `- IP list:    
   `- Total banned:    0
   
9、将服务加入到开机启动
update-rc.d fail2ban defaults
update-rc.d: using dependency based boot sequencing

10、查看下日志轮询信息
cat /etc/logrotate.d/fail2ban 
/var/log/fail2ban.log {
   
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    postrotate
    fail2ban-client set logtarget /var/log/fail2ban.log >/dev/null
    endscript
    # If fail2ban runs as non-root it still needs to have write access
    # to logfiles.
    # create 640 fail2ban adm
    create 640 root adm
}

三、参考文章
http://xmodulo.com/how-to-protect-ssh-server-from-brute-force-attacks-using-fail2ban.html
https://linux.cn/article-5068-qqmail.html