我的 CentOS 服務器,是怎麼被一步步廢掉的

0 - 前言

處於公網的服務器,好比在海上游泳,水底下大白鯊虎視眈眈,

伺機上攻,一口吞下。

一般我們都要使用遠程登錄。


1 - 文件傳輸

不害怕,就來明文, FTP,用著還行。雖然速度沒那麼理想。

也可以使用 SCPRSYNC 加密傳輸。

可是,都用 SSL 了,為什麼不用 SSH 登錄操作呢?

於是,SSH 服務也就打開了。


2 - SSH

默認root 是不允許訪問的。可是系統管理員太懶了,sudo

敲來敲去,

文件權限翻來覆去,煩人不煩人。於是

PermitRootLogin yes

好了,每次登錄服務器都要輸

ssh -p 22 root@romte_host

還要輸入密碼,太凌亂了。


3 - 公鑰、私鑰

於是,個人電腦上

ssh-keygen -t rsa

創建公鑰私鑰,使用

ssh-copy-id -p 22 root@remote_host,

把公鑰拷貝到遠程主機。

這下方便多了,再次使用

ssh -p 22 root@romte_host

登錄,不用輸!密!碼!

瞬間清潔了不少。


4 - 端口!端口!

服務器上好多舊系統的任務,

不能全部重寫吧。

萬一改錯哪個地方,

不是得捲鋪蓋滾回寨子裡去?

所以,端口 22 堅決不改。


5 - 來自世界各地的問候

有時候,登到服務器,

systemctl status sshd

看到服務無間斷運行了128天,心裡無比高興。

可是列出來的幾行紅色字體,

總是那麼煩人,不過應該沒事兒,應該沒事兒。


6 - 日誌裡的端倪

學習了一些 systemd 的知識,

知道這老兄有個二進制日誌工具

journalctl

嘗試著打印一下日誌:

journalctl --unit="sshd" --since="-1 day"

這篩選條件,是不是高端多了,

特別是那個 “-1 day”,

有沒有一種敲代碼的感覺。

烏泱泱一大片,間隔 1-2 秒,

就有一條類似

Failed password for user root ……

紅色字體,分外扎眼。

好像我的服務被攻擊了。


我的 CentOS 服務器,是怎麼被一步步廢掉的


7 - 找出元兇

於是拼命在網上搜索關鍵詞找答案,

有了下面這樣的篩選項,

讓我看到攻擊源來自哪裡。

journalctl --unit="sshd" --since="-30 minutes"

接著管道符,篩選字段。

注意,journalctl 不提供 grep 相似的正則選項,

非不能也,不為也。

awk '/Failed/{print $(NF-3)}'

倒數第三個字段就是那個試圖攻擊服務器的IP。

接著管道符,排序,篩選統計。

sort | uniq -c

注意,一定是先排序,後統計去重,

不能反過來,無效的哦。

接著管道符,篩選出來明顯輸錯次數多的IP記錄。

awk '{if($1 >= 3){print$2;}}'

於是,我們通過上述幾條命令,

成功篩選出了,在過去30分鐘內,

至少輸錯過3次密碼的 IP 列表。

此處應有掌聲。bravo


我的 CentOS 服務器,是怎麼被一步步廢掉的


把 IP 關進小黑屋

找到不正常 IP 之後,

該把這些不法分子關進小黑屋了。

直接生效的,iptables 把丫的封了。

iptables -I INPUT -s 8.8.8.8 -j DROP

連骨頭渣都沒留,

甭管什麼請求,你這兒來的,我一概不收。

當時加,當時就生效了,

那孫子再沒來煩過我。

還有一個不是當時生效的法子,

寫入 /etc/hosts.deny

可是得

systemctl restart sshd

麻煩,

不能起到即時防護的作用

有閒工夫的,可以試試。

簡單加一條

sshd:8.8.8.8

就搞定了。


我的 CentOS 服務器,是怎麼被一步步廢掉的


寫在最後

夠了嗎?

上面的是最好的解決方案嗎?

顯然不是。

那什麼才是更好的:

  1. SSH 默認端口太危險,立馬換掉;
  2. PermitRootLogin = no 堅決執行;
  3. 使用檢測腳本,crontab 內調度運行,實時封禁;
  4. 使用專業工具如 Fail2Ban 進行防控。

結尾附上一首四言:

時常查看,

管好權限,

精準防控,

有備無患!

我是@程序員小助手 ,持續為你分享編程與程序員成長相關的內容,歡迎關注~~


分享到:


相關文章: