RDP Monster

Cek Port Terbuka di Linux: ss, netstat, lsof, nmap

Cek Port Terbuka di Linux: ss, netstat, lsof, nmap

Memeriksa port terbuka dengan ss, standar modern

Setiap port terbuka di sistem Linux ada karena sebuah proses meminta kernel untuk listening di port tersebut. Alat yang menampilkan socket itu saat ini adalah ss (socket statistics), bagian dari paket iproute2 yang terpasang di setiap distribusi modern. Satu perintah sudah mencakup hampir semua situasi:

sudo ss -tulpn

Setiap opsi punya satu tugas:

  • -t: sertakan socket TCP
  • -u: sertakan socket UDP
  • -l: tampilkan hanya socket yang listening (hilangkan opsi ini untuk melihat koneksi yang sudah terjalin juga)
  • -p: tampilkan proses pemilik setiap socket; inilah sebabnya Anda perlu sudo, karena tanpanya Anda hanya melihat proses milik sendiri
  • -n: keluaran numerik, mencetak :22 alih-alih :ssh dan melewati pencarian reverse DNS, yang juga mempercepat perintah

Satu baris keluaran biasanya tampak seperti ini:

Netid State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
tcp   LISTEN 0      128          0.0.0.0:22         0.0.0.0:*    users:(("sshd",pid=712,fd=3))

Kolom Local Address adalah yang paling penting untuk keamanan. 0.0.0.0:22 berarti socket menerima koneksi di setiap antarmuka IPv4, [::]:22 adalah padanan IPv6-nya, dan 127.0.0.1:5432 berarti layanan hanya menjawab di loopback dan sama sekali tidak bisa dijangkau dari jaringan.

Beberapa variasi yang layak dihafal:

ss -tlnp                      # TCP listeners only
ss -ulnp                      # UDP listeners only
sudo ss -tlnp 'sport = :22'   # who is listening on port 22
ss -tn state established      # active TCP connections right now

netstat masih berfungsi, tetapi sudah legacy

Jutaan tutorial masih menyebut netstat -tulpn, dan opsinya berpadanan satu per satu dengan perintah ss di atas, sehingga kebiasaan Anda bisa dipindahkan ke dua arah. Perbedaannya ada di dalam: netstat termasuk paket net-tools yang hanya dipelihara secukupnya dan membaca berkas /proc, sedangkan ss menanyakan langsung ke kernel melalui netlink, sehingga jelas lebih cepat pada mesin yang menangani ribuan socket.

Sebagian besar distribusi saat ini tidak lagi menyertakan net-tools secara default. Jika Anda tetap membutuhkannya:

sudo netstat -tulpn

# if the command is missing:
sudo apt install net-tools    # Debian / Ubuntu
sudo dnf install net-tools    # RHEL / Fedora

Tidak ada alasan memasangnya di server baru. Anggap netstat sebagai cadangan kompatibilitas untuk sistem lama yang Anda warisi, dan gunakan ss di tempat lain.

lsof: port dari sudut pandang proses

Di Linux segalanya adalah berkas, termasuk socket jaringan, jadi lsof (list open files) sekaligus berfungsi sebagai pemeriksa port. Alat ini unggul ketika Anda sudah berpikir dalam kerangka proses alih-alih port:

sudo lsof -i -P -n                  # every process with a network socket
sudo lsof -iTCP -sTCP:LISTEN -P -n  # TCP listeners only
sudo lsof -i :443                   # everything touching port 443

-P dan -n mematikan penerjemahan nama port dan nama host, gagasan yang sama dengan -n pada ss -tulpn. Bentuk ketiga adalah yang paling sering dipakai: arahkan ke sebuah port dan Anda mendapatkan nama perintah, PID, pengguna, dan file descriptor dalam satu tabel yang mudah dibaca. Berbeda dari ss, lsof juga menampilkan koneksi yang sudah terjalin untuk setiap proses selain socket yang listening, yang membantu saat Anda ingin tahu siapa yang sedang berkomunikasi dengan sebuah layanan, bukan hanya bahwa layanan itu ada.

