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
流量,请执行以下命令顺序:
使用以下参数运行
semanage port
命令:~]# semanage port -a -t syslogd_port_t -p tcp 10514
输入以下命令检查 SELinux 端口:
~]# semanage port -l | grep syslog
如果在
/etc/rsyslog.conf
中配置了新端口,请重启rsyslog
以使更改生效:~]# service rsyslog restart
验证
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 安全指南。
要验证上述设置,请使用以下命令:
~]# 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 配置为接收和排序远程日志消息
在文本编辑器中打开
/etc/rsyslog.conf
文件,如下所示:在 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"
将默认的
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
文件的更改。
rsyslog
服务必须在日志记录服务器和尝试登录到该服务器的系统上运行。使用
systemctl
命令启动rsyslog
服务。~]#
systemctl start rsyslog
要确保
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")