Regola Iptables LOG all'interno di uno spazio dei nomi di rete


9

Sto cercando di impostare le regole di iptables per un contenitore docker. Sto usando nsenter per eseguire il comando iptables all'interno dello spazio dei nomi di rete del contenitore:

# 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

Questo approccio funziona perfettamente ad eccezione delle LOGregole. Quelli non sembrano accedere da nessuna parte. Si noti che la stessa regola applicata al sistema host funziona e registra /var/log/kern.log.

Dove posso trovare l'output di quelle regole del registro? È un problema noto / una limitazione degli spazi dei nomi di rete?


Aggiornamento: ho provato NFLOGinvece ma non funzionerà ancora
Fabian Jakobs,

Ho fatto un test usando un contenitore docker basato su Centos 7 e funziona, l'host è un centos, lo stesso test con Ubuntu Ubuntu 15.04 host e Ubuntu 12.04.5 container non funziona, comunque devi essere sicuro, il syslog è in esecuzione nel tuo host.
c4f4t0r

Sto usando Debian wheezy come host e Ubuntu 14.04 in un contenitore. Lì non funziona. Mi chiedo cosa sia diverso lì.
Fabian Jakobs,

Hai trovato una soluzione a questo?
Gucki,

@gucki Non ho trovato una soluzione per farlo funzionare all'interno dello spazio dei nomi. Ho spostato le regole di registrazione all'esterno del contenitore.
Fabian Jakobs,

Risposte:


8

Come accennato da Donald, le regole LOG di iptables all'interno dei container sono eliminate per impostazione predefinita.

Nei kernel <= 4.10, questo comportamento non può essere modificato senza patchare il kernel. Come detto agrrd, una soluzione alternativa consiste nell'eseguire ulogd in ciascun contenitore e utilizzare le regole NFLOG (o ULOG) di iptables invece delle regole LOG.

Tuttavia, a partire dal kernel 4.11, l'esecuzione echo 1 > /proc/sys/net/netfilter/nf_log_all_netnssull'host (all'esterno del contenitore) farà sì che le regole di registro iptables all'interno di tutti i contenitori accedano all'host. (Vedi questo commit del kernel.)



1

Sono stato in grado di registrare le regole di iptables per i contenitori docker installando ulogd e sostituendo "-j LOG" con "-j ULOG". I pacchetti corrispondenti vengono registrati nella directory / var / log / ulog


Hai installato ulogd sull'host (non fornisce alcun output dalla regola) o all'interno del contenitore (che non si avvia)?
Phillipp,

0

Ho visto un esempio (non correlato al kernel) dell'uso -v /dev/log:/dev/log. Mi chiedo se hai bisogno di fare qualcosa di simile ..

Inoltre, vedo che stai usando nsenter anziché docker exec: quale versione di docker stai utilizzando?


Inoltre non funziona quando non si utilizza affatto la finestra mobile, ma si esegue la netns manualmente dalla riga di comando.
Gucki,

Nee / proc / kmsg o / dev / kmsg e la finestra mobile ti impediscono efficacemente di montarlo nel contenitore.
Phillipp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.