Panduan

Konfigurasi ufw di Linux: firewall server dan dasar nftables

Diperbarui: · Skillaria.Top

Konfigurasi ufw terdiri dari tiga langkah: menetapkan kebijakan default (sudo ufw default deny incoming dan allow outgoing), mengizinkan SSH dan port yang dibutuhkan (sudo ufw allow 22/tcp, sudo ufw allow 443/tcp), lalu mengaktifkan firewall dengan sudo ufw enable. Aturan diperiksa dengan sudo ufw status numbered, dan di balik layar ufw mengelola netfilter melalui iptables atau nftables.

Firewall di Linux menentukan paket jaringan mana yang diizinkan masuk ke server dan mana yang dibuang. Di level kernel, fungsi ini dijalankan oleh subsistem netfilter, sedangkan pengelolaannya dilakukan oleh utilitas seperti iptables dan nftables yang bersifat tingkat rendah, atau ufw (Uncomplicated Firewall) sebagai lapisan di atasnya. Untuk sebagian besar server Ubuntu dan Debian, konfigurasi ufw hanya memakan lima menit: tutup semua yang masuk, buka SSH dan port layanan, lalu aktifkan. Berikut ini skenario langkah demi langkah, kesalahan yang sering terjadi, dan dasar nftables secukupnya untuk memahami apa yang terjadi di balik layar.

Cara kerja firewall di Linux

Penyaringan paket berada di kernel — ini adalah netfilter. Netfilter menyediakan titik-titik intersep (hook): lalu lintas masuk ke host itu sendiri, lalu lintas keluar, dan lalu lintas yang diteruskan (forward). Utilitas pengguna hanya menulis aturan ke kernel untuk titik-titik tersebut.

AlatLevelKapan digunakan
ufwlapisan di atas, sintaks sederhanaserver tunggal di Ubuntu/Debian, aturan standar
firewalldlapisan di atas dengan zonaRHEL, Rocky, Fedora
nftables (nft)level rendah, modernaturan kompleks, NAT, kumpulan alamat
iptableslevel rendah, mulai usangsistem dan skrip lama

Penting: gunakan satu alat pengelola saja. Jika aturan diubah sekaligus lewat ufw dan secara manual lewat iptables, keduanya akan saling menimpa dan hasilnya tidak bisa diprediksi.

Instalasi dan pemeriksaan ufw

Di Ubuntu, ufw biasanya sudah terpasang tetapi belum aktif. Di Debian, paket ini perlu dipasang terpisah:

$ sudo apt update
$ sudo apt install ufw
$ sudo ufw status
Status: inactive

Status inactive berarti aturan ufw belum diterapkan. Jangan dulu mengaktifkan firewall: izinkan SSH terlebih dahulu, karena jika tidak, di server jarak jauh Anda bisa kehilangan akses sendiri.

Konfigurasi ufw langkah demi langkah di server

Langkah 1. Kebijakan default

Kebijakan default menentukan apa yang dilakukan terhadap paket jika tidak ada aturan yang cocok. Skema yang aman untuk server: lalu lintas masuk dilarang, lalu lintas keluar diizinkan.

$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

Balasan untuk koneksi keluar Anda sendiri dilewatkan secara otomatis: ufw melacak status koneksi (connection tracking), sehingga tidak perlu membuka port untuk balasan tersebut.

Langkah 2. Izinkan SSH

$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

OpenSSH adalah profil aplikasi. Jika SSH mendengarkan di port non-standar, izinkan port itu secara eksplisit: sudo ufw allow 2222/tcp. Untuk memastikan port mana yang benar-benar didengarkan sshd, gunakan sudo ss -tlnp | grep sshd.

Langkah 3. Buka port layanan

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Sebutkan protokolnya: tanpa /tcp, ufw akan membuka port untuk TCP sekaligus UDP, dan pintu yang terbuka tanpa perlu hanya menambah risiko.

Langkah 4. Aktifkan firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

ufw langsung berjalan dan akan aktif setiap kali sistem dinyalakan. Jangan tutup sesi SSH yang sedang berjalan: buka sesi kedua dan pastikan koneksi tetap bisa dibuat.

Langkah 5. Periksa aturan

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Aturan untuk IPv6 dibuat otomatis oleh ufw jika di /etc/default/ufw tertulis IPV6=yes (nilai default).

Cara membuka port di ufw: semua variasi sintaksis

Perintah ufw allow mendukung bentuk pendek dan bentuk lengkap. Bentuk pendek cocok untuk kasus umum, sedangkan bentuk lengkap dipakai jika perlu menentukan sumber, antarmuka, atau alamat tujuan.

TugasPerintah
Port TCPsudo ufw allow 443/tcp
Port UDPsudo ufw allow 51820/udp
Rentang portsudo ufw allow 6000:6007/tcp
Berdasarkan nama layanansudo ufw allow https
Dari satu IPsudo ufw allow from 203.0.113.10
Dari subnet ke port tertentusudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp
Pada antarmuka tertentusudo ufw allow in on eth1 to any port 3306 proto tcp
Larangsudo ufw deny 23/tcp
Tolak dengan balasansudo ufw reject 25/tcp

