使用Rsyslog將Apache日誌轉發到中央日誌服務器

在本教程中,您將學習如何使用rsyslog將Apache日誌轉發到中央日誌服務器。默認情況下,Apache不登錄到syslog。因此,如果要將日誌轉發到中央系統可以輕鬆管理它們該怎麼辦?在這種情況下,可以使用各種工具來讀取Apache日誌並將其發送到中央日誌記錄系統。

是否要使用Rsyslog設置中央日誌服務器?查看以下指南;

在Debian 10上安裝Rsyslog服務器

在Ubuntu 20.04上安裝Rsyslog服務器

使用Rsyslog將Apache日誌轉發到中央日誌服務器

在本教程中,我們將探討使用rsyslog將Apache日誌轉發到中央日誌服務器的兩種方法:

  • 使用Rsyslog文本文件輸入模塊監視Apache日誌文件
  • 配置Apache以登錄到Syslog

使用Rsyslog文本文件輸入模塊監視Apache日誌文件

rsyslog text file input module (imfile),可以將任何標準文本文件轉換為系統日誌消息。該模塊可以逐行讀取日誌文件,同時將每條讀取行傳遞給rsyslog引擎規則,然後再應用過濾條件並選擇需要執行的操作。空行是 不是 已處理,因為它們將導致空的系統日誌記錄。他們只是被忽略。

為了使用Rsyslog文本文件輸入模塊讀取Apache日誌文件並將其轉發以刪除Rsyslog服務器,您需要創建一個配置文件,例如 /etc/rsyslog.d/02-apache2.conf,其內容如下;

vim /etc/rsyslog.d/02-apache2.conf
module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog")
input(type="imfile"
      File="/var/log/apache2/error.log"
      Tag="http_error"
      Severity="error"
      Facility="local6")
local6.error        @192.168.59.12:514

保存並退出文件。

  • 第一行指定要加載的Rsyslog模塊,在這種情況下為 imfile 模塊。
  • PollingInterval:指定為新數據讀取文件的頻率。您永遠不要將此參數的值設置為0,否則可能會佔用系統CPU的風險。
  • statefile.directory:指定用於存儲文件狀態文件的專用目錄。重新啟動rsyslog之前,該文件應該存在並且可由rsyslog寫入。ls -ald /var/spool/rsyslog/drwx------ 2 syslog adm 4096 Feb 11 2020 /var/spool/rsyslog/
  • type:指定模塊的類型。
  • File:指定要輪詢的文件。
  • Tag:一個標籤,用於分配給從上述文件中讀取的郵件。
  • Severity:syslog嚴重性,分配給從文件讀取的行。
  • Facility:分配給從指定文件讀取的消息的syslog工具。
  • 最後一行指定將這些日誌行轉發到遠程服務器, 192.168.59.12, 上 UDP 港口 514

驗證Rsyslog配置文件的正確性;

rsyslogd -N1 -f /etc/rsyslog.d/02-apache2.conf
rsyslogd: version 8.2006.0, config validation run (level 1), master config /etc/rsyslog.d/02-apache2.conf
rsyslogd: End of config validation run. Bye.

如果沒有問題,請重新啟動Rsyslog;否則,請重新啟動。

systemctl restart rsyslog

驗證接收遠程日誌服務器上的Apache日誌

您可以使用tcpdump檢查Rsyslog服務器和客戶端在UDP端口514上是否進行任何通信;否則,請執行以下操作。相應地替換接口和源主機IP。

tcpdump -i enp0s8 src host 192.168.59.13 and udp port 514 -nn -vv
tcpdump: listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
14:44:27.229660 IP (tos 0x0, ttl 64, id 35360, offset 0, flags [DF], proto UDP (17), length 1000)
    192.168.59.13.35486 > 192.168.59.12.514: [udp sum ok] SYSLOG, length: 972
	Facility local6 (22), Severity error (3)
	Msg: Mar 31 21:44:27 ubuntu20 http_error [Wed Mar 31 21:44:27.206708 2021] [:error] [pid 19242:tid 140596081583680] [client 127.0.0.1:51706] ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/ls' ) [file "/etc/apache2/modsecurity.d/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/ls found within ARGS:exec: /bin/ls"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "127.0.1.1"] [uri "/"] [unique_id "161721626740.953787"] [ref "o1,6v11,7t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]
...

您還可以在服務器上檢查遠程日誌文件。在我們的設置中,我們將Rsyslog日誌服務器配置為按程序記錄遠程日誌,並在每個主機目錄上發送日誌。

因此,在這種情況下,我們從Apache服務器獲得了此類日誌。

ls /var/log/remotelogs/192.168.59.13/
http_error.log

尾隨該日誌文件;

tail -f /var/log/remotelogs/192.168.59.13/http_error.log

