Solusi 1:
Presentasi pengantar Netfilter dan conntrack
Pertama skema wajib tentang aliran Paket di Netfilter dan Jaringan Umum:
Netfilter adalah kerangka pemfilteran paket yang menyisipkan dirinya di atas sisa tumpukan jaringan (diwakili oleh "keputusan perutean" dan bagian kotak putih bertepi bulat lainnya). Netfilter menyediakan kait dan API untuk subsistem dan "klien" lainnya. Di antara bagian tersebut adalah conntrack (pelacak koneksi) dan iptables (atau nftables ). Pemisahan antara Netfilter dan conntrack cukup kabur. Anda bisa mempertimbangkan conntrack sebagai bagian terintegrasi dari Netfilter.
Dalam skema yang menjelaskan berbagai langkah yang dilewati paket, Anda dapat melihat bahwa di beberapa titik (antara raw/PREROUTING dan mangle/PREROUTING, atau antara raw/OUTPUT dan mangle/OUTPUT) paket melintasi conntrack .
Pada titik ini, sambungkan akan mencari di tabel pencariannya sendiri (database pencarian mini disimpan di memori kernel):
- jika karakteristik paket ini tidak ditemukan (dan jika tidak dinyatakan UNTRACKED dalam tabel mentah), tuple dua arah conntrack baru entri (protokol, lalu informasi keluarga dan protokol tertentu:sumber dan port awal, tujuan awal dan port, sumber dan port balasan, tujuan balasan dan port (kedua yang terakhir biasanya kebalikannya, kecuali NAT atau beberapa protokol aneh terlibat, seperti gema reply matching permintaan gema untuk ICMP)) menjelaskan aliran dibuat dengan keadaan BARU.
- jika cocok (ke segala arah) dengan entri sebelumnya dan kompatibel dengan status alur ini, status alur dapat diubah (misalnya:berubah dari BARU menjadi ESTABLISHED jika sebelumnya tidak demikian).
- jika untuk beberapa alasan tertentu paket tidak dapat cocok dengan aliran yang ada meskipun memiliki karakteristiknya (misalnya:paket TCP yang terlambat diterima setelah transmisi ulang sudah berhasil masuk, jadi berada di luar jendela sehubungan dengan urutan dan karung nilai) paket akan diberi tag INVALID.
- ada beberapa kasus lain seperti TERKAIT:ini tentang paket bukan bagian dari aliran itu sendiri tetapi terkait dengan aliran baru yang dapat dikaitkan dengan aliran lain yang sudah ada (yaitu:dalam database). Dua contohnya adalah kesalahan ICMP yang dibuat karena menerima paket (misalnya:port UDP tidak dapat dijangkau) atau ketika pembantu protokol khusus seperti modul kernel
nf_conntrack_ftp
, yang merupakan plugin untuk conntrack subsistem, mendeteksi bahwa paket adalah bagian dari aliran data terpisah yang terkait dengan perintah FTP PASV/EPSV atau PORT/EPRT yang dilakukan pada aliran perintah (pada port 21).
Menjawab pertanyaan
Semua ini dikatakan, inilah jawaban untuk dua poin Anda:
-
di namespace jaringan utama conntrack mulai melacak koneksi segera setelah modulnya (termasuk kemungkinan sub-modul khusus protokol yang relevan) dimuat. Untuk ruang nama jaringan non-awal (kontainer...) ini juga mengharuskan beberapa subsistem lain mereferensikannya (seperti iptables OP modul conntrack atau menggunakan sekali perintah
conntrack
dijelaskan kemudian). Ini adalah default dan sebuah paket harus secara spesifik ditandai sebagai UNTRACKED before kontrak subsistem melihatnya agar paket ini tidak dilacak. Di Linux hanya ada beberapa kasus di mana tidak diperlukan pelacakan, tetapi tentu saja firewall stateful dan NAT stateful/dinamis tidak akan tersedia lagi (NAT steless yang bahkan mungkin perlu menggunakan UNTRACKED di tempat pertama, masih bisa selesai, tetapi tidak dengan iptables . tc atau nftables bisa). Untuk menghindari conntrack menangani beberapa paket, iptables semacam ini aturan dapat digunakan (misalnya:port 80/tcp):iptables -t raw -A PREROUTING -p tcp --dport 80 -j CT --notrack iptables -t raw -A OUTPUT -p tcp --sport 80 -j CT --notrack
-
Saat paket melintasi filter/INPUT dan mencapai aturan ini:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables modul kernel khusus
xt_conntrack
menanyakan conntrack subsistem (ditangani oleh berbagai modul kernel yang relevannf_conntrack*
) dan bertanya tentang status paket ini dalam basis data pencariannya. Jika jawabannya adalahRELATED
atauESTABLISHED
paket cocok dan melanjutkan ke putusan ACCEPT. Sebenarnya hasilnya sudah di-cache di dalam paket saat pertama kali pencarian dilakukan (biasanya dengan conntrack ) jadi ini adalah "pencarian" yang murah. Dengan demikian ini adalah aturan umum untuk menangani aliran yang sudah diterima sebelumnya. Aliran tersebut awalnya dapat diterima dalam aturan yang secara eksplisit menyebutkan-m conntrack --ctstate NEW
atau sekadar aturan yang tidak menyebutkannya tetapi ditempatkan setelah aturan umum ini (tetapi ingat status INVALID, yang biasanya harus DIHAPUS sebelum melakukannya). -
menambahkan peluru:penanganan paket masuk dan paket keluar cukup simetris antara PREROUTING dan OUTPUT (walaupun tidak terlihat simetris):conntrack antarmuka di PREROUTING serta di OUTPUT (dan di beberapa tempat lain, mengingat NAT bekerja dengan conntrack , kecuali untuk paket pertamanya dalam keadaan BARU melintasi iptables tabel nat). Ini mungkin sedikit berbeda dengan deskripsi yang Anda tulis tentang IPFW. Jika server yang menjalankan aplikasi juga membatasi aliran keluar, kemungkinan besar server tersebut memerlukan iptables generik yang sama ini aturan baik di filter/OUTPUT dan di filter/INPUT, untuk mengizinkan paket balasan keluar dari lalu lintas masuk yang sudah diterima untuk lewat.
Informasi tambahan
Ada alat khusus untuk berinteraksi dengan conntrack tabel pencarian subsistem dari conntrack-tools.
-
conntrack
:untuk menanyakan, menghapus, atau memperbarui konten tabel pencarian yang ditangani oleh conntrack .Beberapa contoh.
Anda dapat membuat daftar semua entri yang dilacak (yang bisa menjadi besar tanpa filter tambahan) dengan:
conntrack -L
Jika sistem Anda melakukan NAT (mis. router di depan LAN pribadi, atau menjalankan VM dan kontainer), Anda dapat menggunakan
--any-nat
,--src-nat
atau--dst-nat
untuk hanya menampilkan resp. semua NAT, semua NAT sumber (masquerade), atau semua NAT tujuan (biasanya untuk port yang diteruskan):Pemantauan conntrack secara real-time acara:
conntrack -E
-
conntrackd
:daemon yang dua tujuan utamanya adalah (conntrack) aliran akuntansi dan statistik, atau sinkronisasi stateful firewall cluster stateful ketersediaan tinggi.
Solusi 2:
Pelacakan koneksi adalah fungsi terpisah dari Netfilter, dan tidak dikonfigurasi dengan IPTables.
Di gambar, ada dua conntrack
langkah-langkah di jalur INPUT dan satu di jalur OUTPUT. Langkah-langkah ini mengaitkan masing-masing paket dengan koneksi yang sudah ada yang dilacak di tabel pelacakan koneksi, atau buat entri pelacakan koneksi baru di tabel.
Fungsionalitas Conntrack adalah modul kernel Linux, dan sering disertakan dalam kernel dalam konfigurasi default.
Operasi Conntrack dapat disetel dengan menyesuaikan net.netfilter.nf_conntrack
nilai sysctl.
Alternatif kedua Anda adalah apa yang terjadi. Informasi status direkam oleh fungsi Conntrack, dan aturan IPTables cukup merujuk ke tabel Conntrack untuk mendapatkan informasi.