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.
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 default | Nilai dianjurkan | Akibatnya |
|---|---|---|
| incoming | deny | Paket masuk tanpa aturan pengizinan dibuang |
| outgoing | allow | Paket 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.
# periksa ketersediaan ufw pada sistem ini
command -v ufw || echo "ufw tidak ditemukan pada sistem ini"ufw tidak ditemukan pada sistem iniSandbox 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.
# tidak-dijalankan
# periksa status firewall sebelum mengubah apa pun
sudo ufw status verbose# 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 verbosePerintah 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.
# tampilkan daftar port yang mendengarkan
ss -tlnState 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.
- Daftarkan semua pendengar dengan
ss -tulpn. - Tandai port pada
0.0.0.0atau*yang memang harus terjangkau dari luar, termasuk SSH. - Buat aturan
allowuntuk setiap port yang ditandai, lebih dulu untuk SSH. - Aktifkan firewall dengan
ufw enablesetelah aturan di atas ada. - 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
allowmembuat layanan berjalan. Firewall hanya membuka pintu, sedangkan layanannya harus tetap berjalan dan mendengarkan. Periksa pendengarnya denganssapabila 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 incomingdanallow outgoing, dengan aturanalloweksplisit untuk port yang memang harus terbuka. - Urutan aman pada mesin jarak jauh adalah mengenali pendengar lewat
ss, mengizinkan SSH lebih dulu, lalu menjalankanufw enable.
Referensi#
- ufw(8) — Ubuntu Manpages
— Kumpulan perintah ufw, termasuk
default,allow,enable, danstatus. - Firewalls — Ubuntu Server documentation — Panduan resmi Ubuntu Server tentang ufw dan kebijakan defaultnya.