Cara Cek Port Terbuka di Server dengan Nmap
Cara memakai Nmap untuk melihat port yang terbuka di servermu dari luar, membaca status open, closed, dan filtered, serta menutup port yang tidak perlu.
Jawaban singkat
Jalankan Nmap dari komputer di luar jaringan server, misalnya sudo nmap -sS -sV -p- IP-SERVER, untuk melihat semua port TCP yang benar-benar bisa dijangkau dari internet. Bandingkan hasilnya dengan layanan yang memang seharusnya terbuka, lalu tutup sisanya lewat firewall.
Daftar isi
Kamu baru selesai memasang aplikasi di VPS, mengatur firewall, dan merasa semuanya sudah rapi. Lalu suatu hari muncul pertanyaan sederhana yang sulit dijawab: port apa saja sebenarnya yang bisa dibuka orang dari internet? Pengaturan firewall bilang satu hal, tapi container, panel kontrol, atau layanan yang terpasang otomatis bisa bilang hal lain.
Nmap menjawab pertanyaan itu dari sudut pandang penyerang. Ia mengetuk port-port di servermu dari luar dan melaporkan mana yang menjawab. Hasilnya adalah daftar yang jujur, bukan daftar yang kamu kira.
Pindai dari luar, dan hanya server milikmu
Ada dua aturan sebelum mulai. Pertama, jalankan Nmap dari komputer di luar jaringan server, misalnya laptop di rumah atau VPS lain. Kalau dijalankan dari server itu sendiri ke localhost, kamu akan melihat semua layanan yang mendengarkan, termasuk yang sebenarnya sudah diblokir firewall dari luar. Itu berguna, tapi bukan gambaran yang dilihat internet.
Kedua, pindai hanya server milikmu sendiri atau yang kamu punya izin tertulis untuk memindainya. Memindai sistem orang lain tanpa izin bisa dianggap aktivitas menyerang, dan banyak penyedia layanan melarangnya di ketentuan penggunaan. Untuk latihan, proyek Nmap menyediakan scanme.nmap.org yang memang boleh dipindai sesekali.
Nmap tersedia di hampir semua sistem. Di Ubuntu atau Debian cukup sudo apt install nmap. Untuk Windows dan macOS, unduh installer dari nmap.org, yang juga menyertakan Zenmap sebagai antarmuka grafis.
Perintah yang paling sering dipakai
Pemindaian paling dasar cukup dengan alamat IP:
nmap 203.0.113.10
Tanpa opsi tambahan, Nmap memindai 1.000 port TCP yang paling umum. Cepat, tapi port di luar daftar itu tidak tersentuh. Untuk audit yang lebih serius, pakai kombinasi berikut:
sudo nmap -sS -sV -p- 203.0.113.10
Opsi -sS adalah SYN scan, cara pemindaian TCP bawaan saat dijalankan dengan hak root. -p- berarti semua port TCP dari 1 sampai 65535. -sV mencoba mengenali layanan dan versinya, misalnya OpenSSH 9.6p1 atau nginx. Pemindaian semua port memang lebih lama, jadi wajar bila butuh beberapa menit.
Beberapa opsi lain yang berguna. -Pn melewati tahap ping dan langsung memindai port, perlu dipakai bila server memblokir ping sehingga Nmap mengira server mati. -sU memindai port UDP, misalnya DNS (53) atau WireGuard (51820), tapi pemindaian UDP jauh lebih lambat sehingga sebaiknya dibatasi ke port tertentu, contohnya sudo nmap -sU -p 53,123,51820 203.0.113.10. Opsi -oN hasil.txt menyimpan hasil ke berkas supaya bisa dibandingkan dengan pemindaian berikutnya.
Jangan lupakan IPv6. Banyak VPS sekarang mendapat alamat IPv6 otomatis, dan aturan firewall yang hanya ditulis untuk IPv4 bisa meninggalkan pintu terbuka di sisi IPv6. Pindai juga alamat itu dengan opsi -6, misalnya sudo nmap -6 -sS -p- 2001:db8::10. Nmap menyertakan alat ndiff untuk membandingkan dua hasil pemindaian yang disimpan dalam format XML (-oX). Dengan begitu, port yang tiba-tiba muncul sejak pemindaian terakhir langsung terlihat tanpa harus membaca ulang seluruh daftar.
Apa arti open, closed, dan filtered?
Setiap port di hasil Nmap diberi status. Inilah yang perlu kamu pahami untuk menarik kesimpulan yang benar.
| Status | Arti | Yang perlu dilakukan |
|---|---|---|
open | Ada layanan yang menerima koneksi di port ini | Pastikan memang sengaja dibuka dan layanannya terbarui |
closed | Port bisa dijangkau, tapi tidak ada layanan yang mendengarkan | Aman dari sisi layanan, tapi tanda firewall tidak memblokir port ini |
filtered | Nmap tidak mendapat jawaban, biasanya karena firewall membuang paket | Kondisi yang diharapkan untuk port yang tidak dipakai |
unfiltered | Port bisa dijangkau, tapi Nmap tidak bisa memastikan open atau closed | Muncul pada jenis pemindaian tertentu, ulangi dengan SYN scan |
Pada pemindaian UDP, kamu juga akan sering melihat status gabungan open|filtered, artinya Nmap tidak bisa membedakan port terbuka atau difilter. Untuk memastikannya, cek langsung di server dengan ss.
Server yang sehat biasanya menampilkan sedikit port open (misalnya 22, 80, 443) dan sisanya filtered. Bila banyak port berstatus closed, artinya firewall belum menolak koneksi masuk secara bawaan.
Mencocokkan hasil dengan yang ada di server
Hasil dari luar perlu dicocokkan dengan apa yang berjalan di dalam. Di server, jalankan:
sudo ss -tulpn
Perintah ini menampilkan semua port TCP dan UDP yang sedang didengarkan beserta nama prosesnya. Perhatikan kolom alamat. Layanan yang mendengarkan di 127.0.0.1 atau ::1 hanya bisa diakses dari server itu sendiri, sedangkan 0.0.0.0 atau * berarti mendengarkan di semua antarmuka.
Temuan yang paling sering muncul saat dua daftar ini dibandingkan cukup khas. Port database seperti 3306 atau 5432 terbuka ke publik karena layanan mendengarkan di semua antarmuka. Port panel kontrol atau aplikasi admin yang lupa dibatasi. Port container Docker yang terbuka meski firewall tidak mengizinkannya, karena Docker menulis aturan firewall-nya sendiri; solusinya ada di panduan mengamankan Docker di VPS agar port tidak bocor. Kalau ragu fungsi sebuah port, cek di daftar port penting di server.
Menutup port yang tidak perlu
Untuk setiap port open yang tidak seharusnya terbuka, ada dua pilihan. Yang terbaik adalah mematikan layanannya bila memang tidak dipakai, misalnya dengan sudo systemctl disable --now nama-layanan. Layanan yang tidak berjalan tidak bisa diserang.
Kalau layanannya dibutuhkan tapi hanya oleh aplikasi lokal, ubah konfigurasinya agar mendengarkan di 127.0.0.1 saja. Untuk MySQL atau MariaDB, misalnya, atur bind-address = 127.0.0.1. Kalau layanannya harus bisa diakses dari luar tapi hanya oleh pihak tertentu, batasi lewat firewall per alamat IP. Langkahnya untuk UFW ada di cara setting UFW firewall di Ubuntu 24.04.
Setelah perubahan, jalankan ulang pemindaian Nmap dari luar dan pastikan port yang ditutup sudah berubah menjadi filtered. Ulangi pemeriksaan ini setiap kali kamu memasang aplikasi baru, dan simpan hasilnya sebagai catatan pembanding.
Intinya, firewall yang kamu atur hanyalah niat, sedangkan hasil Nmap dari luar adalah kenyataan. Pindai servermu sendiri secara berkala, cocokkan dengan ss -tulpn, dan tutup setiap port yang tidak punya alasan jelas untuk terbuka.


