用fail2ban阻止SSH和VSFTP暴力破解密码,这样服务器能清净许多。还有个denyhosts只能阻止ssh所以没用。
一、下载安装
#wget https://github.com/fail2ban/fail2ban/tarball/0.8.6
下载下来一个0.8.6的文件名的文件,这个就是
#tar zxvf 0.8.6
解压后得到一个文件夹:fail2ban-fail2ban-a20d1f8
#cd fail2ban-fail2ban-a20d1f8
#python setup.py install
#cd files
# cp ./redhat-initd /etc/init.d/fail2ban
# chkconfig --add fail2ban
#service fail2ban start

注意:如果重起iptables 记的一定还要重起fail2ban,不然他就不能生效,fail2ban的过滤表是在

iptables 启动后在加入的。
官网上说python2.4有问题,我的是2.4.3安装了没看出来,不知道是哪里。

二、配置
1、fail2ban本身配置(这个不用动)
默认fail2ban.conf里面就三个参数,而且都有注释。
#默认日志的级别
loglevel = 3
#日志的存放路径
logtarget = /var/log/fail2ban.log
#socket的位置
socket = /tmp/fail2ban.sock

2、fail2ban防护配置(这个是重点)
全局设置
# vi /etc/fail2ban/jail.conf
# 忽略IP范围 如果有二组以上用空白做为间隔
ignoreip = 127.0.0.1
# 设定 IP 被封锁的时间(秒),如果值为 -1,代表永远封锁
bantime = 86400
# 设定在多少时间内达到 maxretry 的次数就封锁
findtime = 600
# 允许尝试的次数
maxretry = 3


分类设置
#针对sshd暴力入侵防护

[ssh-iptables]

enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
#sendmail-whois[name=SSH, dest=you@mail.com, sender=fail2ban@mail.com] 发邮件通知你,我不想要。
logpath = /var/log/secure #ssh日志文件,你的ssh日志如果不是要自己改换
# 如果有个别的次数设定就设在这里
maxretry = 3

#针对vsftpd暴力入侵防护

[vsftpd-iptables]

enabled = true
filter = vsftpd
action = iptables[name=VSFTPD, port=ftp, protocol=tcp]
#sendmail-whois[name=VSFTPD, dest=you@mail.com] 发邮件通知你,我不想要。
logpath = /var/log/vsftpd.log #vsftp日志文件,你的ssh日志如果不是要自己改换
maxretry = 3

里面还有别的程序的防护,如果你有采用就可以开启对应

然后我们设置启动服务:
#chkconfig --level 345 fail2ban on
#service fail2ban start

三、测试:
查看iptables 的规则多出了 iptables-ssh的规则

iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-SSH tcp — anywhere anywhere tcp dpt:ssh
fail2ban-SSH tcp — anywhere anywhere tcp dpt:ssh

Chain fail2ban-SSH (2 references)
target prot opt source destination
DROP all — 122.102.64.54 anywhere

# 这有一个被阻止的IP 拒绝时间根据在你的配置文件设置时间有关 我设置的是一天
RETURN all — anywhere anywhere

++++++++++++++++++++++++++++++++++++++++++++++++++++++++
在其他的机器上ssh 192.168.1.2
连续三次输错密码

使用命令fail2ban-client status ssh-iptables
查看阻止状态


或者

fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: ssh-iptables

测试结果:
#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 list: 192.168.1.1
`- Total banned: 1

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

我们在来看看fail2ban的日志记录
#cat /vat/log/fail2ban.log

2010-05-17 16:57:23,964 fail2ban.actions: WARNING [ssh-iptables] Ban 192.168.1.1
2010-05-17 21:35:00,449 fail2ban.actions: WARNING [ssh-iptables] Ban 218.108.85.244
2010-05-18 03:56:34,986 fail2ban.actions: WARNING [ssh-iptables] Ban 59.39.66.30


记录了被阻止的IP,成功阻止了ssh 密码猜测
以后可以清心点了,vsftp也是一样。

配置日志自动清理

写一个logrotate的配置文件,用来定期清理日志文件

#vi /etc/logrotate.d/fail2ban

官网给的例子 /var/log/fail2ban.log {
weekly
rotate 7
missingok
compress
postrotate
/usr/local/bin/fail2ban-client reload 1>/dev/null || true
endscript

}

限制大小的

/var/log/fail2ban.log {
missingok
notifempty
size 30k
create 0600 root root
postrotate
/usr/bin/fail2ban-client reload 2> /dev/null || true
endscript
}
我们可以使用以下命令,强制执行一次,以后就会按定时计划执行
#logrotate -f /etc/logrotate.d/fail2ban

这里只是只介绍了保护SSH和VPSFTP方法,配置文件中还有其他的服务配置,有时间了大家可以自己研究

一下。