Perbedaan deny dan reject: deny membuang paket tanpa suara sehingga klien menunggu sampai timeout; reject mengirim balasan bahwa port tertutup. Untuk dunia luar biasanya dipilih deny, sedangkan untuk jaringan internal reject lebih nyaman karena klien langsung melihat errornya.

Akses ke database hanya dari satu server

Tugas yang umum: PostgreSQL atau MySQL tidak boleh terlihat dari internet, tetapi aplikasi di server tetangga harus tetap bisa terhubung.

$ sudo ufw allow from 10.0.0.5 to any port 5432 proto tcp
Rule added

Port 5432 tetap tertutup untuk semua pihak lain berkat kebijakan deny incoming. Sebagai tambahan, atur juga DBMS agar hanya mendengarkan alamat internal — firewall dan pengaturan layanan saling melindungi.

Profil aplikasi

Paket perangkat lunak dapat menyimpan deskripsi port mereka di /etc/ufw/applications.d/. Daftar dan isi profil:

$ sudo ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
$ sudo ufw app info "Nginx Full"
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
  80,443/tcp

Mengizinkan profil: sudo ufw allow "Nginx Full". Nama yang mengandung spasi harus ditulis dalam tanda kutip. Profil sendiri bisa dibuat dalam format INI di direktori yang sama, lalu diterapkan dengan sudo ufw app update nama.

Cara menghapus aturan ufw

Cara yang paling andal adalah dengan nomor aturan:

$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere
[ 4] OpenSSH (v6)               ALLOW IN    Anywhere (v6)
[ 5] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 443/tcp (v6)               ALLOW IN    Anywhere (v6)

$ sudo ufw delete 2
Deleting:
 allow 80/tcp
Proceed with operation (y|n)? y
Rule deleted

Setelah sebuah aturan dihapus, nomor-nomor di bawahnya bergeser, jadi jalankan status numbered lagi sebelum menghapus berikutnya. Cara kedua adalah mengulang aturan dengan kata delete: sudo ufw delete allow 80/tcp; perintah ini sekaligus menghapus varian IPv4 dan IPv6.

Urutan aturan dan penyisipan di awal

ufw memeriksa aturan dari atas ke bawah, dan aturan pertama yang cocok langsung berlaku. Karena itu larangan untuk alamat tertentu harus berada di atas izin yang umum:

$ sudo ufw insert 1 deny from 198.51.100.23
Rule inserted

Jika deny ditambahkan dengan perintah biasa, aturan itu akan berada di akhir daftar setelah allow 443/tcp dan tidak akan berlaku untuk port tersebut.

Perlindungan SSH dari brute force: ufw limit

Aturan limit tetap mengizinkan koneksi, tetapi memblokir alamat yang membuka 6 koneksi atau lebih dalam 30 detik:

$ sudo ufw limit OpenSSH
Rule updated

Ini perlindungan sederhana terhadap serangan tebak kata sandi secara massal. Untuk perlindungan yang lebih serius, tambahkan login hanya dengan kunci dan, jika perlu, fail2ban — fail2ban dapat memblokir alamat melalui ufw.

Log ufw

Pencatatan diaktifkan dengan sudo ufw logging on; tingkatnya adalah low, medium, high, atau full. Catatan masuk ke /var/log/ufw.log (melalui rsyslog) dan ke log kernel:

$ sudo journalctl -k | grep 'UFW BLOCK' | tail -2
Oct 14 10:12:03 web kernel: [UFW BLOCK] IN=eth0 OUT= SRC=45.155.205.1 DST=192.0.2.10 PROTO=TCP SPT=51544 DPT=3389
Oct 14 10:12:09 web kernel: [UFW BLOCK] IN=eth0 OUT= SRC=89.248.165.7 DST=192.0.2.10 PROTO=TCP SPT=40312 DPT=23

Kolom SRC dan DPT menunjukkan siapa dan ke port mana koneksi dicoba. Jika layanan tidak merespons dan di log ada UFW BLOCK dengan port tersebut, berarti aturan untuk port itu belum ditambahkan.

ufw dan Docker: mengapa port terbuka meski aturan sudah ada

Ini jebakan yang paling terkenal. Saat mempublikasikan port (-p 8080:80), Docker sendiri menambahkan aturan NAT dan rantai DOCKER, dan lalu lintas ke kontainer berjalan melalui forward sehingga melewati aturan masuk ufw. Akibatnya, ufw status tidak menampilkan port 8080, tetapi port itu tetap bisa diakses dari luar.

Cara mengatasinya:

  • Publikasikan port hanya di localhost: -p 127.0.0.1:8080:80, lalu layani ke luar melalui reverse proxy (nginx).
  • Tambahkan aturan sendiri ke rantai DOCKER-USER — Docker tidak menimpanya.
  • Jangan mempublikasikan port kontainer layanan sama sekali, hubungkan mereka melalui jaringan Docker.

