Server Linux Anda sedang berjalan, dan Anda sekarang ingin memeriksa apakah port tertentu terbuka sehingga Anda dapat mengaksesnya dari jarak jauh. Memeriksa port yang terbuka adalah tugas yang cukup umum bagi administrator sistem, dan ada beberapa cara berbeda untuk melakukannya di Linux.
Pada artikel ini, Anda akan mempelajari beberapa cara untuk memeriksa apakah sebuah port terbuka di Linux sehingga Anda dapat memilih mana yang paling cocok untuk Anda. Siap? Baca terus!
Prasyarat
Tutorial ini akan menjadi demonstrasi langsung. Jika Anda ingin mengikuti, pastikan Anda memiliki yang berikut ini.
- Komputer Linux. Panduan ini menggunakan Ubuntu 20.04, tetapi semua distribusi Linux terbaru akan berfungsi.
- Akses ke terminal. Jika Anda menggunakan lingkungan desktop grafis, cari program emulator terminal di menu aplikasi Anda. Atau, jika Anda masuk ke server jauh melalui SSH,
- Akun pengguna dengan
sudo
hak istimewa. Untuk mempermudah, tutorial ini menggunakan pengguna root.
Periksa Apakah Port Terbuka di Linux Menggunakan netstat
Metode pertama untuk memeriksa apakah port terbuka di Linux adalah dengan menjalankan netstat
memerintah. Perintah ini menampilkan koneksi jaringan, tabel perutean, dan banyak statistik antarmuka jaringan.
netstat
perintah adalah bagian dari net-tools
paket, dan paket ini mungkin tidak datang secara default dengan distro Linux Anda. Di Ubuntu, instal netstat
dengan menjalankan perintah berikut di terminal.
apt update -y && apt install net-tools -y
Misalkan Anda menjalankan server web NGINX dan ingin memeriksa apakah port 80
terbuka. Anda dapat melakukannya dengan menjalankan perintah berikut. Ganti 80
dengan nomor port yang ingin Anda periksa.
-tulpn
flag menginstruksikan netstat
untuk menampilkan semua port mendengarkan. grep
pertama perintah menemukan dan memfilter baris yang berisi kata LISTEN
dalam hasil. grep
kedua perintah memfilter hasil untuk hanya menampilkan item yang cocok dengan :80
.
netstat -tulpn | grep LISTEN | grep :80
Untuk mengetahui lebih banyak tentang flag netstat, jalankan perintah netstat –help.
Jika port terbuka, Anda akan melihat output berikut. Seperti yang Anda lihat, output menunjukkan bahwa port 80 terbuka pada sistem. tcp adalah jenis protokol, dan :::80
menunjukkan bahwa ini adalah TCPv6 Pelabuhan. 0.0.0.0:80
berarti port terbuka untuk semua alamat IPv4. 80
adalah port HTTP default yang melayani akses ke situs web.

Memeriksa Apakah Port Terbuka Menggunakan ss
ss
command adalah utilitas baris perintah lain untuk memeriksa port yang terbuka. Perintah ini menampilkan statistik soket, yang dapat Anda gunakan untuk mengonfirmasi apakah port terbuka atau tidak. ss
perintah menampilkan lebih banyak informasi tentang port terbuka daripada alat lainnya.
Seperti netstat
perintah, -t
flag menginstruksikan ss
untuk hanya menampilkan soket TCP, -u
untuk hanya menampilkan soket UDP, dan -l
untuk hanya menampilkan soket mendengarkan. -p
flag menunjukkan nama proses atau PID menggunakan port.
ss -tulpn | grep LISTEN | grep :80
Anda akan melihat output berikut jika port terbuka. Seperti yang Anda lihat, output berisi nama proses dan PID untuk setiap port mendengarkan. Dalam hal ini, port 80 terbuka, dan server web NGINX menggunakannya.

