我已经设置了一个 rsyslog 服务器(基于 CentOS 6),它可以很好地与一些远程主机配合使用。但是,当我添加 Cisco ASA 防火墙时,它确实会记录其消息!
rsyslog.conf 如下:
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
配置文件如下:
##RSYSLOG configuration file for Remote Logs
$FileCreateMode 0640
$template PerHostLog,"/var/log/remote/%HOSTNAME%.log"
if ($fromhost-ip startswith '10.1.5' or $fromhost-ip startswith '10.2.8') then -?PerHostLog
& ~
这些规则有什么问题吗?TCPdump 显示来自 10.2.8.1 主机的消息到达服务器,但 syslog 选择忽略它们。为什么?
答案1
我解决了。这是路由错误。服务器无法联系消息发起者,因此,消息未从 rsyslog 处理... 想想吧...
答案2
我遇到了同样的问题。从数十个 ASA 设备接收日志,但不是来自特定设备。Tcpdump 显示数据包正在到达。我的问题是内核正在过滤其数据包。通过修改 /etc/sysctl.conf 中的这两个键解决了:
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
我不得不重启服务器,因为 sysctl -p 返回了几个我不想修改的键的错误
答案3
我相信我已经知道你的答案了:
http://www.rsyslog.com/doc/rsconf1_allowedsender.html
$AllowedSender UDP, 127.0.0.0/8, [::1]/128, 10.1.5.0/24, 10.2.8.0/24
阅读了足够多的文档后,我会确认消息确实已被接收,然后完善过滤器/匹配规则。
请告诉我您是否/如何解决了这个问题;您肯定激起了我的好奇心。
祝你好运。
答案4
我遇到了同样的问题。对我来说更令人困惑的是,我不仅知道信息是通过 TCP 到达服务器端口 514 的(我使用 tcpdump 来确定这一点),而且我还通过 telnet 连接到端口 514 并输入文本,并会看到该文本被放入 /etc/rsyslog.conf 中定义的相应日志文件中。但是,当网络上的其他计算机将日志文件信息传送到端口 514 时,它不会显示出来。
我尝试了上面提到的所有方法,但仍然不起作用。我在两台机器通信的接口上打开了 TCP 端口 514。我凭直觉修改了防火墙,允许 UDP 端口 514,然后它立即开始工作了。
我在这里的假设是,常规文本会立即转储到文件中,毫无疑问。来自 rsyslog 客户端的文本/数据的识别和处理方式与文本不同,并且需要在网络上的两台机器之间通过端口 514 UDP 进行通信。这并不直观,因为默认(我使用的是 centos7)/etc/rsyslog.conf 文件有两个部分,一个用于 UDP,一个用于 TCP,两者都被注释掉,表明您可以选择使用哪个。显然,两者都是必需的。
只是想把这个放在这里,以防将来其他人遇到麻烦。如上所述,rsyslogd 没有任何内容可以与向服务器提供日志信息的主机进行出站通信,这是没有意义的,但也许 rsyslogd 只是确保主机可访问并且通过 UDP 存在于网络上,然后它才会处理刚刚收到的 syslog 格式的数据字符串。