系統: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_config
中Port 22
為你選擇的端口號,
本文以Debian11
和nano
文本編輯器為例:
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