DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能,以帮助阻止SSH 服务器攻击(也称为基于字典的攻击和暴力破解攻击)。
当你的linux服务器暴露在互联网之中,该服务器将会遭到互联网上的扫描软件进行扫描,并试图猜测SSH登录口令。你会发现,每天会有多条SSH登录失败纪录。那些扫描工具将对你的服务器构成威胁,你必须设置复杂登录口令,并将尝试多次登录失败的IP给阻止掉,让其在一段时间内不能访问该服务器。
用DenyHosts可以阻止试图猜测SSH登录口令,它会分析/var/log/secure等日志文件,当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。
本文参考如下链接文章完成
https://linoxide.com/install-denyhosts-centos-7/
1、CentOS7下载并安装denyhosts
尝试过使用EPEL源,yum search denyhosts未能找到denyhosts
建议如下链接地址进行手动下载安装
http://mirror.neu.edu.cn/fedora-epel/7/x86_64/d/denyhosts-2.9-4.el7.noarch.rpm
手动下载rpm,使用rpm -ivh安装
wget http://mirror.neu.edu.cn/fedora-epel/7/x86_64/d/denyhosts-2.9-4.el7.noarch.rpm rpm -ivh denyhosts-2.9-4.el7.noarch.rpm
- 查看denyhosts相关文件所在路径
rpm -ql denyhosts
- 查看denyhosts手册
man denyhosts
2、修改配置文件
vim /etc/denyhosts.conf
我们来看一下默认的配置文件
grep -v "^#" /etc/denyhosts.conf | grep -v "^$" 具体配置文件的解释如下 ############ THESE SETTINGS ARE REQUIRED ############ SECURE_LOG = /var/log/secure #ssh 日志文件,它是根据这个文件来判断的。 HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件 PURGE_DENY = 4w #过多久后清除已经禁止的IP,其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟 BLOCK_SERVICE = sshd #denyhosts所要阻止的服务名称 DENY_THRESHOLD_INVALID = 5 #允许无效用户登录失败的次数 DENY_THRESHOLD_VALID = 10 #允许普通用户登录失败的次数 DENY_THRESHOLD_ROOT = 1 #允许ROOT用户登录失败的次数 DENY_THRESHOLD_RESTRICTED = 1 #在失败次数后阻止每个主机登录尝试次数已超过此值。该值适用于只出现在 WORK_DIR/restricted-usernames 文件中的用户名。 WORK_DIR = /var/lib/denyhosts #denyhosts工作数据目录,将deny的host或ip记录到WORK_DIR中 ETC_DIR = /etc SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES HOSTNAME_LOOKUP=NO #是否做域名反解 LOCK_FILE = /var/lock/subsys/denyhosts #将DenyHost启动的pid记录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务 ############ THESE SETTINGS ARE OPTIONAL ############ ADMIN_EMAIL = root@localhost #设置管理员邮件地址 SMTP_HOST = localhost SMTP_PORT = 25 SMTP_FROM = DenyHosts <nobody@localhost> SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME] ALLOWED_HOSTS_HOSTNAME_LOOKUP=NO AGE_RESET_VALID=5d #有效用户登录失败计数归零的时间 AGE_RESET_ROOT=25d #ROOT用户登录失败计数归零的时间 AGE_RESET_RESTRICTED=25d #用户的失败登录计数重置为0的时间 AGE_RESET_INVALID=10d #无效用户登录失败计数归零的时间 ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ########## DAEMON_LOG = /var/log/denyhosts #denyhost服务日志文件 DAEMON_SLEEP = 30s DAEMON_PURGE = 1h #该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间 ######### THESE SETTINGS ARE SPECIFIC TO ########## ######### DAEMON SYNCHRONIZATION ########## SYNC_UPLOAD = no SYNC_DOWNLOAD = no
当然为了不影响正常SSH登录,建议的时间与次数配置如下
[root@centos opt]# grep -v ^# /etc/denyhosts.conf | grep -v ^$ ############ THESE SETTINGS ARE REQUIRED ############ SECURE_LOG = /var/log/secure HOSTS_DENY = /etc/hosts.deny PURGE_DENY = 5m BLOCK_SERVICE = sshd DENY_THRESHOLD_INVALID = 8 DENY_THRESHOLD_VALID = 8 DENY_THRESHOLD_ROOT = 8 DENY_THRESHOLD_RESTRICTED = 8 WORK_DIR = /var/lib/denyhosts ETC_DIR = /etc SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES HOSTNAME_LOOKUP=NO LOCK_FILE = /var/lock/subsys/denyhosts ############ THESE SETTINGS ARE OPTIONAL ############ ADMIN_EMAIL = root@localhost SMTP_HOST = localhost SMTP_PORT = 25 SMTP_FROM = DenyHosts <nobody@localhost> SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME] ALLOWED_HOSTS_HOSTNAME_LOOKUP=NO AGE_RESET_VALID=3m AGE_RESET_ROOT=3m AGE_RESET_RESTRICTED=3m AGE_RESET_INVALID=3m ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ########## DAEMON_LOG = /var/log/denyhosts DAEMON_SLEEP =30s DAEMON_PURGE = 5m ######### THESE SETTINGS ARE SPECIFIC TO ########## ######### DAEMON SYNCHRONIZATION ########## SYNC_UPLOAD = no SYNC_DOWNLOAD = no
3、启动denyhosts服务
systemctl enable denyhosts systemctl start denyhosts
4、测试SSH暴力破解登录
5、验证denyhosts阻断效果
可以看到超过登录尝试阀值就会进行阻断
6、查看denyhosts运行状态
systemctl status denyhosts
7、查看denyhosts日志
tail -f /var/log/denyhosts
总结:当然也有其它方式阻止SSH暴力攻击,可以参考之前的历史文章