什么是暴力破解,簡單來說就是對一個服務器進行無數次嘗試登陸,並用不同的密碼進行登陸直到可以登陸成功。暴力破解的基本步驟可以分為以下幾步:
1. 找到對應的linux服務器 Ip地址
2.掃描端口號:22 nmap掃描端口
3.開始暴力破解 : 一般root 破解你的密碼 登錄你的機器 破壞 盜取你的重要的數據
對於這種情況我們有以下5種解決辦法:
- 將密碼設置復雜,長度大於8位或者最好大於14位,密碼的復雜度:由大小寫字母以及字符和數字組成。 0-9 a-z A-Z @!#$%*. 等等。
- 更改端口號,默認的端口是sshd(22),修改默認端口號。
- 不用root用戶登陸(禁止root用戶登陸),使用其他用戶登陸並且擁有root用戶權限。
-
sshd服務,直接編寫腳本檢查/var/log/secure 內登錄失敗次數超過某個閾值的ip並將它添加到/etc/hosts.deny(fail2ban的優點更多)
- 使用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 "\033[41;37m ssh 日志文件不存在 請檢查原因 \033[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"\033[41;37m ssh備份文件不成功 \033[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
