Aturan LOG Iptables di dalam namespace jaringan

9

Saya mencoba menyiapkan aturan iptables untuk wadah buruh pelabuhan. Saya menggunakan nsenter untuk menjalankan perintah iptables di dalam namespace jaringan wadah:

# 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

Pendekatan ini berfungsi dengan baik kecuali untuk LOGaturan. Mereka sepertinya tidak masuk di mana pun. Perhatikan bahwa aturan yang sama yang diterapkan pada sistem host berfungsi dan masuk /var/log/kern.log.

Di mana saya dapat menemukan output dari aturan log itu? Apakah ini masalah / batasan ruang nama jaringan yang diketahui?

Fabian Jakobs
sumber
Pembaruan: Saya mencoba NFLOGsebagai gantinya tetapi tetap tidak berhasil
Fabian Jakobs
Saya melakukan tes menggunakan buruh pelabuhan berbasis pada centos 7 dan itu berhasil, tuan rumah adalah centos, tes yang sama dengan Ubuntu 15,04 host Ubuntu dan wadah Ubuntu 12,04 tidak bekerja, lagi pula Anda harus yakin, syslog sedang berjalan di host Anda.
c4f4t0r
Saya menggunakan Debian wheezy sebagai tuan rumah dan Ubuntu 14,04 dalam sebuah wadah. Itu tidak bekerja. Saya bertanya-tanya apa yang berbeda di sana.
Fabian Jakobs
Apakah Anda menemukan solusi untuk ini?
gucki
@ Gucki Saya tidak menemukan solusi untuk membuatnya bekerja di dalam namespace. Saya memindahkan aturan logging di luar wadah.
Fabian Jakobs

Jawaban:

8

Seperti yang disebutkan Donald, aturan LOG iptables di dalam kontainer ditekan secara default.

Dalam kernel <= 4.10, perilaku ini tidak dapat disesuaikan tanpa menambal kernel. Seperti yang disebutkan agrrd, penyelesaian adalah menjalankan ulogd di setiap wadah dan menggunakan aturan iptables NFLOG (atau ULOG) alih-alih aturan LOG.

Namun, pada kernel 4.11, berjalan echo 1 > /proc/sys/net/netfilter/nf_log_all_netnsdi host (di luar wadah) akan menyebabkan aturan LOG iptables di dalam semua kontainer untuk login ke host. (Lihat Komit Kernel ini.)

Paul Donohue
sumber
1

Saya dapat mencatat aturan iptables untuk kontainer buruh pelabuhan dengan menginstal ulogd dan mengganti "-j LOG" dengan "-j ULOG". Paket yang cocok dicatat ke direktori / var / log / ulog

agrrd
sumber
Apakah Anda menginstal ulogd pada host (tidak memberikan output dari aturan) atau di dalam wadah (yang tidak dimulai)?
Phillipp
0

Saya telah melihat contoh (tidak terkait kernel) menggunakan -v /dev/log:/dev/log. Saya ingin tahu apakah Anda perlu melakukan sesuatu yang serupa ..

Juga, saya melihat bahwa Anda menggunakan nsenter daripada docker exec: versi buruh pelabuhan apa yang Anda jalankan?

Cameron Kerr
sumber
Ini juga tidak berfungsi ketika tidak menggunakan buruh pelabuhan sama sekali, tetapi menjaring secara manual dari baris perintah.
gucki
Anda tidak akan menggunakan / proc / kmsg atau / dev / kmsg dan buruh pelabuhan secara efektif mencegah Anda memasang itu dalam wadah.
Phillipp