Bir Linux sunucusunda portun açık mı yoksa kapalı mı olduğunu kontrol edin.


209

Bir portun Linux sunucusunda dinlenip dinlenmediğini nasıl kontrol edebilirim?


2
Ne sorduğun belli değil. "Açık" derken ne demek istiyorsun? Bir sunucunun o bağlantı noktasını dinlediğini mi demek istiyorsun? Yoksa sistem güvenlik duvarı tarafından izin verildiğini mi kastediyorsunuz? Ya da ne?
David Schwartz

Sanırım bir bağlantı noktası sunucumda engellenmiş durumda ve tekrar açmak / engelini kaldırmak istiyorum.
James Anderson

14
netstat -an | grep PORTNUMBER | grep -i listenÇıkış boşsa, port kullanımda değildir.
automatix

Yanıtlar:


187

Bir işlemin TCP veya UDP bağlantı noktası ile dinlenip dinlenmediğini kontrol edebilirsiniz netstat -tuplen.

Bazı portlar Eğer böyle bir port tarayıcı kullanabilirsiniz (istediğin bu muhtemelen) dışarıdan erişilebilir olup olmadığını kontrol etmek için Nmap dan başka sisteme. Nmap'ı kontrol etmek istediğiniz aynı ana bilgisayarda çalıştırmak, amacınız için oldukça işe yaramaz.


54
GNU netstat parametrelerini bilir -t, -u, -p, -l, -e, ve -n. Seçenekler ayrıştırıcı sayesinde şu şekilde ifade edilebilir -tuplen. linux.die.net/man/8/netstat
joschi

3
Ayrıca, telnetkomut genellikle yalnızca TCP'yi destekler, bu nedenle kontrol etmek istediğiniz servis başka bir protokolde çalışıyorsa, şansınız kalmaz.
joschi

1
evet, pencereleri ve dolayısıyla karışıklığı kullanıyordum.
Dexter

2
nc telnet'e alternatif (daha iyi). UDP'yi de destekliyor.
Tsvetomir Dimitrov

1
Sudo ile kullanın: sudo netstat -tuplen. Bu, size yalnızca size değil, başkalarına da ait olan işlemleri sunacak ve daha önce root olmayan bir kullanıcı olarak gösterilmiyorsa ek bilgiler (PID / Program Adı gibi) yazacaktır.
John Red

102

Bir TCP portunun açık olup olmadığını test etmenin en hızlı yolu (sahip olabileceğiniz tüm donanım güvenlik duvarları dahil), uzaktaki bir bilgisayardan (örneğin masaüstünüz) yazmaktır:

telnet myserver.com 80

Bu sunucudaki 80 numaralı bağlantı noktasına bir bağlantı açmaya çalışır. Bir mola veya inkar ederseniz, liman açık değildir :)


1
"telnet" i komut olarak tanımadığını söylüyor ...
James Anderson

6
telnet istemci paketini yüklemek için "yum install telnet".
cjc

8
Yukarıda yazıldı:if you get a time out or deny, the port is not open
Endüstriyel

2
Telnet yükleme izniniz yoksa ne olacak? Başka bir standart araç var mı?
KC Baltz

3
“Telnet Myhost 22” yi denedim ve zaman aşımına uğradım. Ama o makineye girebilirim. ?!
Torsten Bronger

30

Tamam, özet olarak, giriş yapabileceğiniz bir sunucunuz var. Bazı portlarda bir şey dinleyip dinlemediğini görmek istiyorsun. Kök olarak, koş:

netstat -nlp

Bu, TCP ve UDP portlarını dinleyen işlemlerin bir listesini gösterecektir. İlgilendiğiniz işlem ve / veya görmeyi beklediğiniz bağlantı noktası numaraları için tarayabilir (veya grep).

