現代 Linux 系統安全需要多層次防禦策略,從網路周邊到系統核心都需要強化。本文除了介紹多層次防禦架構,也提供 ClamAV 惡意軟體掃描工具的安裝與使用教學,並說明如何加固系統設定、管理使用者帳戶和密碼、分割資料、移除不必要的軟體以及監控系統連線。文章也涵蓋日誌管理、ICMP 和廣播請求的封鎖、弱點掃描工具 Lynis 的使用,以及系統時間同步、DNS 設定和防火牆管理等重要安全措施,最後探討 iptables 防火牆的設定與進階操作,包含規則建立、連線狀態管理、規則儲存與還原,以及如何使用 UFW 簡化 iptables 管理。

資訊安全防護深度解析:從多層次防禦到系統強化

資訊安全是現代IT架構中不可或缺的一環,需要從多個層次進行全面防護。本文將探討如何建立多層次的安全防禦體系,並介紹多種強化系統安全的方法。

多層次安全防禦架構

以下是一個用Plantuml圖表呈現的多層次安全防禦架構:

@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

此圖示展示了從外部網路到系統備份的多層次防禦架構,每一層都需要特定的安全措施來保護。

內容解密:

  1. Public Network(Layer 0):最外層的公共網路(網際網路)是安全防護的第一道關卡。
  2. Perimeter(Layer 1):周界防護需要監控路由器和防火牆的狀態。
  3. Infrastructure(Layer 2):基礎設施層包括硬體、虛擬機器管理程式等,需要定期更新和維護。
  4. Operating System(Layer 3):作業系統層需要定期打補丁以修復漏洞。
  5. Network/Firewall(Layer 4):網路和防火牆組態需要嚴格控制不必要的連線埠並加密通訊。
  6. Filesystem(Layer 5):檔案系統需要設定適當的許可權和加密措施。
  7. User Security(Layer 6):使用者安全需要強制使用強密碼並定期更換。
  8. Applications/Services(Layer 7):應用程式和服務需要定期更新和打補丁。
  9. System Backups(Layer 8):系統備份是最後一道防線,需要定期測試和驗證備份的完整性。

惡意軟體防護

即使是Linux系統也可能受到惡意軟體的威脅。ClamAV是一款流行的反惡意軟體掃描工具,可以用來掃描系統中的惡意程式碼。

安裝ClamAV

# 在Debian-based系統上安裝
sudo apt-get install clamav

# 在Red Hat-based系統上安裝
sudo yum install epel-release
sudo yum install clamav

更新病毒碼並掃描系統

# 更新病毒碼
sudo freshclam

# 掃描整個系統
sudo clamscan -r --bell -i /

內容解密:

  1. sudo freshclam:更新ClamAV的病毒碼資料函式庫,以確保掃描工具能夠識別最新的惡意軟體。
  2. sudo clamscan -r --bell -i /:對根目錄進行遞迴掃描,並在發現惡意檔案時發出警示。

物理安全與系統加固

生產系統應放置在安全的環境中,具備實體存取控制、備用電源和冷卻系統。如果攻擊者能夠實體接觸到裝置,他們可以繞過大多數系統安全功能。

加固系統的建議措施

  1. 鎖定韌體(BIOS/UEFI),禁止從光碟或外部裝置啟動,並設定韌體密碼。
  2. 啟用GRUB密碼保護,限制對本地檔案系統的存取。
  3. 加密本地檔案系統、資料函式庫中的資料等敏感資訊。
  4. 避免使用預設的管理員帳戶名稱,並使用強密碼,定期更換。

資料分割與系統資源管理

建立多個分割區來儲存資料,可以防止資料損壞和某些型別的系統資源耗盡攻擊。

分割區規劃建議

  1. 將swap區域和日誌檔案放在獨立的分割區上,以防止攻擊者填滿這些區域導致系統關閉或故障。
  2. 將第三方應用程式安裝在/opt目錄下的獨立檔案系統和分割區中。

移除未使用的軟體

移除或停用未使用的應用程式、服務或套件,可以減少攻擊者可利用的目標,從而保護系統。

相關指令

# 列出所有可用的套件
sudo apt-cache pkgnames

# 查詢套件的詳細資訊
sudo apt-cache show package_name

