如何在 Docker 容器内启用 iptables 日志记录?

问题描述 投票:0回答:2

我最近创建了一些 Docker 镜像,以便设置一个具有开放 VPN 和防火墙 (iptables) 支持的容器。

到目前为止,大多数事情都工作正常,但由于我的防火墙存在一些问题,我添加了更多 iptables 规则来将丢弃的包记录到 /var/log/messages。但我意识到,即使删除了某些内容,/var/log 下也找不到日志文件。

因此我的问题是:Alpine Linux 如何处理(系统)日志记录以及如何具体检查 iptables 日志?

更新

正如 larsks 所指出的,为了防止通过泛洪日志进行 DDOS 攻击,内核中已禁用默认日志记录。

为了使日志记录正常工作,我安装了 ulogd 并按照此处的说明进行操作。

logging docker
2个回答
18
投票

问题不在于 Alpine Linux。 问题是,您正在尝试从 Docker 容器内的 iptables 堆栈进行日志记录,据我所知,内核不会处理除全局名称空间之外的网络名称空间中的 iptables LOG 目标生成的消息。 网络命名空间中的日志消息被有意抑制,以防止容器对具有大量日志消息的主机执行 DOS 攻击。 请参阅内核中的此提交,它显式禁用了容器中的 LOG 支持。

最好的办法是查看防火墙规则上的数据包计数,以了解匹配的内容以及数据包被丢弃的位置。 您可能还对

NFLOG
目标和 ulogd 有一些运气。


0
投票

正如 ens 在评论中指出的,这些天登录网络命名空间时,默认情况下默认禁用:

$ sysctl net.netfilter.nf_log_all_netns
net.netfilter.nf_log_all_netns = 0

您可以通过以下方式启用它:

$ sudo sysctl net.netfilter.nf_log_all_netns=1
net.netfilter.nf_log_all_netns = 1

要确认其有效,请启动

journalctl -ef
和:

$ docker run --privileged --rm -it alpine:3.20
/ # apk add iptables curl
/ # iptables -A INPUT -j LOG --log-prefix 'docker: filter: INPUT: '
/ # iptables -A OUTPUT -j LOG --log-prefix 'docker: filter: OUTPUT: '
/ # curl google.com

以“docker:filter:”为前缀的消息应该出现在日志中。

© www.soinside.com 2019 - 2024. All rights reserved.