Firewall ufw

Dasar ufw dan kebijakan default deny.

Daftar isi

Firewall menjawab pertanyaan yang tidak dapat dijawab oleh daftar ss sekalipun, yaitu apakah port yang mendengarkan memang boleh dijangkau dari luar. Port yang mendengarkan tidak otomatis dapat dijangkau. Topik ini membahas ufw, alat pengelola firewall yang umum dipakai pada Ubuntu. Fokusnya pada satu kebijakan yang menopang semuanya, yaitu default deny, serta urutan penerapannya yang aman untuk mesin yang dikelola dari jarak jauh.

Tugas firewall pada mesin Linux#

Firewall menyaring paket di tingkat kernel sebelum paket sampai ke aplikasi mana pun, sehingga satu keputusan berlaku untuk semua layanan sekaligus. Mesin Linux menjalankan penyaringan ini melalui subsistem netfilter, dan ufw (uncomplicated firewall) adalah antarmuka baris perintah yang menyederhanakan penulisan aturan netfilter. Aturan yang dibuat lewat ufw pada akhirnya diterjemahkan menjadi aturan netfilter oleh backend-nya, tetapi sehari-hari cukup menggunakan sintaks ufw saja.

Diagram berikut mengilustrasikan alur paket masuk pada mesin yang dikelola ufw dengan kebijakan default deny. Dua paket menuju server yang sama dapat mendapat perlakuan yang berbeda, dan pembedanya adalah keberadaan aturan yang mengizinkan.

Internetpaket masukufwfirewall kerneldefault denydiizinkanditolak defaultServerport 22/tcpSSHport 3306/tcpbasis data
Alur paket masuk melewati ufw dengan kebijakan default deny

Paket pertama menuju port 22 melewati firewall karena ada aturan yang mengizinkannya. Paket kedua menuju port 3306 dibuang karena tidak ada aturan yang mengizinkan dan kebijakan defaultnya menolak. Aplikasi pada port 3306 tetap berjalan dan tetap mendengarkan, tetapi tak seorang pun dari luar yang dapat menjangkaunya. Inilah perbedaan mendasar antara port yang terbuka pada firewall dan port yang mendengarkan pada mesin.

Kebijakan default deny#

Default deny berarti semua paket masuk ditolak kecuali sebuah aturan secara eksplisit mengizinkannya. Kebijakan ini lebih aman daripada kebalikannya, yaitu default allow, karena keamanan tidak lagi bergantung pada kemampuan mengingat setiap layanan berbahaya yang mungkin berjalan. Layanan baru yang terpasang tanpa sengaja otomatis tertutup dari luar, dan hanya port yang diizinkan secara sadar yang tersisa terbuka. Dengan kata lain, daftar pengecualian dikelola, bukan daftar larangan.

Ufw mengelola dua kebijakan default, yaitu deny incoming untuk paket masuk dan allow outgoing untuk paket keluar. Kombinasi inilah posisi awal yang dianjurkan untuk server. Paket keluar dibiarkan bebas agar mesin dapat memperbarui paket, memanggil API luar, dan menjawab sambungan yang sah, sementara paket masuk yang tidak dicocokkan aturan mana pun dibuang. Sambungan balik atas permintaan keluar tetap diizinkan karena kernel mengingat sambungan yang sedang berlangsung.

Kebijakan defaultNilai dianjurkanAkibatnya
incomingdenyPaket masuk tanpa aturan pengizinan dibuang
outgoingallowPaket keluar dan sambungan baliknya diteruskan

Perlu digarisbawahi bahwa default deny incoming tidak menghentikan trafik keluar. Mesin dengan kebijakan ini tetap dapat menjangkau internet, tetapi dunia luar tidak dapat memulai sambungan baru kecuali pada port yang diizinkan.

Perintah dasar ufw#

Pemakaian ufw berputar pada empat kegiatan, yaitu memeriksa status, menetapkan kebijakan, mengizinkan port tertentu, dan mengaktifkan firewall. Sebelum perintah-perintah itu dibahas, keberadaan ufw pada sistem perlu dipastikan terlebih dahulu, dan cara pemeriksaannya sendiri dapat dieksekusi di mana pun.

bash
# periksa ketersediaan ufw pada sistem ini
command -v ufw || echo "ufw tidak ditemukan pada sistem ini"
text Keluaran
ufw tidak ditemukan pada sistem ini

Sandbox penulisan memang tidak memasang ufw, dan pemasangan serta eksekusinya menuntut hak root, sehingga blok-blok ufw berikut ditandai sebagai tidak dijalankan. Pada mesin Ubuntu yang dikelola, urutan perintahnya tetap dapat dibaca sebagai pola yang sama.

