我的 centos 7 上有 iptables。我的防火墙被禁用。如何记录我的 iptables 事件?在 debian 上它是 dmesg 选项,但我不知道如何在 centos 上设置它。
我想记录所有 iptables 事件。没有具体规定。
答案1
当数据包与iptables ... -j LOG
规则匹配时,会生成内核日志消息。您可以使用 选项指定消息的严重性级别--log-level <level>
,其中<level>
可以是标准系统日志级别标识符之一:emerg
、alert
、crit
、error
、warning
、notice
或。info
debug
这些日志消息的处理方式是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/messages
CentOS 7 中。