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 LOG
reglas. 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?
networking
iptables
docker
containers
Fabian Jakobs
fuente
fuente
NFLOG
lugar, pero todavía no funcionaRespuestas:
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_netns
en 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).fuente
El diseño suprime la salida de los objetivos de LOG de iptables desde el interior de un espacio de nombres de red para evitar que los contenedores DOSing su host al desbordar sus buffers de registro.
comprometerse introduciendo el cambio
línea de código fuente relevante en el núcleo actual
fuente
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
fuente
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?fuente