什麼是暴力破解,簡單來講就是對一個服務器進行無數次嘗試登錄,並用不一樣的密碼進行登錄直到能夠登錄成功。暴力破解的基本步驟能夠分爲如下幾步: html
1. 找到對應的linux服務器 Ip地址linux
2.掃描端口號:22 nmap掃描端口shell
3.開始暴力破解 : 通常root 破解你的密碼 登陸你的機器 破壞 盜取你的重要的數據vim
對於這種狀況咱們有如下5種解決辦法:centos
sshd服務,直接編寫腳本檢查/var/log/secure 內登陸失敗次數超過某個閾值的ip並將它添加到/etc/hosts.deny(fail2ban的優勢更多)安全
接下來咱們對於上面的五種方法進行一一講解演示。(如下的操做環境是在centos7下的)bash
1. 將密碼設置複雜服務器
密碼的複雜度必定要較高點,儘可能經過密鑰登錄,這裏介紹個密碼生成工具:pwgen(需安裝,用yum安裝下就能夠了)ssh
pwgen的一些參數tcp
參數 |
功能描述
|
-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