全部博文(535)
分类: LINUX
2011-12-29 17:59:11
DenyHosts官方网站为:
一、检查安装条件
1、首先判断系统安装的sshd是否支持tcp_wrappers(默认都支持)
# ldd /usr/sbin/sshd2、判断默认安装的Python版本
[root@localhost 03]# python -V二、已安装Python2.3以上版本的情况
1、安装DenyHosts
# cd /usr/local/src程序脚本自动安装到/usr/share/denyhosts
库文件自动安装到/usr/lib/python2.3/site-packages/DenyHosts
denyhosts.py自动安装到/usr/bin
2、设置启动脚本
# cd /usr/share/denyhosts/根据自己需要进行相应的修改
----------------denyhosts.cfg------------------------如果需要DenyHosts随系统重启而自动启动,还需做如下设置:
# vi /etc/rc.local加入下面这条命令
/usr/share/denyhosts/daemon-control start3、启动
# /usr/share/denyhosts/daemon-control start如果要使DenyHosts每次重起后自动启动还需做如下设置:
# cd /etc/init.d然后就可以启动了:
service denyhosts start
DenyHosts配置文件:
vi /etc/denyhosts.cfg这个install_denyhosts.sh是全自动下载安装的小脚本,当然安装后还得手动调整配置文件。适合非生产服务器使用;如果是生产服务器,建议大家采用我后面的ssh_deny.sh脚本。
本install_denyhosts.sh脚本如下:
#!/bin/bash下面是hostsdeny的示例:
Connection to 192.168.0.154 closed.
[root@autolemp ~]# ssh 192.168.0.154
root@192.168.0.154's password:
Permission denied, please try again.
root@192.168.0.154's password:
Permission denied, please try again.
root@192.168.0.154's password:
Permission denied (publickey,gssapi-with-mic,password)出现这行表示生效
其实这段原理也很简单, 我稍微解释一下;它其实就是收集/var/log/secure的信息,如果root登陆失败次数超过10次,它将其写进/etc/hosts.deny文件里;其实我们完全可以用shell来做这些事情,脚本控的同学可以关注以下脚本,我在线上服务器已测试成功。我主要是为了安全着想,不想在线上服务器去进行大的改动,所以采用shell的方式,有这种需求的同学也可关注下。
vim /root/ssh_deny.sh
#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' >/root/black.txt
DEFINE="10"
for i in `cat /root/black.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt $DEFINE ];
then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];
then
echo "sshd:$IP" >> /etc/hosts.deny
fi
fi
done
vim /etc/crontab
* */1 * * * root sh /root/ssh_deny.sh
写此脚本时我本来想用时间收集的问题,即隔断时间就收集一次/var/log/secure的日志信息,后来觉得这个方法比较复杂;我稍为解释一下上面的脚本。它其实就是放在crontab里,每隔一个小时就去读一下/var/log/secure的日志信息,定义连接root的IP的阀值为10,如果此IP在/etc/hosts.deny里,就什么也不做;如果不在($?值不为0,即非状态下),就将其添加进/etc/hosts.deny里,此脚本放在线上环境也有一段时间了,效果也可以的。