nmap: listening tidak sama dengan bisa dijangkau

Semua yang dibahas sejauh ini menjawab satu pertanyaan: apa yang listening di mesin ini. Untuk keamanan, pertanyaan lain lebih penting: apa yang benar-benar bisa dijangkau dari luar. Kedua daftar itu jarang sama, karena firewall host, penyaringan di sisi penyedia, dan binding loopback-saja semuanya menciptakan celah di antaranya. Ini juga sebabnya memindai diri sendiri dari mesin yang sama hampir tidak membuktikan apa pun: nmap localhost melewati antarmuka loopback, sepenuhnya melompati aturan firewall eksternal Anda, dan dengan santai melaporkan layanan yang tidak akan pernah bisa dijangkau penyerang.

Jalankan pemindaian dari mesin lain, diarahkan ke IP publik server:

nmap 203.0.113.10                            # top 1000 TCP ports
nmap -p- 203.0.113.10                        # all 65535 TCP ports
sudo nmap -sU --top-ports 100 203.0.113.10   # common UDP ports (slow)

nmap melaporkan tiga status yang perlu dipahami: open berarti ada layanan yang menjawab, closed berarti paket tiba tetapi tidak ada yang listening di sana, dan filtered berarti paket dibuang tanpa pemberitahuan, hampir selalu oleh firewall. Port yang ditampilkan ss sebagai LISTEN tetapi dilaporkan nmap dari jarak jauh sebagai filtered adalah gambaran firewall yang bekerja sebagaimana mestinya. Satu aturan berlaku tanpa kecuali: pindai hanya host yang Anda miliki atau yang secara tegas Anda diizinkan untuk diuji.

Menemukan persis proses mana yang menguasai sebuah port

Misalkan ada sesuatu yang menempati port 8080 dan aplikasi Anda tidak bisa melakukan bind. Ada tiga jalan menuju PID-nya:

sudo ss -tlnp 'sport = :8080'
sudo lsof -i :8080
sudo fuser -v 8080/tcp

fuser paling ringkas: ia mencetak PID, dan -v menambahkan pengguna serta nama perintah. Ia bahkan bisa langsung mematikan pelakunya dengan fuser -k 8080/tcp, tetapi itu mengirim signal tanpa pembersihan di tingkat layanan, jadi jadikan pilihan terakhir. Setelah punya PID, ps -fp PID menampilkan baris perintah lengkapnya, dan systemctl status PID memberi tahu unit systemd mana yang menjalankannya.

Ketika Anda sama sekali tidak punya alat (misalnya pada image kontainer yang sangat minim), tabel milik kernel selalu tersedia: cat /proc/net/tcp. Port ditampilkan dalam heksadesimal (0016 berarti 22) dan status 0A berarti LISTEN. Tabel mentah inilah data yang diurai dan diformat oleh alat-alat lain untuk Anda.

Semua yang melakukan bind pada socket muncul di daftar ini dengan cara yang sama, entah itu basis data atau tumpukan proxy. Inbound V2Ray, misalnya, hanyalah satu listener lain di port yang Anda konfigurasikan, seperti dijelaskan dalam panduan protokol V2Ray kami.

Menutup port terbuka: kill vs firewall

Sebuah port terbuka karena ada proses yang listening di sana, sehingga Anda punya dua tuas berbeda: hilangkan listener-nya, atau blokir keterjangkauannya. Keduanya tidak bisa saling menggantikan, dan untuk hal-hal penting biasanya Anda perlu menarik kedua tuas itu.

Solusi yang bersih adalah menghentikan dan menonaktifkan layanan pemilik socket. Mematikan PID terlihat lebih cepat tetapi jarang bertahan: systemd menghidupkan kembali layanan yang diawasinya secara otomatis, dan port itu sudah kembali sebelum Anda menjalankan ss lagi. Simpan kill untuk proses yang Anda jalankan sendiri secara manual. Untuk melihat apa yang berjalan dan mematikan yang tidak Anda butuhkan, panduan menampilkan daftar layanan dengan systemctl kami membahas alur kerja itu dari awal sampai akhir.

