zoukankan      html  css  js  c++  java
  • centos7防暴力破解五种方法

     

      什么是暴力破解,简单来说就是对一个服务器进行无数次尝试登陆,并用不同的密码进行登陆直到可以登陆成功。暴力破解的基本步骤可以分为以下几步:      

          1. 找到对应的linux服务器    Ip地址

          2.扫描端口号:22    nmap扫描端口

          3.开始暴力破解 :  一般root      破解你的密码  登录你的机器   破坏      盗取你的重要的数据

      对于这种情况我们有以下5种解决办法:

    1. 将密码设置复杂,长度大于8位或者最好大于14位,密码的复杂度:由大小写字母以及字符和数字组成。 0-9  a-z  A-Z  @!#$%*. 等等。
    2. 更改端口号,默认的端口是sshd(22),修改默认端口号。
    3. 不用root用户登陆(禁止root用户登陆),使用其他用户登陆并且拥有root用户权限。
    4. sshd服务,直接编写脚本检查/var/log/secure 内登录失败次数超过某个阈值的ip并将它添加到/etc/hosts.denyfail2ban的优点更多

    5. 使用fail2ban,起到登录失败多次后直接禁止某个时间段此ip登陆。

    接下来我们对于上面的五种方法进行一一讲解演示(以下的操作环境是在centos7下的)

      1. 将密码设置复杂

        密码的复杂度一定要较高点,尽量通过密钥登陆,这里介绍个密码生成工具:pwgen(需安装,用yum安装下就可以了)

       pwgen的一些参数

    参数
    功能描述
    -c
    密码里面包含至少一个大写字母
    -A
    密码里面不包含大写字母
    -n
    密码里面至少包含一个数字。
    -0
    密码中不包含数字
    -y
    密码中至少包含一个特殊字符。
    -s
    生成安全随机的密码
    -B
    密码中不包含混淆的字符,例如“1”和“I”
    -h
    查看帮助信息
    -H
    使用指定文件sha1哈希生成,不适用随机生成
    -C
    按列打印生成的随机密码
    -1
    每行输出一个密码,不按列打印生成密码
    -v
    密码不包括元音字母或者可能被误认为是元音字母的数字

     

      示例:

     1 [root@vultr ~]# pwgen -c -n -y -1  12 10     #意思是生成密码长度为12的包含至少一个大写字母和至少一个数字和至少一个特殊字符的10个密码,并分行显示。
     2 Adee,lu8laem
     3 Liev0wa=o5ai
     4 juP[ae[xi2ae
     5 eequ@oo4EeLu
     6 GeeBaeXo9on/
     7 ohm5As;ohthi
     8 ahtai1AhZee+
     9 Aiwi"moor7bu
    10 UheiPh<i3aad
    11 ira^v2ooLai8

      2. 更改端口号

      我们使用的sshd服务的配置文件是在/etc/ssh/sshd_config,我们只需要将端口更改下就行了。

    vim /etc/ssh/sshd_config

      更改完之后我们需要将我们的82端口开放下。

    firewall-cmd --add-port=82/tcp --permanent 
    firewall-cmd --reload

      然后重启sshd服务即可:

    systemctl restart sshd

      访问的时候我们需要加上我们的端口号。

    ssh -p82  192.168.1.121

    我们可以用nmap 扫描下我们的我们服务器看看哪些端口开放着。

    [root@localhost ~]# nmap 192.168.1.121
    
    Starting Nmap 6.40 ( http://nmap.org ) at 2018-01-03 14:53 CST
    Nmap scan report for li155.members.com (192.168.1.121)
    Host is up (0.070s latency).
    Not shown: 998 filtered ports
    PORT   STATE  SERVICE
    22/tcp closed ssh
    82/tcp open   xfe

    可以看到虽然我们82端口被扫描出来了,但是是不知道它是sshd服务的。

      3. 禁止root用户登陆

      1. 不使用root用户名登陆,这样root不知道你的管理员用户的用户名,这样也加大了暴力破解力度。

        注:判断一个用户是不是超级管理员,看的是用户的ID是否为0。

        例:创建一个普通帐号,修改ID为0 然后变成超级管理权限

        创建一个用户后

        vim /etc/passwd

        改:root:x:0:0:root:/root:/bin/bash

        为:root:x:0:0:root:/sbin/nologin   #不让root登录系统

     

        改:djx:x:1000:1000::/home/djx:/bin/bash

        为:djx:x:0:0::/home/djx:/bin/bash  #改ID500为0,cd就成root身份

        注:centos7普通用户id是从1000开始,centos7以前的普通用户id是从500开始。

        然后我们可以使用djx登陆,会发现它拥有root的权限。

         

        我们登陆的家目录是djx家目录,用户djx是具有管理员权限,可以在root下创建目录。

      4. 编写脚本检查/var/log/secure访问日志文件。

      思路:通过统计日志文件中的登陆失败的ip,并将达到阈值的ip添加到/etc/hosts.deny来拒绝某个ip的再次访问。

       脚本:之前写的,比较low。

     1 #!/bin/bash
     2 ######################################################
     3 # $Name:        protect_ssh 
     4 # $Version:     v1.0
     5 # $Function:    Prevent SSH from being hacked
     6 # $Author:      djx
     7 # $Create Date: 2017-11-22
     8 # $Description: shell
     9 #######################################################
    10 #SSH配置文件所在位置
    11 SSH_config='/etc/hosts.deny'
    12 #ssh 日志文件位置
    13 SSH_log='/var/log/secure'
    14 #记录尝试登陆超过15次且未登陆成功的ip,以及添加进黑名单的时间日志
    15 Deny_log='/var/lib/ssh_shell/ssh_deny.log'
    16 #储存所有ip及访问次数文件
    17 Visit_ip='/var/lib/ssh_shell/ssh_visit.txt'
    18 #超过设置下面次数将被添加进黑名单
    19 Visit_number=60
    20 #检查ssh日志文件是否存在
    21 if [ ! -e  $SSH_log ]
    22 then
    23         echo -e "33[41;37m  ssh 日志文件不存在 请检查原因 33[0m"
    24 exit 1
    25 fi
    26 
    27 if [ ! -e "$SSH_config.bak" ]
    28 then
    29     cp $SSH_config  $SSH_config.bak
    30     if [ $? -eq 0 ]
    31     then
    32         echo " 备份文件成功" >>$Deny_log
    33     else
    34         echo  -e"33[41;37m ssh备份文件不成功  33[0m"
    35     exit 2
    36     fi
    37 else
    38     echo " 已有备份文件 " >>$Deny_log
    39 fi
    40 
    41 cat $SSH_log |awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{ print $2"==="$1}' > $Visit_ip
    42 echo "---------$(date +%F_%T)------------" >>$Deny_log
    43 
    44 for VI  in  $(cat  $Visit_ip)
    45 do
    46         Number=$(echo $VI |awk -F=== '{print  $2}')
    47         IP=$(echo $VI |awk -F=== '{print  $1}')
    48         if  [ $Number -gt $Visit_number ]
    49         then
    50                 grep $IP "$SSH_config" >/dev/null
    51                 if [ $? -ne  0 ]
    52                 then
    53                     echo " sshd:$IP:deny" >>$SSH_config
    54                     echo "$IP " >>$Deny_log
    55                 fi
    56         fi
    57 
    58 done

        5. 使用fail2ban

          见文章:fail2ban的使用以及防暴力破解与邮件预警

       

     

  • 相关阅读:
    动词 + to do、动词 + doing
    图像直线检测——霍夫线变换
    x=min(x, y)
    x=min(x, y)
    算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
    算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
    分治法求解切割篱笆
    分治法求解切割篱笆
    GMM的EM算法实现
    秒杀多线程第二篇 多线程第一次亲热接触 CreateThread与_beginthreadex本质差别
  • 原文地址:https://www.cnblogs.com/operationhome/p/9184525.html
Copyright © 2011-2022 走看看