Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

23.5. 在日志记录服务器上配置 rsyslog

rsyslog 服务提供运行日志记录服务器和将各个系统配置为将其日志文件发送到日志记录服务器的功能。有关客户端 rsyslog 配置的详情,请查看 例 23.12 “可靠将日志消息转发至服务器”

rsyslog 服务必须安装到您要用作记录服务器的系统上,并且要配置为向其发送日志的所有系统。默认情况下,Red Hat Enterprise Linux 7 中会安装 rsyslog。如果需要,请以 root 用户身份 输入以下命令:

~]# yum install rsyslog

系统日志流量的默认协议和端口为 UDP 和 514,如 /etc/services 文件中列出的。但是,r syslog 默认为在端口 514 上使用 TCP。在 配置文件 /etc/rsyslog.conf 中,TCP@@ 表示

示例有时会使用其他端口,但 SELinux 被配置为默认允许在以下端口上发送和接收:

~]# semanage port -l | grep syslog
syslog_tls_port_t       tcp   6514, 10514
syslog_tls_port_t       udp   6514, 10514
syslogd_port_t         tcp   601, 20514
syslogd_port_t         udp   514, 601, 20514

semanage 实用程序作为 policycoreutils-python 软件包的一部分提供。如果需要,按以下方式安装软件包:

~]# yum install policycoreutils-python

此外,默认情况下,rsyslog d _t 的 SELinux 类型被配置为允许通过 SELinux typersh _port_t 发送和接收到远程 shell(rsh )端口,默认为 514 端口。因此,不需要使用 semanage 来显式允许端口 514 上的 TCP。例如,要在端口 514 中检查将哪个 SELinux 设置为允许,请按如下所示输入命令:

~]# semanage port -l | grep 514
output omitted
rsh_port_t           tcp   514
syslogd_port_t         tcp   6514, 601
syslogd_port_t         udp   514, 6514, 601

有关 SELinux 的更多信息,请参阅 Red Hat Enterprise Linux 7 SELinux 用户和管理员指南

在您要用作记录服务器的系统上执行以下步骤。必须以 root 用户身份 执行这些步骤中的所有步骤。

将 SELinux 配置为允许端口上的 rsyslog 流量

如果需要将新端口用于 rsyslog 流量,请在日志记录服务器和客户端上按照以下步骤操作。例如,要在端口 10514 上发送和接收 TCP 流量,请执行以下命令顺序:

  1. 使用以下参数运行 semanage port 命令:

    ~]# semanage port -a -t syslogd_port_t -p tcp 10514
  2. 输入以下命令检查 SELinux 端口:

    ~]# semanage port -l | grep syslog
  3. 如果在 /etc/rsyslog.conf 中配置了新端口,请重启 rsyslog 以使更改生效:

    ~]# service rsyslog restart
  4. 验证 rsyslog 正在侦听哪些端口:

    ~]# netstat -tnlp | grep rsyslog
    tcp    0   0 0.0.0.0:10514      0.0.0.0:*  LISTEN   2528/rsyslogd
    tcp    0   0 :::10514        :::*    LISTEN   2528/rsyslogd

有关 semanage port 命令的详情,请查看 semanage -port(8)手册页

配置 firewalld

配置 firewalld 以允许传入的 rsyslog 流量。例如,要允许端口 10514 上的 TCP 流量,请按如下操作:

~]# firewall-cmd --zone=zone --add-port=10514/tcp
success

其中 zone 是要使用的接口区。请注意,在系统下次启动后这些更改不会保留。要永久更改防火墙,请重复添加 --permanent 选项的命令。有关在 firewalld 中打开和关闭端口的更多信息,请参阅 Red Hat Enterprise Linux 7 安全指南

  1. 要验证上述设置,请使用以下命令:

    ~]# firewall-cmd --list-all
    public (default, active)
     interfaces: eth0
     sources:
     services: dhcpv6-client ssh
     ports: 10514/tcp
     masquerade: no
     forward-ports:
     icmp-blocks:
     rich rules:

将 rsyslog 配置为接收和排序远程日志消息

  1. 在文本编辑器中打开 /etc/rsyslog.conf 文件,如下所示:

    1. 在 modules 部分下方添加这些行,但在 Provides UDP syslog 接收 部分上方:

      # Define templates before the rules that use them
      
      # Per-Host Templates for Remote Systems #
      $template TmplAuthpriv, "/var/log/remote/auth/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
      $template TmplMsg, "/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
    2. 将默认的 Provides TCP syslog 接收 部分替换为以下内容:

      # Provides TCP syslog reception
      $ModLoad imtcp
      # Adding this ruleset to process remote messages
      $RuleSet remote1
      authpriv.*  ?TmplAuthpriv
      *.info;mail.none;authpriv.none;cron.none  ?TmplMsg
      $RuleSet RSYSLOG_DefaultRuleset  #End the rule set by switching back to the default rule set
      $InputTCPServerBindRuleset remote1 #Define a new input and bind it to the "remote1" rule set
      $InputTCPServerRun 10514

      保存对 /etc/rsyslog.conf 文件的更改。

  2. rsyslog 服务必须在日志记录服务器和尝试登录到该服务器的系统上运行。

    1. 使用 systemctl 命令启动 rsyslog 服务。

      ~]# systemctl start rsyslog
    2. 要确保 rsyslog 服务以后自动启动,以 root 用户身份输入以下命令:

      ~]# systemctl enable rsyslog

您的日志服务器现在已配置为从环境中的其他系统接收和存储日志文件。

23.5.1. 在日志记录服务器上使用新模板语法

rsyslog 7 具有多种不同的模板样式。字符串模板与传统格式最相似。使用字符串格式从上例中重现模板,如下所示:

template(name="TmplAuthpriv" type="string"
     string="/var/log/remote/auth/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
    )

template(name="TmplMsg" type="string"
     string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
    )

这些模板也可以采用列表格式编写,如下所示:

template(name="TmplAuthpriv" type="list") {
  constant(value="/var/log/remote/auth/")
  property(name="hostname")
  constant(value="/")
  property(name="programname" SecurePath="replace")
  constant(value=".log")
  }

template(name="TmplMsg" type="list") {
  constant(value="/var/log/remote/msg/")
  property(name="hostname")
  constant(value="/")
  property(name="programname" SecurePath="replace")
  constant(value=".log")
  }

此模板文本格式可能更易于阅读,以方便那些新的 rsyslog 读取,因此更容易根据要求的变化进行调整。

要完成对新语法的更改,我们需要重现模块 load 命令,添加规则集,然后将规则集绑定到协议、端口和规则集:

module(load="imtcp")

ruleset(name="remote1"){
   authpriv.*  action(type="omfile" DynaFile="TmplAuthpriv")
   *.info;mail.none;authpriv.none;cron.none action(type="omfile" DynaFile="TmplMsg")
}

input(type="imtcp" port="10514" ruleset="remote1")