文件包:
DenyHosts-2.6.tar.gz
为了防止此类无聊之人再次光临,就得想办法不让他们进行扫描,本人在网上查找资料,得知Denyhosts软件可以达到该效果,DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。如果是手动添加的话不把人累死才怪。
DenyHosts官方网站为:http://denyhosts.sourceforge.net
一.检查安装要求
1.首选检查sshd是否支持Tcpwrap,只有支持Tcpwrap才可以安装Denyhost
#ldd /usr/sbin/sshd |grep wrap
libwrap.so.0=> /usr/lib/libwrap.so.0 (0x00864000) //出现此信息时表示支持
2.再检查Python的版本,Python2.3以上版本可以直接安装
#python -V
Python2.4.3
均达到要求
二.安装Denyhosts
#tar -zxvf DenyHosts-2.6.tar.gz
#cd DenyHosts-2.6
#python setup.py install (执行Python脚本进行安装)
(默认是安装到/usr/share/denyhosts目录的
程序脚本自动安装到/usr/share/denyhosts
库文件自动安装到/usr/lib/python2.4/site-packages/DenyHosts
denyhosts.py安装到/usr/bin)
三.配置
#cd /usr/share/denyhosts/
#cp denyhosts.cfg-dist denyhosts.cfg (拷贝模板文件)
#vim denyhosts.cfg
中:修改和解释
SECURE_LOG= /var/log/secure #ssh日志文件,它是根据这个文件来判断的,如还有其他的只要更改名字即可,例如将secure改为secure.1等。
HOSTS_DENY= /etc/hosts.deny #将阻止IP写入到hosts.deny/#控制用户登陆的文件,将多次连接失败的IP添加到此文件,达到屏蔽的作用
PURGE_DENY= 5h #过多久后清除已阻止IP,这里为5小时(空表示永远不解禁) #(s表示秒,m表示分,h表示小时,d表示天,w表示周,y表示年)
BLOCK_SERVICE= sshd #阻止服务名
DENY_THRESHOLD_INVALID= 1 #允许无效用户登录失败的次数
DENY_THRESHOLD_VALID= 10 #允许普通/有效用户登录失败的次数
DENY_THRESHOLD_ROOT= 5 #允许root登录失败的次数
WORK_DIR= /usr/local/share/denyhosts/data #将deny的host或ip纪录到Work_dir中
DENY_THRESHOLD_RESTRICTED= 1 #设定denyhost 写入到该资料夹
LOCK_FILE= /var/lock/subsys/denyhosts #将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务。
HOSTNAME_LOOKUP=NO #是否做域名反解
ADMIN_EMAIL= #设置管理员邮件地址
DAEMON_LOG= /var/log/denyhosts #自己的日志文件
DAEMON_PURGE= 5h #该项与PURGE_DENY设置成一样,也是清除hosts.deniedssh用户的时间。
其他:
AGE_RESET_VALID=5d #有效用户登录失败计数归零的时间
#(s表示秒,M表示分钟,h表示小时,d表示天,m表示月,w表示周,y表示年)
AGE_RESET_ROOT=25d #root用户登录失败计数归零的时间
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d #无效用户登录失败计数归零的时间
总的#用户的登陆失败计数会在多长时间后重置为0
RESET_ON_SUCCESS= yes #如果一个ip登陆成功后,失败的登陆计数是否重置为0
DAEMON_SLEEP= 30s #当以后台方式运行时,每读一次日志文件的时间间隔。
DAEMON_PURGE= 1h #当以后台方式运行时,清除机制在HOSTS_DENY中终止旧条目的时间间隔,这个会影响PURGE_DENY的间隔。
四.设置启动脚本
启动前要把自己的IP和服务器的IP放在白名单: vim/etc/hosts.allow
1.# cp daemon-control-dist daemon-control
#chown root daemon-control (设置好启动脚本的所属用户和权限)
#chmod 700 daemon-control
( 可以不打生成Denyhost的主配置文件,将模板文件中开头是#的过滤后再导入到Denyhost.cfg )
#grep -v "^#" denyhosts.cfg-dist > denyhosts.cfg )
完了之后执行daemon-contronstart就可以了。
2.启动Denyhost的进程
#./daemon-control start (最好用这个)或 #/usr/share/denyhosts/daemon-control start
报错:
[root@linuxdenyhosts]# ./daemon-control start
starting DenyHosts:/usr/bin/envpython /usr/bin/denyhosts.py �Cdaemon�Cconfig=/usr/share/denyhosts/denyhosts.cfg
DenyHosts could notobtain lock (pid: )
[Errno 17] File exists:‘/var/lock/subsys/denyhosts’
[root@linux denyhosts]#rm -f /var/lock/subsys/denyhosts
Youhave new mail in /var/spool/mail/root
[root@linux denyhosts]#./daemon-control start
starting DenyHosts: /usr/bin/env python/usr/bin/denyhosts.py �Cdaemon�Cconfig=/usr/share/denyhosts/denyhosts.cfg
解决:
rm-f /var/lock/subsys/denyhosts
OK!
3.可以查看到Denyhost在运行中
#ps -ef |grep deny
在另外一台机器上使用ssh进行连接,当在连续几次输入错误的密码后,会被自动阻止掉,在一定时内不可以再连接ssh连接记录的日志文件。
4.DenyHosts添加自动启动项:
#ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
#chkconfig --add denyhosts
#chkconfig denyhosts on
(或将 Denyhost启动脚本添加到自动启动中 #echo '/usr/share/denyhosts/daemon-control start' >>/etc/rc.d/rc.local )
5.启动服务:
#service denyhosts start
6.让一台电脑失败连接数次。
在看看vim/etc/hosts.deny内是否有禁止的IP,有的话说明已经成功了。
7.查看我的/etc/hosts.deny文件发现里面已经有22条记录。
#cat /etc/hosts.deny | wc -l
22
五. denyhosts使用
如果不想让主机拒绝某一个ip,做法如下:
vi/etc/hosts.allow
sshd:192.168.0.1#允许192.168.0.1访问该主机的ssh服务
如果想拒绝某一个ip同样使用vi/etc/hosts.deny添加就Ok
总结:
黑名单:vim/etc/hosts.deny
白名单:vim/etc/hosts.allow
假如在黑名单了,把IP写白名单里,同样是不受限制的。
本文出自 “完善并超越自我!” 博客,谢绝转载!