Periksa apakah port terbuka atau tertutup pada server Linux?

209

Bagaimana saya bisa memeriksa apakah port mendengarkan di server Linux?

James Anderson
sumber
2
Tidak jelas apa yang Anda minta. Apa yang Anda maksud dengan "terbuka"? Apakah maksud Anda beberapa server mendengarkan pada port itu? Atau maksud Anda diizinkan oleh firewall sistem? Atau apa?
David Schwartz
Saya pikir port sedang diblokir di server saya dan ingin membuka blokir / membukanya lagi.
James Anderson
14
netstat -an | grep PORTNUMBER | grep -i listenJika output kosong, port tidak digunakan.
automatix

Jawaban:

187

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 dari sistem lain . Menjalankan Nmap pada host yang sama yang ingin Anda periksa tidak berguna untuk tujuan Anda.

Joseph
sumber
54
GNU netstat tahu parameter -t, -u, -p, -l, -e, dan -n. Berkat parser opsi itu dapat dinyatakan sebagai -tuplen. linux.die.net/man/8/netstat
joschi
3
Juga, telnetperintah biasanya hanya mendukung TCP, jadi Anda kurang beruntung jika layanan yang ingin Anda periksa berjalan pada protokol lain.
joschi
1
ya, saya menggunakan windows karena itu kebingungan.
Dexter
2
nc adalah alternatif (lebih baik) dari telnet. Ini mendukung UDP juga.
Tsvetomir Dimitrov
1
Menggunakannya dengan sudo: sudo netstat -tuplen. Ini akan memberi Anda proses yang dimiliki bukan hanya oleh Anda, tetapi juga oleh orang lain, dan, itu akan mencetak detail tambahan (seperti PID / Nama Program) jika belum ditampilkan sebagai pengguna non-root.
John Red
102

Cara tercepat untuk menguji apakah port TCP terbuka (termasuk firewall perangkat keras yang mungkin Anda miliki), adalah dengan 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 mendapatkan waktu istirahat atau menolak, porta tidak terbuka :)

Adrian Macneil
sumber
1
mengatakan bahwa itu tidak mengenali "telnet" sebagai perintah ...
James Anderson
6
"yum install telnet" untuk menginstal paket klien telnet.
cjc
8
Ditulis di atas:if you get a time out or deny, the port is not open
Industri
2
Bagaimana jika Anda tidak memiliki izin untuk menginstal telnet? Apakah ada alat standar lain?
KC Baltz
3
Saya mencoba "telnet myhost 22" dan mendapatkan batas waktu. Tapi saya bisa ssh ke mesin itu. ?!
Torsten Bronger
30

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 port TCP dan UDP. Anda dapat memindai (atau menerima) proses yang Anda minati, dan / atau nomor port yang ingin Anda lihat.

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 sudah selesai, dan sedang mendengarkan pada port yang Anda harapkan, Anda dapat mencoba menjalankan "telnet" ke port itu dari Macbook Anda di kantor / rumah Anda, misalnya,

 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 dapat juga mencoba dengan klien apa pun yang akan Anda gunakan untuk menghubungkannya. (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 di 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.

cjc
sumber
Bisakah Anda menambahkan cara membatalkan perintah iptables -I? Terima kasih!!
Evgeny
1
"iptables -D" diikuti oleh apa pun yang Anda miliki setelah "-I" di perintah aslinya. Pada dasarnya, lihat dokumentasinya.
cjc
11

Saya menggunakan kombo netstatdan lsof:

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

Untuk melihat apakah port digunakan, dan apa yang menggunakannya.

warren
sumber
tidak ada yang diminta dengan atau tanpa sudo
Dheeraj Thedijje
1
@DheerajThedijje - maka port itu tidak terbuka
warren
Ya tidak, mengerti.
Dheeraj Thedijje
7

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 ACCEPTdan target port apa pun yang ditutup secara eksplisit REJECT.

pengguna619714
sumber
Dan jika Anda memiliki firewalld, itu lebih sederhana firewall-cmd --query-port=port/protocol, mis firewall-cmd --query-port=80/tcp.
Agostino
6

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

pgs
sumber
Awalan sudojika tidak mengembalikan output apa pun.
Elijah Lynn