# 解除安裝套件(保留組態檔)
sudo apt-get remove package_name

# 完全解除安裝套件(刪除組態檔)
sudo apt-get purge package_name

內容解密:

  1. sudo apt-cache pkgnames:列出系統中所有可用的套件名稱。
  2. sudo apt-get remove:解除安裝指定的套件,但保留其組態檔,以便未來重新安裝時使用。
  3. sudo apt-get purge:完全解除安裝套件,並刪除其組態檔。

連線監控與使用者帳戶限制

監控系統連線可以幫助識別異常活動。限制使用者帳戶的許可權和密碼強度,也可以增強系統的安全性。

相關指令與設定

  1. 使用netstat -tulpnss -t -a命令監控系統連線。
  2. 使用passwd -l user_name鎖定使用者帳戶,使用passwd -u user_name解鎖帳戶。
  3. 編輯/etc/pam.d/system-auth檔案,新增強密碼強制執行的規則,例如:
    /lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
    
    這將強制使用者使用包含大小寫字母、數字和其他字元的強密碼。

加強 Linux 系統安全性的方法

在現代網路環境中,Linux 系統的安全性至關重要。本文將介紹多種加強 Linux 系統安全性的方法,包括密碼管理、服務組態、系統更新和監控等方面。

密碼管理與帳戶監控

顯示使用者密碼過期資訊

要顯示使用者的密碼過期資訊,可以使用 chage 命令。該命令可以顯示密碼過期的詳細資訊,以及上次更改密碼的日期。

chage -l username

修改密碼老化選項

要修改使用者的密碼老化選項,可以使用以下命令:

sudo chage -M 90 user_name

或者

chage -M 90 -m 7 -W 5 user_name

檢查空密碼帳戶

要檢查是否有帳戶使用空密碼,可以使用以下命令:

sudo cat /etc/shadow | awk -F: '($2==""){print $1}'

服務組態與安全管理

停用 X-Windows

在生產機器上執行 X-Windows 會增加系統的負擔和安全風險。因此,建議停用 X-Windows。

要停用 GDM(GNOME Display Manager),可以執行以下命令:

sudo update-rc.d -f gdm remove

鎖定 SSH 組態

要鎖定 SSH 組態,需要編輯 /etc/ssh/sshd_config 檔案,並進行以下修改:

  • 停用 root 登入:PermitRootLogin no
  • 只允許特定使用者:AllowUsers user_name
  • 只使用 SSH 版本 2 協定:Protocol 2

修改完成後,重啟 SSH 服務:

/etc/init.d/sshd restart

停用 Ctrl+Alt+Delete

在大多數 Linux 發行版中,按下 Ctrl+Alt+Delete 鍵會導致系統重新啟動。要停用此功能,可以根據不同的發行版執行不同的命令。

對於 Red Hat 系統,編輯 /etc/inittab 檔案,並註解掉以下行:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

對於 Debian 系統,執行以下命令:

sudo systemctl mask Ctrl+alt-del.target
sudo systemctl daemon-reload

系統更新與維護

保持系統更新

保持系統和應用程式更新是至關重要的。根據不同的發行版,可以使用不同的命令進行更新。

對於 Debian 系統:

sudo apt-get update; apt-get upgrade

對於 Red Hat 系統:

sudo yum updates; yum check-update

加強 CRON 工作管理

要鎖定 CRON 工作的存取許可權,可以使用 /etc/cron.allow/etc/cron.deny 檔案。

要禁止使用者使用 CRON 服務,可以將使用者名稱新增到 /etc/cron.deny 檔案中。

sudo echo ALL >> /etc/cron.deny

其他安全措施

封鎖 USB 儲存裝置

要封鎖 USB 儲存裝置,需要解除安裝 usb_storageuas 模組。

sudo modprobe -r usb_storage
sudo modprobe -r uas

然後,將 usb-storage.ko.xz 模組重新命名為 usb-storage.ko.xz.block

cd /lib/modules/`uname -r`/kernel/drivers/usb/storage/
sudo mv usb-storage.ko.xz usb-storage.ko.xz.block

啟用 SELinux

SELinux(Security-Enhanced Linux)是一種強制存取控制安全機制。要檢查 SELinux 是否已啟用,可以使用以下命令:

