我在前天开始研究denyhosts这个软件,本来昨天就想写篇文章的,而直到现在,我还没有得到满意的答案。现在将它总结出来,全当解解气!囧
对于这个denyhosts,我耗费了太多的时间。光看那英文配置文件说明和安装说明我就几乎看了整整一上午。哎,没办法,我英语不好,很多单词不认识,只能用翻译软件翻译后再揣测其意思。大多安装配置文件算是看懂了。后来再参阅网上的文档,有了一定的了解。
只是当我安装后发现如下几个问题:
1,当我把denyhosts安装上启动后,结果/etc/hosts.deny文件中马上就有了我自己的ip地址在里面!晕死,我在安装后根本就还没有偿试登录过啊,又怎么被限制?(已解决)
2,在另一台机器上我设置了DENY_THRESHOLD_ROOT=5 ,安装后结果我root用户才输错一次密码就给我封杀了!按参数意思应该是5次机会啊!不用这么绝吧!(已解决)
3,我设置了PURGE_DENY=3m,即3分钟清除hosts.deny中添加的记录。结果我苦等十分钟还不见/etc/hosts.deny中添加的ip被清除!这不是存心不让我再次登录了吗?好在我当前的ssh连接没断开。要断开了岂不没得连了?(未解决)
4,这个所谓的阻止暴力破解,貌似只对ssh连接有效,我用ftp登录,然后不停的偿试登录,结果却没有被添加进阻止。(未解决)
5,我将hosts.deny文件中的用户列表删除后,不久后竟然又自动给添加进来了!我@#¥¥。。难道硬是不让我再次登录了?!!(已解决)
于是乎
一、自己思考,不停换各种方法偿试
二、找度娘,显然度娘对我的发问不敢兴趣!网上一大把denyhosts的配置文章,但就是没几个说问题的!看来看去说的内容也都几乎千篇一律!不得其果!
三、寻群友帮助,结果发了三群,各发几次,基本没人回应,回应了的也不知道。我狂汗!
四、实在不得已,又跑到官方网站上看那N多的FAQ!从上面找到了一点点的蛛丝马迹....
五、再做各种实验
下面公布我最近的研究战果!
首先贴上配置文件
[root@localhost denyhosts]# cat denyhosts.cfg
SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY = 3m
BLOCK_SERVICE = ALL
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 10
DENY_THRESHOLD_ROOT = 5
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES
LOCK_FILE = /var/lock/subsys/denyhosts
ADMIN_EMAIL =
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report
AGE_RESET_VALID=5d
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 5m
第一个问题:
分析:我在rhel6和centos6上分别安装了denyhosts软件。结果均出现此情况。我想,既然它是根据/var/log/secure文件中登录失败记录来是判断是否违规,那么,会不会是我在安装denyhosts之前的secure中的失败登录记录也被算作违规呢?那么我删了应该就不会有问题了吧。
办法:echo "" > /var/log/secure 即把secure日志文件全部清空!要注意的是,清空后一定要service rsyslog restart 重启日志记数器!因为如果你不重启服务,你会发现secure日志文件会停止记录一切活动了!那么denyhosts也就无效了。
结果:如果安装前就先清空,在安装denyhosts后,就不会自动出现禁止的IP了。
原理:根据官方FAQ上关于denyhosts对监控secure日志文件更新的原理,可以理解上述问题的原因。官方说明大概是这样的:denyhosts在/usr/share/denyhosts/data(即WORK_DIR)中的offset文件中记录了secure的首行记录。
如果说offset文件中的首行记录和现有secure中的首行记录相同,则比较现有secure和offset中最后记录的secure文件的大小,如果现有secure比记录中的secure文件大,则将secure中新增加的部分进行分析,并将新增加的失败登录行记录在了denyhosts记数器中。比如原来记录了root有3次登录失败,这次新增行中又发现了2次,那么一共就5次记录了。当超过DENY_THRESHOLD_ROOT中设立的值时,便将该IP加入hosts.deny中。如果现有secure文件和offset中记录的文件大小相同,则认为secure日志未更新。不做任何操作
如果offset文件中首行记录和现有secure中的首行记录不同,那么则认为secure文件是全新的。那么,offset会重新分析secure日志的所有行。
如果我们刚安装denyhosts,那么offset中并不会有secure日志文件头,也不会有secure日志文件大小的记录,那么denyhosts自然会分析所有的secure日志行,于是乎,我在安装denyhost前一周的所有的登录失败次数被累计起来,如果我在上一周内登录失败记录超过限制数,那么肯定就会在启动denyhosts后马上被加入黑名单了!(为什么是一周之内?因为secure日志文件记录的周期为一个星期!)
第二个问题:
和第一个问题是一个原因。只要先将secure清空再安装,一切就正常了。原因是,root用户在安装前就有了失败的记录,影响到denyhosts的次数判断。如你安装denyHosts之前root已经错误登录4次。那么你再用root登录1次就会发现登录不了了。我的其实安装denyhosts前日志中的记录就已经有4次了,所以马上被封杀了。
第三个问题(未解决):
截取的部分/var/log/denyhosts日志
2011-09-24 06:29:02,211 - denyfileutil: INFO purging entries older than: Sat Sep 24 06:26:02 2011
2011-09-24 06:29:02,215 - denyfileutil: INFO num entries purged: 0
2011-09-24 06:34:02,527 - denyfileutil: INFO purging entries older than: Sat Sep 24 06:31:02 2011
2011-09-24 06:34:02,535 - denyfileutil: INFO num entries purged: 0
2011-09-24 06:36:02,710 - denyhosts : INFO new denied hosts: ['192.168.1.5']
2011-09-24 06:39:02,898 - denyfileutil: INFO purging entries older than: Sat Sep 24 06:36:02 2011
2011-09-24 06:39:02,900 - denyfileutil: INFO num entries purged: 0
2011-09-24 06:44:03,212 - denyfileutil: INFO purging entries older than: Sat Sep 24 06:41:03 2011
2011-09-24 06:44:03,220 - loginattempt: INFO purging_hosts: ['192.168.1.5']
2011-09-24 06:44:03,223 - denyfileutil: INFO num entries purged: 1
2011-09-24 06:49:03,543 - denyfileutil: INFO purging entries older than: Sat Sep 24 06:46:03 2011
2011-09-24 06:49:03,547 - denyfileutil: INFO num entries purged: 0
配置文件中PURGE_DENY = 3m 即表示每3分钟清除hosts.deny中的IP地址一次,并且计数器+1.如果设定的计数次数达到PURGE_THRESHOLD的值,那么它就永远不会从hosts.deny文件中清除,直到计数器被清零。 DAEMON_PURGE=5m表示每5分钟清零一次计数器。
从下面日志行中可以看出虽然我设置的为3分钟清除,但根本没有3分钟就清除这一说。而且根据我另一个实验,我将DEAMON_PURGE设置为了1h之后,别说3分钟了,一个小时都不会清除hosts.deny中的记录!PURGE_DENY参数真是瞎扯蛋!只不过如果要让它清除得快一点可以将DEAMON_PURGE这个参数的值设小一点,如我把它设为5分钟后,大概过5-10分钟不等的时间就会将hosts.deny中的记录删除。
2011-09-24 06:36:02,710 - denyhosts : INFO new denied hosts: ['192.168.1.5']
2011-09-24 06:49:03,543 - denyfileutil: INFO purging entries older than: Sat Sep 24 06:46:03 2011
从下面日志行可以看出,DEAMON_PURGE=5m倒是一直很有效。
2011-09-24 06:29:02,211 - denyfileutil: INFO purging entries older than: Sat Sep 24 06:26:02 2011
2011-09-24 06:29:02,215 - denyfileutil: INFO num entries purged: 0
2011-09-24 06:34:02,527 - denyfileutil: INFO purging entries older than: Sat Sep 24 06:31:02 2011
第四个问题(未解决)
不知道怎么回事。一台机器一开始一直无效,重启后有效了。另一台机器一直无效...同样的安装,同样的配置。不一样的结果!
第五个问题(已解决)
参考了官方文档才发现,原来不能单纯的只删除hosts.deny中的记录,要想删干净,得先service denyhosts stop .然后再把/usr/share/denyhosts/data目录下的其它文件中关于hosts.deny中的IP记录一并清空。再service denyhosts start即可。但有的时候只清除hosts.deny中的文件也可以。
总结:首先承认是我水平不行!但我不得不说的是,这个软件本身肯定也有很多不足之处!给我感觉有点垃圾!简直浪费时间!网络上一大串关于这个软件的配置,我真想问问他们是不是真的都自己做过?还是copy,copy,再copy来的?难道你们就没人遇到过这样的问题吗?
另外,有的文章说安装完后看到阻止自己远程登录的IP就代表生效了。我想问问你们思考过没有,自己IP都阻止了,那你还登录什么?!
有的文章说看到Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).就代表成功了。大哥,麻烦你关闭denyhosts再登录看看行吗?这根本不是denyhostst的阻止成功的效果!真正生效的结果应该是ssh_exchange_identification: Connection closed by remote host !
还有文章标题就说“denyhosts防止ssh和ftp暴力破解。不知道这个防ftp暴力破解你们做过没有?
好了,到此为止吧。全当发泄!再也不搞这烂东西了!简直浪费时间!