GNU/Linux >> Belajar Linux >  >> Linux

Semua Cara untuk Memeriksa Apakah Port Terbuka di Linux

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!


Linux
  1. 4 cara untuk mengedit foto di baris perintah Linux

  2. Cara Memeriksa Port Terbuka pada Sistem Linux Jarak Jauh

  3. Linux setara dengan perintah terbuka Mac OS X

  1. Periksa status file di Linux dengan perintah stat

  2. Kuasai perintah Linux ls

  3. Periksa apakah port terbuka atau tertutup di server Linux?

  1. 3 cara menarik untuk menggunakan perintah cowsay Linux

  2. 5 cara menggunakan perintah pindah di Linux

  3. Periksa penggunaan port di Linux