zfsjlll

zfsjlll

趁着年轻,好好犯病

網站安全防護

圖片

系統:Debian11 bullseye

問題#

最近使用 typcecho 搭建了一个戀愛網站,本來網站還沒有對外開放,突然收到來自 IP 洩露的站內評論,決定是時候對網站進行安全防護措施了。

思路#

SSH 遠程訪問我們的 VPS 主機需要IP地址端口號用戶名密碼,黑客想要入侵我們的 VPS 也需要知道這四個要素,於是我們從這四個方面

來進行防護。

步驟#

1. IP 地址#

黑客會使用惡意腳本掃描 IP 段,基本可以確定是公開的,但是我使用的 VPS 服務商 DigitaOcean 有保留

IP (Reserverd IP) 功能,可以將一個公網 IP 綁定到我們的 VPS 上,以後使用這個 IP 來對外開放,在一定程度上可

以保證我們的網站安全。

A DigitalOcean Reserved IP address is a publicly-accessible static IP address that you can assign to a Droplet and then reassign to another Droplet later, as needed. You can implement a failover mechanism with reserved IPs to build a high availability infrastructure.

在 VPS 的Networking-Public Network-ESERVED IP選項開啟:

圖片

圖片

下拉框選中需要綁定的 VPS

圖片

點擊Assign Reserved IP即可

圖片

2. 端口號#

默認的 SSH 端口為 22,所以對於黑客來說屬於已知項,所以我們需要改變 SSH 端口為未知項。

一個通訊端口號使用 16 位無符號整數(unsigned integer)來表示,其範圍介於 0 與 65535 之間。
在 TCP 協議中,端口號 0 是被保留的,不可使用。
1–1023 系統保留,只能由 root 用戶使用。
1024—4999 由客戶端程序自由分配。
5000—65535 由服務器端程序自由分配在 UDP 協議中,來源端口號是可以選擇要不要填上,如果設為 0,則代表沒有來源端口號。¹

鑒於 root 用戶的重要性,我們以後將在[用戶名]詳細講解,使用非 root 用戶登錄,所以端口號可選在 1024-65535 中任意一個。

登錄 VPS, 修改/etc/ssh/sshd_configPort 22為你選擇的端口號,

本文以Debian11nano文本編輯器為例:

nano /etc/ssh/sshd_config

找到Port 22並修改為其他端口,保存重啟 SSH 服務,以後就需要使用設置端口來登錄 SSH 了。

systemctl restart ssh

3. 用戶名#

root 用戶擁有系統最高權限,一旦被黑客掌握 root 權限,就相當於任人宰割,當肉雞進行挖礦、DDOS 等違法行為,淪為黑客的工具,我們可以禁用

root 用戶遠程登錄並創建普通用戶來進行日常的服務器運維等工作,安裝sudo臨時獲得 root 權限進行更高權限操作。

在 Linux 和 Unix 系統中,sudo 是一條用於提升當前用戶權限的命令。通常情況下,普通用戶只有很有限的權限,無法進行某些需要管理員權限才能執行的操作。使用 sudo 命令可以暫時提升當前用戶的權限,使其能夠執行需要管理員權限才能執行的操作。

建立普通用戶

adduser _your_vps_name

安裝 sudo

apt update && apt install sudo

注:在使用 sudo 命令時每次都需要輸入 root 密碼,我們可以通過修改配置文件來簡化操作,但你需要知道自己在做什麼。

修改 sudo 用戶權限

visudo

找到User Privilege Specification, 在 root 用戶下加入

vpsadmin ALL=(ALL) NOPASSWD: ALL

4. 密碼#

理論上來說如果時間足夠長,密碼是完全可以被破解的,黑客還可以通過密碼表等工具來破解你的賬戶密碼,所以我們棄用密碼登錄,選擇密鑰的方式來登錄,使用 ssh 生成對應的公鑰和私鑰,將公鑰上傳到 VPS 就可以使用私鑰來遠程登錄,只需要保證私鑰不洩露即可,建議私鑰本地保存,不要保存在服務器。

要生成 SSH 密鑰對並將公鑰上傳到服務器,可以按照以下步驟進行:

打開終端或命令行界面,輸入以下命令來生成密鑰對:

ssh-keygen -t rsa -b 4096 -C "<[email protected]>"

其中,-t rsa 表示生成 RSA 類型的密鑰對,-b 4096 表示密鑰長度為 4096 位,-C 參數後面的內容是註釋信息,可以根據需要進行修改。

在執行上述命令後,系統會提示你輸入密鑰的保存路徑和文件名,默認路徑為~/.ssh/,文件名為 id_rsa 和 id_rsa.pub。你可以按照默認設置保存密鑰,也可以根據需要進行修改。在保存公鑰文件時,文件名必須為 id_rsa.pub,否則服務器將無法識別。

生成密鑰對後,使用以下命令將公鑰上傳到服務器:

ssh-copy-id username@hostname

其中,username 是你在服務器上的用戶名,hostname 是服務器的主機名或 IP 地址。執行該命令時,系統會提示你輸入服務器密碼,輸入後就會將公鑰自動添加到服務器的~/.ssh/authorized_keys 文件中。

如果你無法使用 ssh-copy-id 命令,可以手動將公鑰複製到服務器的 authorized_keys 文件中。在本地終端中使用以下命令打開公鑰文件:

cat ~/.ssh/id_rsa.pub

複製公鑰文件中的全部內容,在服務器上打開~/.ssh/authorized_keys 文件,並將公鑰粘貼到文件中。保存文件後,就可以使用私鑰連接服務器。

總結#

通過以上四部曲,我們就可以實現基礎的網站防護了。

文章更新於 2024/3/27


參考文獻#

  1. 網絡筆記之端口及常見端口號
  2. 安全防護
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。