Memeriksa Apakah Port Terbuka Menggunakan lsof
lsof
command adalah alat lain yang berguna untuk memeriksa port yang terbuka. lsof
nama singkatan dari daftar file yang terbuka , yang menampilkan informasi tentang file yang terbuka di sistem. Informasi ini mencakup deskriptor file, id proses, id pengguna, dll.
Bagaimana cara membuat daftar file yang terbuka membantu Anda menentukan apakah port terbuka? Anda mungkin pernah mendengar ungkapan “semuanya di Linux adalah file,”— dan ungkapan ini berarti apa yang dikatakannya.
Misalnya, Anda ingin memeriksa apakah port 22 terbuka dan pengguna Anda dapat SSH ke server Anda. Jalankan perintah di bawah ini untuk membuat daftar file yang terbuka dengan koneksi aktif di port 22.
-i
flag menginstruksikan lsof
untuk menampilkan semua soket Internet yang terbuka. -P
flag menunjukkan nomor port alih-alih nama layanan. Dan -n
flag menekan DNS dan pencarian nama layanan, jadi Anda akan melihat alamat IP alih-alih nama host jarak jauh.
lsof -i -P -n | grep LISTEN | grep :22
Jika port terbuka, Anda akan melihat output berikut. Seperti yang Anda lihat, output berisi informasi tentang:
1027 is the process id of the sshd service.
root is the user id that is using the port.
3u and 4u are the file descriptors for IPv4 and IPv6, respectively.
31035 and 31037 are the network ports for IPv4 and IPv6, respectively.
:22 indicates that port 22 is open for all IPv4 and IPv6 addresses.
- (LISTEN) menunjukkan bahwa port mendengarkan koneksi masuk.
0t0 is the status of the socket, which means that the socket is in the LISTEN state.

Memeriksa Apakah Port Terbuka Menggunakan nmap
Sejauh ini, Anda telah melihat cara memeriksa apakah port terbuka di Linux menggunakan baris perintah. Tetapi bagaimana jika Anda ingin memeriksa apakah port terbuka pada mesin jarak jauh? Dalam hal ini, Anda dapat menggunakan nmap
alat.
Tapi sebelum menjalankan nmap
, ketahuilah bahwa alat ini mungkin bukan bagian dari paket default di distro Linux Anda. Dalam hal ini, Anda harus terlebih dahulu menginstal nmap
dengan menjalankan perintah di bawah ini.
apt install nmap -y
Sekarang, jalankan perintah berikut untuk memeriksa apakah port terbuka pada mesin jarak jauh. Perintah ini menguji apakah port 22
terbuka di 159.89.176.25
sehingga pengguna Anda dapat SSH ke server Anda. Ganti alamat IP sesuai kebutuhan dengan milik Anda.
nmap -p 22 159.89.176.25
Seperti yang Anda lihat, output berisi informasi tentang:
- Waktu mulai pemindaian port (30-06-2020 16:58 UTC ).
- Alamat IP mesin jarak jauh (159.89.176.25 ).
- Status port (terbuka ).
- Layanan yang menggunakan port (ssh ).
- Status host (naik ).

Hasilnya menegaskan bahwa pengguna dapat SSH ke komputer menggunakan alamat IP dan port.
ssh [email protected] -p 22
Tangkapan layar di bawah menunjukkan koneksi SSH yang berhasil ke server, membuktikan bahwa port 22 terbuka.

Menguji apakah Port Terbuka dari Skrip Shell
Otomatisasi selalu merupakan ide yang bagus. Memeriksa port yang terbuka dengan menjalankan skrip shell adalah cara terbaik untuk menguji beberapa port. Anda dapat menggunakan metode sebelumnya untuk memeriksa apakah port terbuka. Namun, untuk contoh ini, Anda akan menulis skrip shell dasar yang menjalankan Netcat nc
perintah.
1. Buat file bernama check_port .sh di direktori home Anda menggunakan editor teks pilihan Anda. Contoh ini menggunakan nano.
nano check_port.sh
2. Salin kode contoh di bawah ini ke editor Anda. Ganti 80 dengan nomor port yang ingin Anda periksa.
jika kondisi memeriksa apakah port 80 terbuka menggunakan perintah nc. 2>&1 dan>/dev/null masing-masing mengarahkan kesalahan dan pesan keluaran ke /dev/null. /dev/null adalah file khusus yang membuang semua yang diterimanya.
Jika port terbuka, check_port.sh script akan mencetak Online ke konsol. Jika tidak, skrip akan dicetak Offline.
if ( nc -zv localhost 80 2>&1 >/dev/null ); then
echo 'Online'
else
echo 'Offline'
fi
File skrip akan terlihat mirip dengan tangkapan layar di bawah ini. Simpan skrip dan keluar dari editor.

3. Jalankan skrip shell untuk mulai memeriksa port terbuka yang Anda tentukan di dalam skrip.
bash check_port.sh
Anda akan melihat salah satu output berikut tergantung pada apakah port terbuka. Dalam hal ini, port terbuka, yang pesan Online
konfirmasi.

