Regra LOG de Iptables dentro de um namespace de rede

7

Estou tentando configurar as regras do iptables para um contêiner docker. Estou usando o nsenter para executar o comando iptables dentro do namespace da rede do container:

# 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

Essa abordagem funciona perfeitamente, exceto pelas regras LOG . Aqueles não parecem logar em qualquer lugar. Observe que a mesma regra aplicada ao sistema host funciona e registra em /var/log/kern.log .

Onde posso encontrar a saída dessas regras de log? Este é um problema / limitação conhecido dos namespaces de rede?

    
por Fabian Jakobs 13.05.2015 / 15:44

4 respostas

3

A saída de alvos de LOG do iptables de dentro de um espaço de nomes de rede é suprimida por design para evitar que os contêineres doEMem seu host, excedendo seus buffers de log.

promova a introdução da alteração

linha de código fonte relevante no kernel atual

    
por 03.03.2016 / 08:08
2

Como Donald mencionou, as regras de LOG do iptables dentro de contêineres são suprimidas por padrão.

Nos kernels < = 4.10, este comportamento não pode ser ajustado sem o patch do kernel. Como agrrd mencionou, uma solução alternativa é executar o ulogd em cada contêiner e usar as regras do iptables NFLOG (ou ULOG) em vez das regras do LOG.

No entanto, a partir do kernel 4.11, executar echo 1 > /proc/sys/net/netfilter/nf_log_all_netns no host (fora do container) fará com que as regras de LOG do iptables dentro de todos os containers se conectem ao host. (Veja este commit do Kernel .)

    
por 19.07.2017 / 17:23
1

Consegui registrar regras de iptables para contêineres do docker instalando ulogd e substituindo "-j LOG" por "-j ULOG". Pacotes combinados são registrados no diretório / var / log / ulog

    
por 24.02.2016 / 16:58
0

Eu vi um exemplo (não relacionado ao kernel) de usar -v /dev/log:/dev/log . Eu me pergunto se você precisa fazer algo parecido ..

Além disso, vejo que você está usando nsenter em vez de docker exec : qual versão do docker você está executando?

    
por 22.05.2015 / 20:34