2021-03-31T21:50:57-04:00 ubuntu20 http_error [Wed Mar 31 21:50:57.617055 2021] [:error] [pid 19243:tid 140595980871232] [client 192.168.59.1:43602] ModSecurity: Warning. Matched "Operator `Rx' with parameter `^[\d.:]+$' against variable `REQUEST_HEADERS:Host' (Value: `192.168.59.13' ) [file "/etc/apache2/modsecurity.d/owasp-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "722"] [id "920350"] [rev ""] [msg "Host header is a numeric IP address"] [data "192.168.59.13"] [severity "4"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-protocol"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [hostname "127.0.1.1"] [uri "/"] [unique_id "161721665745.833955"] [ref "o0,13v33,13"]
2021-03-31T21:50:57-04:00 ubuntu20 http_error [Wed Mar 31 21:50:57.620882 2021] [:error] [pid 19243:tid 140595980871232] [client 192.168.59.1:43602] ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:doc' (Value: `/bin/ls' ) [file "/etc/apache2/modsecurity.d/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/ls found within ARGS:doc: /bin/ls"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "127.0.1.1"] [uri "/"] [unique_id "161721665745.833955"] [ref "o1,6v10,7t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]
...

這就是Rsyslog文本文件輸入模塊可用於讀取應用程序日誌並將其轉發到遠程服務器的方式。

配置Apache以登錄到Syslog

為了通過Rsyslog轉發日誌,生成日誌的應用程序應該能夠寫入syslog。默認情況下,Apache不寫入syslog。

為了將Apache配置為登錄到syslog,可以使用如下程序 logger。記錄器可用於將應用程序日誌寫入syslog。

默認情況下, ErrorLogCustomLog 指令,用於設置服務器將遇到的任何錯誤以及對服務器的任何請求分別記錄到的文件的名稱。

默認情況下,這些文件設置為;

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

因此,錯誤日誌記錄到$ {APACHE_LOG_DIR} /error.log,而訪問日誌記錄到$ {APACHE_LOG_DIR} /access.log。

現在,我們要將Apache日誌轉發到遠程syslog服務器,您可以設置logging指令,將日誌通過管道傳輸到logger,然後可以寫入特定的syslog工具,並指定適當的嚴重性。

讓我們舉個例子,我們想將Apache錯誤日誌記錄到syslog工具,local6和嚴重性中,我們將其設置為error,即 local6.err,編輯站點配置並設置syslog指令的值,如下所示;

vim /etc/apache2/sites-available/000-default.conf
...
ErrorLog "| /usr/bin/logger -thttp_error: -plocal6.err"
CustomLog ${APACHE_LOG_DIR}/access.log combined

傳遞給記錄器命令的選項; -t 指定標籤和 -p 指定系統日誌優先級, facility.level

保存並退出文件。

接下來,配置Rsyslog以轉發寫入系統日誌優先級的日誌, local6.err 到遠程Rsyslog服務器。

echo "local6.err @192.168.59.12:514" >> /etc/rsyslog.conf

如果要直接登錄到遠程服務器而不在rsyslog.conf文件中指定服務器,請使用以下行:

ErrorLog "| /usr/bin/logger -thttp_error: -plocal6.err -n 192.168.59.12 -P 514"

檢查Apache是​​​​否存在任何配置錯誤;

apachectl -t

如果得到輸出, Syntax OK,那麼您就可以重新啟動Apache了;

systemctl restart apache2

同樣,您可以檢查Rsyslog配置中是否有任何錯誤;請參閱第11頁上的“。

rsyslogd -N1

重啟Rsyslog;

systemctl restart rsyslog

現在,您應該能夠在遠程中央日誌服務器上接收日誌。

此設置要注意的一件事, ErrorLog "| /usr/bin/logger -thttp_error: -plocal6.err",它不會記錄本地系統日誌文件,因此很有可能會丟失某些日誌。

為了克服這個問題,並將Apache日誌記錄到本地文件和遠程服務器上,請使用tee命令將日誌通過管道傳遞到logger和本地日誌文件,如下所示;

ErrorLog "|/bin/sh -c '/usr/bin/tee -a /var/log/apache2/error.log | /usr/bin/logger -thttp_error: -plocal6.err'"
CustomLog ${APACHE_LOG_DIR}/access.log combined

配置Rsyslog以將優先級為local6.err的日誌發送到遠程日誌服務器。

重新啟動Rsyslog和Apache;

systemctl restart rsyslog apache2

現在,您應該能夠登錄到本地文件和遠程日誌服務器。

到此為止,我們的指南結束了如何使用Rsyslog將Apache日誌轉發到Central Log Server。

其他教程

在Solaris 11.4上配置Rsyslog以將日誌發送到遠程日誌服務器

在Solaris 11.4上配置Syslog以進行遠程日誌記錄

在Ubuntu 20.04上安裝和配置NXLog CE

Sidebar