pengembangan-web-mp-pd.com

Periksa apakah port terbuka atau tertutup pada server Linux?

Bagaimana saya bisa memeriksa apakah port mendengarkan di server Linux?

228
James Anderson

Anda dapat memeriksa apakah suatu proses mendengarkan pada port TCP atau UDP dengan netstat -tuplen.

Untuk memeriksa apakah beberapa port dapat diakses dari luar (ini mungkin yang Anda inginkan), Anda dapat menggunakan pemindai port seperti Nmap from lain sistem. Menjalankan Nmap pada Host yang sama yang ingin Anda periksa tidak berguna untuk tujuan Anda.

195
joschi

Cara tercepat untuk menguji apakah TCP port terbuka (termasuk firewall perangkat keras yang Anda miliki), adalah mengetik, dari komputer jarak jauh (mis. Desktop Anda):

telnet myserver.com 80

Yang akan mencoba membuka koneksi ke port 80 di server itu. Jika Anda mendapat waktu istirahat atau menolak, porta tidak terbuka :)

108
Adrian Macneil

OK, secara ringkas, Anda memiliki server yang dapat Anda masuki. Anda ingin melihat apakah ada sesuatu yang mendengarkan pada beberapa port. Sebagai root, jalankan:

netstat -nlp

ini akan menampilkan daftar proses mendengarkan pada TCP dan port UDP. Anda dapat memindai (atau grep) untuk proses yang Anda minati, dan/atau nomor port yang Anda harapkan untuk dilihat .

Jika proses yang Anda harapkan tidak ada, Anda harus memulai proses itu dan memeriksa netstat lagi. Jika prosesnya ada, tetapi mendengarkan pada antarmuka dan port yang tidak Anda harapkan, maka ada masalah konfigurasi (misalnya, itu bisa mendengarkan, tetapi hanya pada antarmuka loopback, sehingga Anda akan melihat 127.0.0.1::3030 dan tidak ada baris lain untuk port 3306, dalam hal konfigurasi default untuk MySQL).

Jika prosesnya selesai, dan ia mendengarkan pada port yang Anda harapkan, Anda dapat mencoba menjalankan "telnet" ke port itu dari Macbook Anda di kantor/rumah Anda, mis.,

 telnet xxxxxxxxxxxx.co.uk 443

Itu akan menguji apakah (dengan asumsi port standar) bahwa ada server web yang dikonfigurasi untuk SSL. Perhatikan bahwa tes ini menggunakan telnet hanya akan berfungsi jika proses mendengarkan pada port TCP. Jika ini adalah port UDP, Anda juga dapat mencoba dengan klien apa pun yang akan Anda gunakan untuk terhubung ke sana (saya melihat bahwa Anda menggunakan port 224. Ini masqdialer, dan saya tidak tahu apa itu).

Jika layanan ada di sana, tetapi Anda tidak dapat mencapainya secara eksternal, maka ada firewall yang memblokir Anda. Dalam hal ini, jalankan:

 iptables -L -n

Ini akan menampilkan semua aturan firewall seperti yang didefinisikan pada sistem Anda. Anda dapat memposting itu, tetapi, secara umum, jika Anda tidak mengizinkan semua yang ada di rantai INPUT, Anda mungkin perlu secara eksplisit mengizinkan lalu lintas pada port yang dimaksud:

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT

atau sesuatu di sepanjang garis itu. Jangan jalankan perintah firewall Anda secara membabi buta berdasarkan apa yang dikatakan orang asing kepada Anda di Internet. Pertimbangkan apa yang Anda lakukan.

Jika firewall Anda di kotak memungkinkan lalu lintas yang Anda inginkan, maka perusahaan hosting Anda mungkin menjalankan firewall (misalnya, mereka hanya mengizinkan SSH (22/tcp), HTTP (80/tcp) dan HTTPS (443/tcp) dan menolak semua lalu lintas masuk lainnya). Dalam hal ini, Anda harus membuka tiket helpdesk dengan mereka untuk menyelesaikan masalah ini, meskipun saya kira mungkin ada sesuatu di cPanel Anda yang memungkinkan.

32
cjc

Saya menggunakan kombo netstat dan lsof:

netstat -an | grep <portnumber>
lsof -i:<portnumber>

Untuk melihat apakah port digunakan, dan apa yang menggunakannya.

12
warren

Jika Anda terhubung ke sistem dan dapat menjalankan perintah sebagai root maka Anda dapat memeriksa output dari iptables

iptables -L -vn

ini akan mencantumkan aturan firewall dan port mana yang menjadi target terbuka ACCEPT dan semua target port yang tertutup secara eksplisit REJECT.

8
user9517

lsof -i :ssh akan mencantumkan semua proses dengan port ssh terbuka, baik koneksi mendengarkan maupun aktif.

6
pgs

Jika Anda perlu membuat skrip pengujian seperti itu, solusi oleh Serhii Popov (lihat komentar atas pertanyaan) mungkin yang terbaik karena nc mampu mencari tumpukan TCP untuk pembukaan port alih-alih mencoba koneksi yang sebenarnya.

Bentuk paling sederhana adalah:

nc -z <ip> <port>

Perintah mengembalikan true jika menemukan kombo <ip>:<port> Yang ditentukan telah dibuka (mis. Salah satu layanan Anda mendengarkan).

Jadi sekarang Anda dapat menulis skrip untuk menunggu hingga port terbuka:

while ! nc -z <ip> <port>
do
    sleep 1
done

Catatan 1: Saya mencoba opsi baris perintah -w Dan itu sepertinya tidak melakukan apa-apa. Bagaimanapun perintah itu kembali dengan segera. Saya kira -w Tidak berguna dengan -z.

Catatan 2: untuk membantu debug, coba dengan opsi baris perintah -v.

0
Alexis Wilke