如何配置syslog.conf文件,将iptables消息记录在单独的文件中?


10

如何配置/etc/syslog.conf文件以便将日志信息保存iptables在特定文件中。

我想分别保存这些信息,以便可以轻松,快速地提取想要的内容。


您使用的是syslog.conf还是rsyslog.conf?
slm

Answers:


13

系统日志

在的手册页中查看iptables。它显示了一个LOG可以执行您想要的操作的目标。

  1. 将日志记录级别设置为LOG4。

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. 配置syslog.conf将这些消息写入单独的文件。

    # /etc/syslog.conf
    kern.warning     /var/log/iptables.log
    
  3. 重新启动syslogd。

    Debian / Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora / CentOS / RHEL

    $ sudo /etc/init.d/syslog restart
    

注意:这种记录方法称为固定优先级。它们是数字或名称(1,2,3,4,..)或(DEBUG,WARN,INFO等)。

系统日志

如果您偶然使用rsyslog,则可以创建基于属性的过滤器,如下所示:

# /etc/rsyslog.conf
:msg, contains, "NETFILTER"       /var/log/iptables.log
:msg, contains, "NETFILTER"     ~

然后将thils开关添加到要记录的iptables规则:

–log-prefix NETFILTER

另外,您也可以使用这种类型的属性过滤器记录消息:

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~

注意:此第二种方法不需要对进行任何更改iptables

参考文献


在这种情况下,信息将保存在/var/log/iptables和中/var/log/messages。我只希望从这些数据中获得一份副本iptables.log
2013年

1
我添加了自己的答案,也涵盖了Abid的问题以及缺少的logrotate配置。“ stop”或“&〜”阻止消息继续沿rsyslog的规则向下移动,以也到达/ var / log / messages。
彼得

6

这假定您的防火墙已经像任何理智的防火墙一样已经记录日志。对于某些示例,它需要可识别的消息,例如slm的示例中的“ NETFILTER”。

在rsyslog.d中制作文件

vim /etc/rsyslog.d/10-firewall.conf

这在CentOS 7中有效。除了寻找IN和OUT外,我不知道如何验证它是否来自防火墙。CentOS很奇怪。除非下一个版本不起作用,否则不要使用它。

# into separate file and stop their further processing
if  ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

这在CentOS 7中有效,并且也检查消息内容(用-j LOG规则消息中的内容替换“ Shorewall”):

# into separate file and stop their further processing
if  ($msg contains 'Shorewall') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

这在其他(Ubuntu,Debian,openSUSE)中也可以使用。这是最好的方法。在消息中不搜索字符串:

# into separate file and stop their further processing
if  ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then    -/var/log/firewall
    &   ~

这是默认的openSUSE计算机所拥有的(我认为每个发行版都应该拥有并且正在丢失)(差异似乎只是“停止”而不是“&〜”;并非所有系统都支持这两种语法):

if  ($syslogfacility-text == 'kern') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    stop
}

对于以上所有内容,也不要忘记logrotate.d文件:

vim /etc/logrotate.d/firewall

包含:

/var/log/firewall {
    rotate 7
    size 500k
    postrotate
        # before using this, run the command yourself to make sure 
        # it is right... the daemon name may vary
        /usr/bin/killall -HUP rsyslogd
    endscript
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.