Estou tentando configurar as regras do iptables para um contêiner de docker. Estou usando o nsenter para executar o comando iptables dentro do namespace de rede do contêiner:
# 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 LOG
regras. Aqueles não parecem registrar em qualquer lugar. Observe que a mesma regra aplicada ao sistema host funciona e faz logon no /var/log/kern.log
.
Onde posso encontrar a saída dessas regras de log? Esse é um problema / limitação conhecido dos namespaces de rede?
networking
iptables
docker
containers
Fabian Jakobs
fonte
fonte
NFLOG
vez, mas ainda não vai funcionarRespostas:
Como Donald mencionou, as regras LOG do iptables dentro dos contêineres são suprimidas por padrão.
Nos kernels <= 4.10, esse comportamento não pode ser ajustado sem o patch do kernel. Como mencionado anteriormente, uma solução alternativa é executar o ulogd em cada contêiner e usar as regras iptables NFLOG (ou ULOG) em vez das regras LOG.
No entanto, a partir do kernel 4.11, a execução
echo 1 > /proc/sys/net/netfilter/nf_log_all_netns
no host (fora do contêiner) fará com que as regras LOG do iptables dentro de todos os contêineres sejam registradas no host. (Veja este Kernel Commit.)fonte
A saída dos destinos LOG do iptables de dentro de um namespace de rede é suprimida pelo design para impedir que contêineres DOSem seus hosts substituindo seus buffers de log.
comprometer a introdução da mudança
linha de código fonte relevante no kernel atual
fonte
Consegui registrar as regras do iptables para contêineres do docker instalando o ulogd e substituindo "-j LOG" por "-j ULOG". Pacotes correspondentes são registrados no diretório / var / log / ulog
fonte
Eu vi um exemplo (não relacionado ao kernel) de uso
-v /dev/log:/dev/log
. Gostaria de saber se você precisa fazer algo semelhante ..Além disso, vejo que você está usando o nsenter e não
docker exec
: qual versão do docker você está executando?fonte