Beklediğiniz süreç orada değilse, bu süreci başlatmalı ve netstat'ı tekrar kontrol etmelisiniz. Süreç oradaysa, ancak beklemeyeceğiniz bir arayüz ve bağlantı noktasını dinliyorsa, o zaman bir yapılandırma sorunu var demektir (örneğin dinliyor olabilir, ancak yalnızca geridöngü arayüzü üzerinde, bu yüzden 127.0.0.1:3306 ve MySQL için varsayılan yapılandırma durumunda, 3306 bağlantı noktası için başka bir satır yoktur).

İşlem devam ederse ve beklediğiniz bağlantı noktasını dinliyorsa, ofisinizde / evinizde Macbook'unuzdan o bağlantı noktasına bir "telnet" çalıştırmayı deneyebilirsiniz, örneğin,

 telnet xxxxxxxxxxxx.co.uk 443

Bu (standart portlar varsayarsak) SSL için yapılandırılmış bir web sunucusu olup olmadığını test eder. Telnet kullanan bu testin yalnızca işlem bir TCP portunu dinliyorsa işe yarayacağını unutmayın. Bu bir UDP bağlantı noktasıysa, bağlanmak için hangi müşteriyi kullanacağınızı deneyebilirsiniz. (Limanı 224 kullandığını görüyorum. Bu maskaracı ve ne olduğu hakkında hiçbir fikrim yok).

Servis varsa, ancak harici olarak erişemiyorsanız, sizi engelleyen bir güvenlik duvarı vardır. Bu durumda, koş:

 iptables -L -n

Bu, sisteminizde tanımlandığı şekilde tüm güvenlik duvarı kurallarını gösterecektir. Bunu gönderebilirsiniz, ancak genel olarak, INPUT zincirindeki her şeye izin vermiyorsanız, muhtemelen söz konusu limandaki trafiğe açıkça izin vermeniz gerekir:

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

veya bu çizgiler boyunca bir şey. Güvenlik duvarı komutlarınızı, bazı yabancıların Internet'te söylediklerine bağlı olarak, kör bir şekilde çalıştırmayın. Ne yaptığını bir düşün.

Kutudaki güvenlik duvarınız istediğiniz trafiğe izin veriyorsa, barındırma şirketiniz bir güvenlik duvarı kullanıyor olabilir (örneğin, yalnızca SSH (22 / tcp), HTTP (80 / tcp) ve HTTPS'ye (443 / tcp) izin veriyorlar. ve gelen diğer tüm trafiği reddetmek). Bu durumda, bu sorunu çözmek için onlarla bir yardım masası bileti açmanız gerekecek, ancak sanırım cPanel'inizde buna izin verebilecek bir şeyler olabilir.


Pls iptables -I komutunu nasıl geri alacağınızı ekleyebilir misiniz? Teşekkürler!!
Evgeny

1
"iptables -D" ifadesini, orijinal komuttaki "-I" den sonra ne olursa olsun takip edin. Temel olarak, belgelere bakın.
cjc 10:13

11

Combo kullanıyorum netstatve lsof:

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

Bağlantı noktasının kullanılıp kullanılmadığını ve ne kullandığını görmek için.


sudo ile veya sudo olmadan hiçbir şey
istemez

1
@DerajThedijje - o zaman bu liman açık değil
warren

Evet değildi, anladım.
Dheeraj Thedijje

7

Sisteme bağlıysanız ve bir komutu root olarak çalıştırabilirseniz iptables çıkışını kontrol edebilirsiniz.

iptables -L -vn

Bu, güvenlik duvarı kurallarını ve hangi portların açık hedef olduğunu ACCEPTve açıkça kapatılmış portların hedefini listeler REJECT.


Eğer firewalld'iniz varsa, daha basittir firewall-cmd --query-port=port/protocol, örneğin firewall-cmd --query-port=80/tcp.
Agostino

6

lsof -i :ssh hem dinleyen hem de aktif bağlantılar olan ssh portu açık olan tüm işlemleri listeler.


sudoHerhangi bir çıktı döndürmezse önek .
Elijah Lynn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.