什麼是暴力破解,簡單來說就是對一個服務器進行無數次嘗試登陸,並用不同的密碼進行登陸直到可以登陸成功。暴力破解的基本步驟可以分爲以下幾步:
- 找到對應的linux服務器 Ip地址
- 掃描端口號:22 nmap掃描端口
- 開始暴力破解 : 一般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登陸。
接下來我們對於上面的五種方法進行一一講解演示:
-
將密碼設置複雜
密碼的複雜度一定要較高點,儘量通過密鑰登陸,這裏介紹個密碼生成工具: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個密碼,並分行顯示。
圖例:
-
更改端口號
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
-
禁止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
本地測試重啓直接用戶登錄:
-
編寫腳本檢查/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
-
使用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 是填入 發送郵箱
最後重新加載下配置即可。