DenyHosts守护安全三字诀:检测、确定和拒绝

2015年11月26日 作者: 瀚思科技

导语:本文中介绍了DenyHosts的安装、配置和运行。有了该工具,你就有了一个后台运行的守护程序,它会不断检查你的系统,查找企图访问的活动,确定是否看起来不安全,阻止它们,并告知你。甚至还可以配置DenyHosts,与其他服务器共享信息,那样只要在一个系统上发现黑客,其访问在其他系统上也会受到阻止。

只要服务器能够通过互联网来访问,基本上可以肯定:黑客会企图访问该服务器。只要查看SSH日志,寻找你所使用的任何服务器,肯定会发现好多行显示“验证失败”的信息,源自与你或你公司毫无关系的IP地址。蛮力尝试(比如“字典攻击”)一次又一次试换不同的密码,企图进入你的系统,始终存在这种可能性:他们最终会得逞。

因而,运用“三个D”来确保安全是个好主意:检测(Detect)入侵者的攻击企图,确定(Decide)他们何时“过界”(超过正当输入错误可以接受的次数),然后拒绝(Deny)他们访问,至少要拒绝一段时间。

本文中介绍了DenyHosts的安装、配置和运行。有了该工具,你就有了一个后台运行的守护程序,它会不断检查你的系统,查找企图访问的活动,确定是否看起来不安全,阻止它们,并告知你。甚至还可以配置DenyHosts,与其他服务器共享信息,那样只要在一个系统上发现黑客,其访问在其他系统上也会受到阻止。

安装和配置:

DenyHosts的目前版本是2.6(来自2013年6月)。它是个Python脚本,你之前可能已经安装了这种语言。要是还没有安装,就需要使用发行版程序包工具,先安装Python。你需要版本2.3或更高版本。

许多发行版已经提供了“denyhosts”程序包,使用你的系统工具是最简单的安装方法。比如说,若是Ubuntu,输入sudo apt-get install denyhosts;若是Red Hat,输入sudo yum install denyhosts;或者若是OpenSUSE,输入sudo zypper install denyhosts。要不然,你可以下载tar.gz文件(请参阅“资源部分”),然后执行下列命令:

$ tar zxvf DenyHosts-2.6.tar.gz

$ cd DenyHosts-2.6

$ sudo python setup.py install

不管你如何安装DenyHosts,/usr/share/denyhosts都会创建,所有配置和脚本文件都在里面。你应该编辑denyhosts.cfg文件,针对自己的环境配置DenyHosts。(万一该文件不存在,执行命令cp denyhosts.cfg-dist denyhosts.cfg,即可获得一个基本的示例配置文件)。空行和以#开头的行可以忽略。有许多注释可以帮助你明白每一个配置项,不过要密切注意某些关键项(见表1)。

表1:DenyHosts的关键配置项

为了进一步保证你不会被自己的服务器拒之门外,应该编辑/etc/hosts.allow,为你使用的每个IP地址添加一行,采用像sshd: 111.222.33.44这样的格式。DenyHosts有一个自己的文件:allowed-hosts,它定义了根本不会受到阻止的IP地址(每行一个)。

现在你可以准备开始运行DenyHosts了,接下来就介绍这方面!

运行DenyHosts:

你可以定期运行DenyHosts(不妨称之为计划任务),不过在守护程序模式下运行更好。那样,DenyHosts就会在后台运行,检查访问日志,从而检测潜在的入侵者。为此,你需要执行cp daemon-control-dist daemon-control,创建一个额外的配置文件。之后,编辑该文件,确保其三个参数得到正确定义(见表2)。

表2:在守护程序模式下运行DenyHosts需要额外的配置

然后,你只要使用/etc/init.d/denyhosts restart或service denyhosts restart,启动服务――使用哪个命令取决于你的服务器,就可以搞定了。从那一刻起,DenyHosts会监控登录尝试;一旦检测到多次重复的失败,它会决定拒绝潜在入侵者的所有访问(见图1)。为了以防万一,你还应该将DenyHosts设成重启后自动启动――执行sudo chkconfig denyhosts on命令是管理这项任务的一个办法。

