DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的***时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
1、检查安装条件
1) 判断系统安装的sshd是否支持tcp_wrappers(默认都支持),命令如下:
 ldd /usr/sbin/sshd |grep libwrap.so.0
如果有输出:libwrap.so.0 => /lib64/libwrap.so.0 则为支持
2)判断是否有python(centos默认都有):
python -v
2、安装及配置denyhosts工具
1)安装denyhosts
cd
wget http://jaist.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz
tar -xvzf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6
python setup.py install
根据输出可以看到:
程序脚本自动安装到/usr/share/denyhosts
2)设置启动脚本,配置配置文件:
cd /usr/share/denyhosts
cp daemon-control-dist daemon-control
chown root daemon-control
chmod 700 daemon-control
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
chkconfig --add denyhosts
chkconfig --level 345 denyhosts on
##将denyhosts.cfg-dist中不是以"#"开头的行,写入denyhosts.cfg文件
grep -v "^#" denyhosts.cfg-dist > denyhosts.cfg
vim denyhosts.cfg
SECURE_LOG = /var/log/secure
#ssh日志文件,根据该文件判断是否为非法IP
HOSTS_DENY = /etc/hosts.deny
#控制用户登录的文件
PURGE_DENY =
#表示过多久后清除已经禁止的IP
BLOCK_SERVICE  = sshd
#表示禁止的服务名
DENY_THRESHOLD_INVALID = 5
#表示允许无效用户登录失败的次数
DENY_THRESHOLD_VALID = 10
#表示允许普通用户登录失败的次数
DENY_THRESHOLD_ROOT = 1
#表示允许root用户登录失败的次数
ADMIN_EMAIL =
##管理员邮箱
配置完成后service denyhosts start

做过测试:在192.168.0.189的/etc/hosts.allow中添加sshd:192.168.0.188:allow,同时启用192.168.0.189的denyhost服务,用192.168.0.188这台服务器尝试猜测192.168.0.189的账号密码直到192.168.0.189服务器将sshd: 192.168.0.188加到/etc/hosts.deny文件中为止,这个时候再用192.168.0.188尝试登陆192.168.0.189仍然可以登陆成功,这说明allow的优先级高于deny,这样就容易解决内部人员由于输错密码而导致不能登陆服务器问题;