Mendalami aturan UFW berbasis IP: mengizinkan satu IP dengan ufw allow from, membatasi seluruh subnet CIDR seperti 203.0.113.0/24, menyusun kombinasi source, destination port, dan protocol dalam satu rule, serta menempatkan aturan di posisi tertentu dengan ufw insert

Episode 5 memperkenalkan from untuk membatasi IP sumber. Episode 6 menggali lebih dalam: subnet CIDR, kombinasi penuh source-destination-protocol, dan ufw insert. Di sinilah aturan kalian berubah dari "membuka port" menjadi "membangun kebijakan akses" yang sesungguhnya.
Mengapa ini penting? Karena membuka port untuk Anywhere di server produksi adalah undangan eksplisit bagi pemindai. Ruleset profesional membatasi: SSH hanya untuk subnet kantor, database hanya untuk IP aplikasi, API internal hanya untuk subnet VPC. Episode ini mengajarkan kalian menulis aturan itu dengan benar.
Bentuk paling dasar — mengizinkan sebuah IP penuh akses ke satu port:
sudo ufw allow from 203.0.113.10 to any port 22 proto tcpRule addedDi status, aturannya tampil seperti ini:
sudo ufw status
To Action From
-- ------ ----
22/tcp ALLOW 203.0.113.10
22/tcp (v6) ALLOW Anywhere (v6)Perhatikan: aturan IPv4 dibatasi ke 203.0.113.10, tetapi versi IPv6-nya tetap Anywhere (v6) — karena kita belum menentukan IP versi 6. Jika ingin IPv6 juga dibatasi, gunakan alamat IPv6 (episode 11 membahas detailnya).
Notasi CIDR membatasi sekelompok IP sekaligus. Contoh paling umum di dunia kerja:
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcpArtinya: hanya perangkat dalam 192.168.1.0–192.168.1.255 yang boleh SSH. Beberapa contoh subnet yang sering muncul:
| Subnet | Jangkauan | Kegunaan Umum |
|---|---|---|
10.0.0.0/8 | 10.0.0.0–10.255.255.255 | Jaringan internal besar / VPC |
192.168.0.0/16 | 192.168.0.0–192.168.255.255 | LAN privat klasik |
172.16.0.0/12 | 172.16.0.0–172.31.255.255 | Private network (Docker default) |
100.64.0.0/10 | 100.64.0.0–100.127.255.255 | CGNAT (jaringan provider) |
Note
Jika kalian lupa menghitung subnet, gunakan tool bantu: ipcalc 192.168.1.0/24 atau sipcalc. Verifikasi dengan ip addr bahwa alamat mesin kalian memang berada di dalam subnet yang diizinkan — kesalahan paling umum adalah mengizinkan subnet yang salah dan terkunci.
Kekuatan UFW ada di kombinasinya. Bentuk lengkap:
sudo ufw allow from 10.0.0.0/8 to 10.0.0.5 port 5432 proto tcpTerjemahan: izinkan lalu lintas dari subnet 10.0.0.0/8 menuju IP 10.0.0.5 port 5432 (PostgreSQL) lewat TCP. Di sini muncul bagian destination IP (to 10.0.0.5) — berguna untuk server multi-layanan di mana kalian ingin membatasi akses ke IP internal tertentu saja.
Database internal — hanya aplikasi di subnet yang boleh menjangkau:
sudo ufw allow from 10.0.1.0/24 to any port 5432 proto tcpBackup/agent — mesin backup dari subnet khusus:
sudo ufw allow from 10.0.9.0/24 to any port 9100 proto tcpAdmin panel — hanya IP kantor:
sudo ufw allow from 203.0.113.99 to any port 8443 proto tcpPola yang konsisten terlihat: layanan ekspos publik (80/443) → Anywhere; layanan internal → subnet/IP spesifik. Ini prinsip least privilege yang akan kita tuntaskan di episode 17.
Secara default aturan baru ditambahkan di bagian bawah blok aturan user. Kadang kalian butuh aturan yang dievaluasi lebih dulu — misalnya deny yang harus menang atas allow lain yang lebih permisif. Di sinilah ufw insert bekerja.
Lihat dulu posisi saat ini:
sudo ufw status numbered[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN AnywhereSekarang sisipkan aturan deny di posisi 1 — sehingga dievaluasi paling awal:
sudo ufw insert 1 deny from 203.0.113.66 to any port 22 proto tcpRule insertedHasilnya, 203.0.113.66 akan ditolak sebelum aturan allow 22/tcp sempat mencocokkannya. Ingat dari episode 2: netfilter mengevaluasi berurutan, yang pertama cocok menang. Posisi = prioritas.
Warning
ufw insert menulis ke posisi dalam blok user rules — bukan ke posisi global ruleset. Aturan di before.rules tetap dievaluasi lebih dulu apa pun nomor insert kalian. Untuk prioritas di atas aturan sistem, kalian harus mengedit before.rules (episode 13 dan 17).
192.168.1.0/23 mencakup 192.168.1.0–192.168.2.255, bukan hanya 192.168.1.x. Verifikasi dengan ipcalc.ufw allow from 10.0.0.0/8 to any port 5432 membuka PostgreSQL ke semua interface mesin — kalau mau hanya ke IP internal, sebutkan to <IP-internal>.ufw status numbered sebelum ufw insert agar nomornya benar.allow from 10.0.0.0/8 to any port 22 ada di posisi 1 dan deny di posisi 2, deny-nya tidak pernah dievaluasi untuk traffic 10.0.0.0/8. Urutan benar-benar menentukan hasil.Pada episode 6 ini, kalian telah menguasai aturan lanjut berbasis IP.
Inti yang harus dibawa pulang:
ufw allow from <IP> membatasi satu sumber; from <subnet>/<prefix> membatasi sekelompok IP.from SOURCE to DEST port PORT proto PROTO memberi kendali presisi satu baris.ufw insert <num> ... menempatkan aturan di posisi tertentu; posisi = prioritas evaluasi.Di episode 7 selanjutnya, kita beralih ke cara UFW mengelola layanan: Application Profiles — ufw app list, lokasi profil di /etc/ufw/applications.d/, mengaktifkan ufw allow 'OpenSSH', dan membuat profil kustom untuk aplikasi internal. Sampai jumpa di episode 7!