我有许多 iptables 规则会记录违规数据包。我的日志转到/var/log/iptables.log
但日志以 24 小时制显示:Mar 13 00:13:55 kernel: DROPPED Attempted ping
,我希望它们以 12 小时制 AM/PM 时间显示。我已经找到了一种方法来获取规则在日志中违规的日期和时间--log-prefix "$(date +%B" "%d" "%r) DROPPED Port scan:
。我的问题是 iptables--log-prefix
限制为 29-30 个字符,我需要一种方法来更改选项的最大长度--log-prefix
。我尝试编辑源代码并重新编译,但我收到错误(仅当使用 -j LOG 时)说某些东西是错误的版本(即使源代码与我之前的版本相同)
答案1
我已经找到了一种方法来获取日志中违反规则的日期和时间
--log-prefix "$(date +%B" "%d" "%r)
不,这只是提供了规则生效的日期和时间创建。如果您使用此功能,您将永远收到具有完全相同时间戳的消息。
shell 不会针对每个数据包评估 iptables 规则;它们只处理一次,上传到内核,因此核心需要支持日志前缀内的任何类型的扩展。
(但不会,因为 -j LOG 消息转到已经具有数字时间戳的内核日志,并且日志收集软件的工作是将它们转换为您喜欢的格式。)
我的日志存储在 /var/log/iptables.log 中,但日志以 24 小时制显示:[...] 我希望它们以 12 小时制 AM/PM 时间显示
这些文件/var/log/*.log
通常由系统日志服务(例如 syslog-ng、rsyslog、sysklogd)。编辑它们的配置以更改时间戳格式。
例如,如果你的日志是由 syslog-ng 收集的,请定义一个模板:
template t_12hour_file {
template("[$DAY/$YEAR/$MONTH $HOUR12:$MIN:$SEC $AMPM] $MSGHDR$MSG\n");
};
destination d_iptables {
file("/var/log/iptables.log" template(t_12hour_file));
};
也可以看看rsyslog。