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