sudo sestatus

或者

getenforce

要啟用 SELinux,可以執行以下命令:

sudo setenforce enforcing

監控使用者活動

要監控使用者活動,可以使用 psacct(適用於 Red Hat 系統)或 acct(適用於 Debian 系統)工具。

對於 Red Hat 系統:

sudo yum install psacct

對於 Debian 系統:

sudo apt-get install acct

監控日誌檔案與系統安全強化

保護系統日誌對於故障排除、檢測入侵行為及分析攻擊路徑至關重要。防止攻擊者輕易刪除或修改本地日誌是系統管理員的首要任務。

重要日誌檔案及其用途

Linux 系統中的預設日誌檔案名稱及用途如下:

  • /var/log/auth.log:認證日誌,用於記錄系統的登入嘗試和認證事件。
  • /var/log/boot.log:系統啟動日誌,包含系統啟動過程中的事件記錄。
  • /var/log/cron.log:Crond 日誌,用於記錄 cron 任務執行的情況。
  • /var/log/kern.log:核心日誌,包含系統核心產生的事件和錯誤訊息。
  • /var/log/message:系統日誌,記錄目前系統的活動狀態。
  • /var/log/mysqld.log:MySQL 資料函式庫伺服器日誌檔案,記錄資料函式庫相關的操作和錯誤。
  • /var/log/secure:認證日誌,用於記錄與安全相關的認證事件。
  • /var/log/utmp/var/log/wtmp:登入日誌檔案,用於記錄系統登入和登出事件。
  • /var/log/yum.log:Yum 日誌檔案,記錄使用 Yum 安裝或更新軟體包的歷史。

內容解密:

這些日誌檔案對於監控系統狀態、檢測潛在的安全威脅及故障排除至關重要。不同 Linux 發行版和應用程式可能會使用不同的日誌檔案,因此瞭解所使用的系統中有哪些日誌檔案可用是很有必要的。

忽略 ICMP 或廣播請求

攻擊者可以利用 ICMP 或廣播請求快速檢測系統是否存在以及是否已進行適當的安全強化。透過組態系統忽略這些請求,可以提高安全性。

設定方法:

  1. 忽略 ping 請求:
    sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
    
  2. 忽略廣播請求:
    sudo sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
    

執行上述命令後,系統會修改 /etc/sysctl.conf 檔案。要使設定生效,請執行:

sudo sysctl -p

若要重新啟用這些功能,可執行:

sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0
sudo sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0

內容解密:

忽略 ICMP 或廣播請求可以減少系統被偵測到的風險,是一種基本的安全防護措施。

弱點掃描

使用安全稽核工具(如 lynis)可以檢查系統中的弱點,協助進行合規性測試(例如 HIPAA/ISO27001/PCI DSS)及系統強化。

Lynis 系統掃描:

  1. 安裝 lynis(若尚未安裝):
    sudo apt-get install lynis
    
  2. 執行掃描:
    lynis audit system
    

內容解密:

Lynis 是一款強大的安全稽核工具,可以幫助識別系統中的安全問題並提供改進建議。

其他安全強化建議

系統時間同步

確保系統時間準確對於現代加密技術和其他系統功能(如日誌記錄、檔案管理等)至關重要。Systemd 提供了 systemd-timesyncd.service 使用者端,用於查詢遠端時間伺服器並調整系統時間。

設定方法:

編輯 /etc/systemd/timesyncd.conf 檔案以組態時間伺服器。

DNS 設定

使用可靠的 DNS 服務對於網路安全至關重要。建議使用 Google Public DNS(8.8.8.8 和 8.8.4.4)或 Cloudflare DNS(1.1.1.1 和 1.0.0.1)。

防火牆管理

Linux 系統內建的防火牆工具(如 iptables)用於控制網路流量。瞭解如何使用 iptables 可以幫助您更好地管理系統的安全。

iptables 基本概念:
  • 鏈(Chains):input、forward 和 output,分別控制輸入、轉發和輸出的網路流量。
  • 規則匹配:iptables 會根據設定的規則對網路封包進行匹配,以決定是否允許或拒絕。
