Menerapkan modul match lanjutan iptables: iprange untuk rentang alamat tanpa subnet, mac untuk membatasi berdasarkan alamat MAC, string untuk menyaring isi paket dengan algoritma bm dan kmp, time untuk aturan berbasis jadwal, serta recent untuk membangun ban dinamis per-IP

Match dasar -s, -d, -p, --dport sudah kalian kuasai di episode 5. Sekarang waktunya match-mach ekstensi — kemampuan yang membuat iptables tajam untuk skenario dunia nyata: memblokir rentang IP yang tidak rapi, mengunci akses lewat MAC address, menyaring paket berdasarkan isinya, memberlakukan aturan hanya pada jam kerja, dan mem-ban IP secara dinamis setelah beberapa percobaan.
Kelima modul di episode ini — iprange, mac, string, time, recent — adalah senjata yang membedakan firewall "bisa buka tutup port" dari firewall yang benar-benar curated.
Kadang blok IP yang harus diblokir tidak berbentuk CIDR yang rapi. Modul iprange menerima rentang eksplisit:
sudo iptables -A INPUT -m iprange --src-range 203.0.113.10-203.0.113.20 -j DROPModul ini punya --src-range dan --dst-range, masing-masing menerima start-end. Keunggulannya jelas: tidak perlu menulis banyak aturan -s terpisah untuk alamat-alamat yang tersebar tidak rapi.
Modul mac memfilter berdasarkan alamat MAC sumber — berguna di jaringan yang ingin mengontrol perangkat fisik, bukan sekadar IP:
sudo iptables -A INPUT -i eth1 -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
sudo iptables -A INPUT -i eth1 -j DROPWarning
MAC address bisa di-spoof dengan mudah — ia diambil dari header link-layer paket dan tidak memerlukan autentikasi. Gunakan mac untuk pengorganisasian dan pengurangan permukaan serangan di LAN yang kalian kontrol, bukan sebagai mekanisme keamanan yang berdiri sendiri. Catatan: --mac-source tidak berlaku di POSTROUTING.
Modul string mencocokkan payload paket dengan pola teks — kemampuan yang kuat sekaligus mahal secara performa. Dua algoritma: bm (Boyer-Moore, lebih cepat untuk pola besar) dan kmp (Knuth-Morris-Pratt, lebih efisien untuk pola kecil):
sudo iptables -A FORWARD -p tcp --dport 80 -m string --string "GET /admin" --algo bm -j DROPAturan ini menolak permintaan HTTP yang berisi string GET /admin di payloadnya. Parameter wajib: --string (pola) dan --algo (bm atau kmp). Opsional --to membatasi pencarian hingga offset tertentu untuk menghemat CPU.
Note
string memindai payload tiap paket — ini operasi CPU-intensif. Di trafik padat, pencarian string bisa menjadi bottleneck firewall. Aturan praktis: gunakan hanya untuk trafik yang memang perlu diinspeksi, kombinasikan dengan match murah (-s, --dport) lebih dulu, dan batasi --to sejauh yang memungkinkan.
Modul time membuat aturan hanya berlaku pada waktu tertentu — misalnya memblokir akses game di jam sekolah atau menutup VPN di luar jam kantor:
sudo iptables -A OUTPUT -p tcp --dport 443 -m time --timestart 09:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPTParameter yang tersedia: --timestart/--timestop (HH:MM), --weekdays, --datestart/--datestop (untuk jendela tanggal), dan --kerneltz untuk memakai zona waktu kernel (default-nya UTC). Hati-hati dengan zona waktu: tanpa --kerneltz, waktu yang kalian tulis adalah UTC.
Modul recent melacak alamat IP yang terlihat belakangan ini dan memungkinkan respons dinamis: ban sebuah IP setelah beberapa kali percobaan dalam jendela waktu. Ini adalah mekanisme anti-brute-force bawaan iptables.
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSH
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --name SSH --seconds 60 --hitcount 4 -j REJECTCara bacanya:
SSH.REJECT.IP penyerang otomatis "masuk daftar hitam" untuk satu menit, sementara pengguna sah yang hanya mencoba sekali-dua kali tidak terganggu.
Perluas ke skenario anti-scan di semua port:
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -m recent --set --name SCAN
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -m recent --update --name SCAN --seconds 60 --hitcount 15 -j DROPBaca status daftar recent kapan pun:
cat /proc/net/xt_recent/SCANTip
recent adalah pengganti fail2ban yang ringan untuk kasus sederhana — tanpa proses daemon, murni di kernel. Kekurangannya: tidak memberi tahu kalian (tanpa logging tambahan), dan datanya hilang saat reboot. Untuk fitur lengkap (notifikasi, ban persisten, jadwal), fail2ban di lapisan atas tetap punya tempat — kita bandingkan ekosistemnya di episode 22.
string tanpa --algo → error; dan memakai string untuk trafik besar tanpa batasan port/offset.recent --set dan --update dengan daftar (--name) berbeda — dua aturan harus menunjuk daftar yang sama.time lupa soal UTC — aturan aktif di jam yang salah.mac di-postrukan ke keamanan penuh — ingat spoofing MAC.Inti yang harus dibawa pulang:
iprange untuk rentang IP tak beraturan; mac untuk kontrol per-perangkat di LAN tepercaya.string menyaring payload (algoritma bm/kmp) — kuat tapi hemat pemakaiannya.time untuk aturan berbasis jadwal; perhatikan zona waktu UTC.recent untuk ban dinamis per-IP: --set mencatat, --update --seconds --hitcount menindak.Di episode 14 selanjutnya kita akan membahas ip6tables, ARP/ebtables & IPv6 — kerangka kerja IPv6 paralel dengan ip6tables, kenapa aturan IPv6 harus dibuat terpisah, tool arptables dan ebtables untuk lapisan ARP dan bridge, serta alasan nftables menyatukan semuanya. Sampai jumpa di episode 14!