我正在使用 的iptables
日志记录功能来调试我的网络活动。我使用带有--log-prefix
参数的特定前缀来唯一标识内核日志中属于iptables
输出的消息,例如::IPT::LOG::
.
如何配置rsyslog
以将以此方式标记的消息重定向到单独的日志文件中?手册页对rsyslog
我来说看起来太神秘了。
答案1
除了基于选择器的过滤之外,rsyslogd 还可以过滤日志消息属性中找到的模式。为了完成您想要做的事情,您可以创建一个基于属性的过滤器来匹配您在 iptables 规则中使用的字符串。如果您要--log-prefix "unique_prefix: "
在 iptables 规则中使用,则需要将其添加到 rsyslog.conf 中:
:msg,startswith,"unique_prefix" /var/log/iptables
此规则将测试您的前缀的日志消息并将它们发送到 /var/log/iptables (除了 rsyslog 配置为发送它们的其他位置之外)。如果您需要将消息显示在 /var/log/iptables 中而不是其他地方,请将新规则放在其他规则之上,并在其后面添加包含& ~
.完整示例:
:msg,startswith,"unique_prefix" /var/log/iptables
& ~
#
# The rest of my rules appear below
# ...
*.info;mail.none;authpriv.none;cron.none /var/log/messages
Rsyslog 规则可以有多个操作。后续操作在以与号 ( ) 开头的新行中定义&
。在上面的示例中,第一条规则有两个操作:将输出发送到 /var/log/iptables,然后丢弃消息 ( ~
)。看rsyslog 有关操作的文档和过滤器有关此答案中的规则的更多信息
编辑是为了使用startswith
而不是contains
出于性能考虑。由于 iptables--log-prefix
确实是一个前缀,因此将位于消息的开头。
答案2
根据我的经验,考虑到文件解析方式的性质rsyslog.conf
,中的附加配置行/etc/rsyslog.conf
必须位于所有其他配置行之前。如果添加到文件末尾,ip-tables 日志记录仍将附加到文件/var/log/messages
并重定向到/var/log/iptables.log
文件。