使用 rsyslog 和雙向 TLS 實現安全的 SLES Syslog 轉發

為了安全地轉送 SUSE Linux Enterprise Server (SLES) 系統日誌,請將 rsyslog 設定為透過 TLS 保護的 TCP 連接埠 6514 傳送訊息,驗證收集器的憑證名稱,並透過測試事件確認訊息已送達。 SLES 15 SP7 於 2026 年 3 月 27 日收到一個可選的 rsyslog 更新,其中新增了 OpenSSL TLS 模組;以下設定特意使用了現有的 GnuTLSgtls模組。

本流程適用於名為 `<sender_name>` 的 SLES 15 傳送器sles01.example.net和名為 `<collector_name>` 的 rsyslog 收集器logs.example.net。請將這兩個名稱和所有憑證路徑替換為您自己的值。它使用雙向 TLS,因此收集器會對發送器進行身份驗證,發送器也會對收集器進行身份驗證。

1. 檢查 rsyslog 和 SLES 日誌路徑

在兩台主機上,從您註冊的 SUSE 軟體倉庫安裝 rsyslog 守護程式及其 GnuTLS 模組。現有安裝可能已經包含第一個軟體包。

sudo zypper install rsyslog rsyslog-module-gtls
rpm -q rsyslog rsyslog-module-gtls
sudo systemctl enable --now rsyslog
rsyslogd -v

在新增規則前,請先查看/etc/rsyslog.conf現有程式碼片段/etc/rsyslog.d/。特別要停用任何*.* @@host針對相同目標的舊版未加密轉送規則;否則,郵件可能會走兩條路徑,其中一條可能不會使用 TLS。

SLES 使用systemd-journald日誌事件,而 rsyslog 處理 syslog 輸入。請確認您需要的事件能夠透過現有的輸入配置到達 rsyslog。 SUSE 文件ForwardToSyslog=yes中/etc/systemd/journald.conf提供了日誌到 syslog 的轉送設定;在變更之前請檢查您的部署,因為單獨啟用日誌讀取器可能會建立重複事件。此程序僅轉送 rsyslog 已處理的訊息,並非/var/log自動轉送所有檔案。

終端機視窗顯示 rsyslog 軟體包檢查以及 SLES 發送方的 CA、用戶端憑證和私鑰檔案。
在啟用 TLS 之前,請檢查 rsyslog 安裝情況,並確認發送者擁有單獨的 CA、憑證和金鑰檔案。

2. 準備受信任的伺服器和用戶端憑證

logs.example.net使用組織控制的憑證授權單位 (CA)為收集器頒發包含 DNS 主題備用名稱的證書,並sles01.example.net為發送器頒發單獨的證書。確保這些憑證對其 TLS 伺服器或用戶端角色有效,並且兩台機器都信任頒發憑證的 CA。遵循您的 PKI 產生和續約流程;不要在主機之間重複使用私鑰。

透過管理員批准的安全通道複製相應的文件。在本例中,兩台機器都使用/etc/rsyslog.d/tls/ca.pem。收集器還具有server-cert.pem和server-key.pem;發送器具有client-cert.pem和client-key.pem。

