使用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