返回文章列表

Linux 系統安全強化實踐

本文探討如何強化 Linux 系統安全性,涵蓋精簡系統安裝、限制服務存取、強化使用者帳戶管理、SSH 金鑰設定、以及應用 STIG 安全控制和安全工具如 Lynis、Portsentry 和 AIDE 等,提供多導向的系統安全強化策略。

系統管理 資安

在 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

內容解密:

  1. systemctl get-default 命令:用於檢查系統的預設啟動目標。如果輸出不是 multi-user.target,表示系統預設啟動圖形介面。
  2. systemctl set-default multi-user.target 命令:將系統的預設啟動目標設定為命令列介面,減少不必要的圖形介面服務,降低安全風險。
  3. rpm -qa | grep xorg | grep server 命令:查詢系統中已安裝的Xorg伺服器相關套件。這些套件與圖形介面相關,若不需要圖形介面,應予以移除。
  4. 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),而非所有網路介面。這樣可以減少外部攻擊者對該服務的存取機會。

內容解密:

  1. netstat -an 命令:用於顯示系統中所有活躍的網路連線。結合 grep LISTENgrep tcp/udp 可以篩選出正在監聽的TCP或UDP服務。
  2. Apache HTTP伺服器組態:透過修改 httpd.conf 檔案中的 Listen 指令,可以控制Apache監聽特定的IP位址和埠號,從而限制外部存取。

自動移除未使用的軟體

為了保持系統的精簡和安全,建議定期執行自動移除未使用的軟體套件:

$ sudo yum autoremove
$ sudo apt autoremove

這些命令將移除系統中不再需要的軟體套件及其依賴項,從而減少潛在的安全風險。

內容解密:

  1. yum autoremoveapt autoremove 命令:用於自動移除系統中不再需要的軟體套件及其依賴項,保持系統的乾淨和安全。

建立和保護使用者帳戶

使用者帳戶的管理是系統安全的重要組成部分。為了減少安全風險,應實施強密碼政策,並考慮使用SSH金鑰認證或多因素認證(MFA)來提高安全性。

設定強密碼政策

在根據Red Hat Enterprise Linux的系統上,可以透過編輯/etc/security/pwquality.conf檔案來設定強密碼政策:

# difok = 1
# minlen = 8
# dcredit = 0

這些引數控制密碼的複雜度要求,例如密碼最小長度和數字字元的要求。

內容解密:

  1. /etc/security/pwquality.conf 檔案:用於設定密碼品質要求,例如密碼長度和複雜度。
  2. difokminlendcredit 引數:分別控制新密碼與舊密碼的不同字元數、密碼最小長度、以及數字字元的積分獎勵。

強化系統安全:無密碼登入與金鑰檔案設定

在現代網路環境中,密碼安全是系統管理的一個重要環節。為了減少密碼被截獲的風險,使用金鑰檔案進行無密碼登入是一種有效的解決方案。本文將介紹如何設定金鑰檔案以實作系統之間的安全連線。

為何使用金鑰檔案?

透過金鑰檔案進行遠端登入比使用密碼更安全。金鑰檔案機制不傳遞任何加密或未加密的密碼,因此攻擊者無法捕捉可用的密碼資料,從而避免了暴力破解攻擊的風險。

建立金鑰檔案

建立金鑰檔案的過程涉及產生一對私鑰和公鑰。以下是建立金鑰檔案的步驟:

步驟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 服務以使更改生效。

內容解密:

  1. sudo grep -i pubkey /etc/ssh/sshd_config:使用 grep 命令搜尋 /etc/ssh/sshd_config 檔案中包含 “pubkey” 的行,-i 引數表示忽略大小寫。
  2. #PubkeyAuthentication yes:這行組態被註解掉,表明金鑰對驗證尚未啟用。
  3. 編輯 /etc/ssh/sshd_config 檔案並重啟 SSHD 服務,是為了使組態生效。

停用密碼驗證的風險與考量

接下來,您可能會考慮停用密碼驗證,以進一步提高安全性。您可以透過檢查 /etc/ssh/sshd_config 檔案中的 PasswordAuthentication 設定來實作這一點:

$ sudo grep -i password /etc/ssh/sshd_config
PasswordAuthentication yes

如果將 PasswordAuthentication 的值設為 no,則會禁止所有未設定金鑰對驗證的使用者進行遠端登入。這種做法雖然提高了安全性,但也可能給尚未設定金鑰對驗證的使用者帶來登入困擾。因此,這是一個需要在安全性和可用性之間進行權衡的決策。

內容解密:

  1. sudo grep -i password /etc/ssh/sshd_config:搜尋 /etc/ssh/sshd_config 檔案中包含 “password” 的行。
  2. PasswordAuthentication yes:表示允許使用密碼進行身份驗證。
  3. 將其更改為 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 中的各項及其對應的嚴重程度等級。實施這些可以顯著提高系統的安全性。

內容解密:

  1. STIG Guideline:表示安全技術實施。
  2. Severity Level:指引的嚴重程度等級,包括高、中、低三個級別。
  3. 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、防火牆規則、ipchainsiptables條目或丟棄路由來阻止惡意主機的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!!」。