云計算極大地改變了服務器應用場景,許多平臺都提供免費的 linux 云服務器,你可以在幾分鐘內通過這些平臺部署一臺 Linux 服務器。
不過,作為云服務器,也有弊端。因為它是在互聯網上可見的,所以一旦你啟動了一臺新服務器,黑客便會通過腳本自動掃描錯誤的配置或者漏洞。
所以,在安裝完 Linux 系統后,還需要做一些安全相關的配置,以提升系統的安全性。
下面是一張使用 Fail2ban 工具查看系統信息的截圖:
如上圖所示,有 212 次失敗的登錄嘗試和 6 個被阻止的 IP 地址,這些都是未經授權的人或腳本對系統進行的入侵。
所以,對系統做一些安全的配置是十分有必要的。如下我們總結了一些在安裝 Linux 系統后建議采取的措施。
1,確保設置了非 root 用戶
root 用戶具有最高權限,但是我們并不是所有工作都需要使用 root 用戶。
同時,幾乎所有 Linux 系統中都有 root 用戶,所以攻擊者通常會使用 root 用戶名來嘗試登錄系統。
所以,在平時工作中最好以非 root 用戶登錄,且 ssh 禁用遠程訪問的 root 登錄。
那么怎么添加用戶呢?我們在先前的文章中介紹過添加用戶的方法,大家可以參考:??使用 useradd 命令在 Linux 中添加新用戶??
添加用戶可使用 root 用戶登錄系統,然后使用 useradd 命令添加新用戶,如下所示:
useradd <username>
使用 passwd 命令為新添加的用戶設置密碼:
passwd <username>
2,確保非 root 用戶具有 sudo 權限
如果需要使用 ssh 遠程登錄系統,且需要執行 root 權限的活動,那么所使用的登錄賬戶需要具有 sudo 權限。
在 Ubuntu 和 centos 中創建 sudo 用戶的過程是相似的,但是 sudo 用戶組是不同的。
首先以 root 身份登錄系統。
在 CentOS 和 Red Hat 上,wheel 組是具有 sudo 權限的用戶組,可以使用 usermod 命令將用戶添加到該用戶組中。
usermod -aG wheel <username>
Ubuntu 使用 sudo 用戶組來管理 sudo 用戶:
usermod -aG sudo <username>
3,啟用基于密鑰的 ssh 身份驗證
為 ssh 啟用基于密鑰的身份驗證非常重要,這樣當我們禁用基于密碼的身份驗證時,它就可以正常工作。
暴力破解或者盜取密碼是入侵者獲取系統訪問權限的常用方式,如果我們禁用基于密碼的 ssh 登錄,采用基于密鑰的 ssh 連接,那么攻擊者就無法根據用戶名和密碼訪問服務器了。
啟用 ssh 后,需要做的就是在個人計算機上生成 ssh 密鑰,有了 ssh 密鑰,就需要為非 root 用戶將公鑰添加到服務器的 authorized_keys 中。
4,確保允許 ssh 通過 ufw 防火墻
在系統啟用防火墻之前,應確保讓其允許 ssh,要不然就無法通過 ssh 訪問系統。
關于防火墻,Ubuntu 使用 ufw(Uncomplicated Firewall),CentOS 和 Red Hat 使用 firewalld。
在 CentOS 和 Red Hat 中,使用 firewall-cmd 命令:
sudo firewall-cmd --znotallow=public --add-service=ssh --permanent
在 Ubuntu 中,使用 uwf 命令:
sudo ufw allow ssh
5,啟用防火墻(在允許 ssh 之后)
迄今為止,防火墻仍是系統安全的一道屏障,在 CentOS 和 Red Hat 中,啟用 firewalld systemd 服務:?
sudo systemctl start firewalld
sudo systemctl enable firewalld
在 Ubuntu 中,使用如下命令:
sudo ufw enable
6,設置 ssh 不顯示 banner 信息
攻擊者可以通過運行服務的軟件中的漏洞來危害服務器。banner 會顯示正在運行的 OpenSSH 或操作系統版本的信息。所以我們需要設置 ssh 不顯示 banner。
在 CentOS 和 Red Hat 中默認就是不顯示 banner,所以關于這點不需要做額外的工作。但是在 Ubuntu 中,需要使用如下命令來禁用 banner:
sudo echo "DebianBanner no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
7,禁用所有 ssh 轉發
經常會有系統管理員通過 ssh 轉發來加密可能傳遞的明文信息,如果你不用的話,應該將其關閉。攻擊者可能會使用轉發來加密信息,所以你很難查看,或者使用授權的端口和服務獲取可能被阻止傳遞的信息。
在 CentOS 或 Red Hat 中,將如下內容添加到 /etc/ssh/sshd_config 中:
DisableForwarding yes
在 Ubuntu 中,添加 DisableForwarding yes 到 10-my-sshd-settings.conf 文件中,如下:
sudo echo "DisableForwarding yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
8,禁止 root 用戶登錄 ssh
幾乎每個 Linux 系統中都有 root 用戶,允許其登錄 ssh 是比較危險的。
在 CentOS 或 Red Hat 中,在文件 /etc/ssh/sshd_config 中找到 PermitRootLogin yes,將其改為:
PermitRootLogin no
Ubuntu 中,在10-my-sshd-settings.conf 文件中添加 PermitRootLogin no:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
9,禁用基于密碼的 ssh 身份驗證
在禁用 ssh 密碼驗證之前,首先需要按照第 3 點中所屬配置和測試了基于密鑰的身份驗證。
我們在先前的文章中介紹過如何禁用基于密碼的 ssh 身份驗證,可參考:??如何禁止使用密碼通過 ssh 連接遠程服務器??
CentOS 或 Red Hat 中,在文件 /etc/ssh/sshd_config 中找到 PasswordAuthentication yes,將其改為:
PasswordAuthentication no
在 Ubuntu 中,在文件 10-my-sshd-settings.conf 中添加內容 PasswordAuthentication no:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
10,忽略 rhosts
rhosts 與 rsh 相關聯,rsh 是一種被 secure shell 取代的遺留協議。如果用戶試圖創建惡意 rhosts 文件,此設置將忽略它。
CentOS 或 Red Hat 系統中,在文件 /etc/ssh/sshd_config 中找到 #IgnoreRhosts yes 將前面的#刪掉(即注釋打開):
IgnoreRhosts yes
Ubuntu 中,在文件 10-my-sshd-settings.conf 中添加 IgnoreRhosts yes:
sudo echo "IgnoreRhosts yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
11,安裝配置 fail2ban 來加強 ssh 安全性
Fail2ban會監視已配置服務(如SSH)的日志文件,并阻止惡意用戶的IP地址在設定的時間內多次嘗試后連接到您的服務器。
例如,如果攻擊者在三小時內進行了5次以上的失敗嘗試,他的IP地址將被封鎖12小時。
Fail2ban 也可以配置為保護其他服務,例如由 Nginx web 服務器或 Apache web 服務器支持的網站。
12,配置自動安全更新(適用于Red Hat和CentOS)
如前所述,如果漏洞比較多,帶有漏洞的過時服務可能會讓攻擊者進入你的服務器,甚至無需登錄!快速應用安全更新以降低此風險至關重要。
Ubuntu 會默認啟用自動安全更新,所以無需執行更新操作。
要在 CentOS 和 Red Hat 上配置自動更新,需要安裝一個名為 dnf-automatic 的應用程序,并使用以下命令為其啟用計時器:?
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
然后通過如下命令來檢查一下:
sudo systemctl status dnf-automatic.timer