返回文章列表

Linux 系統網路安全強化

本文提供 Linux 系統網路安全強化,涵蓋 TCP SYN Cookies 保護、IPv6 路由器廣告設定、停用非必要網路協定 (DCCP、SCTP、RDS、TIPC) 等核心引數調整,並說明如何使用 UFW 和 nftables 組態防火牆規則,提升系統安全性。

系統管理 資安

在 Linux 環境中,強化網路安全設定至關重要。本文將探討如何透過調整核心引數、停用不必要的網路協定以及設定防火牆規則,有效提升系統的安全性,抵禦潛在的網路攻擊和漏洞利用。文章將涵蓋 TCP SYN Cookies 的啟用、禁止接受 IPv6 路由器廣告、停用 DCCP、SCTP、RDS 和 TIPC 等罕見網路協定,並探討 UFW 和 nftables 防火牆的設定與最佳實務。這些設定調整能有效減少系統攻擊面,降低遭受 SYN Flood 等拒絕服務攻擊的風險,並確保網路流量的安全性。

加強 Linux 系統網路安全性的設定

3.3.8 啟用 TCP SYN Cookies 保護

設定說明

當系統啟用 tcp_syncookies 後,核心會正常處理 TCP SYN 封包,直到半開連線佇列滿載時,SYN Cookie 功能才會啟動。SYN Cookies 的運作原理是不使用 SYN 佇列,而是直接回應 SYN 封包一個包含特別設計的 TCP 序號的 SYN|ACK 封包,該序號編碼了來源和目的地的 IP 位址、埠號以及封包傳送時間。合法的連線會在三次握手過程中傳送包含該特別序號的 ACK 封包,使系統能夠驗證該回應的有效性並允許連線。

安全理由

攻擊者利用 SYN Flood 攻擊進行拒絕服務攻擊,傳送大量 SYN 封包而不完成三次握手,迅速佔滿核心的半開連線佇列,阻止合法連線。啟用 SYN Cookies 可讓系統在遭受拒絕服務攻擊時仍能接受合法連線。

稽核方法

執行以下指令並確認輸出結果符合預期:

sysctl net.ipv4.tcp_syncookies
grep "net\.ipv4\.tcp_syncookies" /etc/sysctl.conf /etc/sysctl.d/*

修復建議

  1. 編輯 /etc/sysctl.conf/etc/sysctl.d/ 目錄下的檔案,加入以下設定:

net.ipv4.tcp_syncookies = 1

2. 執行以下指令以套用核心引數變更:
   ```bash
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.route.flush=1

3.3.9 禁止接受 IPv6 路由器廣告

設定說明

此設定禁止系統接受 IPv6 路由器廣告。

安全理由

建議系統不要接受路由器廣告,以避免被誘導將流量導向受損的主機。在系統中設定固定的路由(通常是單一預設路由指向可信任的路由器)可保護系統免受錯誤路由的影響。

稽核方法

如果 IPv6 已啟用:

sysctl net.ipv6.conf.all.accept_ra
sysctl net.ipv6.conf.default.accept_ra
grep "net\.ipv6\.conf\.all\.accept_ra" /etc/sysctl.conf /etc/sysctl.d/*
grep "net\.ipv6\.conf\.default\.accept_ra" /etc/sysctl.conf /etc/sysctl.d/*

或者驗證 IPv6 是否已停用:

grep "^\s*linux" /boot/grub/grub.cfg | grep -v "ipv6.disable=1"

修復建議

如果 IPv6 已啟用:

  1. 編輯 /etc/sysctl.conf/etc/sysctl.d/ 目錄下的檔案,加入以下設定:

net.ipv6.conf.all.accept_ra = 0 net.ipv6.conf.default.accept_ra = 0

2. 執行以下指令以套用核心引數變更:
   ```bash
sysctl -w net.ipv6.conf.all.accept_ra=0
sysctl -w net.ipv6.conf.default.accept_ra=0
sysctl -w net.ipv6.route.flush=1

3.5 罕見網路協定的處理

Linux 核心模組支援多種不常用的網路協定。如果這些協定不是必要的,建議在核心中停用它們。

3.5.1 停用 DCCP

設定說明

DCCP(資料報擁塞控制協定)是一種傳輸層協定,支援串流媒體和語音通訊。DCCP 提供了一種方式來存取擁塞控制,而無需在應用層實作,但不保證資料包的順序傳遞。

安全理由

如果不需要該協定,建議不安裝相關驅動程式,以減少潛在的攻擊面。

稽核方法

執行以下指令並確認輸出結果符合預期:

modprobe -n -v dccp
lsmod | grep dccp

修復建議

  1. 編輯或建立 /etc/modprobe.d/ 目錄下的 .conf 檔案,例如:vi /etc/modprobe.d/dccp.conf
  2. 新增以下設定:

install dccp /bin/true


### 3.5.2 停用 SCTP

#### 設定說明
SCTP(串流控制傳輸協定)是一種傳輸層協定,用於支援訊息導向的通訊,並在一個連線中提供多個訊息串流。它兼具 TCP 和 UDP 的特性,像 UDP 一樣是訊息導向的,同時像 TCP 一樣保證訊息的可靠性和順序傳遞,並具備擁塞控制功能。

#### 安全理由
如果未使用該協定,建議不要載入相關核心模組,以減少潛在的攻擊面。

#### 稽核方法
執行以下指令並確認輸出結果符合預期:
```bash
modprobe -n -v sctp | grep -E '(sctp|install)'
lsmod | grep sctp

修復建議

  1. 編輯或建立 /etc/modprobe.d/ 目錄下的 .conf 檔案,例如:vi /etc/modprobe.d/sctp.conf
  2. 新增以下設定:

install sctp /bin/true


### CIS 控制措施(版本 7)
- **5.1 建立安全組態**:維護已授權作業系統和軟體的標準安全組態標準。
- **9.2 確保只執行已核准的埠、協定和服務**:確保系統上執行的網路埠、協定和服務均具有已驗證的業務需求。

## 加強 Linux 系統安全:停用不必要的網路協定與防火牆組態

在維護 Linux 系統的安全性時,關閉不必要的網路協定和正確組態防火牆是非常重要的步驟。本文將討論如何停用不必要的網路協定,如 RDS 和 TIPC,並介紹如何使用 Uncomplicated Firewall(UFW)來組態防火牆。

### 停用不必要的網路協定

#### 3.5.3 停用 RDS 協定

Reliable Datagram Sockets(RDS)是一種為叢集節點之間提供低延遲、高頻寬通訊的傳輸層協定。如果系統中未使用 RDS 協定,建議停用該服務以減少潛在的攻擊面。

**稽核步驟:**
1. 執行命令 `modprobe -n -v rds`,確認輸出為 `install /bin/true`。
2. 執行命令 `lsmod | grep rds`,確認無輸出。

**修復步驟:**
1. 編輯或建立 `/etc/modprobe.d/rds.conf` 檔案。
2. 新增行 `install rds /bin/true`。

#### 3.5.4 停用 TIPC 協定

Transparent Inter-Process Communication(TIPC)協定設計用於提供叢集節點之間的通訊。如果未使用 TIPC,建議停用該服務以減少攻擊面。

**稽核步驟:**
1. 執行命令 `modprobe -n -v tipc | grep -E '(tipc|install)'`,確認輸出為 `install /bin/true`。
2. 執行命令 `lsmod | grep tipc`,確認無輸出。

**修復步驟:**
1. 編輯或建立 `/etc/modprobe.d/tipc.conf` 檔案。
2. 新增行 `install tipc /bin/true`。

### 防火牆組態

Linux 核心支援多種防火牆機制,包括 Netfilter 和 nftables。正確組態防火牆對於保護系統安全至關重要。

#### 3.6.1 組態 Uncomplicated Firewall(UFW)

UFW 是一個易於使用的防火牆管理工具,它作為 iptables 的前端,為 netfilter 防火牆提供了一種簡單的組態方法。

**安裝 UFW:**
執行命令 `apt install ufw` 安裝 UFW。

**稽核步驟:**
執行命令 `dpkg -s ufw | grep 'Status: install'`,確認輸出為 `Status: install ok installed`。

UFW 提供了一個簡單的命令列介面,用於管理防火牆規則。規則按照順序處理,第一個匹配的規則將被應用。因此,應該將允許規則放在拒絕規則之前。

### 重點整理

1. **停用不必要的網路協定**:對於未使用的協定,如 RDS 和 TIPC,應透過停用其核心模組來減少系統的攻擊面。
2. **正確組態防火牆**:選擇適合的防火牆工具(如 UFW、nftables 或 iptables),並根據安全需求組態規則。確保只使用一種防火牆組態方法,以避免衝突。
3. **加強系統安全**:透過上述措施,可以顯著提高 Linux 系統的安全性,防止未經授權的存取和惡意攻擊。

## 加強 Ubuntu 系統安全:UFW 防火牆組態

在現代網路環境中,系統安全是維護伺服器和工作站穩定執行的關鍵因素之一。Ubuntu 作為廣泛使用的 Linux 發行版,其內建的 Uncomplicated Firewall(UFW)提供了一個簡便的防火牆管理工具,用於保護系統免受未授權的存取和攻擊。本文將詳細介紹如何組態 UFW 以增強 Ubuntu 系統的安全性,涵蓋從安裝到高階組態的完整流程。

### 為什麼使用 UFW?

UFW 是 Ubuntu 預設的防火牆管理工具,提供了一個簡潔易用的介面來管理 iptables。透過 UFW,管理員可以輕鬆地設定防火牆規則,從而保護系統免受潛在的安全威脅。

### 移除不必要的防火牆工具

在組態 UFW 之前,確保系統中沒有安裝其他可能與 UFW 衝突的防火牆工具,例如 `iptables-persistent`。執行以下命令檢查是否安裝了 `iptables-persistent`:
```bash
dpkg-query -s iptables-persistent

如果已安裝,使用以下命令移除:

apt purge iptables-persistent

內容解密:

  1. dpkg-query -s iptables-persistent:查詢 iptables-persistent 的安裝狀態。
  2. apt purge iptables-persistent:完全移除 iptables-persistent 軟體包,避免與 UFW 發生衝突。

啟用 UFW 服務

確保 UFW 服務已啟用並正在執行。執行以下命令檢查 UFW 狀態:

systemctl is-enabled ufw
ufw status | grep Status

輸出應顯示 enabledStatus: active。如果未啟用,執行以下命令啟用 UFW:

ufw enable

內容解密:

  1. systemctl is-enabled ufw:檢查 UFW 服務是否已啟用。
  2. ufw status | grep Status:檢查 UFW 是否正在執行。
  3. ufw enable:啟用 UFW 防火牆服務。

組態 Loopback 流量

正確組態 Loopback 介面對於系統的正常運作至關重要。執行以下命令以允許 Loopback 流量並拒絕來自外部的 Loopback 地址流量:

ufw allow in on lo
ufw allow out on lo
ufw deny in from 127.0.0.0/8
ufw deny in from ::1

內容解密:

  1. ufw allow in on lo:允許所有來自 Loopback 介面的輸入流量。
  2. ufw allow out on lo:允許所有透過 Loopback 介面的輸出流量。
  3. ufw deny in from 127.0.0.0/8ufw deny in from ::1:拒絕所有來自 IPv4 和 IPv6 Loopback 地址的外部輸入流量,防止 IP 欺騙攻擊。

組態出站連線

根據組織的安全策略組態出站連線規則。執行以下命令檢查現有的出站規則:

ufw status numbered

若要允許所有出站連線,執行:

ufw allow out on all

內容解密:

  1. ufw status numbered:列出所有防火牆規則及其編號。
  2. ufw allow out on all:允許所有介面上的出站連線。

確保開放埠的安全

對於所有開放的非 Loopback 埠,必須組態相應的防火牆規則以允許必要的流量。執行以下命令檢查當前開放的埠和對應的規則:

ufw status

根據需要調整規則,例如允許特定埠的流量:

ufw allow proto tcp from any to any port 22

內容解密:

  1. ufw status:顯示當前防火牆狀態和規則。
  2. ufw allow proto tcp from any to any port 22:允許任何來源對本機 TCP 埠 22 的存取,通常用於 SSH 連線。

網路安全設定與防火牆組態最佳實踐

在現代網路環境中,適當的防火牆組態對於系統安全至關重要。本文將探討如何透過正確設定防火牆規則來提升系統安全性。

防火牆稽核與設定

首先,我們需要稽核目前系統的網路連線埠狀態及防火牆規則。在 Linux 系統中,可以使用 ss 命令來檢查開放的連線埠:

# ss -4tuln

內容解密:

此命令用於顯示所有監聽中的 TCP 和 UDP 連線埠。其中:

  • -4 表示僅顯示 IPv4 連線
  • t 表示顯示 TCP 連線
  • u 表示顯示 UDP 連線
  • l 表示僅顯示監聽中的連線埠
  • n 表示以數字形式顯示連線埠號碼,而不是服務名稱

接下來,檢查目前的防火牆規則狀態:

# ufw status

內容解密:

ufw(Uncomplicated Firewall)是一個簡化 iptables 組態的工具。此命令用於顯示目前防火牆的狀態和規則列表。其中:

  • status 引數用於顯示目前防火牆的狀態(是否啟用)及所有規則

確保預設拒絕所有連入連線

一個安全的防火牆組態應該預設拒絕所有未明確允許的連入連線。可以使用以下命令檢查和設定預設策略:

# ufw status verbose

內容解密:

此命令用於顯示詳細的防火牆狀態資訊,包括預設策略(允許或拒絕)。如果預設策略不是拒絕所有連入連線,則需要調整:

# ufw default deny incoming
# ufw default deny outgoing
# ufw default deny routed

內容解密:

這些命令分別將預設策略設定為拒絕所有連入、連出和路由轉發的連線。這樣可以確保只有明確允許的連線才會被接受。

使用 nftables 組態防火牆

對於需要更複雜防火牆規則的情況,可以使用 nftables。以下是一個基本的 nftables 組態範例:

#!/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        iif "lo" accept
        ip saddr 127.0.0.0/8 counter packets 0 bytes 0 drop
        ip6 saddr ::1 counter packets 0 bytes 0 drop
        ip protocol tcp ct state established accept
        tcp dport ssh accept
        icmp type { destination-unreachable, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy drop;
        ip protocol tcp ct state established,related,new accept
    }
}

內容解密:

此指令碼首先清除現有的 nftables 規則集,然後建立一個新的規則集。其中:

  • table inet filter 定義了一個名為 filter 的 IPv4/IPv6 混合表
  • chain input 定義了處理連入封包的規則鏈,預設策略是丟棄所有封包(policy drop
  • iif "lo" accept 允許本機迴路介面(localhost)的所有流量
  • ip saddr 127.0.0.0/8 counter packets 0 bytes 0 drop 丟棄來自非法 IPv4 本機地址的封包
  • tcp dport ssh accept 允許 SSH 連線(預設是 port 22)
  • icmp type { ... } accept 允許特定的 ICMP 封包型別

儲存此指令碼為 /etc/nftables.rules,並使用以下命令載入:

# nft -f /etc/nftables.rules

要使這些變更永久生效,需要在 /etc/nftables.conf 中包含該規則檔案:

include "/etc/nftables.rules"