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?


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.)



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


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?


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.