sudo systemctl stop cups
sudo systemctl disable cups

Firewall menangani tuas kedua. Di Ubuntu, izinkan SSH sebelum mengaktifkan ufw, atau Anda akan terkunci di luar server sendiri:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable

Pada sistem keluarga RHEL, zona default firewalld sudah membuang lalu lintas yang tidak diminta; hapus apa pun yang sebelumnya Anda buka dengan firewall-cmd --permanent --remove-port=8080/tcp lalu firewall-cmd --reload. Satu hal yang bukan solusi: memindahkan layanan ke port non-standar. Itu menyembunyikan Anda dari pemindaian paling malas dan menenangkan log, tetapi nmap -p- menemukan port baru itu dalam hitungan menit. Ketersamaran bukan keamanan: tutup port itu atau pasang firewall.

Audit port lima menit untuk server baru

Pada login pertama di server yang baru disiapkan, buat inventarisnya dengan sudo ss -tulpn. Instalasi minimal yang bersih seharusnya menampilkan sangat sedikit: sshd di port 22 dan, pada distribusi yang memakai systemd-resolved, sebuah stub DNS di 127.0.0.53:53. Apa pun selain itu perlu penjelasan. Lalu ikuti daftar periksa berikut:

  1. Identifikasi setiap listener berdasarkan nama proses dan PID; nonaktifkan layanan apa pun yang tidak Anda minta.
  2. Pertanyakan setiap binding 0.0.0.0 atau [::]. Basis data dan panel admin seharusnya di 127.0.0.1 kecuali memang harus melayani jaringan.
  3. Kenali port umum secara langsung: 22 SSH, 80/443 web, 3306 MySQL, 5432 PostgreSQL, 6379 Redis. Port 3389 adalah remote desktop. Di Linux itu berarti xrdp sedang berjalan, dan aturan paparan serta pengerasan port tersebut dibahas dalam panduan port RDP 3389 kami.
  4. Pindai IP publik dari mesin Anda sendiri dengan nmap -p- lalu bandingkan hasilnya dengan daftar ss; setiap ketidaksesuaian berarti firewall bekerja atau ada binding loopback.
  5. Akhiri dengan firewall default-deny yang hanya mengizinkan port yang secara sadar Anda pilih untuk dibuka.

Berikut seluruh kotak alatnya, masing-masing dalam satu baris:

PerintahMenampilkanGunakan saat
sudo ss -tulpnSocket TCP/UDP yang listening beserta proses pemiliknyaPemeriksaan awal sehari-hari di mesin apa pun
netstat -tulpnTampilan yang sama melalui net-tools lamaSistem lama yang tidak punya ss
sudo lsof -i :PORTProses dan koneksi pada satu portMenghubungkan sebuah port dengan proses dan berkasnya
sudo fuser -v PORT/tcpPID yang terikat ke sebuah portPencarian PID cepat, untuk skrip
nmap SERVER_IP (dari jarak jauh)Port yang benar-benar bisa dijangkau dari luarMemverifikasi firewall dan paparan nyata
cat /proc/net/tcpTabel socket mentah dari kernel (heks)Kontainer minimal tanpa alat apa pun terpasang

Perintah hanya menjadi refleks pada mesin di mana Anda benar-benar punya akses root dan tidak ada hal penting yang bisa rusak. VPS Linux dari rdp.monster memberikan sandbox seperti itu: akses admin penuh, CPU dan RAM khusus, bandwidth tanpa batas (fair-use), tanpa KYC, dan server aktif sekitar 10 detik setelah pembayaran dikonfirmasi, cukup cepat untuk menjalankan ss -tulpn pertama Anda sebelum kopi Anda dingin.

Pertanyaan yang sering ditanyakan

Apakah saya perlu root untuk memeriksa port terbuka di Linux?

