Apakah tcpdump memintas iptables?

48

Saya keliru men-setup DNS server resolver terbuka, yang segera digunakan untuk sekelompok serangan DDoS yang berasal dari suatu tempat dari / ke rusia. Untuk alasan itu saya sepenuhnya memblokir port 53 pada kedua server DNS untuk semua orang kecuali untuk IP tepercaya. Tidak berfungsi, saya tidak dapat terhubung lagi dengan mereka, tetapi yang aneh bagi saya adalah ketika saya menjalankan tcpdump pada eth1 (yang merupakan antarmuka pada server dengan internet publik) saya melihat banyak paket masuk dari penyerang ke port 53.

Apakah normal jika tcpdump menampilkan paket-paket ini walaupun iptables menjatuhkannya? Atau apakah saya mengkonfigurasi iptables salah?

Di sisi lain saya tidak melihat paket keluar dari server saya, yang saya lakukan sebelumnya, jadi saya kira firewall itu berfungsi. Ini hanya mengejutkan saya bahwa kernel tidak menjatuhkan paket sepenuhnya? Atau tcpdumpterhubung ke kernel dengan cara yang melihat paket bahkan sebelum mereka sampai ke iptables?

Petr
sumber

Jawaban:

61

Ini pertanyaan yang bagus.

Sebagai soal fakta, tcpdump adalah perangkat lunak pertama yang ditemukan setelah kawat (dan NIC, jika Anda mau) di jalan IN , dan yang terakhir di jalan OUT .

Wire -> NIC -> tcpdump -> netfilter/iptables

iptables -> tcpdump -> NIC -> Wire

Dengan demikian ia melihat semua paket mencapai antarmuka Anda, dan semua paket meninggalkan antarmuka Anda. Karena paket-paket ke port 53 tidak mendapatkan balasan, seperti yang terlihat oleh tcpdump, Anda telah berhasil memverifikasi bahwa aturan iptables Anda telah dikonfigurasi dengan benar.

EDIT

Mungkin saya harus menambahkan beberapa detail. tcpdump didasarkan pada libpcap , perpustakaan yang membuat soket paket . Ketika sebuah paket reguler diterima dalam tumpukan jaringan, kernel akan memeriksa terlebih dahulu untuk melihat apakah ada soket paket yang tertarik pada paket yang baru tiba dan, jika ada, itu meneruskan paket itu ke soket paket tersebut. Jika opsi ETH_P_ALL dipilih, maka semua protokol melewati soket paket.

libpcap mengimplementasikan satu soket paket seperti itu dengan opsi yang diaktifkan, menyimpan salinan untuk penggunaannya sendiri, dan menggandakan paket kembali ke tumpukan jaringan, di mana ia diproses oleh kernel dengan cara biasa, termasuk mengirimkannya terlebih dahulu ke netfilter , kernel -Ruang ruang iptables . Hal yang sama, dalam urutan terbalik ( yaitu , netfilter pertama kemudian bertahan lewat soket paket), di jalan keluar.

Apakah ini rentan terhadap peretasan? Tapi tentu saja. Tentu saja ada rootkit konsep-bukti menggunakan libpcap untuk mencegat komunikasi yang ditujukan ke rootkit sebelum firewall dapat menanganinya. Tetapi bahkan ini artinya jika dibandingkan dengan fakta bahwa permintaan Google yang sederhana menemukan kode yang berfungsi menyembunyikan lalu lintas bahkan dari libpcap . Namun, sebagian besar profesional berpikir keuntungan jauh lebih besar daripada kerugiannya, dalam debugging filter paket jaringan.

MariusMatutiae
sumber
Apakah ada cara untuk menampilkannya sehingga saya bisa melihat paket mana yang diizinkan dan mana yang dijatuhkan?
Petr
2
@Petr Anda dapat mencatat paket yang dijatuhkan iptables, thegeekstuff.com/2012/08/iptables-log-packets
MariusMatutiae