Apa Itu Port Linux dan Cara Melihat Layanan yang Aktif
Pahami cara port mengarahkan trafik ke layanan Linux, termasuk port 22, 80, dan 443, lalu gunakan ss untuk melihat layanan yang sedang listening secara lokal atau publik.
Apa sebenarnya port itu
Port adalah nomor yang memungkinkan satu server menjalankan banyak layanan sekaligus tanpa mencampur trafiknya. VPS Anda memiliki satu alamat IP, tetapi dapat menjalankan server web, server SSH, dan database secara bersamaan. Saat sebuah packet tiba, sistem operasi perlu mengetahui layanan yang dituju. Nomor port memberikan informasi tersebut. Trafik web diarahkan ke port 443, sedangkan SSH diarahkan ke port 22. Alamat IP mengantarkan packet ke server Anda; port mengantarkannya ke program yang tepat pada server tersebut.
Port adalah angka 16-bit: 16 bit menghasilkan rentang 0 hingga 65535, dan angka 0 dicadangkan, sehingga dalam praktiknya port berjalan dari 1 hingga 65535. Port di bawah 1024 adalah port "well-known" dan memerlukan root untuk dibuka. Karena itu, layanan standar menggunakan port tersebut: 22 untuk SSH, 80 untuk HTTP, 443 untuk HTTPS, dan 53 untuk DNS. Port di atas 1024 dapat digunakan oleh program biasa.
Ada dua jenis port, yaitu TCP dan UDP. Nomor port pada salah satunya terpisah dari nomor yang sama pada jenis lainnya. TCP adalah protokol berbasis koneksi yang digunakan oleh sebagian besar layanan, seperti SSH, HTTP, dan database. UDP tidak menggunakan koneksi dan digunakan untuk hal-hal seperti DNS serta beberapa VPN. Saat membuka firewall, biasanya Anda harus menentukan jenis protokolnya, misalnya 22/tcp.
Listening berarti program menunggu koneksi
Program yang ingin menerima koneksi meminta kernel untuk “listen” pada sebuah port. Sejak saat itu, port tersebut terbuka pada mesin dan program merespons apa pun yang tiba di sana, sesuai dengan aturan firewall. Port yang tidak memiliki program yang listen akan menolak koneksi. Jadi, pertanyaan pertama dalam setiap pemeriksaan keamanan adalah: apa yang sedang listen, dan di mana.
Perintah untuk menjawabnya adalah ss:
sudo ss -tlnpFlag tersebut berarti TCP (t), hanya socket yang listen (l), port dalam format numerik (n, sehingga Anda melihat 22, bukan ssh), serta proses pemiliknya (p). Contoh hasil:
State Recv-Q Local Address:Port Process
LISTEN 0 0.0.0.0:22 sshd
LISTEN 0 127.0.0.1:5432 postgres
LISTEN 0 [::]:80 nginxKolom Process menunjukkan program yang memiliki setiap port. Dengan demikian, Anda dapat melacak sesuatu yang tidak sengaja dibiarkan tetap berjalan.
Kolom Local Address adalah bagian yang paling penting
Baca alamat di depan setiap port dengan saksama karena alamat tersebut menentukan pihak yang dapat menjangkau service. Ada tiga kasus yang akan sering Anda temui.
0.0.0.0:22 berarti "listen pada setiap alamat IPv4 yang dimiliki mesin ini", termasuk alamat publiknya. Service tersebut dapat dijangkau dari Internet melalui IPv4 jika firewall mengizinkannya.
[::]:80 berarti hal yang sama untuk IPv6: listen pada setiap alamat IPv6, termasuk alamat publik. Banyak program melakukan bind ke alamat ini secara default, dan di Linux, socket :: sering juga menerima IPv4.
127.0.0.1:5432 berarti "listen hanya pada loopback". 127.0.0.1 adalah alamat yang digunakan mesin untuk berkomunikasi dengan dirinya sendiri dan tidak dapat dirutekan dari tempat lain. Service yang melakukan bind ke alamat ini hanya dapat dijangkau dari server yang sama, tidak pernah dari Internet, apa pun konfigurasi firewall Anda. Baris Postgres di atas aman berdasarkan desainnya.
Aturan praktisnya jelas: database, cache, atau panel admin yang hanya digunakan oleh aplikasi Anda sendiri harus melakukan bind ke 127.0.0.1, bukan 0.0.0.0. Jika service tersebut tidak pernah listen pada alamat publik, tidak ada yang dapat dijangkau oleh penyerang.
Listening tidak sama dengan dapat dijangkau
Ada satu perbedaan lain yang mencegah banyak kebingungan. Port yang terbuka pada mesin, artinya ada program yang sedang listening, berbeda dengan port yang dapat dijangkau dari luar, artinya firewall mengizinkannya. Keduanya harus benar agar klien jarak jauh dapat terhubung. Kedua kegagalan ini bahkan terlihat berbeda dari sisi klien: koneksi yang ditolak berarti tidak ada proses yang sedang listening, sedangkan koneksi yang berhenti lalu mengalami timeout biasanya berarti firewall membuang paket tersebut. Inilah arti dari kedua error SSH tersebut.
Jadi, ada dua lapisan kontrol. Anda menentukan apa yang melakukan listening dengan menetapkan alamat bind setiap service. Anda juga menentukan apa yang dapat dijangkau dari luar dengan firewall. Server yang dikelola dengan baik menggunakan keduanya: service melakukan bind hanya pada alamat yang diperlukan, dan firewall menolak semua koneksi yang tidak diizinkan secara eksplisit. Membaca apa saja yang sedang listening dengan ss adalah langkah pertama. Menentukan apa yang diizinkan firewall adalah langkah kedua, yang dibahas dalam pengantar firewall dengan UFW.
Ada satu hal yang sering menimbulkan masalah. IPv4 dan IPv6 terpisah, dan firewall yang hanya mencakup IPv4 membuat service [::] tetap terbuka pada IPv6. Masalah khusus ini dibahas dalam artikel tersendiri: masalah firewall IPv6.
FAQ
Bagaimana cara melihat port yang terbuka pada server Linux saya?
Jalankan sudo ss -tlnp untuk TCP atau sudo ss -ulnp untuk UDP. Perintah tersebut menampilkan setiap socket yang sedang listening, port, alamat lokal tempat socket terikat, serta proses yang memilikinya. Perhatikan kolom Local Address: 0.0.0.0 atau [::] berarti service dapat diakses dari jaringan, sedangkan 127.0.0.1 berarti service hanya listening pada mesin itu sendiri.
Apa perbedaan antara 0.0.0.0 dan 127.0.0.1?
0.0.0.0 berarti "listening pada semua alamat IPv4", termasuk alamat publik, sehingga service dapat diakses dari jaringan. 127.0.0.1 adalah loopback, yaitu alamat yang digunakan mesin untuk berkomunikasi dengan dirinya sendiri. Alamat ini tidak dapat dirutekan dari tempat lain, sehingga service yang terikat padanya hanya dapat diakses secara lokal. Ikat service internal ke 127.0.0.1 agar tidak pernah terekspos.
Apakah saya perlu membuka port di firewall agar service dapat berfungsi?
Hanya untuk service yang harus diakses dari mesin lain. Service yang terikat ke 127.0.0.1 tidak memerlukan aturan firewall karena tidak ada akses eksternal yang dapat menjangkaunya. Service pada 0.0.0.0 atau [::] memerlukan aturan firewall untuk mengizinkan trafik, dan secara default harus ditolak sampai aturan tersebut ditambahkan.
Apa perbedaan antara port TCP dan port UDP?
TCP berbasis koneksi dan digunakan oleh sebagian besar service, seperti SSH, web server, dan database. UDP tidak berbasis koneksi dan digunakan oleh DNS serta beberapa VPN. Nomor yang sama pada TCP dan UDP merupakan port yang terpisah, sehingga 53/tcp dan 53/udp berbeda. Saat menulis aturan firewall, sebutkan protokolnya, misalnya 22/tcp.