在 centos 7 上记录 iptables 事件

在 centos 7 上记录 iptables 事件

我的 centos 7 上有 iptables。我的防火墙被禁用。如何记录我的 iptables 事件?在 debian 上它是 dmesg 选项,但我不知道如何在 centos 上设置它。

我想记录所有 iptables 事件。没有具体规定。

答案1

当数据包与iptables ... -j LOG规则匹配时,会生成内核日志消息。您可以使用 选项指定消息的严重性级别--log-level <level>,其中<level>可以是标准系统日志级别标识符之一:emergalertcriterrorwarningnotice或。infodebug

这些日志消息的处理方式是rsyslog:如果严重级别足够低,rsyslog可能会完全丢弃这些消息。由于 iptables 日志消息来自内核,因此它们的日志记录类别将始终为kern.因此,请查看要处理的消息/etc/rsyslog.conf的最低严重性级别是什么,以及它们将存储到哪个日志文件中。kern.*然后为您的规则设置适当的严重性级别iptables -j LOG

或者使用该iptables ... -j LOG --log-prefix <prefix>选项向 iptables 消息添加可识别的前缀,然后使用 的高级功能rsyslog将 iptables 消息写入单独的日志文件。

答案2

我找到了最适合我的解决方案:警告级别:

iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 4
iptables -A FORWARD -j LOG --log-prefix "BAD_FORWARD: " --log-level 4
iptables -A OUTPUT -j LOG --log-prefix "BAD_OUTPUT: " --log-level 4

调试级别:

iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 7
iptables -A FORWARD -j LOG --log-prefix "BAD_FORWARD: " --log-level 7
iptables -A OUTPUT -j LOG --log-prefix "BAD_OUTPUT: " --log-level 7

日志存储在:

/var/log/messages

示例输出:

Aug  4 13:22:40 centos kernel: BAD_INPUT: IN= OUT=em1 SRC=192.168.1.23 DST=192.168.1.20 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=59228 SEQ=2
Aug  4 13:23:00 centos kernel: BAD_INPUT: IN=em1 OUT= MAC=a2:be:d2:ab:11:af:e2:f2:00:00 SRC=192.168.2.115 DST=192.168.1.23 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=9434 DF PROTO=TCP SPT=58428 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0

答案3

CentOS 7使用systemd的journald作为默认日志系统,并且内核日志(就像来自iptables)不是定向到,/var/log/messages而是定向到journald,并且应该通过将(意味着内核日志)传递给journalctl来显示-k,如下所示:

journalctl -k

查看journalctl的man这里 或网上的许多教程中的任何一个来查找所有选项;但很可能您会使用-f跟踪日志,-b仅包含自上次启动以来的日志,--since按日期选择日志或--no-pager禁用输出上的默认寻呼机。

要生成日志,您必须将-j LOG操作与 iptables 一起使用,如其他响应中所述,并且您很可能希望包含该操作--limit以防止日志泛滥:

iptables -A INPUT -j LOG -limit 1/s --limit-burst 3 --log-prefix "INPUT REJECTED: " --log-level 4

答案4

iptables 将事件记录到/var/log/messagesCentOS 7 中。

相关内容