Belajar Iptables - State & conntrack
Episode 7 of 23

Belajar Iptables - State & conntrack

Membangun firewall stateful dengan connection tracking: memahami modul conntrack dan --ctstate ESTABLISHED RELATED, perbedaannya dengan modul state yang lama, serta pola rule stateless vs stateful dan prioritas ESTABLISHED RELATED di awal chain

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Hingga episode 6, semua aturan yang kita buat bersifat stateless — setiap paket dinilai sendiri-sendiri tanpa ingatan. Tapi jaringan nyata bersifat stateful: balasan paket yang kita kirim keluar harus bisa masuk kembali. Kalau firewall cuma punya ingatan kosong, kalian harus membuka semua port masuk secara manual — atau memutus semua koneksi keluar.

Solusinya adalah connection tracking (conntrack): kernel melacak setiap koneksi yang sudah ada, dan iptables bisa bertanya "paket ini bagian dari koneksi yang sudah sah?" lewat modul conntrack. Ini adalah salah satu konsep yang membedakan firewall profesional dari sekadar kumpulan aturan DROP.

Apa Itu Connection Tracking

conntrack adalah sub-sistem netfilter yang merekam status setiap koneksi TCP/UDP/ICMP yang melewati mesin. Dari catatan ini, sebuah paket diklasifikasikan ke dalam state:

StateArti
NEWKoneksi baru — paket pertama dari arah tertentu
ESTABLISHEDBagian dari koneksi yang sudah terekam dua arah
RELATEDKoneksi baru yang lahir dari koneksi yang sudah ada (mis. koneksi data FTP, ICMP error)
INVALIDPaket tidak cocok dengan koneksi mana pun yang dikenal

Lihat tabel conntrack secara langsung:

Lihat tabel conntrack
sudo conntrack -L
text
tcp      6 431999 ESTABLISHED src=192.168.1.10 dst=93.184.216.34 sport=41234 dport=80 ...

Setiap baris adalah satu koneksi yang sedang dilacak — lengkap dengan arah, port, dan waktu hidupnya. Di episode 18 tabel ini jadi alat diagnosis utama.

Modul conntrack vs Modul state

iptables punya dua modul untuk hal yang sama:

Dua cara menulis rule stateful
# Modern (disarankan)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 
# Lama (deprecated tapi masih dipakai)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-m conntrack --ctstate adalah versi modern yang direkomendasikan; -m state --state adalah alias lama yang masih banyak di tutorial dan script legacy. Perbedaannya murni sintaksis — keduanya membaca tabel conntrack yang sama. Saat membaca script lama kalian, ketahuilah bahwa keduanya bisa ditemui.

Pola Firewall Stateful

Inilah pola yang menjadi tulang punggung hampir semua ruleset produksi: izinkan koneksi keluar, terima balasannya, tapi tolak koneksi masuk yang baru:

Firewall stateful dasar
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
 
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

Alur berpikirnya:

  1. Policy INPUT = DROP: koneksi baru yang tidak dikenal ditolak.
  2. Baris pertama menerima semua balasan koneksi yang sudah terekam — tanpa harus membuka port satu per satu.
  3. Baris kedua membuka SSH, dan hanya untuk paket NEW — koneksi SSH yang benar-benar baru. Paket SSH lanjutan sudah diliput baris pertama.

Note

Karena aturan ESTABLISHED,RELATED berada di atas, urutan NEW di bawahnya bisa memakai -m conntrack --ctstate NEW sebagai konfirmasi eksplisit. Sebenarnya --dport 22 saja sudah cukup karena paket lanjutan sudah ditangkap baris pertama — tapi menulis NEW membuat niat kalian jelas bagi yang membaca ruleset.

State RELATED terlihat paling jelas pada FTP aktif. FTP memakai dua koneksi: kontrol di port 21 dan data di port 20 — dan koneksi data lahir karena koneksi kontrol sudah ada. Dengan conntrack, firewall otomatis mengenali koneksi data FTP sebagai RELATED:

FTP membutuhkan RELATED
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT

Tanpa conntrack, kalian harus membuka port 20 juga — dan bahkan itu tidak cukup karena port data FTP sering dinamis. RELATED adalah alasan kenapa firewall modern bisa mendukung protokol kompleks dengan sedikit aturan.

Stateless vs Stateful: Kapan Memakai yang Mana

AspekStatelessStateful
Cara kerjaSetiap paket dinilai sendiriKernel melacak koneksi
Rule--dport 22 tanpa state--ctstate ESTABLISHED,RELATED
ResikoPerlu membuka banyak portOverhead tabel conntrack
Kapan dipakaiAntarmuka segment, protokol sederhanaServer internet-facing, NAT, routing

Stateless tetap berguna untuk memfilter trafik massal dengan biaya rendah (misal blokir subnet di FORWARD). Stateful adalah default untuk proteksi layanan nyata.

NOTRACK: Mematikan Tracking

Kadang kalian justru ingin melepas beberapa trafik dari tracking — misalnya trafik volume tinggi antar server internal yang tidak perlu status:

Lepaskan trafik dari tracking
sudo iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 6379 -j NOTRACK
sudo iptables -t raw -A OUTPUT -o eth0 -p tcp --dport 6379 -j NOTRACK

Karena conntrack berjalan setelah chain raw (dari episode 2), target NOTRACK membuat paket tersebut tidak dicatat. Untungnya kecil, kontrol lebih besar — tetapi ingat: paket yang di-NOTRACK juga tidak akan pernah cocok dengan aturan --ctstate apa pun. Pakai hanya saat benar-benar yakin.

Common Pitfalls

  • Mengikuti rule ESTABLISHED,RELATED di akhir chain — padahal justru harus di awal, supaya paket balasan tidak perlu melewati aturan lain lebih dulu.
  • Menulis --ctstate NEW untuk protokol yang tidak ditrack — ICMP ping misalnya membutuhkan icmp di rule-nya sendiri.
  • Lupa bahwa INVALID harus di-drop — paket yang tidak cocok dengan koneksi mana pun (sering = koneksi yang sudah mati atau spoofed) paling baik di-DROP tegas. Kita lakukan di episode 16.

Penutup

Inti yang harus dibawa pulang:

  • conntrack melacak koneksi dan mengklasifikasikannya: NEW, ESTABLISHED, RELATED, INVALID.
  • Modul -m conntrack --ctstate menggantikan -m state --state yang lama.
  • Pola baku: ESTABLISHED,RELATED di awal chain, layanan publik dengan NEW di bawahnya.
  • NOTRACK di tabel raw melepas trafik dari tracking — pakai dengan hati-hati.

Di episode 8 selanjutnya kita akan membahas save & restore ruleset — mempertahankan aturan kalian melewati reboot dengan iptables-save/iptables-restore, file /etc/iptables/rules.v4, dan netfilter-persistent, plus strategi rollback cepat ketika konfigurasi baru bermasalah. Sampai jumpa di episode 8!

Belajar Iptables - State & conntrack | Belajar Iptables