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
- NEW - Paket pertama dari sebuah koneksi. Biasanya paket SYN pada koneksi TCP. Firewall akan mengevaluasi aturan untuk menentukan apakah koneksi baru ini diizinkan.
- 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.
- 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.
- 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:
- SYN_SENT - Klien mengirim SYN, menunggu SYN-ACK.
- SYN_RECV - Server menerima SYN, mengirim SYN-ACK.
- ESTABLISHED - Handshake selesai, data bisa dikirim.
- FIN_WAIT - Salah satu sisi mengirim FIN.
- CLOSE_WAIT - Sisi lain menerima FIN.
- 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).