原创日志

centos6.9上预防SSH暴力破解的工具:denyhosts3.0 安装与配置记录

[ 2021-03-13 13:33:17 | 作者: admin ]
字号: | |
p.s. denyhosts默认是在iptables也添加了封杀的IP,所以删除误删IP,需要denyhosts和iptables都要处理掉。其实在未受攻击的情况下,可以将iptables封IP关闭,目前的拨号VPS这么便宜,IP真不值钱,被杠上了封个几万IP也没用,加固密码强度才是必须的

DenyHosts是Python语言写的一个程序软件,运行于Linux上预防SSH暴力破解的,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。

【下载】
https://sourceforge.net/projects/denyhosts/files/denyhosts/
本文下面以denyhosts-3.0.tar.gz为例记录过程,操作系统为 centos6.9

【安装 denyhosts3.0 】

安装开始前,为避免意外把自己的ip给屏蔽了,最好是清理下安全日志
echo "" > /var/log/secure
service rsyslog restart #有些系统可能是 service syslog restart
   tar zxvf denyhosts-3.0.tar.gz #解压源码包
   cd denyhosts-3.0 #进入安装解压目录
   python setup.py install #安装DenyHosts
在安装过程会显示安装日志,结束后末尾能得到几个有用的参数



如果python2.6下安装,结尾参数如下
copying build/scripts-2.6/daemon-control-dist -> /usr/bin
copying build/scripts-2.6/denyhosts.py -> /usr/bin
copying denyhosts.conf -> /etc
copying denyhosts.8 -> /usr/share/man/man8


如果python2.7下安装,结尾参数如下
copying build/scripts-2.7/daemon-control-dist -> /usr/local/bin
copying build/scripts-2.7/denyhosts.py -> /usr/local/bin
copying denyhosts.conf -> /etc
copying denyhosts.8 -> /usr/share/man/man8


从上面python2.7的情况我们可以得到相关路径
启动进程 /usr/local/bin/daemon-control-dist
主程序 /usr/local/bin/denyhosts.py
配置文件 /etc/denyhosts.conf


【启动并添加到开机运行】
ln -s /usr/local/bin/daemon-control-dist /etc/init.d/denyhosts #对daemon-control进行软连接,方便管理
/etc/init.d/denyhosts start #尝试启动denyhosts,这里遇到错误需要按提示来调试
chkconfig --add denyhosts #将denghosts添加到服务
chkconfig denyhosts on #将denghosts设成开机启动
启动不顺利,会出现一些错误提示
1、can't open file '/usr/bin/denyhosts.py': [Errno 2] No such file or directory 原因是daemon中指定的denyhosts.py路径错误,需要重设路径
2、ImportError: No module named DenyHosts.python_version 原因是daemon中指定的python版本和刚才安装编译采用的py版本不一致,需要重新配置路径
3、如果启动了,可以/etc/init.d/denyhosts status 查看进程ID

【修改daemon-control-dist 和 denyhosts.conf 】
vi /usr/local/bin/daemon-control-dist 确认下面几个参数是否正确
#DENYHOSTS_BIN = "/usr/bin/denyhosts.py"
DENYHOSTS_BIN = "/usr/local/bin/denyhosts.py"

DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG = "/etc/denyhosts.conf"

#PYTHON_BIN = "/usr/bin/env python"
PYTHON_BIN = "/usr/local/bin/python"


vi /etc/denyhosts.conf
SECURE_LOG = /var/log/secure
LOCK_FILE = /var/lock/subsys/denyhosts #将DenyHost启动的pid记录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务
WORK_DIR = /var/lib/denyhosts

PURGE_DENY = 30m #过多久后清除已阻止IP,留空会永远不清除
PURGE_THRESHOLD = #定义了某一IP最多被解封多少次。某IP暴力破解SSH密码被阻止/解封达到了PURGE_THRESHOLD次,则会被永久禁止;
DENY_THRESHOLD_INVALID = 1 //允许无效用户失败的次数,在/etc/passwd里面没有的用户(不包括root)
DENY_THRESHOLD_VALID = 10 //允许正常用户失败的次数,在/etc/passwd里面有的用户(不包括root)
DENY_THRESHOLD_ROOT = 3 //允许root用户失败的次数
DENY_THRESHOLD_RESTRICTED = 1 //允许在$WORK_DIR/hosts-restricted里面出现的用户失败的次数


ADMIN_EMAIL = 123456@gmail.com //当有人试图登录你的服务器,或者有IP被加入黑名单的时候,发送邮件到这里指定的邮箱。前提是,本机一定要可以发送邮件才行!
AGE_RESET_VALID=50m //多长时间后,用户登录失败的次数被置为0,这里是指在/etc/passwd里面定义的用户,如果不设置,永远都不会置0
AGE_RESET_ROOT=50m //多长时间后,root用户登录失败的次数置为0,如果不设置,永远都不会置0
AGE_RESET_RESTRICTED=3d //在$WORK_DIR/hosts-restricted时面定义的用户,多长时间失败次数计数器被置为0
AGE_RESET_INVALID=3d //无效用户(不在/etc/passwd里面的用户)的失败次数计数器,多长时间被置为0
RESET_ON_SUCCESS = yes //当某个IP使用某个用户登录成功后,该IP对应的用户失败次数将会被置为0
DAEMON_SLEEP = 30s //轮询查看SSHD日志的间隔
DAEMON_PURGE = 1h //多长时间清空$HOSTS_DENY中的IP地址,如果PURGE_DENY为空,这个设置将无效
RESET_ON_SUCCESS = yes //如果一个ip登陆成功后,失败的登陆计数是否重置为0

IPTABLES = /sbin/iptables //默认情况下,会调用iptables禁止IP建立连接,可以关闭该功能





如果是centos7版,denyhosts有提供systemd服务脚本,可以直接复制使用
cp denyhosts.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable denyhosts
systemctl start denyhosts


【其他相关操作】

解封IP
3.x版本可以使用denyhosts.py --purgeip xxx清理误封的IP地址 #本人测试启动失败,进程已经存在,难道2个lock文件需要设置的不同

日志查询
/var/log/denyhosts

查看被封的主机
/etc/hosts.deny

查看防火墙的封ip记录
iptables -L




参考:
Ubuntu12.4使用Denyhosts防止黑客破解ssh密码(配置文件注释比较详细) https://www.jincon.com/archives/25/
DenyHosts安装与部署(安装过程记录详细) https://blog.csdn.net/miner_k/article/details/78948100
DenyHosts安装配置详解及安装报错处理 (遇到错误和我一样,可以参考) https://gofinall.com/92.html
[最后修改由 admin, 于 2021-03-14 22:18:02]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2773

这篇日志没有评论。

此日志不可发表评论。