基本操作:
  1. 檢查 iptables 是否已安裝:
    sudo iptables -L -v
    
  2. 若未安裝,可執行以下命令進行安裝(以 Debian/Ubuntu 為例):
    sudo apt-get install iptables
    

內容解密:

iptables 是 Linux 系統中一個強大的防火牆工具,透過組態規則可以有效地控制網路流量,提高系統安全性。學習使用 iptables 命令列工具對於管理 Linux 防火牆至關重要。

IPTABLES 防火牆管理與進階操作

IPTABLES 基本原理與規則處理

IPTABLES 是 Linux 系統中用於管理網路連線的重要工具,主要用於控制輸入、輸出及轉發的網路流量。其運作原理是透過一系列的規則來決定是否允許或拒絕特定的網路連線。IPTABLES 包含三個主要的鏈(chain):INPUT、OUTPUT 和 FORWARD,分別控制輸入、輸出和轉發的網路流量。

IPTABLES 規則處理流程

  1. 規則匹配:IPTABLES 會從鏈的頂部開始,逐一檢查每條規則,直到找到匹配的規則。
  2. 規則執行:當找到匹配的規則時,IPTABLES 會執行對應的動作,如 ACCEPT、DROP 或 REJECT。

IPTABLES 基本操作

1. 封鎖特定 IP 地址的連線

sudo iptables -A INPUT -s 192.168.0.100 -j DROP

內容解密:

此命令將封鎖來自 192.168.0.100 的所有輸入連線。

  • -A INPUT 表示將規則附加到 INPUT 鏈。
  • -s 192.168.0.100 指定來源 IP 地址為 192.168.0.100
  • -j DROP 表示丟棄匹配該規則的封包。

2. 封鎖特定 IP 範圍的連線

sudo iptables -A INPUT -s 192.168.0.0/24 -j DROP

內容解密:

此命令將封鎖來自 192.168.0.0/24 網段的所有輸入連線。

  • -s 192.168.0.0/24 使用 CIDR 表示法指定來源 IP 範圍。

3. 封鎖特定協定或埠號的連線

sudo iptables -A INPUT -p tcp --dport ssh -s 192.168.0.100 -j DROP

內容解密:

此命令將封鎖來自 192.168.0.100 的 SSH 連線。

  • -p tcp 指定協定為 TCP。
  • --dport ssh 指定目標埠號為 SSH(預設為 22)。

IPTABLES 狀態管理與連線狀態

IPTABLES 可以透過 conntrack 模組來管理連線狀態,從而實作更靈活的防火牆規則。例如,允許已建立的連線進行雙向通訊:

sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

內容解密:

這些命令允許從本地系統發起 SSH 連線,並允許遠端伺服器回應。

  • --ctstate NEW,ESTABLISHED 指定允許新建和已建立的連線。
  • --ctstate ESTABLISHED 指定只允許已建立的連線。

儲存與還原 IPTABLES 規則

修改 IPTABLES 規則後,需要儲存更改以使其在重啟後仍然有效:

sudo /sbin/iptables-save

內容解密:

此命令將當前的 IPTABLES 規則儲存到預設位置。

  • 不同發行版可能有不同的儲存方式。

使用 UFW 簡化 IPTABLES 管理

UFW(Uncomplicated Firewall)是 Ubuntu 系統中的一個前端工具,用於簡化 IPTABLES 的管理:

sudo ufw status
sudo ufw enable
sudo ufw allow 22/tcp

內容解密:

這些命令分別用於檢查 UFW 狀態、啟用 UFW 和允許 TCP 的 22 埠號。

IPTABLES 進階操作

1. 匯出與匯入防火牆規則

sudo iptables-save > ip_tables_v4.rules
sudo iptables-restore < ip_tables_v4.rules

內容解密:

這些命令分別用於匯出和匯入 IPTABLES 規則,方便備份和在不同系統間遷移規則。

2. 封鎖無效 TCP 封包

sudo iptables -A INPUT -p tcp -m tcp --tcp-flags ALL FIN,PSH,URG -j DROP

內容解密:

此命令用於封鎖包含特定旗標的 TCP 封包,防止 Christmas tree 攻擊。

  • --tcp-flags ALL FIN,PSH,URG 指定檢查所有旗標,並丟棄匹配特定旗標組合的封包。