图1:DenyHosts监控访问日志,最终将黑客的主机拒之门外。

一旦DenyHosts运行起来,它就会监控日志;检测到重复的失败登录尝试后,如果达到某个阈值,它就会决定阻止远程IP地址,拒绝潜在的黑客,对方根本休想连接。比如说,我有意多次输错了密码,最后被阻止访问(图1还解释了为何DenyHosts需要以根用户身份来运行;要不然,就无法编辑hosts.deny文件):

sshfkereki@your.own.server

fkereki@your.own.server'spassword:

Permissiondenied, please try again.

fkereki@your.own.server'spassword:

Permissiondenied, please try again.

fkereki@your.own.server'spassword:

Permissiondenied (publickey,password).

sshfkereki@your.own.server

fkereki@your.own.server'spassword:

Permissiondenied, please try again.

fkereki@your.own.server'spassword:

Permissiondenied, please try again.

fkereki@your.own.server'spassword:

Permissiondenied (publickey,password).

.

.

.

severalattempts, and then...

sshfkereki@your.own.server

ssh_exchange_identification:read: Connection reset by peer

DenyHosts最终会撤销限制(取决于配置),但是如果合法用户由于某种原因被合法服务器拒之门外,你可以立马解决这个问题。

别被拒之门外!

不用说,你应该测试DenyHosts,确认它果真运行起来。当然,最重要的是,进行测试过程中,在你的服务器中至少留一个打开的外壳;要不然,万一出了什么岔子,你可能被自己的IP地址拒之门外,那可就麻烦了!

试图从不同的机器访问服务器时,可以使用tail -f来同时监控hosts.deny文件和DenyHosts的自有日志文件(参阅表1中的HOSTS_DENY和DAEMON_LOG配置参数)。几次失败尝试后,你应该会看到两个文件中都出现了变化,还应该会收到电子邮件消息,确认你的配置完好。

共享结果

DenyHosts提供了另一项服务,让你可以与全球各地的其他服务器共享你阻止的任何IP地址,反之亦然。其想法很简单。要是有谁检测到黑客企图从某个IP地址来访问,可确保阻止它,而不是等着受攻击的每台服务器更安全一点。你需要考虑几个参数,如表3中所示。

表3:与其他服务器共享被阻止的IP地址对大家都有帮助。

共享这些信息通常是个好主意,那样可以在潜在黑客开始嗅探你的服务器之前就能赶走对方。共享服务目前免费(不过接受捐款),不过正如DenyHosts的常见问题解答(FAQ)表明,最终公司要为之付费。你可以联系DenyHosts开发者,获得服务器组件的许可证,运行自己的共享服务器。

附文:原谅用户

不管有多么小心,用户还是偶尔会出乱子,多次输错密码,结果被DenyHosts禁止访问。这该如何是好?一旦你确定应该原谅那个犯错的用户,应采取下列步骤:

  1. 弄清楚用户的目前IP地址,以便可以再次启用它。

  2. 停止运行DenyHosts。

  3. 检查WORK_DIR目录中的每个文件(见表1),删除该IP地址出现的每一行(使用grep会有所帮助)。

  4. 以同一种方式编辑/etc/hosts.deny。

  5. 重启DenyHosts。

现在,如果该用户再次尝试,应该授予了访问权。别忍不住想略过第3步。如果真略过了这一步,一旦重启DenyHosts,远程IP地址会再次被阻止!

结束语:

安全是一项全天候不间断的工作,你添加上去的所有工具对于确保服务器安全大有帮助。

DenyHosts易于安装,它提供了快速检测黑客企图、阻止远程黑客和阻碍蛮力攻击等功能。虽然它不是什么“灵丹妙药”,对付不了所有可能存在的入侵问题,不过这个工具值得一用,应该添加到安全工具库当中。试一试吧!

资源:

你可以在http://denyhosts.sourceforge.net找到DenyHosts,并从项目网站(http://sourceforge.net/projects/denyhosts)下载它。http://denyhosts.sourceforge.net/faq.html解答了几个常见问题。

用途类似的其他工具还有BlockHosts(http://www.aczoom.com/tools/blockhosts)和Fail2Ban( http://www.fail2ban.org)。