在 Linux 系統中,有效管理日誌對於系統維護和安全至關重要。本文將探討如何使用 Logwatch 簡化日誌審核流程,並建立集中式日誌伺服器,以提升管理效率和安全性。此外,我們將介紹如何使用 stunnel 對日誌傳輸進行加密,確保日誌資料的機密性。首先,我們會說明如何安裝和組態 Logwatch,使其每日自動傳送日誌摘要。接著,將逐步講解如何設定一台集中式的日誌伺服器,接收來自多個客戶端的日誌資料。最後,我們將重點介紹如何使用 stunnel 建立安全的加密連線,保護日誌資料在傳輸過程中的安全。
使用 journalctl 管理日誌
在瞭解了 rsyslog 和 journald 的基本使用方法之後,我們來介紹一個實用的工具——Logwatch,它可以簡化日誌審核的工作。
使用 Logwatch 簡化日誌審核
每天進行日誌審核非常重要,但這項工作既枯燥又耗時。幸運的是,有多種工具可以使這項工作變得更容易。在常見的 Linux 發行版倉函式庫中,Logwatch 是筆者最喜歡的工具。
Logwatch 雖然沒有第三方日誌聚合器那樣華麗的功能,但仍然非常實用。每天早上,你都會在郵件帳戶中收到前一天的日誌摘要。根據你的郵件系統組態,你可以將摘要傳送到本地機器的使用者帳戶,或者傳送到任何可以存取的電子郵件帳戶。設定 Logwatch 非常簡單,讓我們透過一個實踐實驗來演示。
實作實驗:安裝 Logwatch
為了傳送訊息,Logwatch 需要機器上執行一個郵件伺服器守護程式。根據安裝作業系統時選擇的選項,你可能已經安裝了 Postfix 郵件伺服器。當 Postfix 組態為本地伺服器時,它會將系統訊息傳送到 root 使用者的本地帳戶。
要在本地機器上檢視 Logwatch 摘要,你還需要安裝一個文字模式的郵件閱讀器,例如 mutt。
對於這個實驗,你可以使用任何虛擬機器:
安裝 Logwatch、mutt 和 Postfix。在 Ubuntu 上,安裝 Postfix 時選擇本地選項。在 CentOS 或 AlmaLinux 上,本地選項是預設值。
- 在 Ubuntu 上執行:
sudo apt install postfix mutt logwatch - 在 CentOS 7 上執行:
sudo yum install postfix mutt logwatch - 在 AlmaLinux 上執行:
sudo dnf install postfix mutt logwatch
- 在 Ubuntu 上執行:
僅在 Ubuntu 上,為你的使用者帳戶建立一個郵件池檔案:
sudo touch /var/mail/your_user_name使用你喜歡的文字編輯器開啟
/etc/aliases檔案。透過在檔案底部新增以下行,將 root 使用者的郵件轉發到你自己的正常帳戶:root: your_user_name儲存檔案,然後將檔案中的資訊複製到系統可以讀取的二進位制檔案中。使用以下命令:
sudo newaliases此時,你已經有了一個完全可用的 Logwatch 實作,它將每天傳送低階別的日誌摘要。要檢視預設組態,請檢視預設組態檔案:
less /usr/share/logwatch/default.conf/logwatch.conf要更改組態,請在 CentOS 和 AlmaLinux 上編輯
/etc/logwatch/conf/logwatch.conf檔案,或在 Ubuntu 上建立該檔案。透過新增以下行,將日誌詳細程度更改為中級別:Detail = MedLogwatch 是一個 Python 指令碼,每天晚上按計劃執行。因此,無需重啟守護程式即可使組態更改生效。
執行一些操作以生成一些日誌條目。你可以透過執行系統更新、安裝一些軟體包以及使用
sudo fdisk -l檢視分割槽組態來實作。如果可能,讓你的虛擬機器執行一整夜。第二天早上,透過以下命令檢視你的日誌摘要:
mutt當提示在你的主目錄中建立一個郵件目錄時,按
y鍵。
內容解密:
- 安裝必要的套件:首先,我們需要在我們的 Linux 系統上安裝 Logwatch、Postfix 和 mutt。根據不同的 Linux 發行版(Ubuntu、CentOS 或 AlmaLinux),我們使用不同的套件管理器(apt、yum 或 dnf)來安裝這些套件。
- 組態 Postfix 和郵件別名:我們需要確保 Postfix 正確組態,以便能夠在本機上傳送和接收郵件。同時,我們還需要編輯
/etc/aliases檔案,將 root 使用者的郵件轉發到我們自己的使用者帳戶。 - 建立郵件池檔案(僅限 Ubuntu):在 Ubuntu 系統上,我們需要手動建立一個郵件池檔案,以便系統能夠正確處理郵件。
- 更新別名資料函式庫:使用
newaliases命令更新別名資料函式庫,以使我們對/etc/aliases檔案所做的更改生效。 - 組態 Logwatch:透過編輯或建立 Logwatch 的組態檔案,我們可以自定義 Logwatch 的行為,例如設定日誌詳細程度。
- 驗證 Logwatch 功能:透過執行一些會生成日誌條目的操作,並檢查第二天早上收到的 Logwatch 日誌摘要,來驗證 Logwatch 是否正常工作。
設定遠端日誌伺服器
到目前為止,我們只處理了本地機器的日誌檔案。但是,如果能夠將所有機器的日誌檔案集中儲存在一台伺服器上,而不是登入到每台機器上去審核日誌檔案,那將會非常方便。事實上,這是可以做到的,而且非常簡單。
為什麼需要集中式日誌管理?
- 方便性:集中式日誌管理允許我們從單一位置審核多台機器的日誌,大大簡化了日誌管理工作。
- 安全性:如果將日誌檔案分散儲存在各個主機上,網路入侵者更容易找到並修改這些檔案,以刪除有關其惡意活動的記錄。透過集中儲存日誌檔案,可以提高日誌的安全性。
實作實驗:設定基本的日誌伺服器
在 Ubuntu、CentOS 和 AlmaLinux 上設定日誌伺服器的步驟是相同的,只是在設定客戶端時有一個小小的差異。為了獲得最佳結果,請確保伺服器虛擬機器和客戶端虛擬機器具有不同的主機名。
在日誌收集伺服器虛擬機器上,使用你喜歡的文字編輯器開啟
/etc/rsyslog.conf檔案,並找到以下幾行(位於檔案頂部附近):# Provides TCP syslog reception #module(load="imtcp") # needs to be done just once #input(type="imtcp" port="514")取消最後兩行的註解,並儲存檔案。該部分現在應該如下所示:
# Provides TCP syslog reception module(load="imtcp") # needs to be done just once input(type="imtcp" port="514")重啟 rsyslog 守護程式:
sudo systemctl restart rsyslog如果機器上啟用了防火牆,請開啟 514/tcp 埠。
內容解密:
- 啟用 rsyslog 的 TCP 接收模組:透過編輯
/etc/rsyslog.conf檔案並取消相關行的註解,我們啟用了 rsyslog 的 TCP 接收模組,使其能夠接收來自其他主機的日誌訊息。 - 重啟 rsyslog 服務:為了使對
/etc/rsyslog.conf檔案所做的更改生效,我們需要重啟 rsyslog 守護程式。 - 組態防火牆:如果伺服器上啟用了防火牆,我們需要組態防火牆規則,以允許其他主機透過 TCP 514 埠傳送日誌訊息到伺服器。
透過上述步驟,我們成功地設定了一個基本的遠端日誌伺服器,用於收集和管理多台機器的日誌檔案。
設定集中式日誌伺服器與加密傳輸
在現代的 IT 環境中,集中式日誌管理是確保系統安全性和故障排除的關鍵組成部分。本文將指導您如何設定一個集中式日誌伺服器,並使用加密連線來保護日誌資料的傳輸。
客戶端組態
首先,您需要在客戶端機器上進行組態。對於 Ubuntu 系統,您需要在 /etc/rsyslog.conf 檔案的底部新增一行,指定日誌伺服器的 IP 地址:
@@192.168.0.161:514
對於 CentOS 和 AlmaLinux,您需要修改 /etc/rsyslog.conf 檔案中的範例轉發規則部分,移除註解符號並新增日誌伺服器的 IP 地址和埠號:
# ### sample forwarding rule ###
action(type="omfwd"
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
queue.filename="fwdRule1" # unique name prefix for spool files
queue.maxdiskspace="1g" # 1gb space limit (use as much as possible)
queue.saveonshutdown="on" # save messages to disk on shutdown
queue.type="LinkedList" # run asynchronously
action.resumeRetryCount="-1" # infinite retries if host is down
# Remote Logging (we use TCP for reliable delivery)
# remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
Target="192.168.0.161" Port="514" Protocol="tcp")
內容解密:
@@192.168.0.161:514:指定日誌伺服器的 IP 地址和埠號,將日誌訊息轉發到該伺服器。action(type="omfwd":定義一個轉發動作,將日誌訊息傳送到遠端主機。queue.filename="fwdRule1":指定佇列檔案的名稱字首,用於在遠端主機不可用時臨時儲存日誌訊息。Target="192.168.0.161" Port="514" Protocol="tcp":指定遠端日誌伺服器的 IP 地址、埠號和使用的協定(TCP)。
完成組態後,請儲存檔案並重新啟動 rsyslog 服務。
建立加密連線
為了保護日誌資料的傳輸安全,我們將使用 stunnel 軟體建立加密連線。以下是針對 AlmaLinux 和 Ubuntu 的設定步驟。
在 AlmaLinux 上設定 stunnel(伺服器端)
安裝 stunnel:
sudo dnf install stunnel組態 stunnel:在
/etc/stunnel/目錄下建立stunnel.conf檔案,並新增以下內容:cert=/etc/stunnel/stunnel.pem fips=yes [hear from client] accept=30000 connect=127.0.0.1:6514內容解密:
cert=/etc/stunnel/stunnel.pem:指定 stunnel 使用的憑證檔案。fips=yes:啟用 FIPS 模式,以符合特定的安全標準。[hear from client]:定義一個服務區塊,用於監聽來自客戶端的連線。accept=30000:指定 stunnel 監聽的埠號,用於接收來自客戶端的加密連線。connect=127.0.0.1:6514:將接收到的加密連線轉發到本機的 6514 埠,與 rsyslog 服務進行通訊。
生成憑證檔案:
sudo openssl req -new -x509 -days 3650 -nodes -out stunnel.pem -keyout stunnel.pem組態防火牆:開啟 30000 埠並關閉 514 埠。
sudo firewall-cmd --permanent --add-port=30000/tcp sudo firewall-cmd --permanent --remove-port=514/tcp sudo firewall-cmd --reload啟動 stunnel 服務:
sudo systemctl enable --now stunnel修改 rsyslog 組態:將監聽埠從 514 改為 6514。
重啟 rsyslog 服務:
sudo systemctl restart rsyslog
在 AlmaLinux 上設定 stunnel(客戶端)
安裝 stunnel。
組態 stunnel:建立
/etc/stunnel/stunnel.conf檔案,並新增以下內容:client=yes fips=yes [speak to server] accept=127.0.0.1:6514 connect=192.168.0.161:30000內容解密:
client=yes:指定此 stunnel 組態為客戶端模式。fips=yes:啟用 FIPS 模式。[speak to server]:定義一個服務區塊,用於與伺服器建立加密連線。accept=127.0.0.1:6514:監聽本機的 6514 埠,接收來自 rsyslog 的日誌訊息。connect=192.168.0.161:30000:將日誌訊息透過加密連線轉發到指定的伺服器 IP 地址和埠號。
啟動 stunnel 服務。
修改 rsyslog 組態:將日誌轉發目標改為本機的 6514 埠。
重啟 rsyslog 服務。
測試組態:使用 logger 命令傳送測試訊息到日誌檔案,並在伺服器上驗證是否成功接收。
設定 stunnel 實作安全的日誌伺服器連線
在本章中,我們將探討如何使用 stunnel 來建立一個安全的日誌伺服器連線。首先,我們需要在伺服器端進行設定。
伺服器端設定
安裝 stunnel:在 AlmaLinux 或 Ubuntu 伺服器上安裝 stunnel。
sudo apt install stunnel4 # Ubuntu sudo dnf install stunnel # AlmaLinux組態 stunnel:在
/etc/stunnel/目錄下建立stunnel.conf檔案,並新增以下內容:fips=yes # AlmaLinux cert = /etc/stunnel/stunnel.pem [rsyslog] accept = 30000 connect = 6514在 Ubuntu 上,由於無法使用 FIPS 模式,因此設定為
fips=no。建立安全憑證:使用 OpenSSL 建立所需的安全憑證。
openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem啟動 stunnel:啟動 stunnel 服務。
sudo service stunnel4 start # Ubuntu sudo systemctl start stunnel # AlmaLinux設定開機自動啟動:建立 cron job 使 stunnel 在系統重啟時自動啟動。
sudo crontab -e -u root @reboot service stunnel4 start # Ubuntu修改 rsyslog 組態:編輯
/etc/rsyslog.conf檔案,將輸入埠更改為 6514。input(type="imtcp" port="6514")重啟 rsyslog:儲存更改後,重啟 rsyslog 服務。
sudo systemctl restart rsyslog防火牆設定:開啟防火牆上的 30000/tcp 埠,並關閉 514 埠。
程式碼解密:
以上步驟中的程式碼和組態檔案的修改,都是為了使 stunnel 和 rsyslog 能夠協同工作,實作安全的日誌傳輸。
使用者端設定
安裝 stunnel:在 Ubuntu 使用者端上安裝 stunnel。
sudo apt install stunnel組態 stunnel:在
/etc/stunnel/目錄下建立stunnel.conf檔案,並新增以下內容:client=yes fips=no [speak to server] accept = 127.0.0.1:6514 connect=192.168.0.161:30000啟動 stunnel:啟動 stunnel 服務。
sudo service stunnel4 start設定開機自動啟動:建立 cron job 使 stunnel 在系統重啟時自動啟動。
修改 rsyslog 組態:編輯
/etc/rsyslog.conf檔案,將日誌伺服器的 IP 地址更改為@@127.0.0.1:6514。重啟 rsyslog:儲存更改後,重啟 rsyslog 服務。
測試連線:使用
logger命令傳送測試訊息到日誌伺服器。
程式碼解密:
使用者端的組態使日誌訊息能夠透過 stunnel 安全地傳輸到日誌伺服器。
將使用者端訊息分離到獨立的檔案
為了將不同使用者端的訊息分離到獨立的檔案中,需要對日誌伺服器的 rsyslog 組態檔案進行修改。
編輯 rsyslog 組態檔案:在
/etc/rsyslog.conf檔案中,新增範本和規則,將不同使用者端的訊息寫入不同的檔案中。$template Rmessages,"/var/log/%HOSTNAME%/messages" *.info;mail.none;authpriv.none;cron.none ?Rmessages $template Rauth,"/var/log/%HOSTNAME%/secure" auth.*,authpriv.* ?Rauth重啟 rsyslog:儲存更改後,重啟 rsyslog 服務。
圖表翻譯:
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333
title 圖表翻譯:
rectangle "日誌訊息" as node1
rectangle "加密訊息" as node2
rectangle "儲存訊息" as node3
rectangle "儲存認證訊息" as node4
node1 --> node2
node2 --> node3
node3 --> node4
@enduml
此圖表顯示了使用者端如何透過 stunnel 將日誌訊息安全地傳輸到日誌伺服器,並根據主機名稱將訊息儲存在不同的檔案中。