处理系统日志对于系统安全和管理是一个重要方面。 当有多台分布在中型或大型网络的机器,再或者是处于各种不同类型的网络中, 监视他们上面的日志文件则显得非常难以操作, 在这种情况下, 配置远程日志记录能使整个处理过程变得更加轻松。
集中记录日志到一台指定的机器能够减轻一些日志文件管理的负担。
日志文件的收集, 合并与循环可以在一处配置,
使用 FreeBSD 原生的工具, 比如 syslogd(8) 和 newsyslog(8)。
在以下的配置示例中, 主机 A
, 命名为
logserv.example.com
,
将用来收集本地网络的日志信息。 主机 B
,
命名为 logclient.example.com
将把日志信息传送给服务器。 在现实中,
这两个主机都需要配置正确的正向和反向的 DNS
或者在 /etc/hosts
中记录。
否则, 数据将被服务器拒收。
日志服务器是配置成用来接收远程主机日志信息的机器。 在大多数的情况下这是为了方便配置, 或者是为了更好的管理。 不论是何原因, 在继续深入之前需要提一些必需条件。
一个正确配置的日志服务器必须符合以下几个最基本的条件:
服务器和客户端的防火墙规则允许 514 端口上的 UDP 报文通过。
syslogd 被配置成接受从远程客户发来的消息。
syslogd 服务器和所有的客户端都必须有配有正确的正向和反向
DNS, 或者在
/etc/hosts
中有相应配置。
配置日志服务器, 客户端必须在
/etc/syslog.conf
中列出,
并指定日志的 facility:
+logclient.example.com *.* /var/log/logclient.log
更多关于各种被支持并可用的 facility 能在 syslog.conf(5) 手册页中找到。
一旦加入以后, 所有此类 facility
消息都会被记录到先前指定的文件
/var/log/logclient.log
。
提供服务的机器还需要在其
/etc/rc.conf
中配置:
syslogd_enable="YES" syslogd_flags="-a logclient.example.com -v -v"
第一个选项表示在系统启动时启用 syslogd
服务, 第二个选项表示允许服务器接收来自指定日志源客户端的数据。
第二行配置中最后的部分, 使用 -v -v
,
表示增加日志消息的详细程度。 在调整 facility 配置的时候,
这个配置非常有用, 因为管理员能够看到哪些消息将作为哪个
facility 的内容来记录。
可以同时指定多个 -a
选项来允许多个客户机。
此外, 还可以指定 IP
地址或网段, 请参阅
syslog(3) 联机手册以了解可用配置的完整列表。
最后, 日志文件应该被创建。 不论你用何种方法创建, 比如 touch(1) 能很好的完成此类任务:
#
touch /var/log/logclient.log
此时, 应该重启并确认一下 syslogd
守护进程:
#
/etc/rc.d/syslogd restart
#
pgrep syslog
如果返回了一个 PIC 的话,
服务端应该被成功重启了, 并继续开始配置客户端。
如果服务端没有重启的话, 请在
/var/log/messages
日志中查阅相关输出。
日志客户端是一台发送日志信息到日志服务器的机器, 并在本地保存拷贝。
与日志服务器类似, 客户端也需要满足一些最基本的条件:
syslogd(8) 必须被配置成发送指定类型的消息到能接收他们的日志服务器。
防火墙必须允许 514 端口上的 UDP 包通过;
必须配置正向与反向 DNS,
或者在 /etc/hosts
中有正确的记录。
相比服务器来说配置客户端更轻松一些。
客户端的机器在 /etc/rc.conf
中做如下的设置:
syslogd_enable="YES" syslogd_flags="-s -v -v"
和前面类似, 这些选项会在系统启动过程中启用
syslogd
服务, 并增加日志消息的详细程度。
而 -s
选项则表示禁止服务接收来自其他主机的日志。
Facility 是描述某个消息由系统的哪部分生成的。 举例来说,
ftp 和 ipfw 都是 facility。
当这两项服务生成日志消息时, 它们通常在日志消息中包含了这两种工具。
Facility 通常带有一个优先级或等级,
就是用来标记一个日志消息的重要程度。 最普通的为
warning
和 info
。
请参阅 syslog(3) 手册页以获得一个完整可用的
facility 与优先级列表。
日志服务器必须在客户端的 /etc/syslog.conf
中指明。 在此例中, @
符号被用来表示发送日志数据到远程的服务器,
看上去差不多如下这样:
*.* @logserv.example.com
添加后, 必须重启 syslogd
使得上述修改生效:
#
/etc/rc.d/syslogd restart
测试日志消息是否能通过网络发送,
在准备发出消息的客户机上用 logger(1) 来向
syslogd
发出信息:
#
logger "Test message from logclient"
这段消息现在应该同时出现在客户机的
/var/log/messages
以及日志服务器的
/var/log/logclient.log
中。
在某些情况下, 如果日志服务器没有收到消息的话就需要调试一番了。
有几个可能的原因, 最常见的两个是网络连接的问题和
DNS 的问题。 为了测试这些问题,
请确认两边的机器都能使用 /etc/rc.conf
中所设定的主机名访问到对方。 如果这个能正常工作的话,
那么就需要对 /etc/rc.conf
中的 syslogd_flags
选项做些修改了。
在以下的示例中,
/var/log/logclient.log
是空的,
/var/log/message
中也没有表明任何失败的原因。
为了增加调试的输出, 修改 ayalogd_flags
选项至类似于如下的示例, 并重启服务:
syslogd_flags="-d -a logclien.example.com -v -v"
#
/etc/rc.d/syslogd restart
在重启服务之后, 屏幕上将立刻闪现类似这样的调试数据:
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart syslogd: restarted logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel Logging to FILE /var/log/messages syslogd: kernel boot file is /boot/kernel/kernel cvthname(192.168.1.10) validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; rejected in rule 0 due to name mismatch.
很明显,消息是由于主机名不匹配而被拒收的。
在一点一点的检查了配置文件之后, 发现了
/etc/rc.conf
中如下这行有输入错误:
syslogd_flags="-d -a logclien.example.com -v -v"
这行应该包涵有 logclient
, 而不是
logclien
。
在做了正确的修改并重启之后便能见到预期的效果了:
#
/etc/rc.d/syslogd restart
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart syslogd: restarted logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel syslogd: kernel boot file is /boot/kernel/kernel logmsg: pri 166, flags 17, from logserv.example.com, msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2 cvthname(192.168.1.10) validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; accepted in rule 0. logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2 Logging to FILE /var/log/logclient.log Logging to FILE /var/log/messages
此刻, 消息能够被正确接收并保存入文件了。
就像其他的网络服务一样, 在实现配置之前需要考虑安全性。 有时日志文件也包含了敏感信息, 比如本地主机上所启用的服务, 用户帐号和配置数据。 从客户端发出的数据经过网络到达服务器, 这期间既没有加密也没有密码保护。 如果有加密需要的话, 可以使用 security/stunnel, 它将在一个加密的隧道中传输数据。
本地安全也同样是个问题。 日志文件在使用中或循环转后都没有被加密。
本地用户可能读取这些文件以获得对系统更深入的了解。
对于这类情况, 给这些文件设置正确的权限是非常有必要的。
newsyslog(8) 工具支持给新创建和循环的日志设置权限。
把日志文件的权限设置为 600
能阻止本地用户不必要的窥探。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<[email protected]>.
关于本文档的问题请发信联系
<[email protected]>.