netfilter / iptables: mengapa tidak menggunakan tabel mentah?

22

Di Linux, kami biasanya menggunakan tabel "filter" untuk melakukan penyaringan umum:

iptables --table filter --append INPUT --source 1.2.3.4 --jump DROP
iptables --table filter --append INPUT --in-interface lo --jump ACCEPT

Menurut diagram alir netfilter di bawah ini, paket pertama kali melakukan perjalanan melalui tabel "raw":

masukkan deskripsi gambar di sini

Jadi kita bisa menulis:

iptables --table raw --append PREROUTING --source 1.2.3.4 --jump DROP
iptables --table raw --append PREROUTING --in-interface lo --jump ACCEPT
  • paket-paket ditangani lebih cepat, tanpa perlu pergi melalui conntrack + mangle + nat + routing. Jadi lebih sedikit CPU / memori yang digunakan (dan pada gilirannya sedikit dikompensasi oleh fakta modul iptable_raw harus dimuat)
  • hanya satu aturan seandainya kotak juga merupakan router (tidak akan ok untuk setiap aturan, jelas) karena tidak perlu menambahkan aturan yang sama untuk filter / forward

Saya hanya melakukan tes cepat, dan ini bekerja dengan sangat baik.
Dokumentasi yang saya temukan selalu menggambarkan tabel mentah untuk digunakan dalam kasus-kasus ketat. Tetapi tidak ada yang memberikan pembenaran sekecil apapun.

Pertanyaan: adakah alasan untuk tidak menggunakan tabel mentah, selain dari yang dogmatis?

Gregory MOUSSAT
sumber
Jika Anda hanya ingin membuang semua lalu lintas dari alamat IP tertentu maka tabel mentah baik-baik saja. Namun firewall seringkali sedikit lebih baik dari itu, sehingga Anda akan berakhir dengan beberapa aturan baku dan beberapa aturan dalam filter. Ini membuat perawatan sakit kepala, dan menyederhanakan yang bernilai beberapa siklus CPU.
Wurtel
1
Jika itu hanya masalah sakit kepala saya pikir kita harus menemukan beberapa contoh berbicara tentang tabel mentah. Karena ini bukan masalahnya, teori sakit kepala mungkin bukan faktor utama.
Gregory MOUSSAT
1
Penulis ipset merekomendasikan penggunaan tabel mentah untuk aturan iptet
Stuart Cardall

Jawaban:

17

Dari man iptables :

raw: This table is used mainly for configuring exemptions from connection
     tracking in combination with the NOTRACK target. It registers at the
     netfilter hooks with higher priority and is thus called before
     ip_conntrack, or any other IP tables.
     It  provides the following built-in chains:

     - PREROUTING (for packets arriving via any network interface)
     - OUTPUT (for packets generated by local processes)

Analisis :

Jadi, tabel RAW adalah sebelum conntrack dan ia dirancang dengan tujuan untuk digunakan untuk menetapkan tanda NOTRACK pada paket yang tidak ingin Anda lacak di netfilter.

Sasaran -j tidak terbatas hanya pada NOTRACK, jadi ya, Anda meng-filter paket di tabel mentah dengan manfaat dari konsumsi CPU / memori yang lebih sedikit.

Paling sering, server tidak perlu melacak semua koneksi. Anda hanya perlu melacak jika Anda perlu memfilter paket di iptables berdasarkan koneksi yang dibuat sebelumnya. Pada server yang hanya melayani tujuan sederhana seperti dengan hanya port 80 (dan mungkin 21) terbuka, tidak memerlukan itu. Dalam hal itu, Anda dapat menonaktifkan pelacakan koneksi.

Namun, jika Anda mencoba menjalankan router NAT, segalanya menjadi sedikit rumit. Untuk melakukan sesuatu NAT, Anda perlu melacak koneksi tersebut sehingga Anda dapat mengirimkan paket dari jaringan luar ke jaringan internal.

Jika seluruh koneksi diatur dengan NOTRACK, maka Anda tidak akan dapat melacak koneksi yang terkait baik, conntrack dan nat helpers tidak akan berfungsi untuk koneksi yang tidak dilacak, demikian pula kesalahan ICMP terkait tidak akan berhasil. Anda harus membuka ini secara manual dengan kata lain. Ketika datang ke protokol kompleks seperti FTP dan SCTP dan lainnya, ini bisa sangat sulit untuk dikelola.

Gunakan kasing :

Salah satu contohnya adalah jika Anda memiliki router yang sangat diperdagangkan sehingga Anda ingin firewall untuk lalu lintas masuk dan keluar, tetapi tidak lalu lintas diarahkan. Kemudian, Anda dapat mengatur tanda NOTRACK untuk mengabaikan lalu lintas yang diteruskan untuk menghemat daya pemrosesan.

Contoh lain ketika NOTRACK dapat digunakan adalah jika Anda memiliki web-server yang sangat diperdagangkan, Anda kemudian dapat menetapkan aturan yang mengubah pelacakan untuk port 80 pada semua alamat IP yang dimiliki secara lokal, atau yang benar-benar melayani lalu lintas web. Anda kemudian dapat menikmati pelacakan stateful pada semua layanan lain, kecuali untuk lalu lintas web yang mungkin menghemat daya pemrosesan pada sistem yang sudah kelebihan beban.

Contoh -> menjalankan-semi-stateless-linux-router-untuk-private-network

Kesimpulan : Tidak ada alasan kuat untuk tidak menggunakan tabel mentah, tetapi ada beberapa alasan untuk berhati-hati saat menggunakan target NOTRACK di tabel mentah.

Facundo Victor
sumber