Apa perbedaan antara -m conntrack --ctstate dan -m state --state

85

Saya membaca howto ini , dan ada sesuatu seperti ini:

Kami dapat mengizinkan sesi yang ditetapkan untuk menerima lalu lintas:

$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Aturan di atas tidak memiliki spasi di kedua sisi koma dalam DIDIRIKAN, TERKAIT

Jika baris di atas tidak berfungsi, Anda mungkin menggunakan VPS kastrasi yang penyedianya belum menyediakan ekstensi, dalam hal ini versi yang lebih rendah dapat digunakan sebagai upaya terakhir:

$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Apakah ada perbedaan yang signifikan dalam bekerja antara -m conntrack --ctstatedan -m state --state? Mereka mengatakan bahwa seseorang mungkin tidak bekerja, tetapi mereka tidak mengatakan mengapa. Mengapa saya lebih suka yang satu daripada yang lain?

Mikhail Morfikov
sumber
1
Kemungkinan dup serverfault.com/questions/358996/…
John1024
Saya melihatnya, haruskah saya menghapus pertanyaan ini?
Mikhail Morfikov
1
@ John1024 - duplikat hanya dalam satu situs SE. Tidak apa-apa untuk mengirim pertanyaan serupa di beberapa situs SE selama Q berada dalam aturan yang mengatur situs SE tertentu!
slm
1
@MikhailMorfikov - pertanyaan Anda, meskipun mirip dengan Q lain di situs SE lainnya baik-baik saja di sini!
slm
1
@ Motor - jika Anda melihat "titik data # 4" di jawaban saya statesebenarnya adalah alias untuk conntrack. Jadi tidak masalah. Saya kira di beberapa titik di masa depan mereka mungkin menghapus statesama sekali tetapi untuk saat ini tidak masalah jika Anda menggunakannya.
slm

Jawaban:

99

Saya tidak mengklaim sebagai ahli dengan iptablesaturan, tetapi perintah pertama menggunakan ekstensi pelacakan koneksi ( conntrack) sementara yang kedua adalah menggunakan stateekstensi.

Titik data # 1

Menurut dokumen ini dengan conntrackekstensi digantikan state.

 Obsolete extensions:
  • -m state: replaced by -m conntrack

Titik data # 2

Meski begitu saya menemukan T&J SF ini berjudul: Pertanyaan Firewall tentang status dan kebijakan? di mana OP mengklaim telah mengajukan pertanyaan ini pada IRC di # iptables @ freenode. Setelah mendiskusikannya di sana ia sampai pada kesimpulan bahwa:

Secara teknis pertandingan conntrack menggantikan - dan begitu usang - pertandingan negara. Namun secara praktis pertandingan negara tidak usang dengan cara apa pun.

Titik data # 3

Terakhir saya menemukan Tanya Jawab SF berjudul: Iptables, apa perbedaan antara -m state dan -m conntrack? . Jawaban dari pertanyaan ini mungkin merupakan bukti dan saran terbaik tentang cara melihat penggunaan conntrackdan state.

kutipan

Keduanya menggunakan internal kernel yang sama di bawahnya (subsistem pelacakan koneksi).

Header xt_conntrack.c:

xt_conntrack - Netfilter module to match connection tracking
information. (Superset of Rusty's minimalistic state match.)

Jadi saya akan mengatakan - modul negara lebih sederhana (dan mungkin lebih sedikit kesalahan rawan). Ini juga lebih lama di kernel. Conntrack di sisi lain memiliki lebih banyak opsi dan fitur [1] .

Panggilan saya adalah menggunakan conntrack jika Anda membutuhkan fitur-fiturnya, jika tidak tetap dengan modul negara.

[1] Cukup bermanfaat seperti "-m conntrack --ctstate DNAT -j MASQUERADE" perutean / perbaikan DNAT ;-)

Titik data # 4

Saya menemukan utas ini dari diskusi [email protected] netfilte / iptables, berjudul: state match sudah usang 1.4.17 , yang cukup banyak mengatakan bahwa stateitu hanyalah alias conntracksehingga tidak terlalu penting yang Anda gunakan, di kedua keadaan yang Anda gunakan conntrack.

kutipan

Sebenarnya saya harus setuju. Mengapa kita tidak menyimpan "state" sebagai alias dan menerima sintaks lama di "conntrack"?

state saat ini alias dan diterjemahkan ke conntrack di iptables jika kernel memilikinya. Tidak ada skrip yang rusak.

Jika aliasing dilakukan di userspace, bagian kernel dapat dihapus - suatu hari nanti mungkin.

Aliasing sudah dilakukan di userspace. Satu jenis di "state" dan itu dikonversi menjadi "conntrack" dan yang kemudian dikirim ke kernel. (Jadi sejauh yang saya lihat apakah ipt_state, dll alias modul ditambahkan ke modul conntrack, bahkan modul state kernel dapat dihapus.)

Referensi

slm
sumber
3

Saya bukan ahli netfilter, tetapi saya melihat halaman man iptables-extension dan mengejutkan, itu dia

The "state" extension is a subset of the "conntrack" module.

Jadi status adalah bagian dari conntrack dan hanya versi yang lebih sederhana jika Anda benar-benar hanya perlu - negara dan bukan fitur yang lebih mewah dari conntrack

白 川 マ セ ル
sumber