sudo install -d -m 0750 /etc/rsyslog.d/tls
sudo chmod 0600 /etc/rsyslog.d/tls/*-key.pem
sudo chmod 0644 /etc/rsyslog.d/tls/ca.pem

必要時,限制對 rsyslog 服務身分的憑證和金鑰存取。請勿在診斷資訊、shell 歷史記錄、Git 倉庫或匯出的日誌流中揭露私鑰。重新啟動守護程序前,請確認 rsyslog 程序可以讀取其金鑰。

3. 在收集器上啟用經過驗證的 TLS 接收器

在[此處應填寫具體配置] 中logs.example.net,加入以下內容/etc/rsyslog.d/30-tls-listener.conf。如果 [imtcp此處應填入特定配置] 已在其他地方加載,則僅保留一條模組加載語句。專用規則集會將遠端接收的訊息放入單獨的檔案中,而不是將其與本機系統訊息混合在一起。

global(
  DefaultNetstreamDriverCAFile="/etc/rsyslog.d/tls/ca.pem"
  DefaultNetstreamDriverCertFile="/etc/rsyslog.d/tls/server-cert.pem"
  DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/tls/server-key.pem"
)
module(load="imtcp")
ruleset(name="remote_tls") {
  action(type="omfile" file="/var/log/remote-tls.log")
}
input(
  type="imtcp"
  port="6514"
  StreamDriver.Name="gtls"
  StreamDriver.Mode="1"
  StreamDriver.AuthMode="x509/name"
  PermittedPeer="sles01.example.net"
  ruleset="remote_tls"
)

StreamDriver.Mode="1"啟用 TLS,同時x509/name拒絕PermittedPeer沒有有效憑證身分的用戶端。僅允許一個名稱是有意為之;添加其他發送方時,應擴展已批准的對等方列表,而不是削弱身份驗證。

sudo rsyslogd -N1
sudo systemctl restart rsyslog
sudo firewall-cmd --permanent --add-port=6514/tcp
sudo firewall-cmd --reload
sudo ss -ltn | grep ':6514'

僅當收集器使用 firewalld 時才執行防火牆命令。使用主機或上游防火牆將入站 TCP/6514 連接埠限制為已知的發送方網路;開放連接埠並不會取代憑證驗證。此外,也要驗證是否意外暴露了任何預先存在的明文監聽器。

設定編輯器顯示 TCP 連接埠 6514 上的 rsyslog imtcp 監聽器,具有 gtls 和 x509/名稱認證。
收集器 TLS 監聽器使用連接埠 6514、GnuTLS 模式 1 和憑證名稱認證;文章提供了完整的接收器配置。

4. 為 SLES 新增 TLS 轉送和有界佇列。

sles01.example.net確保 rsyslog 工作目錄存在且服務可寫入。此處顯示的目錄僅供參考;如果您的軟體包安裝程式已提供已設定的目錄,請保留目錄workDirectory。新增以下程式碼片段/etc/rsyslog.d/60-tls-forward.conf:

global(
  DefaultNetstreamDriverCAFile="/etc/rsyslog.d/tls/ca.pem"
  DefaultNetstreamDriverCertFile="/etc/rsyslog.d/tls/client-cert.pem"
  DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/tls/client-key.pem"
)
*.* action(
  type="omfwd"
  target="logs.example.net"
  port="6514"
  protocol="tcp"
  StreamDriver="gtls"
  StreamDriverMode="1"
  StreamDriverAuthMode="x509/name"
  StreamDriverPermittedPeers="logs.example.net"
  queue.type="LinkedList"
  queue.filename="tls_forward"
  queue.size="10000"
  queue.maxDiskSpace="1g"
  queue.saveOnShutdown="on"
  action.resumeRetryCount="-1"
)

TLS 設定用於在發送前驗證收集器的身份。磁碟輔助操作佇列會在短時中斷期間緩衝訊息,並重試失敗的轉發操作,但它並非無限,也無法保證完全避免訊息遺失:可用磁碟空間、佇列限制、進程關閉行為以及接收器健康狀況仍然至關重要。在依賴磁碟緩衝之前,請檢查 rsyslog 的有效工作目錄,並使用適當的所有權建立該目錄。

驗證並重啟發送方:

sudo rsyslogd -N1
sudo systemctl restart rsyslog

如果配置驗證失敗,請勿重新啟動;請先修正第一個報告的錯誤。在現有的 rsyslog 部署中,全域憑證指令可能會影響其他 TLS 作業。請檢查其他出站操作,如果它們需要不同的憑證,請使用受支援的每個操作的憑證參數。

設定編輯器顯示針對 logs.example.net 的 6514 連接埠的 rsyslog omfwd 操作,並帶有 TLS 憑證名稱驗證。
使用啟用 TLS 的 omfwd 操作將系統訊息轉送到 logs.example.net;新增隨附程式碼中的憑證設定和彈性佇列。

5. 核實接收情況並調查握手失敗的原因

首先確認收集器正在監聽 TCP/6514 端口,並且發送器可以透過防火牆存取主機。然後在 SLES 發送器上執行以下命令:

logger -t sles-tls-check "TLS forwarding probe"

在收集器上,搜尋已設定的遠端日誌檔案:

sudo grep 'TLS forwarding probe' /var/log/remote-tls.log
sudo journalctl -u rsyslog -n 50 --no-pager

找到標記/var/log/remote-tls.log表示應用層轉送路徑在此測試中有效。但這並不能證明所有應用特定的日誌檔案都已被收集。若要獨立測試身份驗證,請在受控的維護視窗期間暫時使用不同的、不受信任的憑證或不匹配的對等名稱,並確認 TLS 連線失敗;然後立即恢復原始設定。

終端機顯示 rsyslog 設定驗證、帶有標籤的日誌記錄器探測以及檢查收集器日誌檔案的命令。
驗證 rsyslog 並發送唯一標記的測試訊息,然後檢查收集器日誌中的探測結果,而不是假設已送達。

若標記未出現,請依序排查故障原因:

  • 沒有監聽器或連線被拒絕:檢查systemctl status rsyslogTCP/6514 和收集器防火牆規則。
  • TLS 或憑證故障:將憑證 SAN 與PermittedPeer和進行比較StreamDriverPermittedPeers;驗證 CA 鏈、到期日期、系統時鐘和私鑰權限。
  • 已連線但無事件:請檢查是否有重複或缺少的日誌/系統日誌輸入、已暫停的轉送操作以及磁碟佇列容量。請journalctl -u rsyslog在兩台主機上進行檢查。

此方法遵循官方的SLES 15 SP7 系統日誌記錄指南、rsyslog 憑證認證用戶端指南、imtcp 監聽器參考和omfwd 轉發參考。 2026年 3 月的 SUSE 更新通知中記錄了選購的 OpenSSL 模組新增。由於不同 SLES 服務包的配置有所不同,因此在將變更套用到生產環境之前,請先在您已安裝的 rsyslog 版本上進行驗證。

留下評論

使用 Systemd 定時器可靠地執行 ownCloud 後台作業

將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。

透過尋找故障路由來恢復 ownCloud WebDAV 同步

透過 Apache、Nginx 或反向代理程式追蹤 WebDAV 請求,然後使用經過驗證的 PROPFIND 測試確認 ownCloud 同步功能正常。

設定 Nextcloud 的公共 URL,以便它可以存取自身。

透過設定其規範 URL 並從伺服器本身檢查 DNS、HTTPS 和反向代理路由,修復 Nextcloud 缺少出站位址警告的問題。

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

透過本機 Unix 套接字配置 APCu 和 Redis,以實現 Nextcloud 快取和檔案鎖定,並提供目前和舊版 Nextcloud 的步驟。

使用 Systemd 定時器自動執行 Nextcloud Cron

檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。

使用 Redis 清除 Nextcloud 的檔案鎖定警告

啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。

如何才能獲得 Nextcloud A+ 安全評級

如何才能獲得 Nextcloud A+ 安全評級

使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。

啟用 Nextcloud 伺服器端加密,並評估其影響

為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。

將 Elasticsearch 全文搜尋功能新增至 Nextcloud

將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。

為 Nextcloud 已刪除檔案設定可靠的過期策略

為 Nextcloud 已刪除檔案設定可靠的過期策略

配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。