GNU/Linux >> Znalost Linux >  >> Linux

Jak zkontrolovat (skenovat) otevřené porty v Linuxu

Ať už řešíte problémy se síťovým připojením nebo konfigurujete firewall, jednou z prvních věcí, které je třeba zkontrolovat, je, jaké porty jsou ve vašem systému skutečně otevřeny.

Tento článek popisuje několik přístupů, jak zjistit, jaké porty jsou na vašem systému Linux otevřeny ven.

Co je otevřený port #

Naslouchací port je síťový port, na kterém aplikace naslouchá. Seznam naslouchacích portů vašeho systému můžete získat dotazem na síťový zásobník pomocí příkazů jako ss , netstat nebo lsof . Každý naslouchací port lze otevřít nebo zavřít (filtrovat) pomocí brány firewall.

Obecně řečeno, otevřený port je síťový port, který přijímá příchozí pakety ze vzdálených míst.

Pokud například provozujete webový server, který naslouchá na portech 80 a 443 a tyto porty jsou otevřené na vašem firewallu, kdokoli (kromě blokovaných IP adres) bude mít přístup k webovým stránkám hostovaným na vašem webovém serveru pomocí jeho prohlížeče. V tomto případě obě 80 a 443 jsou otevřené porty.

Otevřené porty mohou představovat bezpečnostní riziko, protože každý otevřený port mohou útočníci využít ke zneužití zranitelnosti nebo k provedení jakéhokoli jiného typu útoku. Měli byste vystavit pouze porty potřebné pro funkčnost vaší aplikace a zavřít všechny ostatní porty.

Zkontrolujte otevřené porty pomocí nmap #

Nmap je výkonný nástroj pro skenování sítě, který dokáže skenovat jednotlivé hostitele a velké sítě. Používá se hlavně pro bezpečnostní audity a penetrační testování.

Pokud je k dispozici, nmap by měl být vaším prvním nástrojem, pokud jde o skenování portů. Kromě skenování portů, nmap může také zjistit adresu Mac, typ OS, verze jádra a mnoho dalšího.

Následující příkaz vydaný z konzoly určuje, které porty naslouchají připojení TCP ze sítě:

sudo nmap -sT -p- 10.10.8.8

-sT říká nmap pro skenování TCP portů a -p- pro vyhledání všech portů 65535. Pokud -p- se nepoužívá nmap prohledá pouze 1000 nejoblíbenějších portů.

Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-09 23:10 CEST
Nmap scan report for 10.10.8.8
Host is up (0.0012s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

Výše uvedený výstup ukazuje, že pouze porty 22 , 80 a 8069 jsou otevřeny v cílovém systému.

Chcete-li vyhledat porty UDP, použijte -sU místo -sT :

sudo nmap -sU -p- 10.10.8.8

Pro více informací navštivte manuálovou stránku nmap a přečtěte si o všech dalších výkonných možnostech tohoto nástroje.

Zkontrolujte otevřené porty pomocí netcat #

Netcat (nebo nc ) je nástroj příkazového řádku, který dokáže číst a zapisovat data přes síťová připojení pomocí protokolů TCP nebo UDP.

Pomocí netcat můžete skenovat jeden port nebo rozsah portů.

Například pro skenování otevřených TCP portů na vzdáleném počítači s IP adresou 10.10.8.8 v rozsahu 20-80 použijete následující příkaz:

nc -z -v 10.10.8.8 20-80

-z volba říká nc pro vyhledávání pouze otevřených portů, bez odesílání jakýchkoli dat a -v je pro podrobnější informace.

Výstup bude vypadat nějak takto:

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
...
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Pokud chcete, aby se na obrazovce tiskly pouze řádky s otevřenými porty, filtrujte výsledky pomocí grep příkaz.

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Chcete-li vyhledat porty UDP, zadejte -u možnost nc příkaz:

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded
2>&1 konstrukt přesměruje standardní chybu na standardní výstup.

Zkontrolujte otevřené porty pomocí Bash Pseudo Device #

Dalším způsobem, jak zkontrolovat, zda je určitý port otevřený nebo zavřený, je použití prostředí Bash /dev/tcp/.. nebo /dev/udp/.. pseudozařízení.

Při provádění příkazu na /dev/$PROTOCOL/$HOST/$IP pseudo-zařízení, Bash otevře TCP nebo UDP připojení k určenému hostiteli na zadaném portu.

Následující if..elsestatement zkontroluje, zda port 443 na kernel.org je otevřeno:

if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
  echo "Port is open"
else
  echo "Port is closed"
fi
Port is open

Jak funguje výše uvedený kód?

Při připojování k portu pomocí pseudozařízení je výchozí časový limit obrovský, takže používáme timeout příkaz k ukončení testovacího příkazu po 5 sekundách. Pokud je navázáno připojení k kernel.org port 443 příkaz test vrátí hodnotu true.

Chcete-li zkontrolovat rozsah portů, použijte cyklus for:

for PORT in {20..80}; do
  timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" &&  echo "port $PORT is open"
done

Výstup bude vypadat nějak takto:

port 22 is open
port 80 is open

Závěr č.

Ukázali jsme vám několik nástrojů, které můžete použít ke skenování otevřených portů. Existují také další nástroje a metody pro kontrolu otevřených portů, například můžete použít socket Pythonu modul, curl , telnet nebo wget .

Pokud máte nějaké dotazy nebo připomínky, zanechte prosím níže komentář.


Linux
  1. Jak zkontrolovat verzi Redhat

  2. Jak zjistit seznam všech otevřených portů v Linuxu

  3. Jak zavřít porty v Linuxu?

  1. Jak zkontrolovat otevřené porty v Linuxu pomocí netstat, lsof a nmap

  2. Jak zkontrolovat poslech / otevřené porty pomocí Netstat v systému Linux

  3. Jak zobrazit seznam otevřených portů na serveru Linux/Unix

  1. Jak zkontrolovat místo na disku v Linuxu

  2. Jak zkontrolovat otevřené porty na RHEL 8 / CentOS 8 Linux

  3. Jak zobrazit/zkontrolovat otevřené porty na Ubuntu Linux