在 Linux 伺服器環境中,系統安全與服務可用性需要取得平衡。本文介紹如何透過移除不必要的圖形介面、最小化系統安裝、限制服務監聽埠、自動移除未使用的軟體套件,以及實施強密碼策略和 SSH 金鑰驗證等方法,提升系統安全性。同時,文章也探討瞭如何使用 Lynis、Portsentry 和 AIDE 等安全工具進行系統稽核、埠掃描檢測和檔案完整性檢查,並參考 STIG 安全控制標準,強化系統的整體防禦能力。
加強系統安全性的關鍵實踐
在現代的伺服器管理中,安全性與可用性之間的平衡是一項重要的挑戰。過於嚴格的安全措施可能會影響系統的可用性,而過於寬鬆的安全設定則可能使系統暴露於風險之中。本篇文章將探討如何透過精簡系統安裝、限制服務和加強使用者帳戶管理來提升系統安全性。
檢查和移除圖形使用者介面(GUI)
許多伺服器系統預設安裝了圖形使用者介面(GUI),這雖然方便管理,但也增加了潛在的安全風險。攻擊者可以利用GUI中的漏洞來取得系統的存取許可權。因此,對於不需要圖形介面的伺服器,建議移除GUI以減少攻擊面。
首先,檢查系統是否預設啟動圖形介面:
$ systemctl get-default
multi-user.target
如果輸出結果不是multi-user.target,則執行以下命令來設定系統預設啟動到命令列介面:
$ sudo systemctl set-default multi-user.target
接著,檢查系統是否安裝了Xorg相關套件:
$ rpm -qa | grep xorg | grep server
如果輸出結果包含xorg-x11-server-utils等套件,則使用以下命令移除它們:
$ sudo yum remove xorg-x11-server-Xorg \
xorg-x11-server-common xorg-x11-server-utils
內容解密:
systemctl get-default命令:用於檢查系統的預設啟動目標。如果輸出不是multi-user.target,表示系統預設啟動圖形介面。systemctl set-default multi-user.target命令:將系統的預設啟動目標設定為命令列介面,減少不必要的圖形介面服務,降低安全風險。rpm -qa | grep xorg | grep server命令:查詢系統中已安裝的Xorg伺服器相關套件。這些套件與圖形介面相關,若不需要圖形介面,應予以移除。yum remove命令:用於移除指定的Xorg相關套件,以減少潛在的安全漏洞。
建立單一用途的系統
現代虛擬化和雲端運算技術允許企業為每個系統分配單一服務,例如Web伺服器或資料函式庫伺服器。這種做法可以降低單一系統被攻陷後帶來的風險。在安裝系統時,建議選擇最小化安裝或伺服器安裝模式,並根據需求逐步新增必要的服務。
監聽服務檢查
使用以下命令檢查系統中正在監聽的服務:
$ netstat -an | grep LISTEN | grep tcp
$ netstat -an | grep LISTEN | grep udp
這些命令將列出所有正在監聽的TCP和UDP服務。管理員應檢查這些服務是否為必要服務,以避免潛在的安全風險。
範例分析:Apache HTTP伺服器組態
以Apache HTTP伺服器為例,管理員可以透過修改/etc/httpd/conf/httpd.conf檔案來限制服務的存取範圍:
Listen 127.0.0.1:80
#Listen 80
上述組態將使Apache僅監聽本地地址(127.0.0.1),而非所有網路介面。這樣可以減少外部攻擊者對該服務的存取機會。
內容解密:
netstat -an命令:用於顯示系統中所有活躍的網路連線。結合grep LISTEN和grep tcp/udp可以篩選出正在監聽的TCP或UDP服務。- Apache HTTP伺服器組態:透過修改
httpd.conf檔案中的Listen指令,可以控制Apache監聽特定的IP位址和埠號,從而限制外部存取。
自動移除未使用的軟體
為了保持系統的精簡和安全,建議定期執行自動移除未使用的軟體套件:
$ sudo yum autoremove
$ sudo apt autoremove
這些命令將移除系統中不再需要的軟體套件及其依賴項,從而減少潛在的安全風險。
內容解密:
yum autoremove和apt autoremove命令:用於自動移除系統中不再需要的軟體套件及其依賴項,保持系統的乾淨和安全。
建立和保護使用者帳戶
使用者帳戶的管理是系統安全的重要組成部分。為了減少安全風險,應實施強密碼政策,並考慮使用SSH金鑰認證或多因素認證(MFA)來提高安全性。
設定強密碼政策
在根據Red Hat Enterprise Linux的系統上,可以透過編輯/etc/security/pwquality.conf檔案來設定強密碼政策:
# difok = 1
# minlen = 8
# dcredit = 0
這些引數控制密碼的複雜度要求,例如密碼最小長度和數字字元的要求。
內容解密:
/etc/security/pwquality.conf檔案:用於設定密碼品質要求,例如密碼長度和複雜度。difok、minlen、dcredit引數:分別控制新密碼與舊密碼的不同字元數、密碼最小長度、以及數字字元的積分獎勵。
強化系統安全:無密碼登入與金鑰檔案設定
在現代網路環境中,密碼安全是系統管理的一個重要環節。為了減少密碼被截獲的風險,使用金鑰檔案進行無密碼登入是一種有效的解決方案。本文將介紹如何設定金鑰檔案以實作系統之間的安全連線。
為何使用金鑰檔案?
透過金鑰檔案進行遠端登入比使用密碼更安全。金鑰檔案機制不傳遞任何加密或未加密的密碼,因此攻擊者無法捕捉可用的密碼資料,從而避免了暴力破解攻擊的風險。
建立金鑰檔案
建立金鑰檔案的過程涉及產生一對私鑰和公鑰。以下是建立金鑰檔案的步驟:
步驟1:產生金鑰對
在兩台Linux系統(例如server1和server2)上執行以下命令:
ssh-keygen -t ecdsa -b 521
此命令使用橢圓曲線數位簽章演算法(ECDSA)產生金鑰對,金鑰大小為521位元,提供最大程度的保護。
程式碼解析:
ssh-keygen:用於產生金鑰對的命令。-t ecdsa:指定使用ECDSA演算法。-b 521:指定金鑰大小為521位元。
內容解密:
此步驟會提示輸入儲存金鑰的檔案路徑和密碼。建議使用預設路徑,並可選擇設定密碼以增加安全性。
複製公鑰到遠端伺服器
使用以下命令將公鑰複製到遠端伺服器(server2):
ssh-copy-id server2
程式碼解析:
ssh-copy-id:用於將公鑰複製到遠端伺服器的命令。server2:遠端伺服器的主機名或IP位址。
內容解密:
此命令會將本地產生的公鑰追加到遠端伺服器的~/.ssh/authorized_keys檔案中,使得本地可以使用私鑰進行無密碼登入。
驗證無密碼登入
完成上述步驟後,嘗試從server1登入server2:
ssh server2
如果一切設定正確,您應該能夠無需輸入密碼即可登入server2。
安全性的提升
使用金鑰檔案進行無密碼登入不僅避免了密碼被截獲的風險,也減少了因密碼過於簡單而導致的安全問題。此外,對於需要頻繁在多台伺服器之間切換的管理員來說,這種方式大大提高了工作效率。
強化 SSHD 安全性與金鑰對驗證的設定
在確保系統安全性的過程中,強化 SSHD(SSH Daemon)的安全性是一個非常重要的步驟。預設情況下,許多系統允許使用者透過使用者名稱和密碼進行遠端登入,這雖然方便,但也帶來了安全風險。因此,設定金鑰對驗證並限制密碼驗證是一種常見且有效的安全措施。
檢查與啟用金鑰對驗證
首先,您需要檢查 SSHD 組態檔案中是否已經啟用了金鑰對驗證。您可以使用以下命令來檢查:
$ sudo grep -i pubkey /etc/ssh/sshd_config
#PubkeyAuthentication yes
如果輸出的結果是被註解掉的(前面有 # 符號),您需要編輯 /etc/ssh/sshd_config 檔案,取消該行的註解,並確保其值為 yes。完成後,重啟 SSHD 服務以使更改生效。
內容解密:
sudo grep -i pubkey /etc/ssh/sshd_config:使用grep命令搜尋/etc/ssh/sshd_config檔案中包含 “pubkey” 的行,-i引數表示忽略大小寫。#PubkeyAuthentication yes:這行組態被註解掉,表明金鑰對驗證尚未啟用。- 編輯
/etc/ssh/sshd_config檔案並重啟 SSHD 服務,是為了使組態生效。
停用密碼驗證的風險與考量
接下來,您可能會考慮停用密碼驗證,以進一步提高安全性。您可以透過檢查 /etc/ssh/sshd_config 檔案中的 PasswordAuthentication 設定來實作這一點:
$ sudo grep -i password /etc/ssh/sshd_config
PasswordAuthentication yes
如果將 PasswordAuthentication 的值設為 no,則會禁止所有未設定金鑰對驗證的使用者進行遠端登入。這種做法雖然提高了安全性,但也可能給尚未設定金鑰對驗證的使用者帶來登入困擾。因此,這是一個需要在安全性和可用性之間進行權衡的決策。
內容解密:
sudo grep -i password /etc/ssh/sshd_config:搜尋/etc/ssh/sshd_config檔案中包含 “password” 的行。PasswordAuthentication yes:表示允許使用密碼進行身份驗證。- 將其更改為
no將禁止密碼驗證,但需要事先為所有使用者設定金鑰對驗證,否則他們將無法登入。
推行進階安全措施
除了強化 SSHD 組態之外,還可以參考美國國家標準與技術研究所(NIST)800-53 檔案中的安全技術實施(STIG)來實施更進階的安全措施。STIG 提供了一套嚴格的安全組態,適用於需要處理敏感資料的系統。
STIG 的重要性
STIG 並不是萬無一失的安全解決方案,但它提供了一個強大的基準,用於設定新的系統或強化現有系統的安全性。尤其是對於涉及政府或國防專案的系統,遵循 STIG 是必不可少的。
圖示:Red Hat Enterprise Linux 8 STIG 的發現與嚴重程度等級
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Linux 系統安全強化實踐
package "安全架構" {
package "網路安全" {
component [防火牆] as firewall
component [WAF] as waf
component [DDoS 防護] as ddos
}
package "身份認證" {
component [OAuth 2.0] as oauth
component [JWT Token] as jwt
component [MFA] as mfa
}
package "資料安全" {
component [加密傳輸 TLS] as tls
component [資料加密] as encrypt
component [金鑰管理] as kms
}
package "監控審計" {
component [日誌收集] as log
component [威脅偵測] as threat
component [合規審計] as audit
}
}
firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成
@enduml
此圖示展示了 Red Hat Enterprise Linux 8 STIG 中的各項及其對應的嚴重程度等級。實施這些可以顯著提高系統的安全性。
內容解密:
- STIG Guideline:表示安全技術實施。
- Severity Level:指引的嚴重程度等級,包括高、中、低三個級別。
- Critical, Moderate, Low Vulnerabilities:根據嚴重程度劃分的漏洞類別。
強化系統安全:STIG 安全控制與工具應用
在企業和政府環境中,Linux 系統的安全性至關重要。美國國防資訊系統局(DISA)制定的安全技術實施(STIG)為 Linux 系統提供了一套嚴格的安全控制標準。本文將探討如何應用 STIG 安全控制以及使用相關的安全工具來增強系統安全性。
應用 STIG 安全控制
實施 STIG 安全控制是一項耗時的工作,但大多陣列態可以透過自動化來完成。某些 STIG 甚至提供了可下載的指令碼,以簡化合規流程。雖然圖 13-1 所示的 STIG 是針對 Red Hat Enterprise Linux 的,但這些標準適用於所有用於企業和政府辦公室的 Linux 發行版。Ubuntu 的 STIG 資訊可在 Ubuntu DISA 頁面上找到。
建立「金色」映像(Golden Image)是一個好方法,可以在映像中預先設定好安全控制。當新的或修訂的 STIG 發布時,通常只包含少數新的安全修復,可以透過指令碼或自動化工具輕鬆應用到系統中。每半年更新一次金色映像,可以確保新系統能夠輕鬆符合最新的安全控制要求。
實施 STIG 控制時,應首先處理 Category I(高嚴重性)控制。如果系統可能存在漏洞,應立即實施所有 Category I 安全控制。以 Red Hat Enterprise Linux 8 為例,目前只有 21 項這樣的控制,所需的努力相對較少。對於 Category II(中嚴重性)控制,由於數量較多(超過 300 項),建議使用稽核工具來協助實施。
安裝和使用安全工具
有多種商業和免費的安全工具可供選擇,以增強系統安全性。以下三種工具與 STIG 結合使用,可以大大提高系統的安全性。建議在將系統佈署到生產環境之前安裝並執行這些工具,以獲得基線評估報告。
Lynis
Lynis 是一款比 Security Content Automation Protocol(SCAP)和 STIG 工具更輕量級的漏洞檢查工具。雖然它不能取代那些工具,但它是一款優秀的安全稽核工具,可以檢查伺服器的系統和軟體組態。
安裝 Lynis
可以透過套件管理器安裝 Lynis,然後執行系統稽核:
$ sudo lynis audit system
稽核完成後,可以使用 grep 命令查詢建議的安全修復:
$ sudo grep Suggestion /var/log/lynis.log > lynis_fixes.txt
根據建議列表進行修復,並重新執行系統稽核,直到沒有更多的建議修復或達到可接受的程度。
Lynis 結果分析
Lynis 的建議列表可能相當長,以下是一些範例建議:
2022-10-31 13:35:53 Suggestion: Install Apache mod_evasive to guard webserver … DoS/brute force attempts [test:HTTP-6640] [details:-] [solution:-] 2022-10-31 13:35:53 Suggestion: Install Apache modsecurity to guard webserver … web application attacks [test:HTTP-6643] [details:-] [solution:-] 2022-10-31 13:35:54 Suggestion: Consider hardening SSH configuration [test:SSH… [details:AllowTcpForwarding (set YES to NO)] [solution:-]
程式碼解說:
$ sudo lynis audit system
此命令用於啟動 Lynis 對系統進行安全稽核。它會檢查系統組態和軟體設定,以找出潛在的安全問題。
$ sudo grep Suggestion /var/log/lynis.log > lynis_fixes.txt
此命令用於從 Lynis 的日誌檔案中提取建議的安全修復,並將結果輸出到 lynis_fixes.txt 檔案中,方便進一步分析和處理。
Lynis 結果解讀與處理
根據 Lynis 的建議,可以對系統組態進行調整。例如,加強 SSH 組態、安裝額外的安全模組(如 Apache mod_evasive 和 modsecurity)等。對於某些建議,可能需要根據實際情況進行評估,以決定是否採納。
進階安全措施的實施
使用Lynis進行系統安全稽核
Lynis是一款強大的安全工具,能夠掃描系統並找出潛在的安全問題。它能夠檢查作業系統、已安裝的軟體包、網路設定等,並提供詳細的報告和建議。系統管理員可以利用Lynis來識別和修復安全漏洞,從而提高系統的安全性。
Lynis的主要功能
- 掃描系統以找出安全漏洞
- 檢查已安裝的軟體包和網路設定
- 提供詳細的報告和建議
使用Lynis的最佳實踐
有些系統管理員會建立「黃金」映像檔,將透過Lynis掃描的系統製作成映像檔,以便佈署一個乾淨的系統。當然,Lynis應該定期執行,以保持系統的安全狀態。設定一個定期的cron任務是一個很好的解決方案,可以產生定期的報告。
使用Portsentry檢測和阻止埠掃描
Portsentry是一款能夠檢測網路埠掃描並阻止惡意主機的工具。它能夠在記憶體中執行,並透過/etc/hosts.deny、防火牆規則、ipchains和iptables條目或丟棄路由來阻止惡意主機的IP位址。
Portsentry的組態
在/etc/portsentry/portsentry.conf中定義了「啟用」的埠。你可以根據需要新增自定義的埠或刪除埠號。在Ubuntu中,預設的埠列表如下:
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773,32774,40421,49724,54320"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321"
Portsentry的預設動作
預設的動作是將路由迴路到掃描主機:
KILL_ROUTE="/sbin/route add -host $TARGET$ reject"
同時,也可以使用/etc/hosts.deny條目來阻止惡意主機:
KILL_HOSTS_DENY="ALL: $TARGET$ : DENY"
這樣可以確保路由到主機被阻止,並且IP位址被阻止在/etc/hosts.deny中。
使用AIDE進行入侵檢測
Advanced Intrusion and Detection Environment(AIDE)是一款用於檢查檔案完整性的入侵檢測系統。你可以從儲存函式庫中安裝AIDE:
$ sudo dnf install aide
初始化AIDE資料函式庫
在使用AIDE之前,你需要初始化其資料函式庫:
$ sudo aide --init
這個過程需要幾分鐘才能完成。
檢查系統完整性
初始化資料函式庫後,你可以使用以下命令檢查系統完整性:
$ sudo aide --check
如果系統沒有任何變更,AIDE將報告「AIDE found NO differences between database and filesystem. Looks okay!!」。