Tidak untuk menampilkan daftar port, ya untuk melihat proses pemiliknya.
Pengguna mana pun bisa menjalankan ss -tuln atau membaca /proc/net/tcp, jadi daftar port yang listening tidak pernah disembunyikan. Batasnya ada pada opsi -p: tanpa root, ss, lsof, dan fuser hanya menampilkan proses milik pengguna Anda sendiri, dan socket lain muncul dengan kolom proses kosong. Pada nmap, pemindaian SYN default (-sS) membutuhkan root; alternatif tanpa hak istimewa adalah connect scan (-sT), yang berfungsi baik tetapi sedikit lebih berisik.

Bagaimana cara memeriksa apakah port tertentu terbuka di server jarak jauh?

Gunakan netcat: nc -zv host port memberi jawaban seketika.
nc -zv example.com 443 mencoba membuka koneksi TCP dan melaporkan berhasil atau gagal tanpa mengirim data. Jika netcat tidak tersedia, Bash biasa pun bisa: timeout 3 bash -c '</dev/tcp/example.com/443' && echo open. Keduanya hanya membuktikan bahwa ada sesuatu yang menerima koneksi, tetapi tidak menjelaskan layanan mana yang menjawab atau apakah layanan itu sehat. Untuk UDP tidak ada tes cepat yang andal, karena port yang diam bisa berarti open atau filtered; pakai nmap -sU di sana.

Mengapa ss menampilkan port sebagai listening tetapi saya tidak bisa terhubung dari luar?

Socket terikat ke loopback atau ada firewall yang membuang lalu lintasnya.
Periksa kolom Local Address lebih dulu: 127.0.0.1:PORT atau [::1]:PORT berarti layanan hanya menerima koneksi lokal, dan itu memang disengaja serta umum untuk basis data. Jika terikat ke 0.0.0.0, paket sedang disaring di suatu titik pada jalurnya: firewall host seperti ufw, firewalld, atau nftables mentah, atau penyaringan di sisi penyedia Anda. Pemindaian nmap dari luar yang melaporkan port sebagai filtered menegaskan adanya firewall; closed berarti lalu lintas tiba tetapi tidak ada yang listening di antarmuka itu.

Port apa saja yang seharusnya terbuka di server Linux yang baru?

Satu: SSH. Apa pun selain itu pada instalasi bersih perlu penjelasan.
Instalasi minimal Debian, Ubuntu, atau Rocky seharusnya hanya membuka sshd di port 22 ke jaringan. Resolver DNS stub di 127.0.0.53:53 (systemd-resolved) itu normal dan tidak bisa dijangkau dari luar. Image cloud kadang menambahkan agen atau daemon pemantauan. Identifikasi setiap listener dengan ss -tulpn dan nonaktifkan apa pun yang tidak Anda minta. Setiap layanan yang Anda pasang setelahnya sebaiknya secara default terikat ke loopback kecuali benar-benar perlu melayani jaringan, dengan firewall yang hanya mengizinkan apa yang memang publik.

Adrien Roche, Editor Infrastruktur & Hosting

Insinyur sistem dengan pengalaman 10+ tahun mengoperasikan armada Windows Server dan Linux. Adrien mengelola dokumentasi infrastruktur rdp.monster dan menulis panduan kami tentang RDP, hosting VPS, administrasi server, jaringan, dan perangkat privasi.

Daftar ke program reseller kami

Data Anda

Jika Anda punya pertanyaan, contact us by clicking here !
Nama(Wajib)
Masukkan alamat email Anda, Anda harus memiliki akun di manager.rdp.monster !

Perusahaan Anda

Masukkan alamat situs web Anda jika ada
Jelaskan singkat bagaimana Anda akan menjual layanan kepada pelanggan Anda. Misalnya, berbincang dengan orang-orang di forum.

Kami menggunakan cookie !

Kami menggunakan cookie untuk meningkatkan pengalaman penjelajahan Anda, menampilkan iklan atau konten yang dipersonalisasi, dan menganalisis lalu lintas kami. Dengan mengklik «Terima», Anda menyetujui penggunaan cookie oleh kami.