Menjelajahi tabel mangle untuk memodifikasi paket lewat MARK TTL dan TOS, serta membangun rate limiting dengan modul limit untuk membatasi laju paket dan melindungi layanan dari flood dan brute-force attack

Sejauh ini kalian belajar memilih paket (match) dan menentukan nasibnya (target). Episode 11 membuka dimensi baru: mengubah isi paket itu sendiri. Tabel mangle memberi kalian kemampuan menandai paket dengan MARK, mengubah TTL/TOS, dan — yang paling sering dipakai — membatasi laju paket dengan modul limit.
Mengapa topik ini penting? Karena firewall produksi tidak hanya menjawab "terima atau tolak", tapi juga "seberapa sering". Layanan yang tidak di-rate-limit adalah korban empuk brute-force dan flood. Episode ini adalah jembatan menuju anti-scan & DDoS mitigation di episode 16.
Tabel mangle menangani modifikasi paket di semua chain hook. Tiga target utamanya:
| Target | Fungsi |
|---|---|
MARK | Menandai paket dengan angka untuk routing & QoS (tidak mengubah paket asli di jaringan) |
TTL | Mengubah Time-To-Live paket |
TOS | Mengubah Type of Service / DSCP field |
Contoh menandai trafik untuk routing policy:
sudo iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 10Paket yang di-MARK kemudian bisa diarahkan lewat tabel routing terpisah — dasar teknik policy-based routing (misal memaksa trafik video lewat jalur tertentu):
echo "100 stream" | sudo tee -a /etc/iproute2/rt_tables
sudo ip route add default via 192.168.1.1 dev eth1 table stream
sudo ip rule add fwmark 10 table streamContoh mengubah TTL — kadang dipakai untuk menutup jejak hop count atau memenuhi persyaratan ISP tertentu:
sudo iptables -t mangle -A POSTROUTING -o eth0 -j TTL --ttl-set 64Modul limit membatasi berapa banyak paket yang lolos dalam satuan waktu. Dua parameternya:
--limit — laju rata-rata (contoh 5/min, 1/sec, 100/hour).--limit-burst — jatah awal sebelum pembatasan berlaku.sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/min --limit-burst 10 -j ACCEPTBaca aturannya: "izinkan ping, tapi maksimal 5 paket per menit setelah 10 paket pertama habis". --limit-burst adalah bucket awal yang membuat burst kecil tetap diizinkan sebelum throttle bekerja.
Tip
Perhatikan: -m limit ... -j ACCEPT adalah pola allow-with-limit — paket yang lolos diterima, sisanya jatuh ke aturan berikutnya (biasanya LOG + DROP). Rate limiting di iptables selalu bekerja dua aturan: satu yang mengizinkan dalam batas, satu yang menolak sisanya.
Pola rate limiting yang paling sering dipakai di dunia nyata: batasi koneksi SSH baru (state NEW) supaya penyerang tidak bisa menebak password tanpa henti.
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 5 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-FLOOD: "
sudo iptables -A INPUT -p tcp --dport 22 -j DROPKombinasi tiga aturan:
3/min (burst 5).Kunci keefektifannya adalah match --ctstate NEW — hanya koneksi baru yang dibatasi; koneksi yang sudah ESTABLISHED (sesi SSH aktif) tetap bebas lewat aturan ESTABLISHED,RELATED di atas chain.
Pola yang sama untuk memadamkan flood sederhana:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/sec -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROPUntuk SYN flood, batasi laju SYN NEW ke layanan publik:
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -m limit --limit 100/sec -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j DROPWarning
Rate limiting limit adalah token bucket yang murah — bagus untuk meredam noise dan brute-force ringan. Untuk serangan volume tinggi yang nyata (SYN flood besar, DDoS), iptables limit bukan pengganti mitigasi lapisan jaringan (anycast, CDN, atau firewall khusus). Anggap episode 11 sebagai pengaman dasar, dan episode 16 sebagai penguatnya.
-m limit dianggap sebagai "rate limit saja" — sebenarnya ia allow-with-limit; selalu pasangkan dengan aturan DROP di belakangnya.ESTABLISHED — salah sasaran; limit hanya perlu menyentuh paket NEW.MARK di POSTROUTING — terlalu lambat untuk policy routing; mark harus dibuat di PREROUTING/OUTPUT.--limit-burst — tanpa burst, sejumlah kecil paket awal (termasuk koneksi sah) ikut kena throttle.Inti yang harus dibawa pulang:
mangle memodifikasi paket: MARK (untuk policy routing), TTL, TOS.limit membatasi laju: --limit (rata-rata) + --limit-burst (jatah awal).LOG + DROP di bawahnya.NEW — jangan pernah membatasi ESTABLISHED.Di episode 12 selanjutnya kita akan membahas logging & monitoring — target LOG dengan --log-prefix dan --log-level, pola LOG + DROP untuk aturan yang menolak sambil mencatat, memantau counter per-rule dengan watch, dan mendeteksi pemindaian port lewat paket NEW. Sampai jumpa di episode 12!