TDCTF Academy Logo TDCTF ACADEMY

Stateful Firewall

Pengertian

Stateful firewall adalah jenis firewall yang melacak status koneksi jaringan secara real-time. Berbeda dengan stateless firewall yang hanya memeriksa paket secara individual, stateful firewall menyimpan informasi setiap koneksi dalam sebuah state table untuk memahami konteks komunikasi antara dua host.

State Table

State table adalah basis data temporer yang mencatat informasi setiap sesi yang aktif:

  • Alamat IP sumber dan tujuan.
  • Port sumber dan tujuan.
  • Sequence number TCP.
  • Status koneksi (NEW, ESTABLISHED, RELATED, INVALID).
  • Timeout sesi.

Setiap kali paket diterima, firewall memeriksa state table untuk menentukan apakah paket tersebut merupakan bagian dari koneksi yang sudah ada, koneksi baru, atau paket yang mencurigakan.

Connection Tracking (Conntrack)

Connection tracking adalah mekanisme inti stateful firewall. Di Linux, modul conntrack (bagian dari netfilter) menangani pelacakan ini.

Status Koneksi

  1. NEW - Paket pertama dari sebuah koneksi. Biasanya paket SYN pada koneksi TCP. Firewall akan mengevaluasi aturan untuk menentukan apakah koneksi baru ini diizinkan.
  2. ESTABLISHED - Koneksi yang sudah terverifikasi dengan lalu lintas dua arah. Setelah handshake TCP selesai atau setelah melihat lalu lintas balik pada koneksi UDP/ICMP, status berubah menjadi ESTABLISHED.
  3. RELATED - Koneksi yang terkait dengan koneksi ESTABLISHED yang sudah ada. Contoh: koneksi data FTP atau koneksi ICMP error yang merujuk pada koneksi TCP yang sedang aktif.
  4. INVALID - Paket yang tidak dapat diidentifikasi atau tidak sesuai dengan koneksi yang dikenal. Paket INVALID harus selalu di-drop karena bisa menandakan serangan seperti paket spoofing, paket rusak, atau percobaan evasi firewall.

Contoh Aturan Conntrack di iptables

# Mengizinkan koneksi baru yang menuju port 80 (HTTP)
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

# Mengizinkan semua lalu lintas ESTABLISHED dan RELATED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Memblokir paket INVALID
iptables -A INPUT -m state --state INVALID -j DROP

Melihat State Table dengan conntrack

# Melihat semua koneksi yang dilacak
conntrack -L

# Melihat statistik connection tracking
conntrack -S

# Menampilkan koneksi TCP saja
conntrack -L -p tcp

Perbedaan Stateful vs Stateless Firewall

Aspek Stateful Stateless
Konteks Memahami konteks koneksi Hanya melihat paket individual
State Table Ya, menyimpan state koneksi Tidak ada
Performa Lebih lambat (pemrosesan lebih berat) Lebih cepat
Keamanan Lebih aman (bisa deteksi spoofing) Kurang aman
Konfigurasi Lebih kompleks Sederhana
Aturan yang diperlukan Lebih sedikit (cukup izinkan NEW) Aturan untuk dua arah lalu lintas

Stateful Inspection

Stateful inspection adalah proses analisis mendalam terhadap paket dan state koneksi. Firewall tidak hanya memeriksa header, tetapi juga memvalidasi bahwa paket sesuai dengan protokol yang digunakan. Misalnya:

  • Pada TCP, firewall memeriksa apakah sequence number dan ACK number konsisten.
  • Pada UDP, firewall memastikan lalu lintas balik berasal dari host yang sama yang menerima paket awal.
  • Pada ICMP, firewall memastikan tipe pesan sesuai dengan konteks koneksi.

Session Timeout

Setiap koneksi dalam state table memiliki masa berlaku (timeout). Jika tidak ada lalu lintas dalam periode timeout, koneksi dihapus dari state table.

Timeout umum (Linux conntrack default):

Protokol Timeout
TCP (ESTABLISHED) 5 hari (432000 detik)
TCP (SYN_SENT) 120 detik
TCP (FIN_WAIT) 120 detik
UDP 30 detik
ICMP 30 detik
FTP data 300 detik

TCP State Tracking

Stateful firewall melacak state TCP secara detail:

  1. SYN_SENT - Klien mengirim SYN, menunggu SYN-ACK.
  2. SYN_RECV - Server menerima SYN, mengirim SYN-ACK.
  3. ESTABLISHED - Handshake selesai, data bisa dikirim.
  4. FIN_WAIT - Salah satu sisi mengirim FIN.
  5. CLOSE_WAIT - Sisi lain menerima FIN.
  6. TIME_WAIT - Menunggu paket yang mungkin terlambat.

Dengan melacak state ini, firewall dapat mendeteksi anomali seperti paket ACK tanpa SYN sebelumnya (yang menandakan serangan port scan atau spoofing).

PADA HALAMAN INI