zoukankan      html  css  js  c++  java
  • 服务器安全之DenyHosts

    情景:今天登录服务器,突然发现登录之后展示的信息有点多,仔细端倪发现:

      There were 3975 failed login attempts since the last successful login.
     
    这很明显是有人想要试图登录我的服务器,企图进行暴力破解。虽然我设置的密码很复杂,但是这种飞来的伤害岂能坐视不管。
     
     
     
    于是就使用DenyHosts来进行防御一下:
      DenyHosts是Python语言写的一个程序软件,运行于Linux上预防SSH暴力破解的,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
     
      当然除了这种方式,还可以彻底一些,不允许以用户名+密码的方式进行登录。而是采用pem方式进行登录(详情)
     
    1. 从官网上下载(http://denyhosts.sourceforge.net/
     
    2. 解压安装
    tar zxvf DenyHosts-2.6.tar.gz
    
    cd DenyHosts-2.6
    
    python setup.py install
    
    cd /usr/share/denyhosts/   
    
    cp denyhosts.cfg-dist denyhosts.cfg      //配置文件
    
    cp daemon-control-dist daemon-control    //启动文件
    
    chown root daemon-control
    chmod 700 daemon-control

    3. 其他设置

    #对daemon-control进行软连接,方便管理
    ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts    
    
    /etc/init.d/denyhosts start        #启动denyhosts
    
    chkconfig --add denyhosts
    chkconfig denyhosts on             #将denghosts设成开机启动
    4. 配置文件(vim /usr/share/denyhosts/denyhosts.cfg )
       
           ############ THESE SETTINGS ARE REQUIRED ############
    
    SECURE_LOG = /var/log/secure                  #ssh 日志文件 #redhat系列根据/var/log/secure文件来判断;
                                                               #Mandrake、FreeBSD根据 /var/log/auth.log来判断;
                                                               #SUSE则是用/var/log/messages来判断,这些在配置文件里面都有很详细的解释。
    HOSTS_DENY = /etc/hosts.deny                  #控制用户登录的文件
    PURGE_DENY = 30m                              #过多久后清除已经禁止的,设置为30分钟;
    # ‘m’ = minutes
    # ‘h’ = hours
    # ‘d’ = days
    # ‘w’ = weeks
    # ‘y’ = years
    BLOCK_SERVICE = sshd                         #禁止的服务名,当然DenyHost不仅仅用于SSH服务
    DENY_THRESHOLD_INVALID = 1                   #允许无效用户失败的次数
    DENY_THRESHOLD_VALID = 3                     #允许普通用户登陆失败的次数
    DENY_THRESHOLD_ROOT = 3                      #允许root登陆失败的次数
    
    DENY_THRESHOLD_RESTRICTED = 1                #设定 deny host 写入到该资料夹  
    WORK_DIR = /usr/share/denyhosts/data     #将deny的host或ip记录到work_dir中  
    SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES  
    HOSTNAME_LOOKUP=YES                         #是否做域名反解  
    LOCK_FILE = /var/lock/subsys/denyhosts      #将DenyHost启动的pid记录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务
    
           ############ THESE SETTINGS ARE OPTIONAL ############
    ADMIN_EMAIL =                           #管理员邮箱
    SMTP_HOST = 
    SMTP_PORT = 
    SMTP_FROM = 
    SMTP_SUBJECT = DenyHosts Report         #邮件主题
    AGE_RESET_VALID=5m                      #有效用户登录失败计数归零的时间
    AGE_RESET_ROOT=10m                      #root用户登录失败计数归零的时间
    AGE_RESET_RESTRICTED=10m                #用户的失败登录计数重置为0的时间(/usr/share/denyhosts/data/restricted-usernames)
    AGE_RESET_INVALID=5m                    #无效用户登录失败计数归零的时间
    
    
       ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE  ##########
    
    
    DAEMON_LOG = /var/log/denyhosts              #DenyHosts日志文件存放的路径,默认
    DAEMON_SLEEP = 30s                           #当以后台方式运行时,每读一次日志文件的时间间隔。
    DAEMON_PURGE = 10m                           #当以后台方式运行时,清除机制在 HOSTS_DENY 中终止旧条目的时间间隔,这个会影响PURGE_DENY的间隔。
    RESET_ON_SUCCESS = yes                      #如果一个ip登陆成功后,失败的登陆计数是否重置为0
    
     服务启动成功之后,就可以手动尝试了
     
    5. 验证
      根据denyhosts配置中设置的策略会将试图破解的IP加入到/etc/hosts.deny,当你再去访问的时候,会出现一个错误:
            ssh_exchange_identification: read: Connection reset by peer
      说明已经成功,并且在我们的/etc/hosts.deny中会看到该IP地址
     
     6. 移除已经加入黑名单的IP
      删除一个已经禁止的主机IP,并加入到允许主机例表,只在 /etc/hosts.deny 删除是没用的。需要进入工作 目录(WORK_DIR),进入以下操作:
      1)停止服务
    service denyhosts stop

      2)

    在 /etc/hosts.deny 中删除你想取消的主机IP

      3)编辑文件

    [root@xxx data]# pwd
    /usr/share/denyhosts/data
    
    [root@xxx data]# grep 117.78.49.95  *
    hosts:117.78.49.95:12:Tue Jan  2 23:25:32 2018
    hosts-restricted:117.78.49.95:0:Tue Jan  2 22:48:20 2018
    hosts-root:117.78.49.95:1:Tue Jan  2 23:25:02 2018
    hosts-valid:117.78.49.95:0:Tue Jan  2 22:54:30 2018
    users-hosts:qq - 117.78.49.95:3:Tue Jan  2 22:54:30 2018
    users-hosts:root - 117.78.49.95:11:Tue Jan  2 23:25:02 2018
    删除
    sed -i "/117.78.49.95/d" *

      4)  重启服务

    systemctl restart denyhosts.service
    
    
    其他命令:
    systemctl start denyhosts.service
    systemctl stop denyhosts.service
    
    systemctl status denyhosts.service

      5) 暴力添加白名单

    tee -a /etc/hosts.allow
    117.78.49.95


    cat /etc/hosts.allow sshd: 117.78.49.95
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Java并发编程笔记——技术点汇总
    Hello Blog
    shell变量
    认识bash这个shell
    使用myeclipse创建带注解的model实体类
    python List,切片的用法
    ignite从0到1的学习过程记录-第一篇:安装和体验
    安卓Service完全解析(中)
    安卓Service完全解析(上)
    JAVA之数组
  • 原文地址:https://www.cnblogs.com/xingxia/p/linux_denyhosts.html
Copyright © 2011-2022 走看看