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

9

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

到目前为止,大部分东西都正常工作,但是由于防火墙出现了一些问题,我添加了更多的iptables规则来记录被丢弃的数据包到/var/log/messages。然而,我发现即使有东西被丢弃了,在/var/log下也找不到日志文件。

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

更新

正如larsks指出的那样,默认情况下内核已禁用日志记录,以防止DDOS攻击通过淹没日志。 为了让日志记录正常工作,我安装了ulogd并按照这里的说明进行操作。

1个回答

17
问题不在于Alpine Linux。问题在于您正在尝试从Docker容器内部的iptables堆栈中进行日志记录,据我所知,内核无法处理在除全局命名空间之外的网络命名空间中生成的iptables LOG目标生成的消息。网络命名空间中的LOG消息被有意地压制,以防止容器通过大量的日志消息对主机执行DOS攻击。请参见内核中此提交,其中明确禁用了容器中的LOG支持。
您最好查看防火墙规则的数据包计数,以查看哪些规则匹配,并确定数据包被丢弃的位置。您也可以尝试使用NFLOG目标和ulogd来解决问题。

3
这太蠢了。我无法通过为每个UID添加iptables规则来区分容器内的50k个UID。他们为什么不把这变成一个选项? - Phillipp
10
在较新的内核版本中,可以使用命令 echo 1 > /proc/sys/net/netfilter/nf_log_all_netns 启用网络名称空间日志记录。 - ens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接