DenyHosts 是一款基于 Python 开发的轻量级安全防护工具,专门用于监控 SSH 服务的登录日志。当它检测到某个 IP 地址反复尝试登录失败时,会自动将该 IP 写入 /etc/hosts.deny 黑名单文件,从而彻底阻断其后续访问——对于抵御 SSH 暴力破解攻击来说,这是一款非常实用的利器。
官方项目地址:https://denyhosts.sourceforge.net
下面以 CentOS 5.1 系统 + DenyHosts 2.6 版本为例,详细介绍安装、配置、验证的完整流程。
安装
首先下载 RPM 安装包(以下使用 SourceForge 上的官方链接):
# wget https://nchc.dl.sourceforge.net/....../DenyHosts-2.6-python2.4.noarch.rpm
# rpm -ivh DenyHosts-2.6-python2.4.noarch.rpm
安装完成后,将 DenyHosts 注册为系统服务:
# cd /etc/init.d
# ln -s /usr/share/denyhosts/daemon-control denyhosts
# chkconfig --add denyhosts
配置
默认安装路径位于 /usr/share/denyhosts,进入该目录后复制默认配置模板:
# cd /usr/share/denyhosts/
# cp denyhosts.cfg-dist denyhosts.cfg
# vi denyhosts.cfg
根据实际环境调整参数。以下列出关键配置项,并附上中文说明:
SECURE_LOG = /var/log/secure
# SSH 安全日志文件路径,DenyHosts 依靠它来捕获攻击行为
HOSTS_DENY = /etc/hosts.deny
# 系统级黑名单文件,用于阻止恶意 IP 登录
PURGE_DENY = 5m
# 封禁后自动解除的时间间隔——此处设为 5 分钟,可根据实际需求调整
BLOCK_SERVICE = sshd
# 需要封锁的服务名称,默认为 SSH 服务
DENY_THRESHOLD_INVALID = 1
# 不存在的用户(无效帐号)允许登录失败的次数,超过即自动封禁
DENY_THRESHOLD_VALID = 3
# 存在的用户(有效帐号)允许登录失败的次数上限
DENY_THRESHOLD_ROOT = 5
# root 用户允许登录失败的次数上限
HOSTNAME_LOOKUP=NO
# 是否进行域名反向解析,建议关闭以节省系统资源
ADMIN_EMAIL = iakuf@163.com
# 管理员邮箱,当发生攻击时 DenyHosts 会发送通知邮件
DAEMON_LOG = /var/log/denyhosts
# DenyHosts 自身的运行日志文件
配置完成后,设置开机自启并启动服务:
# /etc/init.d/denyhosts start
# chkconfig denyhosts on
验证效果
拿一台远程机器尝试连接本机,故意输入几次错误密码。然后查看 /etc/hosts.deny 文件,如果发现该 IP 已被写入黑名单,说明 DenyHosts 安装配置成功。
额外提醒:如果你发现 DenyHosts 清除被封 IP 的时间与预期不符,不必慌张。问题通常出在 DAEMON_PURGE 参数上——它控制着 DenyHosts 定期清理过期黑名单记录的检查频率。默认情况下,DenyHosts 会按照 DAEMON_PURGE 设定的时间周期,从最早加入的黑名单记录开始清理,而这个周期直接影响 PURGE_DENY 的实际生效间隔。如果需要更精确的清理节奏,调整 DAEMON_PURGE 的值即可。
