使用DenyHosts阻止SSH暴力破解

最近发现服务器被爆破ssh端口,最初是在deny添加ip,后来发现ip很多,于是找到了这个自动封禁ip的工具,很合我心,很好用,推荐一下,免得下次遇见这样的情况无从下手~

简介

DenyHosts是一个python写的脚本,常用来限制SSH登陆,它会分析sshd的日志文件(/var/log/secure)将超过错误次数的IP放入/etc/hosts.deny中禁止登陆。

网址

官方站点:http://denyhosts.sourceforge.net/

GitHub代码:https://github.com/denyhosts/denyhosts

安装

安装环境是Centos7 & python2.7.5

使用yum或apt-get安装的是比较老的版本,这里是源码安装

目前稳定版是2.10,3.0版是beta版,该版本支持Python2和Python3

  • 01
  • 02
  • 03
  • 04
wget https://github.com/denyhosts/denyhosts/archive/v2.10.tar.gz tar xf v2.10.tar.gz cd denyhosts-2.10 python setup.py install

配置

安装后就是配置,默认情况下,配置文件是 /etc/denyhosts.conf,遵循开源软件的传统,注释的很详细

  • 01
  • 02
打开Centos登录日志文件路径 SECURE_LOG = /var/log/secure

默认情况下root用户只要密码输错一次,IP地址就会被禁止,过于严格,这里可以根据需要修改

  • 01
  • 02
默认为1,改为10 DENY_THRESHOLD_ROOT = 10

默认情况下,永远不会清理长期被禁止的IP,即:PURGE_DENY =,建议保持默认

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

  • 01
#IPTABLES = /sbin/iptables

默认情况下会发送email到root@localhost,可以关闭该功能

  • 01
ADMIN_EMAIL =
详细配置
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
# 系统安全日志文件,主要获取ssh信息 SECURE_LOG = /var/log/secure # 拒绝写入IP文件 hosts.deny HOSTS_DENY = /etc/hosts.deny # 过多久后清除已经禁止的,其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟 PURGE_DENY = 4w # denyhosts所要阻止的服务名称 BLOCK_SERVICE = sshd # 允许无效用户登录失败的次数 DENY_THRESHOLD_INVALID = 3 # 允许普通用户登录失败的次数 DENY_THRESHOLD_VALID = 10 # 允许ROOT用户登录失败的次数 DENY_THRESHOLD_ROOT = 6 # 设定 deny host 写入到该资料夹 DENY_THRESHOLD_RESTRICTED = 1 # 将deny的host或ip纪录到Work_dir中 WORK_DIR = /var/lib/denyhosts SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES # 是否做域名反解 HOSTNAME_LOOKUP=YES # 将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务 LOCK_FILE = /var/lock/subsys/denyhosts ############ THESE SETTINGS ARE OPTIONAL ############ # 管理员Mail地址(可以不用设置) ADMIN_EMAIL = root SMTP_HOST = localhost SMTP_PORT = 25 SMTP_FROM = DenyHosts <nobody@localhost> SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME] # 有效用户登录失败计数归零的时间 AGE_RESET_VALID=5d # ROOT用户登录失败计数归零的时间 AGE_RESET_ROOT=25d # 用户的失败登录计数重置为0的时间(/usr/share/denyhosts/restricted-usernames) AGE_RESET_RESTRICTED=25d # 无效用户登录失败计数归零的时间 AGE_RESET_INVALID=10d ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ########## # denyhosts log文件 DAEMON_LOG = /var/log/denyhosts DAEMON_SLEEP = 30s # 该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间 DAEMON_PURGE = 1h

服务配置

新版本已经有了systemd服务脚本,可以直接复制使用

  • 01
  • 02
  • 03
  • 04
cp denyhosts.service /etc/systemd/system/ systemctl daemon-reload systemctl enable denyhosts systemctl start denyhosts

对于误封的IP,可以删除/etc/hosts.deny中相关IP

效果

效果还是很明显的,安装好启动之后,软件会自动分析爆破的ip,并将符合设置条件的ip封禁掉,看这拒绝的单词就满心舒畅!

邮件发送配置

这个还未测试,有心的小伙伴可以测试下,配置可以用了记得来留个言。

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
cat /etc/denyhosts.conf ...... # 管理员Mail地址 ADMIN_EMAIL = wangshibo@kevin.com //若有ip被禁用发邮件通知 SMTP_HOST = smtps://smtp.qq.com //这个是mail机器的主机名。这里我是在denyhosts本机部署的mail服务 SMTP_PORT = 465 SMTP_FROM = DenyHosts <nobody@localhost> //邮件的发送发 SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME] //邮件主题