創建 Linux? 云服務器后的第一步是為其設置安全性。您應該在每臺服務器上執行此關鍵步驟,以防止不良行為者獲得不需要的訪問權限。此操作會產生一個更安全的環境,有助于防止您和您的企業受到損害。執行這些基本步驟并加強服務器上的安全性可以阻止不良行為者,并使他們轉向新目標。
用戶管理
默認情況下,root 用戶被創建為每個 Linux 系統上的第一個用戶。您應該通過 Secure Shell (SSH) 禁用它。通過 SSH 禁用此 root 用戶會使不良行為者更難訪問系統。因為 root 用戶是在每臺 Linux 服務器上默認創建的,所以如果 root 用戶通過 SSH 啟用,不良行為者已經擁有登錄到您的服務器所需的一半信息。這種情況允許暴力破解 SSH 攻擊,直到密碼散列中斷。
為避免這種情況,您應該在需要登錄和管理系統時創建輔助用戶。系統上的每個最終用戶都應該有自己的登錄憑據以用于記錄目的。根據最終用戶需要執行的操作,他們可能需要sudo權限才能完成管理操作。本節提供有關如何在基于 Debian? 和 Red Hat? Enterprise Linux 的系統上添加具有 sudo 權限的用戶的示例。
密碼強度準則
在創建任何用戶之前,請確保使用需要最小字符長度(甚至可能包括到期日期)的強密碼。以下是軟件系統安全支持者提倡的共同準則:
- 如果允許,請使用 12 到 14 個字符的最小密碼長度。
- 如果允許,包括小寫和大寫字母、數字和符號。
- 在可行的情況下隨機生成密碼。
- 避免對多個用戶、帳戶或軟件系統使用相同的密碼。
- 避免字符重復、鍵盤模式、字典單詞、字母或數字序列、用戶名、親戚或寵物名、浪漫鏈接(當前或過去)或個人信息(例如,身份證號、祖先的姓名或日期)。
- 避免使用已公開或可能公開與用戶或帳戶關??聯的信息。
- 避免使用用戶的同事或熟人可能知道與用戶相關的信息。
- 不要使用由弱組件組成的密碼。
添加用戶(Debian 和 Ubuntu 操作系統)
對于 Debian 和 Ubuntu? 操作系統,請按照以下步驟添加用戶:
- 創建一個新用戶并設置他們的密碼:
useradd {用戶名} passwd {用戶名}
- 授予新用戶sudo對系統特權操作的權限。此用戶是遠程登錄和更改服務器的主要用戶。
使用以下方法之一sudo為用戶實現權限。
一個。運行以下命令將用戶添加到admin用戶組。
usermod -aG admin {username}
或者,您可以修改sudoers文件以授予用戶sudo權限。
一個。以 root 身份運行以下命令以編輯用戶權限列表:
visudo
注意:在某些發行版中,系統將vi文本編輯器用于?visudo.?因為vi它不是一個用戶友好的編輯器,您可能需要參考vi 教程來尋求幫助。
灣。在包含的行之后直接添加以下行root ALL=(ALL:ALL) ALL:
{username} ALL=(ALL:ALL) ALL
C。保存并退出。
- 切換到新用戶并通過使用sudo運行需要root訪問權限的命令來測試他們的權限,例如以下命令:
su {username} sudo systemctl status sshd
在執行命令之前,系統會提示您輸入新用戶的密碼以進行驗證。
- root您還可以通過運行以下命令來驗證您的用戶是否可以提升到該帳戶:
sudo -i
如果您正確執行這些步驟,您的用戶現在可以sudo訪問并且可以提升權限。如果沒有正確執行,當您嘗試進行身份驗證時,您會收到一條消息,指出用戶不在sudoers文件中。
添加用戶(Red Hat 和 CentOS)
對于 Red Hat 和 CentOS? 操作系統,請按照以下步驟添加用戶:
- 使用以下命令創建新用戶adduser并設置用戶密碼passwd:
useradd {username} passwd {username}
- 授予新用戶sudo對系統特權操作的權限。此用戶是遠程登錄和更改服務器的主要用戶。
使用以下方法之一sudo為用戶實現權限。
一個。運行以下命令將用戶添加到wheel組
usermod -aG wheel {username}
或者,您可以修改sudoers文件以授予用戶sudo權限。
一個。運行以下命令:
visudo
注意:在某些發行版上,系統使用的文本編輯器?visudo是vi.?因為vi它不是一個用戶友好的編輯器,您可能需要參考vi 教程來尋求幫助。
灣。在包含的行之后直接添加以下行?root ALL=(ALL:ALL) ALL:
{username} ALL=(ALL) ALL
C。保存并退出。
- 切換到新用戶并使用sudo運行需要 root 訪問權限的命令來測試他們的權限:
su {username} sudo systemctl status sshd
在執行命令之前,系統會提示您輸入新用戶的密碼以進行驗證。
- root您還可以通過運行以下命令來驗證您的用戶是否可以提升到該帳戶:
sudo -i
如果您正確執行了這些步驟,您的用戶現在可以sudo訪問并且可以提升權限。如果沒有正確執行,當您嘗試進行身份驗證時,您會收到一條消息,指出用戶不在sudoers文件中。
生成 SSH 密鑰對
對于比使用密碼更安全的登錄方法,請創建一個 SSH 密鑰對以與您之前創建的用戶一起使用。這些說明適用于任何 Linux 發行版。
注意:這些說明適用于 Linux 和 macOS? 桌面。如果您從 Windows? 桌面連接,請按照?使用 SSH PUTTYgen 生成 RSA 密鑰?和?在 Windows 上使用 SSH 私鑰登錄中的說明 生成和添加 SSH 密鑰對。
- 運行以下命令在本地Linux 或 Mac? 計算機上生成密鑰對:
ssh-keygen -b 4096 -t rsa
當詢問將密鑰保存在哪里時,請使用默認位置。添加密碼是可選的并且更安全,但可能不方便。
此操作創建兩個文件。默認名稱id_rsa用于您的私鑰和id_rsa.pub公鑰。
- 在本地計算機上創建密鑰對后,將公鑰上傳到您之前創建的用戶的遠程服務器。
警告:請務必上傳公鑰,而不是私鑰。
ssh-copy-id -i ~/.ssh/id_rsa.pub {username}@{remotePublicIPAddress}
- 使用?ssh {username}@{remotePublicIPAddress}并運行以下命令連接到遠程服務器,以驗證沒有添加您不期望的額外密鑰:
cat .ssh/authorized_keys
至此,您已經ssh-key為用戶添加了密碼驗證。下一節將介紹有關如何禁用密碼身份驗證的可選步驟。
Linux SSH 守護進程配置
現在您有了一個具有sudo權限的新用戶和一個 SSH 密鑰對,您可以使用 SSH 守護程序(服務器)配置來提高安全性。
注意:?僅適用于托管操作和 RackConnect 客戶:為確保我們的自動化系統在需要時可以訪問您的服務器,我們要求您不要更改 SSH 配置并跳到下一部分。當連接到您的服務器時,Rackspace 支持團隊以用戶rack身份登錄并在端口 22 上使用密碼驗證。此外,重建現有服務器或從快照構建新服務器需要您通過將PermitRootLogin選項設置為來啟用 root 登錄yes。如果您需要更改這些值,請與您的 Rackspace 支持團隊成員交談,以便以不影響我們為您提供 Fanatical Experience? 的能力的方式進行更改。
本文其余部分的示例命令假定您以新用戶身份登錄,sudo用于執行特權操作。
SSH 配置選項
本節介紹 SSH 配置文件中有助于提高安全性的常用選項。此信息用于稍后配置您的防火墻。本節僅概述了幾個要更改的選項并描述了它們的作用。
本節重點介紹以下選項:
- Port XX:此選項是 SSH 守護程序偵聽的端口(默認為 22 端口)。
- PermitRootLogin:此標志啟用(是)或禁用(否)通過 SSH 的 root 登錄。默認情況下,此行被注釋并允許 root 登錄。
- PubkeyAuthentication:此標志啟用(是)或禁用(否)用于身份驗證的 SSH 密鑰。默認情況下,此行被注釋并允許?ssh-key?訪問。
- PasswordAuthentication:此標志啟用(是)或禁用(否)密碼驗證。默認情況下,啟用此選項。
SSH 默認使用端口 22 進行通信。root不良行為者在他們攻擊的每臺服務器上使用用戶名嘗試端口 22 。因此,通過 SSH 禁用 root 用戶并將 SSH 更改為偵聽非標準端口有助于防止違規。
更改端口不會阻止確定的入侵者,但它確實會導致大多數 SSH 連接機會的表面掃描忽略您的服務器。同樣,刪除 root 用戶的 SSH 訪問權限會干擾通過 SSH 進行的隨意暴力攻擊。
您還應該考慮在登錄時使用哪種身份驗證方法。默認情況下,所有 Linux 系統都使用密碼身份驗證。存在多種在服務器上執行身份驗證的方法,但主要的兩種方法是使用密碼和 SSH 密鑰。
SSH 密鑰是成對生成的,一個是公共的,另一個是私有的,您只能將它們組合使用。您應該將私鑰存儲在您連接的計算機上的安全位置,并且永遠不要將其泄露。您可以提供公鑰,它是您放置在要連接的服務器上的密鑰。當您建立連接時,本地計算機上的私鑰通過算法運行,如果密鑰對哈希與公鑰匹配,則授予訪問權限。
修改 sshd_config
至此,您已經添加了一個具有sudo權限的新用戶,創建了一個 SSH 密鑰對,并上傳了您的公共 SSH 密鑰。您現在可以更改 SSH 配置文件以提高安全性。為此,您可以使用以下步驟將 SSH 更改為偵聽自定義端口、限制通過 SSH 的 root 登錄、啟用公鑰身份驗證和禁用密碼身份驗證:
- 打開 SSH 守護程序配置文件進行編輯:
sudo vim /etc/ssh/sshd_config
- 更改以下行:
注意:默認情況下,Port和PermitRootLogin行被注釋掉,如#符號所示。注釋掉時,這些行將作為默認選項讀取,即使對行進行了更改。要實現這些更改,您需要通過刪除關聯行#開頭的符號來取消注釋關聯行。此外,在禁用之前PasswordAuthentication,請確保您已配置 SSH 密鑰,否則您將無法連接到服務器。
改變:
#Port 22 #PermitRootLogin yes PasswordAuthentication yes
至:
Port 2222 PermitRootLogin no PasswordAuthentication no
將2222替換為您要使用的端口。使用netstat確保新端口尚未被其他程序使用。
重要提示:如前所述,?sshd_config如果您的服務器具有托管操作服務級別,則不應對文件進行此更改。這些更改可能會拒絕 Rackspace 訪問您的服務器。
- 通過運行以下命令來測試更改后的 SSH 配置是否存在錯誤:
sshd -t
如果您沒有收到錯誤,則 SSH 現在已配置為在自定義端口上運行,并且僅接受傳遞有效 SSH 密鑰的非 root 用戶。要應用和保留這些設置,您必須重新啟動 SSH 服務。但是,請不要重新啟動服務。現在重新啟動 SSH 可能會將您鎖定在服務器之外,需要您使用救援模式或Web 控制臺來恢復配置。您必須在重新啟動服務器之前配置防火墻。我們將在下一節討論防火墻。
修改軟件防火墻并重啟SSH
注意:?RackConnect 客戶:要管理防火墻規則,請使用 RackConnect 管理而不是iptables在服務器上。如果您使用 RackConnect,則不應更改 SSH 端口。有關防火墻和 RackConnect 的更多信息,請參閱?管理 RackConnect v2.0 網絡策略。
每個 Linux 發行版都使用不同的軟件防火墻解決方案。在 Red Hat Enterprise Linux (RHEL) 和 CentOS 7 中,默認防火墻是firewalld.?在基于 Debian 和 Ubuntu 的發行版上,默認的防火墻解決方案是簡單防火墻 (UFW)。對于 RHEL 和 CentOS 6,默認解決方案是iptables.?有關您服務器的操作系統,請參閱以下部分。
RHEL、CENTOS 7 和防火墻
- 通過運行以下命令打開新的 SSH 端口:
sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
替換2222為您用于 SSH 守護程序的端口。
- sshd通過運行以下命令重新啟動服務:
sudo systemctl restart sshd
- 驗證您的自定義 SSH 端口是否在服務器上打開:
netstat -plnt | grep ssh
如果您按照這些步驟操作,您應該會看到類似于以下輸出的內容:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
UBUNTU、DEBIAN 和 UFW
- 通過運行以下命令打開新的 SSH 端口:
sudo ufw allow 2222
替換2222為您用于 SSH 守護程序的端口。
- sshd通過運行以下命令重新啟動服務:
sudo systemctl restart sshd
- 通過運行以下命令驗證您的自定義 SSH 端口是否在服務器上打開:
netstat -plnt | grep ssh
如果您按照這些步驟操作,您應該會看到類似于以下輸出的內容:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
CENTOS 6 和 IPTABLES
注意:RHEL 和 CentOS 6 將于 2020 年 11 月被標記為生命周期結束。為了獲得最佳安全實踐,我們強烈建議您考慮使用更新的操作系統版本來托管您的應用程序或網站。
- 通過運行以下命令打開新的 SSH 端口:
sudo iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT sudo service iptables-save
替換2222為您用于 SSH 守護程序的端口。
- 運行以下命令重新啟動 SSH 守護程序,以便守護程序應用您設置的新配置:
sudo service sshd restart
- 通過運行以下命令驗證您的自定義 SSH 端口是否在服務器上打開:
netstat -plnt | grep ssh
如果您按照這些步驟操作,您應該會看到類似于以下輸出的內容:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
對操作系統進行更改后,在本地計算機上打開另一個終端窗口,并以您之前創建的用戶身份登錄服務器。請記住指定新更改的端口。保持原始連接處于活動狀態,以防您需要對配置進行故障排除。
要使用新配置連接到 SSH,您可能需要指定要使用的端口號和密鑰。例如:
ssh -p 2222 -i ~/.ssh/id_rsa {username}@{remotePublicIPAddress}
-p選項指定端口,選項-i指定用于連接的私鑰。
如果您從 Windows 桌面連接,當您在PuTTY中創建連接時,您可以指定端口號和私鑰。
簡單的入侵防御
大多數潛在的入侵者對同一個端口進行多次攻擊,試圖在該端口上運行的軟件中找到他們可以利用的東西。幸運的是,您可以在服務器上設置像?fail2ban這樣的入侵防御工具來阻止對端口的重復攻擊。
注意:托管操作服務器已fail2Ban安裝并默認配置為監視 SSH 登錄嘗試。如果您有任何問題或疑慮,請聯系您的支持團隊。
fail2ban監控日志并在短時間內發現來自同一主機的過多連接時自動阻止連接。要在您的服務器上設置和配置fail2ban?,請使用以下步驟:
- 要fail2ban在您的服務器上安裝,請運行以下命令之一。
RHEL 和 CentOS:
sudo yum install fail2ban
Debian 和 Ubuntu:
sudo apt-get install fail2ban
- 使用以下命令復制您的默認fail2ban配置。新創建的文件會覆蓋默認配置并允許您安全地修改文件。
sudo cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- 修改您的文件以在fail2ban.
vim /etc/fail2ban/jail.local
在此文件中,您可以設置以下選項:
- ignoreip:此參數允許您指定不應禁止的任何 IP 地址。
- bantime:此參數允許您指定禁止 IP 地址的秒數。
- findtime:此參數檢查maxretry指定時間內的觸發器指示。
- maxretry:此參數設置IP地址被禁止之前允許的重試次數。
- 為 SSH 登錄嘗試創建一個 jail 文件。
vim /etc/fail2ban/jail.d/sshd.local
- 在創建的文件中,復制并粘貼以下文本:
[sshd] enabled = true port = ssh #action = firewallcmd-ipset logpath = %(sshd_log)s maxretry = 3 bantime = 86400
這些選項會在 24 小時內通過 SSH 連接三次失敗后禁止 IP 地址。如果您知道您的本地 IP 地址,我們強烈建議您在上一節中添加此 IP 地址作為ignoreip參數。
- fail2ban使用以下命令在您的服務器上啟動和啟用:
RHEL 和 CentOS 7 或 Debian 和 Ubuntu:
sudo systemctl start fail2ban sudo systemctl enable fail2ban
RHEL 和 CentOS 6:
sudo service fail2ban start sudo chkconfig fail2ban on
入侵檢測
入侵檢測系統 (IDS) 可以幫助管理員監控系統中的可疑活動和可能的漏洞。IDS 比預防工具更強大,fail2ban但設置和維護起來可能更復雜。
一個流行的開源 IDS 是OSSEC。OSSEC 在多個系統上維護向主服務器報告的代理,即使該服務器已關閉,也允許調查來自潛在受損服務器的日志和警報。
如果您懷疑系統已經受到威脅,您可以通過檢查后門和入侵者?以及救援模式調查等程序進行調查。
使您的操作系統保持最新(修補)
使您的內核、包和依賴項保持最新非常重要,尤其是對于與安全相關的模塊和包。某些更新(例如內核更新)需要您重新啟動服務器。您應該將維護安排在對用戶影響最小的時間進行,因為這些維護會導致短暫的停機時間。
重要提示:雖然保持系統處于最新狀態至關重要,但請確保您應用的更新不會對您的生產環境產生負面影響。
要在 Ubuntu 操作系統和 Debian 上檢查并安裝更新,請運行以下命令:
sudo apt-get update sudo apt-get upgrade
要在 CentOS、Red Hat 和 Fedora 系統上檢查和安裝更新,請運行以下命令:
sudo yum update
操作系統報廢
了解您在服務器上運行的 Linux 發行版何時達到其生命周期結束 (EOL)。當一個版本達到其 EOL 時,發行版的維護者不再支持它或通過他們的官方存儲庫提供包更新。您應該在當前版本達到其 EOL 之前計劃好遷移到較新版本。
使用以下鏈接了解您的 Linux 發行版何時設置為 EOL:
- Ubuntu 操作系統:https ://wiki.ubuntu.com/Releases
- 紅帽企業 Linux (RHEL):https ://access.redhat.com/support/policy/updates/errata/
- CentOS:和紅帽一樣
- Fedora:https ://fedoraproject.org/wiki/End_of_life
- Debian:https ://wiki.debian.org/DebianReleases
賬戶級安全
盡管保護您的服務器是 Internet 操作的重要組成部分,但保護您的帳戶也是必要的。您的帳戶名、密碼和 API 密鑰是您與 Rackspace 云產品交互方式的重要組成部分。就像任何其他密碼或訪問憑據一樣,您希望確保它們的安全。但是,您還需要允許您的團隊采取行動并執行必要的任務。
通過使用?基于角色的訪問控制 (RBAC),您可以創建用戶并向負責使用各種 Rackspace 服務的個人或應用程序授予權限。通過利用 RBAC,您可以讓您的團隊和承包商僅訪問他們需要的實用程序,并在必要時撤銷訪問權限。
以下是一些使用場景:
- 允許承包商設置您雇用他們創建的環境,但限制他們查看或更改任何信用卡信息或刪除您的帳戶的能力。
- 允許您的會計師查看賬單,但不要刪除您的服務器。
- 聘請數據庫管理員 (DBA) 并授予 DBA 訪問您的 DBaaS 實例的權限。
- 允許客戶將文件直接上傳到您的 Cloud Files 帳戶。
- 配置您的服務器以注冊和使用與您的管理員帳戶分開的監控和備份代理的特定用戶。