centos7 SSH防暴力破解五種方法

什麼是暴力破解,簡單來說就是對一個服務器進行無數次嘗試登陸,並用不同的密碼進行登陸直到可以登陸成功。暴力破解的基本步驟可以分爲以下幾步:

  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.deny(fail2ban的優點更多)
  5. 使用fail2ban,起到登錄失敗多次後直接禁止某個時間段此ip登陸。

接下來我們對於上面的五種方法進行一一講解演示:

  1. 將密碼設置複雜
    密碼的複雜度一定要較高點,儘量通過密鑰登陸,這裏介紹個密碼生成工具:pwgen(需要安裝yum)
    pwgen的一些參數
    參數 (功能描述)
    -c(密碼裏面包含至少一個大寫字母)
    -A(密碼裏面不包含大寫字母)
    -n(密碼裏面至少包含一個數字。)
    -0(密碼中不包含數字)
    -y(密碼中至少包含一個特殊字符。)
    -s(生成安全隨機的密碼)
    -B(密碼中不包含混淆的字符,例如“1”和“I”)
    -h(查看幫助信息)
    -H(使用指定文件sha1哈希生成,不適用隨機生成)
    -C(按列打印生成的隨機密碼)
    -1(每行輸出一個密碼,不按列打印生成密碼)
    -v(密碼不包括元音字母或者可能被誤認爲是元音字母的數字)
    操作實例:
    安裝pwgen
    yum install pwgen.x86_64
    密碼生成
    pwgen -c -n -y -1 12 10
    解析:意思是生成密碼長度爲12的包含至少一個大寫字母和至少一個數字和至少一個特殊字符的10個密碼,並分行顯示。
    圖例:
    在這裏插入圖片描述

  2. 更改端口號
    sshd服務的配置文件是在/etc/ssh/sshd_config
    修改文件並保存vim /etc/ssh/sshd_config
    在這裏插入圖片描述
    端口開放:(提示成功)

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

    重啓sshd服務:systemctl restart sshd
    訪問需要端口號:ssh -p99 192.168.1.46

    沒有安裝執行安裝nmap:yum install nmap.x86_64
    nmap 掃描開放端口:nmap 192.168.1.46
    在這裏插入圖片描述

  3. 禁止root用戶登陸

    不使用root用戶名登陸,是爲了增強未知用戶的暴力破解強度。
    注:判斷一個用戶是不是超級管理員,看的是用戶的ID是否爲0。

    實例:
    要求:創建一個普通帳號,修改ID爲0,成爲超級管理權限
    創建新用戶並設置密碼:(以你的用戶要求創建)

    useradd test
    passwd test
    

    更改超級管理權限 vim /etc/passwd
    不使用root用戶登錄:

    原:root:x:0:0:root:/root:/bin/bash
    改:root:x:0:0:root:/sbin/nologin   #不讓root登錄系統
    

    更改指定用戶爲超級管理:

    原:test:x:1002:1002::/home/test:/bin/bash
    改:test:x:0:0::/home/test:/bin/bash	#更改改ID爲0,用戶變成root身份
    

    測試登錄(端口不是22要加端口):ssh [email protected]:99
    本地測試重啓直接用戶登錄:
    在這裏插入圖片描述

  4. 編寫腳本檢查/var/log/secure訪問日誌文件
    思路:通過統計日誌文件中的登陸失敗的ip,並將達到閾值的ip添加到/etc/hosts.deny來拒絕某個ip的再次訪問。
    方法一:
    使用crontabp實時任務,每分鐘執行一次:*/1 * * * * /bin/bash /root/protectssh/protectssh.sh

    #!/bin/bash
    #protectssh.sh
    #Prevent SSH from being hacked
     #SSH配置文件所在位置
     SSH_config='/etc/hosts.deny'
     #ssh 日誌文件位置
     SSH_log='/var/log/secure'
     #記錄嘗試登陸超過15次且未登陸成功的ip,以及添加進黑名單的時間日誌
     Deny_log='/var/lib/ssh_shell/ssh_deny.log'
     #儲存所有ip及訪問次數文件
     Visit_ip='/var/lib/ssh_shell/ssh_visit.txt'
     #超過設置下面次數將被添加進黑名單
     Visit_number=60
     #檢查ssh日誌文件是否存在
     if [ ! -e  $SSH_log ]
     then
       echo -e "\033[41;37m  ssh 日誌文件不存在 請檢查原因 \033[0m"
       exit 1
     fi
     
     if [ ! -e "$SSH_config.bak" ]
     then
       cp $SSH_config  $SSH_config.bak
       if [ $? -eq 0 ]
       then
         echo " 備份文件成功" >>$Deny_log
       else
         echo  -e"\033[41;37m ssh備份文件不成功  \033[0m"
         exit 2
       fi
     else
       echo " 已有備份文件 " >>$Deny_log
     fi
     cat $SSH_log |awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{ print $2"==="$1}' > $Visit_ip
     echo "---------$(date +%F_%T)------------" >>$Deny_log
     
     for VI  in  $(cat  $Visit_ip)
     do
       Number=$(echo $VI |awk -F=== '{print  $2}')
       IP=$(echo $VI |awk -F=== '{print  $1}')
       if  [ $Number -gt $Visit_number ]
       then
         grep $IP "$SSH_config" >/dev/null
         if [ $? -ne  0 ]
         then
          echo " sshd:$IP:deny" >>$SSH_config
          echo "$IP " >>$Deny_log
        fi         
      fi
    done
    

    方法二:
    使用crontabp實時任務,每分鐘執行一次:*/1 * * * * /bin/bash /root/Denyhosts/Denyhosts.sh

    #!/bin/bash
    #Denyhosts SHELL SCRIPT
    cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/Denyhosts/Denyhosts.txt
    DEFINE="5"
    for i in `cat /root/Denyhosts/Denyhosts.txt`
    do
      IP=`echo $i|awk -F= '{print $1}'`
      NUM=`echo $i|awk -F= '{print $2}'`
      if [ $NUM -gt $DEFINE ]
      then
        ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`
        if [ $ipExists -lt 1 ]
        then
          echo "sshd:$IP" >> /etc/hosts.deny
        fi
      fi
    done
    
  5. 使用fail2ban
    fail2ban可以監視你的系統日誌,然後匹配日誌的錯誤信息(正則式匹配)執行相應的屏蔽動作(一般情況下是防火牆),而且可以發送e-mail通知系統管理員!
    fail2ban運行機制:簡單來說其功能就是防止暴力破解。工作的原理是通過分析一定時間內的相關服務日誌,將滿足動作的相關IP利用iptables加入到dorp(丟棄)列表一定時間。
    fail2ban 官方網址:http://www.fail2ban.org
    文章的主要內容: 1. 安裝fail2ban 2. 配置fail2ban 3. fail2ban的常用命令以及詳解  4.郵件預警 5.注意事項

    安裝fail2ban:(這裏就不說源碼安裝,使用yum安裝也一樣)
    安裝命令:yum install fail2ban
    fail2ban的配置文件路徑:/etc/fail2ban
    fail2ban安裝目錄:/usr/share/fail2ban
    日誌文件:/var/log/fail2ban.log
    達到閾值之後的執行的動作的配置文件: action.d/
    包含所有的過濾規則:filter.d/
    開始運行fail2ban:fail2ban-client start

    配置fail2ban並實現防暴力破解 ,想了解更多,到官方文檔查看。
    配置fail2ban:
    編輯配置文件 jail.local 並實現防暴力破解 vim /etc/fail2ban/jail.d/jail.local
    輸入文件內容:

    #defalut這裏是設定全局設置,如果下面的監控沒有設置就以全局設置的值設置。
    [DEFAULT]
    # 用於指定哪些地址ip可以忽略 fail2ban 防禦,以空格間隔。
    ignoreip = 127.0.0.1/8
    # 客戶端主機被禁止的時長(默認單位爲秒)
    bantime  = 3600
    # 過濾的時長(秒)
    findtime  = 600
    # 匹配到的閾值(次數)
    maxretry = 3
    
    [ssh-iptables]
    # 是否開啓
    enabled  = true
    # 過濾規則
    filter   = sshd
    # 動作
    action   = iptables[name=SSH, port=ssh, protocol=tcp]
    # 日誌文件的路徑
    logpath  = /var/log/secure
    # 匹配到的閾值(次數)
    maxretry = 3
    

    注:action設置的時候,port=ssh,如果我們更改了sshd服務的端口號,我能需要在這裏設置對應的端口號,否則配置不生效。
    執行配置生效:fail2ban-client reload
    防暴力破解測試:
    在這裏插入圖片描述
    查看當前被禁止登陸的ip: fail2ban-client status ssh-iptables
    在這裏插入圖片描述
    fail2ban常用的命令:
    啓動暫停查看狀態:systemctl start/restart/stop/status fail2ban
    fail2ban-client使用命令:
    start——啓動fail2ban server和監獄
    reload——重新加載配置文件
    stop——暫停fail2ban和監獄
    status——查看運行的監控服務數量和列表
    set loglevel——設置日誌等級,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG
    get loglevel——獲取當前日誌的等級
    set idle on|off——設置某個監控(監獄)的狀態。
    set addignoreip ——設置某個監控(監獄)可以忽略的ip
    set delignoreip ——刪除某個監控(監獄)可以忽略的ip
    set banip ——將ip加入 監控(監獄)
    set unbanip ——將ip從監控(監獄)移除

    fail2ban-regex測試篩選規則設否匹配當前的日誌格式:fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf

    fail2ban郵件預警:
    fail2ban 利用sendmail 進行發郵件也可以用mail進行發郵件,在嘗試了sendmail無果後,決定使用mail
    在/etc/mail.rc末尾配置發件人的信息:

    set ssl-verify=ignore
    set from=djx
    set smtp=smtps://mail.163.com:25
    set smtp-auth-user=dj
    set smtp-auth-password=
    set smtp-auth=login
    set nss-config-dir=/root/.certs
    

    然後在jail.local(自己的配置文件裏),加入:mail-whois[name=SSH, [email protected], [email protected]]
    dest 是填入收件人郵箱
    sender 是填入 發送郵箱
    最後重新加載下配置即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章