Reset dan nonaktifkan

$ sudo ufw disable     # matikan, aturan tetap tersimpan
$ sudo ufw reset       # hapus semua aturan dan matikan
$ sudo ufw reload      # muat ulang konfigurasi

Sebelum reset, ufw menyimpan salinan berkas aturan di /etc/ufw/ dengan akhiran tanggal. Aturan itu sendiri tersimpan di /etc/ufw/user.rules dan user6.rules — berkas tersebut jangan diedit manual, ubah hanya lewat perintah.

Dasar nftables

nftables adalah pengganti modern untuk iptables di kernel Linux. Pada Debian 10+ dan Ubuntu 20.10+, perintah iptables secara default bekerja melalui lapisan kompatibilitas iptables-nft, sehingga aturan ufw juga berakhir di nftables. Untuk melihat semua yang dimuat ke kernel:

$ sudo nft list ruleset

Struktur nftables: sebuah tabel (famili ip, ip6, atau inet untuk keduanya) berisi rantai yang terhubung ke titik netfilter, dan rantai berisi aturan. Berikut firewall minimal untuk server di berkas /etc/nftables.conf:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iif "lo" accept
        ip protocol icmp accept
        meta l4proto ipv6-icmp accept
        tcp dport { 22, 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Menerapkan dan mengaktifkan saat boot:

$ sudo nft -c -f /etc/nftables.conf   # hanya memeriksa sintaksis
$ sudo systemctl enable --now nftables

Aturan juga bisa ditambahkan saat sistem berjalan, tetapi aturan itu hilang setelah reboot kecuali disimpan ke berkas:

$ sudo nft add rule inet filter input tcp dport 5432 ip saddr 10.0.0.5 accept
$ sudo nft -a list chain inet filter input   # -a menampilkan handle aturan
$ sudo nft delete rule inet filter input handle 9

Keunggulan utama nftables adalah set ({ 22, 80, 443 }) dan satu tabel inet untuk IPv4 maupun IPv6. Jangan menjalankan nftables.service sendiri bersamaan dengan ufw: flush ruleset akan menghapus aturan ufw.

Kesalahan umum

  • ufw diaktifkan tanpa aturan untuk SSH — akses hilang. Konsol penyedia (VNC/serial) bisa menyelamatkan: jalankan sudo ufw allow OpenSSH atau sudo ufw disable.
  • Port sudah dibuka, tetapi layanan tidak bisa diakses — layanan mendengarkan di 127.0.0.1, bukan di alamat eksternal. Periksa dengan ss -tlnp.
  • Ada firewall di level cloud — banyak penyedia memiliki security group; port juga harus dibuka di sana.
  • deny tidak berfungsi — aturan berada di bawah izin yang cocok; gunakan insert 1.

Kesimpulan

Konfigurasi ufw dasar terdiri dari default deny incoming, izin untuk SSH dan port layanan, ufw enable, serta pemeriksaan dengan status numbered. Untuk akses yang spesifik gunakan aturan dengan from dan port, untuk SSH gunakan limit, dan ingat bahwa Docker melewati ufw. Ketika dibutuhkan NAT atau kumpulan aturan yang kompleks, beralihlah ke nftables. Pengamanan server dengan firewall dibahas dalam praktik pada kursus Linux.

Pertanyaan umum

Apa perbedaan ufw dan iptables?

ufw adalah lapisan di atas dengan sintaks sederhana yang menghasilkan aturan iptables atau nftables secara otomatis. iptables dan nftables adalah alat level rendah yang memberi kontrol penuh, tetapi memerlukan pengetahuan lebih.

Apakah aturan ufw tetap ada setelah reboot?

Ya. Setelah sudo ufw enable, firewall berjalan saat boot, dan aturannya disimpan di /etc/ufw/user.rules dan user6.rules.

Perlukah membuka port untuk koneksi keluar?

Tidak, jika kebijakan allow outgoing aktif. ufw melewatkan balasan untuk koneksi keluar secara otomatis berkat pelacakan status koneksi.

Bagaimana cara mengizinkan ping saat ufw aktif?

Secara default ufw sudah melewatkan ICMP echo-request yang masuk: aturannya ada di /etc/ufw/before.rules. Untuk melarang ping, ubah aturan di berkas itu dari ACCEPT menjadi DROP, lalu jalankan sudo ufw reload.

Apakah ufw tersedia di CentOS dan Rocky Linux?

Di sana alat bawaannya adalah firewalld dengan perintah firewall-cmd. ufw bisa dipasang dari EPEL, tetapi sebaiknya jangan dicampur dengan firewalld.

Pelajari topik ini lewat video

Topik ini dibahas mendalam dengan praktik di kursus “Linux: с нуля до уверенного администрирования”.

Ke kursus