iptables LOG规则在一个networking命名空间内

我正在尝试为Docker容器设置iptables规则。 我使用nsenter在容器的networking命名空间内执行iptables命令:

# log access to port 8080 PID=$(docker inspect --format "{{.State.Pid}}" $ID) /home/ubuntu/nsenter -n -t $PID iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 8080 -j LOG 

除了LOG规则以外,这种方法可以很好地工作 那些似乎没有login任何地方。 请注意,应用于主机系统的相同规则工作并logging到/var/log/kern.log

我在哪里可以find这些日志规则的输出? 这是networking命名空间的已知问题/限制吗?

从networking命名空间内的iptables LOG目标的输出被devise抑制,以防止容器通过溢出其日志缓冲区来对其主机进行DOS操作。

承诺介绍改变

在当前内核中相关的源代码行

我能够通过安装ulogd并用“-j ULOG”replace“-j LOG”来loggingdocker容器的iptables规则。 匹配的数据包被logging到/ var / log / ulog目录

正如唐纳德所说,默认情况下,禁止容器内的iptables LOG规则。

在内核<= 4.10中,如果不修补内核,则无法调整此行为。 正如agrrd所提到的,解决方法是在每个容器中运行ulogd,并使用iptables NFLOG(或ULOG)规则而不是LOG规则。

但是,从内核4.11开始,主机上(容器外部)运行echo 1 > /proc/sys/net/netfilter/nf_log_all_netns会导致所有容器内的iptables LOG规则login到主机。 (请参阅此内核提交。)

我见过一个使用-v /dev/log:/dev/log的例子(不是内核相关的)。 我想知道你是否需要做类似的事情

另外,我看到你正在使用nsenter而不是docker docker exec :你在运行什么版本的docker?