Anda dapat menggunakan skrip shell ini untuk memeriksa apakah port terbuka pada suatu interval atau pekerjaan terjadwal. Scripting sangat membantu ketika Anda harus memeriksa beberapa server. Anda hanya perlu menyalin check_port.sh ini skrip ke semua server yang ingin Anda periksa dan jalankan menggunakan alat CI/CD seperti Jenkins atau Ansible.
Menguji Jika Port Terbuka Menggunakan PowerShell
PowerShell memiliki cmdlet bawaan untuk menguji koneksi jaringan yang disebut Test-NetConnection
— tetapi cmdlet itu hanya tersedia di sistem Windows. Jangan khawatir; Anda masih dapat menggunakan PowerShell di Linux untuk memeriksa port dan koneksi yang terbuka menggunakan kelas TcpClient.
Jika komputer Linux Anda belum memiliki PowerShell, instal dengan mengikuti petunjuk dalam dokumentasi Microsoft ini:Instal PowerShell di Linux.
1. Luncurkan PowerShell dengan menjalankan perintah di bawah ini.
pwsh

2. Selanjutnya, buat file bernama Test-Port.ps1 menggunakan editor teks Anda. Contoh ini menggunakan nano.
nano Test-Port.ps1
3. Selanjutnya, salin kode di bawah ini ke editor Anda. Simpan file dan keluar dari editor sesudahnya.
Catatan:Kode ini adalah kutipan dari Alat Pengujian Port Uji PowerShell All-in-One.
<#
.SYNOPSIS
This function tests for open TCP/UDP ports.
.DESCRIPTION
This function tests any TCP/UDP port to see if it's open or closed.
.NOTES
.PARAMETER Computername
One or more remote, comma-separated computer names
.PARAMETER Port
One or more comma-separated port numbers you'd like to test.
.PARAMETER TcpTimeout
The number of milliseconds that the function will wait until declaring
the TCP port closed. Default is 1000.
.EXAMPLE
PS> Test-Port -Computername 'LABDC','LABDC2' -Protocol TCP 80,443
This example tests the TCP network ports 80 and 443 on both the LABDC
and LABDC2 servers.
#>
[CmdletBinding()]
[OutputType([System.Management.Automation.PSCustomObject])]
param (
[Parameter(Mandatory)]
[string[]]$ComputerName,
[Parameter(Mandatory)]
[int[]]$Port,
[Parameter()]
[int]$TcpTimeout = 1000
)
begin {
$Protocol = 'TCP'
}
process {
foreach ($Computer in $ComputerName) {
foreach ($Portx in $Port) {
$Output = @{ 'Computername' = $Computer; 'Port' = $Portx; 'Protocol' = $Protocol; 'Result' = '' }
Write-Verbose "$($MyInvocation.MyCommand.Name) - Beginning port test on '$Computer' on port '$Protocol:$Portx'"
$TcpClient = New-Object System.Net.Sockets.TcpClient
$Connect = $TcpClient.BeginConnect($Computer, $Portx, $null, $null)
$Wait = $Connect.AsyncWaitHandle.WaitOne($TcpTimeout, $false)
if (!$Wait -or !($TcpClient.Connected)) {
$TcpClient.Close()
Write-Verbose "$($MyInvocation.MyCommand.Name) - '$Computer' failed port test on port '$Protocol
:$Portx'"
$Output.Result = $false
}
else {
$TcpClient.EndConnect($Connect)
$TcpClient.Close()
Write-Verbose "$($MyInvocation.MyCommand.Name) - '$Computer' passed port test on port '$Protocol:$Portx'"
$Output.Result = $true
$TcpClient.Close()
$TcpClient.Dispose()
}
[pscustomobject]$Output
}
}
}
4. Setelah menyimpan skrip Test-Port.ps1, jalankan perintah di bawah ini untuk menguji port 22, 80, 443, dan 53.
Parameter -ComputerName menerima daftar nama host, FQDN, atau alamat IP dari mesin target.
Parameter -Port menerima larik satu atau lebih nomor port untuk diuji.
./Test-Port.ps1 -ComputerName localhost -Port 22,80,443
Seperti yang Anda lihat di bawah, hasilnya menunjukkan bahwa port 22 dan 80 terbuka (True), sedangkan port 443 tidak (False).

Untuk menjalankan skrip yang sama terhadap beberapa titik akhir dan port target, edit kode di bawah ini untuk menambahkan semua komputer target di parameter ComputerName dan nomor port di parameter Port.
./Test-Port.ps1 `
-ComputerName adamtheautomator.com,localhost,8.8.8.8 `
-Port 22,80,443,53

Kesimpulan
Pada artikel ini, Anda telah mempelajari cara memeriksa apakah port terbuka atau tidak di Linux. Anda juga telah belajar untuk memeriksa apakah port terbuka dari skrip shell dan PowerShell. Sekarang, Anda dapat menggunakan salah satu metode ini untuk memeriksa apakah port terbuka pada mesin Anda atau mesin jarak jauh mana pun.
Namun, jangan berhenti di sini. Lihat artikel pemecahan masalah lainnya untuk terus mengasah keterampilan administrator sistem Anda!