記服務器遭遇ssh攻擊及應對過程

sunhao06 2022-01-08 00:20:58 阅读数:236

遭遇 ssh

前幾天登錄服務器一看,短短十幾個小時的時間有七千多次ssh錯誤登錄記錄,毫無疑問,有人在對我進行ssh遠程暴庫攻擊。

利用命令

grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /var/log/secure | sort | uniq -c

在這裏插入圖片描述

可以看到每個ip的訪問次數(其實圖沒截完,還有很多),可以看到這個人應該有很多“肉雞”來對別人進行攻擊,比較有趣的是就在我查看登錄記錄的同時,他還在暴力破解,咱也不知道用的啥破軟件,咱也不敢問,總而言之,需要對服務器進行安全設置了。

在進行應對這種暴行之前,當然需要首先分析服務器當前的漏洞

  • 第一 、SSH遠程連接的默認端口沒有修改;

這一條是登錄路徑問題,同樣適用網站後臺默認登錄地址的情况。以前很多人掃注入漏洞,得到賬號密碼就是去找後臺登錄地址。因為大部分網站,都是固定的源碼,後臺登錄界面都是固定的。有賬號密碼,又找到了登錄頁面,那進後臺基本就沒跑了。不少工具駭客就是,因為找不到登錄頁面在手裏有賬號密碼的情况下,也無法成功入侵網站。所以,服務器或網站上線之前,一定要修改一個比較不易找到的登錄地址或端口

  • 第二、默認管理員root 賬號沒有禁用遠程訪問;

無論Windows 還是 Linux 系統,都有自己特定的最高管理員賬號。自己電腦,這方面無關緊要,這麼多層的路由器,我們電腦躲在裏面其實已經安全不少了。但是放在公網的服務器,任何人都可以試圖通過IP和相應遠程訪問端口,進行賬號的登錄。駭客知道登錄地址可以嘗試連接我,駭客知道默認賬號可以嘗試暴力猜解密碼。如果密碼被猜中,那服務器就玩完了。

  •     第三、多次遠程登錄失敗,沒有將其IP加入黑名單。

服務器遠程登錄訪問這是必有的功能,你不可能給服務器連接一臺顯示器本地登錄。也基本不可能,屏蔽所有IP只留下一兩個IP進行遠程操控(萬一IP突然變了,畢竟我們用的大部分是動態分配的)。服務器既然可以設置指定IP允許訪問和禁止訪問,那也就可以通過脚步進行控制,某IP登錄多少次失敗,將其加入黑名單。日常使用,也是如此操作的。

下面我們就在這三方面來搞

  • 第一、修改ssh默認端口

一般,ssh默認監聽的端口都是22,而駭客一般也就是通過這個端口通過ssh連接你的服務器,所以我們需要修改一個別人不易想到的端口。

編輯 /etc/ssh/sshd_config 文件

vim /etc/ssh/sshd_config

把 Port 22

改成 Port xxx(一個別人不易猜到的端口)

然後保存退出

  • 第二、禁用root賬戶遠程登錄

駭客一般找到你的ssh端口後,一般會通過root賬戶進行登錄,而此時如果你能把你的root賬戶禁止ssh登錄的話就能避免很大一部分攻擊。

禁用root賬戶登錄的前提是我們有另一個賬戶

linux添加賬戶的教程可以參見我的另一篇文章

Linux系統添加用戶、管理員權限

然後就是禁止root賬戶進行遠程登陸

方法還是修改 /etc/ssh/sshd_config 文件

vim /etc/ssh/sshd_config

將文件改成

PermitRootLogin no

完成!

  • 第三、安裝denyhost

這個方法比較省時省力。denyhosts 是 Python 語言寫的一個程序,它會分析 sshd 的日志文件,當發現重複的失敗登錄時就會記錄 IP 到 /etc/hosts.deny 文件,從而達到自動屏 IP 的功能。

安裝:

# Debian/Ubuntu:
$ sudo apt-get install denyhosts
# RedHat/CentOS
$ yum install denyhosts

默認配置就能很好的工作,如要個性化設置可以修改 /etc/denyhosts.conf

$ vi /etc/denyhosts.conf
SECURE_LOG = /var/log/auth.log #ssh 日志文件,它是根據這個文件來判斷的。
HOSTS_DENY = /etc/hosts.deny #控制用戶登陸的文件
PURGE_DENY = #過多久後清除已經禁止的,空錶示永遠不解禁
BLOCK_SERVICE = sshd #禁止的服務名,如還要添加其他服務,只需添加逗號跟上相應的服務即可
DENY_THRESHOLD_INVALID = 5 #允許無效用戶失敗的次數
DENY_THRESHOLD_VALID = 10 #允許普通用戶登陸失敗的次數
DENY_THRESHOLD_ROOT = 1 #允許root登陸失敗的次數
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /var/lib/denyhosts #運行目錄
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES #是否進行域名反解析
LOCK_FILE = /var/run/denyhosts.pid #程序的進程ID
ADMIN_EMAIL = [email protected] #管理員郵件地址,它會給管理員發郵件
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <[email protected]>
SMTP_SUBJECT = DenyHosts Report
AGE_RESET_VALID=5d #用戶的登錄失敗計數會在多久以後重置為0,(h錶示小時,d錶示天,m錶示月,w錶示周,y錶示年)
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
RESET_ON_SUCCESS = yes #如果一個ip登陸成功後,失敗的登陸計數是否重置為0
DAEMON_LOG = /var/log/denyhosts #自己的日志文件
DAEMON_SLEEP = 30s #當以後臺方式運行時,每讀一次日志文件的時間間隔。
DAEMON_PURGE = 1h #當以後臺方式運行時,清除機制在 HOSTS_DENY 中終止舊條目的時間間隔,這個會影響PURGE_DENY的間隔。

查看我的 /etc/hosts.deny 文件發現裏面已經有 87條記錄。

cat /etc/hosts.deny | wc -l
87
版权声明:本文为[sunhao06]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201080020582418.html