我在哪里可以找到iptables日志文件,如何更改其位置?

我在我的iptables中有这个规则:
iptables -A INPUT -s 192.168.11.0/24 -j LOG

我的问题是:
iptables的日志文件在哪里,我如何更改它?
4个回答

这些日志是由内核生成的,因此它们会被发送到接收内核日志的文件:/var/log/kern.log
如果您想将这些日志重定向到其他文件,那么不能通过iptables来实现。可以在分发日志的程序(rsyslog)的配置中完成。在iptables规则中,添加一个没有被任何其他内核日志使用的前缀即可。
iptables -A INPUT -s 192.168.11.0/24 -j LOG --log-prefix='[netfilter] '

按照 20-ufw.conf 的示例,创建一个文件在 /etc/rsyslog.d/00-my_iptables.conf 下,内容如下:
:msg,contains,"[netfilter] " -/var/log/iptables.log
& stop

将规则放在前面(/etc/rsyslog.d中的文件名按字典顺序使用),并添加&stop,这样日志只会发送到指定位置,而不会同时发送到默认位置。
Rsyslog必须重新启动才能使配置更改生效。

我没有安装ufw,所以无法在syslog、kern.log或iptables.log中找到日志。 - pylover
3@pylover UFW只是一个例子。我知道你没有iptables.log,我的回答的重点是告诉你如何创建它。如果你使用的是不同版本的Ubuntu(我认为最近的版本不再使用这个文件,而是将内核日志放在/var/log/syslog中),那么你可能没有/var/log/kern.log,但这并不重要。哦,但是如果你使用的是旧版本的Ubuntu,你可能需要安装rsyslog软件包。 - Gilles 'SO- stop being evil'
为了使其在12.10版本上正常工作,我不得不调整rsyslog.d文件,添加以下额外字符:":msg,contains,"[netfilter] " -/var/log/iptables.log" - Daniel
2还有一件事,我需要把文件命名为00-my_iptables.conf,否则iptables仍会记录到kern.log中。 - Valentin Kantor
2也许你可以同时提到& stop命令。这样一来,你就能避免在kern.log文件中出现重复内容,而这些重复内容可能会影响你查看其他重要的内核日志的能力。 - Alexis Wilke
默认日志在RH版本上是/var/log/messages。谢谢你的建议,我需要它! - Brian Thomas
以上的建议是正确的,但这仍然会使syslog、kern.log和messages文件变得混乱。不明显的是,& ~部分需要放在新的一行上。下面是一个完整的例子,对我来说有效:https://superuser.com/questions/1269643/why-does-mean-discard-the-messages-that-were-matched-in-the-previous-line - ᴍᴇʜᴏᴠ
我不得不删除文件名开头的“-”才能使其正常工作。 - jjxtra

我知道这已经太晚了,答案已经被标记为接受的。我只是有一条新信息要提供。 LOG操作的日志文件可以在以下位置找到:Ubuntu和类似的操作系统位于/var/log/syslog,CentOS和类似的操作系统位于/var/log/messages

如果你在找不到正确的文件时遇到麻烦,可以尝试以下方法:
find /var/log -mmin 1

这将找到在过去1分钟内修改的任何文件,在/var/log及其子目录下。 你可能会发现-j LOG可能会更新不止一个文件。

例如,在Ubuntu 18上,/var/log/kern.log/var/log/syslog都受到netfilter日志记录的影响。


2我正在执行 ls /var/log/ 来查找日志文件,但直到我执行 sudo ls /var/log/ 才显示。你的回答帮了我,谢谢。 - Yacine Rouizi
你还可以使用ls命令的-t选项,将最近修改的文件显示在ls列表的顶部。例如:ls -lat /var/log - Jimmix

# 在我的电脑上! # 我在脚本的顶部写了这个
iptables -F
iptables -X
# iptables -A INPUT -m state --state NEW -j LOG \ --log-prefix='[iptables_input] '
iptables -A OUTPUT -m state --state NEW -j LOG \ --log-prefix='[iptables_output] '
# 然后在/var/log/syslog中找到结果 # 只有当其他iptables指令没有被注册之前,LOG指令才会执行

7欢迎来到Ask Ubuntu。一个没有任何说明和解释的脚本并不是一个好的答案。 - user68186