bash
# tidak-dijalankan
# periksa status firewall sebelum mengubah apa pun
sudo ufw status verbose
bash
# tidak-dijalankan
# tetapkan kebijakan default, izinkan SSH, lalu aktifkan firewall
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose

Perintah ufw default menetapkan keputusan untuk paket yang tidak dicocokkan aturan mana pun. Perintah ufw allow 22/tcp mengizinkan TCP pada port 22, yaitu port SSH, sehingga akses administrasi tidak terputus. Perintah ufw enable memuat seluruh aturan ke kernel dan menjaga agar firewall aktif kembali saat mesin dinyalakan ulang. Perintah ufw status verbose kemudian menampilkan kebijakan default beserta daftar aturan yang berlaku sebagai bukti hasil akhirnya.

Menilai eksposur sebelum menutup apa pun#

Kebijakan default deny baru aman diterapkan setelah daftar port yang memang harus terbuka diketahui, dan daftar itu datang dari perintah ss. Blok berikut mengulang pemeriksaan itu pada sandbox penulisan sebagai latihan membacanya.

bash
# tampilkan daftar port yang mendengarkan
ss -tln
text Keluaran
State  Recv-Q Send-Q Local Address:Port  Peer Address:Port
LISTEN 0      2048       127.0.0.1:12600      0.0.0.0:*
LISTEN 0      5            0.0.0.0:3000       0.0.0.0:*
LISTEN 0      128        127.0.0.1:19001      0.0.0.0:*
LISTEN 0      511        127.0.0.1:12700      0.0.0.0:*
LISTEN 0      1024         0.0.0.0:19005      0.0.0.0:*
LISTEN 0      128          0.0.0.0:19006      0.0.0.0:*
LISTEN 0      4096               *:81               *:*

Dari daftar tersebut, baris 127.0.0.1 tidak memerlukan keputusan firewall karena tidak pernah menjangkau jaringan luar. Baris pada 0.0.0.0 dan *, misalnya 0.0.0.0:19005, 0.0.0.0:19006, dan *:81, adalah kandidat aturan allow, dan setiap kandidat diputuskan dengan pertanyaan yang sama, yaitu apakah layanannya memang dimaksudkan untuk diakses dari luar. Urutan kerjanya dapat dirumuskan sebagai lima langkah berikut.

  1. Daftarkan semua pendengar dengan ss -tulpn.
  2. Tandai port pada 0.0.0.0 atau * yang memang harus terjangkau dari luar, termasuk SSH.
  3. Buat aturan allow untuk setiap port yang ditandai, lebih dulu untuk SSH.
  4. Aktifkan firewall dengan ufw enable setelah aturan di atas ada.
  5. Verifikasi kebijakan dan aturannya dengan ufw status verbose.

Kebiasaan ini menjaga dua daftar tetap sinkron, yaitu daftar port yang diizinkan firewall dan daftar layanan yang benar-benar dibutuhkan. Ketidaksesuaian di antara keduanya, baik kelebihan maupun kekurangan izin, langsung tampak pada saat perubahan diterapkan.

Kesalahan umum#

  • Menganggap default deny incoming membatasi trafik keluar. Kebijakan standar ufw tetap mengizinkan outgoing, sehingga mesin dapat memperbarui paket dan menjawab sambungan balik. Pembatasan keluar diterapkan terpisah dan menuntut pemeliharaan yang lebih rajin.
  • Mengira perintah allow membuat layanan berjalan. Firewall hanya membuka pintu, sedangkan layanannya harus tetap berjalan dan mendengarkan. Periksa pendengarnya dengan ss apabila port yang diizinkan tetap tidak dapat dijangkau.
  • Menambahkan aturan iptables atau nftables secara manual di samping ufw. Dua alat menulis ke subsistem penyaringan yang sama, sehingga aturan yang saling bertentangan sulit dilacak. Kelola seluruh aturan melalui ufw dan verifikasinya melalui ufw status verbose.

Ringkasan#

  • Firewall menyaring paket di tingkat kernel, dan ufw adalah antarmuka baris perintah yang menyederhanakan penulisan aturan netfilter.
  • Default deny menolak semua paket masuk kecuali yang diizinkan aturan, sehingga layanan baru tidak pernah terekspos tanpa sengaja.
  • Kombinasi dianjurkan adalah deny incoming dan allow outgoing, dengan aturan allow eksplisit untuk port yang memang harus terbuka.
  • Urutan aman pada mesin jarak jauh adalah mengenali pendengar lewat ss, mengizinkan SSH lebih dulu, lalu menjalankan ufw enable.

Referensi#