Regla LOG de Iptables dentro de un espacio de nombres de red

9

Estoy tratando de configurar las reglas de iptables para un contenedor docker. Estoy usando nsenter para ejecutar el comando iptables dentro del espacio de nombres de red del contenedor:

# 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

Este enfoque funciona perfectamente, excepto por las LOGreglas. Esos no parecen iniciar sesión en ningún lado. Tenga en cuenta que la misma regla aplicada al sistema host funciona y se registra en /var/log/kern.log.

¿Dónde puedo encontrar el resultado de esas reglas de registro? ¿Es este un problema / limitación conocida de los espacios de nombres de red?

Fabian Jakobs
fuente
Actualización: intenté en su NFLOGlugar, pero todavía no funciona
Fabian Jakobs
Hice una prueba usando un contenedor docker basado en centos 7 y funciona, el host es un centos, la misma prueba con ubuntu Ubuntu 15.04 host y ubuntu 12.04.5 container no funciona, de todos modos debes estar seguro, el syslog se está ejecutando en tu host.
c4f4t0r
Estoy usando Debian wheezy como host y Ubuntu 14.04 en un contenedor. Ahí no funciona. Me pregunto qué es diferente allí.
Fabian Jakobs
¿Ha encontrado una solución para esto?
gucki
@gucki No encontré una solución para que funcione dentro del espacio de nombres. Moví las reglas de registro fuera del contenedor.
Fabian Jakobs

Respuestas:

8

Como mencionó Donald, las reglas LOG de iptables dentro de los contenedores se suprimen de forma predeterminada.

En los núcleos <= 4.10, este comportamiento no se pudo ajustar sin parchear el núcleo. Como se mencionó anteriormente, una solución alternativa es ejecutar ulogd en cada contenedor y usar las reglas iptables NFLOG (o ULOG) en lugar de las reglas LOG.

Sin embargo, a partir del kernel 4.11, la ejecución echo 1 > /proc/sys/net/netfilter/nf_log_all_netnsen el host (fuera del contenedor) hará que las reglas LOG de iptables dentro de todos los contenedores se registren en el host. (Ver este Kernel Commit).

Paul Donohue
fuente
1

Pude registrar las reglas de iptables para los contenedores docker instalando ulogd y reemplazando "-j LOG" con "-j ULOG". Los paquetes coincidentes se registran en el directorio / var / log / ulog

agrrd
fuente
¿Instaló ulogd en el host (no da salida de la regla) o dentro del contenedor (que no se inicia)?
Phillipp
0

He visto un ejemplo (no relacionado con el núcleo) del uso -v /dev/log:/dev/log. Me pregunto si necesitas hacer algo similar ...

Además, veo que está utilizando nsenter en lugar de docker exec: ¿qué versión de Docker está ejecutando?

Cameron Kerr
fuente
Tampoco funciona cuando no se usa Docker, sino que se conecta manualmente desde la línea de comandos.
gucki
Necesitaría / proc / kmsg o / dev / kmsg y la ventana acoplable efectivamente le impide montar eso en el contenedor.
Phillipp