Saat memecahkan masalah konektivitas jaringan atau masalah khusus terkait aplikasi, salah satu hal pertama yang harus diperiksa adalah port mana yang digunakan dan aplikasi mana yang menggunakan port tersebut.
Port ibarat sebuah pintu yang menghubungkan antara mesin dengan dunia luar (internet), port yang terbuka bisa saja menjadi masalah di kemudian hari. Sudah banyak kasus atau berita di mana hacker berhasil menyusup dari port yang rentan.
Artikel ini menjelaskan cara mengetahui layanan mana saja yang memakai port tertentu dengan menggunakan perintah netstatss dan lsof. Petunjuk ini berlaku untuk semua sistem operasi berbasis Linux dan Unix-like seperti macOS.

Apa itu Listening Port?

Port jaringan diidentifikasi oleh nomornya, alamat IP yang terkait, dan jenis protokol komunikasi seperti TCP atau UDP.
Listening port adalah port jaringan tempat aplikasi atau proses mendengarkan, bertindak sebagai titik akhir komunikasi.
Setiap Listening port dapat dibuka atau ditutup (difilter) menggunakan firewall. Secara umum, port yang terbuka adalah port jaringan yang menerima paket masuk dari lokasi jarak jauh.
Anda tidak dapat memiliki dua layanan listening pada port yang sama pada alamat IP yang sama.
Misalnya, jika Anda menjalankan server web Apache yang listens pada port 80 dan 443 dan Anda mencoba untuk menginstal Nginx, maka Nginx akan gagal memulai karena HTTP dan HTTPS port sudah digunakan oleh Apache.

Periksa Listening port dengan netstat

netstat adalah alat baris perintah yang dapat memberikan informasi tentang koneksi jaringan.
Untuk mencantumkan semua port TCP atau UDP yang sedang listening, termasuk layanan yang menggunakan port dan status socket, gunakan perintah berikut :
sudo netstat -tunlp
Opsi yang digunakan dalam perintah ini memiliki arti sebagai berikut:
  • -t – Tampilkan TCP ports.
  • -u – Tampilkan UDP ports.
  • -n – Tampilkan alamat numerik alih-alih resolving hosts.
  • -l – Tampilkan hanya listening ports.
  • -p – Tampilkan PID dan nama proses listener. Informasi ini hanya ditampilkan jika Anda menjalankan perintah sebagai pengguna root atau sudo.
Outputnya akan terlihat seperti ini:
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd            
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      929/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      534/mysqld          
tcp6       0      0 :::80                   :::*                    LISTEN      515/apache2         
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd            
tcp6       0      0 :::25                   :::*                    LISTEN      929/master          
tcp6       0      0 :::33060                :::*                    LISTEN      534/mysqld          
udp        0      0 0.0.0.0:68              0.0.0.0:*                           966/dhclient
Kolom penting yang perlu kita soroti adalah:
  • Proto – Protokol yang digunakan oleh socket.
  • Local Address – Alamat IP dan nomor port tempat proses mendengarkan.
  • PID/Program name – PID dan nama proses.
Jika Anda ingin memfilter hasilnya gunakan perintah grep. Misalnya, untuk menemukan proses apa yang mendengarkan pada port TCP 22 Anda akan mengetik:
sudo netstat -tnlp | grep :22
Output menunjukkan bahwa pada port mesin ini 22 digunakan oleh server SSH:
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd
Jika output kosong, itu berarti tidak ada yang listening di port tersebut.
Anda juga dapat memfilter daftar berdasarkan kriteria, misalnya, PID, protocol, state, dan sebagainya.
netstat sudah cukup kuno dan telah diganti dengan ss dan ip, tetapi tetap saja netstat adalah perintah yang paling sering digunakan untuk memeriksa koneksi jaringan.

Periksa Listening ports dengan ss

ss adalah versi terbaru dari netstat. Ini tidak memiliki beberapa fitur netstat tetapi memperlihatkan lebih banyak status TCP dan memiliki performa sedikit lebih cepat. Opsi perintah sebagian besar sama sehingga transisi dari netstat ke ss tidak begitu sulit.
Untuk mendapatkan daftar semua listening ports dengan ss Anda harus mengetik:
sudo ss -tunlp
Outputnya hampir sama dengan yang dilaporkan oleh netstat:
State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port                                                                                        
LISTEN   0        128              0.0.0.0:22             0.0.0.0:*      users:(("sshd",pid=445,fd=3))                                                        
LISTEN   0        100              0.0.0.0:25             0.0.0.0:*      users:(("master",pid=929,fd=13))                                                     
LISTEN   0        128                    *:3306                 *:*      users:(("mysqld",pid=534,fd=30))                                                     
LISTEN   0        128                    *:80                   *:*      users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))   
LISTEN   0        128                 [::]:22                [::]:*      users:(("sshd",pid=445,fd=4))                                                        
LISTEN   0        100                 [::]:25                [::]:*      users:(("master",pid=929,fd=14))                                                     
LISTEN   0        70                     *:33060                *:*      users:(("mysqld",pid=534,fd=33))

Periksa Listening Ports dengan lsof

lsof adalah utilitas baris perintah yang kuat yang menyediakan informasi tentang file yang dibuka oleh proses.
Di Linux, semuanya adalah file. Anda dapat menganggap socket sebagai file yang menulis ke jaringan.
Untuk mendapatkan daftar semua listening port TCP, gunakan perintah berikut :
sudo lsof -nP -iTCP -sTCP:LISTEN
Opsi yang digunakan adalah sebagai berikut:
  • -n – Jangan mengonversi nomor port ke nama port.
  • -p – Jangan menyelesaikan nama host, tunjukkan alamat numerik.
  • -iTCP -sTCP: LISTEN – Tampilkan hanya file jaringan dengan status TCP LISTEN.
    COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd      445     root    3u  IPv4  16434      0t0  TCP *:22 (LISTEN)
    sshd      445     root    4u  IPv6  16445      0t0  TCP *:22 (LISTEN)
    apache2   515     root    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
    mysqld    534    mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)
    mysqld    534    mysql   33u  IPv6  19973      0t0  TCP *:33060 (LISTEN)
    apache2   764 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
    apache2   765 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
    master    929     root   13u  IPv4  19637      0t0  TCP *:25 (LISTEN)
    master    929     root   14u  IPv6  19638      0t0  TCP *:25 (LISTEN)
Sebagian besar nama kolom output cukup jelas:
  • COMMANDPIDUSER – Nama, pid dan user yang menjalankan program yang terkait dengan port.
  • NAME – Nomor port
Untuk menemukan proses yang mendengarkan pada port tertentu, misalnya port 3306 Anda akan menggunakan:
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
Output menunjukkan bahwa port 3306 digunakan oleh MySQL server:
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  534 mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)
Untuk informasi lebih lanjut, kunjungi halaman manual lsof dengan mengetik man lsof dan baca tentang semua opsi kuat lainnya dari alat ini..

Kesimpulan

Kami telah menunjukkan kepada Anda beberapa perintah yang dapat Anda gunakan untuk memeriksa port apa yang sedang digunakan pada sistem Anda, dan bagaimana menemukan proses apa yang mendengarkan pada port tertentu.