Pro mnoho začínajících systémových administrátorů je vytváření sítí rozsáhlým a zastrašujícím tématem. Abychom je pochopili, existuje mnoho vrstev, protokolů a rozhraní, které je třeba se naučit, a mnoho zdrojů a nástrojů.
Porty jsou logické komunikační koncové body v sítích TCP/IP a UDP. Mnoho služeb, jako je webový server, aplikační server a souborový server, bude fungovat na jediné IP adrese. Každá z těchto služeb musí naslouchat a komunikovat na konkrétním portu. Když se připojujete k počítači, činíte tak prostřednictvím IP adresy a portu.
V určitých případech za vás program, který používáte, automaticky vybere port. Když například přejdete na https://www.fosslinux.com, připojujete se k serveru fosslinux.com na portu 443, což je standardní port pro zabezpečený webový provoz. Protože se jedná o výchozí nastavení, váš prohlížeč port automaticky přidá za vás.
V této příručce se dozvíte více o portech. Podíváme se na různé programy, které nám pomohou získat stav našich portů. Patří mezi ně:
- Nmap
- Zenmap
- Netcat
- netstat
- Unicornscan
- Pomocí Bash Pseudo Unit můžete hledat otevřené porty
- Pomocí příkazu ss
Software netstat bude použit k vyhledání otevřených portů a program Nmap bude použit k získání informací o stavu portů stroje v síti. Až budete hotovi, budete moci najít oblíbené porty a hledat ve svých systémech otevřené porty.
Seznámení s porty
Síťový model OSI má několik vrstev. Transportní vrstva je část zásobníku protokolů, která se zabývá komunikací mezi službami a aplikacemi. Ta je primární vrstvou, se kterou jsou porty propojeny.
Abyste porozuměli konfiguraci portu, budete potřebovat nějaké terminologické informace. Zde je řada slov, která se vám budou hodit k pochopení toho, o čem bude řeč dále:
Port:Adresovatelné síťové umístění zavedené v rámci operačního systému pomáhá při rozlišování provozu určeného pro různé aplikace nebo služby.
Internet Sockets:Deskriptor souboru, který definuje IP adresu a přidružené číslo portu a protokol přenosu dat, který se má použít.
Binding:Když aplikace nebo služba používá internetovou zásuvku ke správě svých vstupních a výstupních dat.
Naslouchání:Když se služba váže na kombinaci portu/protokolu/IP adresy, aby čekala na požadavky klientů, předpokládá se, že na daném portu „naslouchá“.
Pokud je to vhodné, naváže spojení s klientem po přijetí zprávy pomocí stejného portu, kterému aktivně naslouchal. Vzhledem k tomu, že internetové sokety jsou spojeny s konkrétní IP adresou klienta, může server současně naslouchat a obsluhovat požadavky od několika klientů.
Port Scanning se pokouší připojit k řadě sekvenčních portů, aby zjistil, které z nich jsou dostupné a jaké služby a operační systémy za nimi běží.
Identifikace často používaných portů
Každému portu je přiřazeno číslo v rozsahu od 1 do 65535.
Vzhledem k tomu, že několik portů pod 1024 je spojeno se zdroji, které Linux a operační systémy podobné Unixu považují za nezbytné pro síťové funkce, přiřazování služeb k nim vyžaduje oprávnění root.
„Registrované“ porty jsou porty s číslem mezi 1024 a 49151. To znamená, že odesláním žádosti IANA (Internet Assigned Numbers Authority) mohou být „rezervovány“ ve velmi volném slova smyslu pro konkrétní služby. Nejsou striktně implementovány, ale mohou poskytnout náhled na služby fungující na daném portu.
Porty mezi 49152 a 65535 nejsou k dispozici pro registraci a jsou doporučeny pro osobní použití. Vzhledem k velkému počtu otevřených portů se nebudete muset starat o většinu služeb, které se připojují ke konkrétním portům.
Vzhledem k jejich širokému použití však stojí za to se konkrétní porty naučit. Následuje seznam, který není zdaleka úplný:
- 20:Podrobnosti o FTP
- 22:SSH
- 23:Telnet
- 21:Ovládací port FTP
- 25:SMTP (Simple Mail Transfer Protocol)
- 80:HTTP – Nešifrovaný webový provoz
- 443:HTTPS – Zabezpečený síťový provoz
- 143:poštovní port IMAP
- 161:SNMP
- 194:IRC
- 389:LDAP
- 631:Port tiskového démona CUPS
- 666:DOOM – Tato starší hra má svůj jedinečný port
- 587:SMTP – odeslání zprávy
To jsou jen některé ze zařízení, která jsou často spojena s přístavy. Požadované porty pro aplikace, které se pokoušíte nakonfigurovat, by měly být uvedeny v příslušné dokumentaci.
Většinu služeb lze nakonfigurovat tak, aby používaly jiné než normální porty, ale musíte zajistit, aby klient i server používali nestandardní port.
Soubor, který obsahuje seznam několika běžně používaných portů, se nazývá /etc/services.
tuts@fosslinux:~$ less /etc/services
nebo
tuts@fosslinux:~$ cat /etc/services
Poskytne vám seznam oblíbených portů a také služeb, které s nimi souvisí:
To může zobrazit různé stránky v závislosti na vašem nastavení. Chcete-li zobrazit další stránku záznamů, stiskněte MEZERNÍK nebo stiskněte Q pro návrat na výzvu.
Skenování portů
Metoda kontroly otevřených portů na PC nebo serveru je známá jako skenování portů. Hráči a hackeři také používají skenery portů k hledání otevřených portů a služeb otisků prstů. Port může být otevřený, filtrovaný, uzavřený nebo nefiltrovaný v závislosti na jeho stavu. Daný port je dostupný, pokud aplikace aktivně naslouchá na daném portu pro připojení nebo pakety/
Jednou z prvních věcí, kterou je třeba při odstraňování problémů s připojením k síti nebo konfiguraci brány firewall zkontrolovat, jsou porty dostupné na vašem zařízení.
Tento článek popisuje několik metod pro určení, které porty na vašem systému Linux jsou dostupné vnějšímu světu.
Co přesně je otevřený port?
Naslouchající port může naslouchat na síťovém portu. Seznam naslouchacích portů vašeho systému můžete získat pomocí příkazů jako ss, netstat nebo lsof k dotazu na síťový zásobník.
Při použití brány firewall lze každý naslouchací port otevřít nebo zavřít (filtrovat).
Síťový port je známý jako otevřený port, pokud přijímá příchozí pakety ze vzdálených míst. Pokud například váš webový server naslouchá portům 80 a 443 a tyto porty jsou dostupné na vašem firewallu, kdokoli kromě blokovaných IP adres může použít jeho prohlížeč pro přístup k webovým stránkám hostovaným na vašem webovém serveru. Oba porty 80 a 443 jsou v této situaci otevřené.
Otevřené porty mohou představovat bezpečnostní riziko, protože je útočníci mohou využít k hacknutí zranitelných míst nebo k provádění jiných typů útoků. Všechny ostatní porty by měly být uzavřeny a měly by být odhaleny pouze porty potřebné pro funkčnost vaší aplikace.
V internetovém protokolu TCP/IP existují dva druhy portů, které je třeba hledat:TCP (Transmission Control Protocol) a UDP (Uniform Datagram Protocol) (User Datagram Protocol). TCP a UDP mají každý své metody skenování. V tomto příspěvku se podíváme na to, jak provést skenování portů v prostředí Linuxu, ale nejprve se podíváme na to, jak funguje skenování portů. Je důležité si uvědomit, že skenování portů je v mnoha zemích nezákonné, proto před skenováním cíle znovu zkontrolujte oprávnění.
Vyhledávání TCP
TCP je stavový protokol, protože sleduje stav připojení. Pro připojení TCP je zapotřebí třícestné navázání spojení soketu serveru a soketu na straně klienta. Klient odešle SYN do serverového soketu, který naslouchá, a server odpoví SYN-ACK. Klient poté odešle ACK, aby dokončil handshake připojení.
Skener odešle paket SYN na server, aby vyhledal otevřený TCP port. Port je dostupný, pokud je vráceno SYN-ACK. Port se uzavře, pokud server nedokončí handshake a odpoví RST.
Skenování pomocí UDP
Na druhou stranu UDP je bezstavový protokol, který nesleduje stav připojení. Rovněž vylučuje použití třícestného podání ruky.
Skener UDP je zodpovědný za odeslání paketu UDP na port, aby jej vyhledal. Paket ICMP je vytvořen a odeslán zpět do zdroje, pokud je tento port uzavřen. Pokud se tak nestane, port je otevřený.
Protože firewally ztrácejí pakety ICMP, skenování portů UDP je vždy nepřesné, což má za následek falešné poplachy pro skenery portů.
Skenery portů
Nyní, když jsme se podívali na funkce skenování portů, můžeme přejít k různým skenerům portů a jejich funkcím. Patří mezi ně:
Nmap
Nmap je síťový mapovač, jehož popularita roste jako jeden z nejpoužívanějších bezplatných nástrojů pro zjišťování sítí. Nmap se stal jedním z nejoblíbenějších nástrojů, které mohou správci sítí používat při mapování svých sítí. Tento software lze mimo jiné použít k vyhledání živých hostitelů v síti, provádění skenování portů, ping sweep, zjišťování OS a zjišťování verzí.
Několik nedávných kybernetických útoků znovu zdůraznilo důležitost nástrojů síťového auditu, jako je Nmap. Podle analytiků mohly být například odhaleny dříve, pokud správci systému sledovali připojená zařízení. V tomto tutoriálu se podíváme na to, co je Nmap, co umí a jak používat nejoblíbenější příkazy.
Nmap je síťový skenovací nástroj schopný skenovat jak jednotlivé hostitele, tak rozsáhlé sítě. Používá se také pro penetrační testování a audity souladu.
Pokud jde o skenování portů, Nmap by měl být vaší první volbou, pokud je otevřený. Nmap dokáže kromě skenování portů zjistit adresu Mac, formulář OS, verze jádra a mnoho dalšího.
Nmap není jen nástroj pro skenování sítě. Je také odpovědná za používání IP paketů k lokalizaci všech připojených zařízení a poskytování informací o běžících službách a operačních systémech.
Software je dostupný pro různé operační systémy, včetně Linuxu, Gentoo a Free BSD. Více často než ne, to je používáno přes rozhraní příkazového řádku. K dispozici jsou však také rozhraní GUI. K jeho úspěchu také přispěla živá a aktivní komunita podpory uživatelů.
Nmap byl navržen pro rozsáhlé sítě a mohl prohledávat tisíce připojených zařízení. Na druhou stranu menší podniky v posledních letech stále více využívají Nmap. Kvůli rozmachu internetu věcí se sítě těchto společností staly komplikovanějšími a v důsledku toho i obtížnějšími na zabezpečení.
Výsledkem je, že několik nástrojů pro monitorování webových stránek nyní používá Nmap ke kontrole provozu mezi webovými servery a zařízeními IoT. Nedávný výskyt botnetů IoT, jako je Mirai, podnítil zájem o Nmap, v neposlední řadě kvůli jeho schopnosti zjišťovat zařízení připojená přes protokol UPnP a upozornit na všechny potenciálně škodlivé stroje.
Doposud byl Nmap nejuniverzálnějším a nejpodrobnějším dostupným skenerem portů. S ním je možné cokoli od skenování portů po otisky prstů operačního systému a skenování zranitelností. GUI pro Nmap se nazývá Zenmap a má rozhraní CLI i GUI. Má širokou škálu možností pro provádění rychlých a přesných skenů. Zde je návod, jak nastavit Nmap v systému Linux.
Existují různé způsoby, jak Nmap pomáhá provádět skenování portů. Mezi nejpoužívanější varianty patří:
- # skenování sS TCP SYN
- # sT TCP connect scan
- # skenování UDP sU
- # sY SCTP INIT sken
- # sN TCP NULL
Hlavní rozdíly mezi těmito typy skenování jsou v tom, zda chrání porty TCP nebo UDP a zda spouštějí spojení TCP či nikoli. Zde jsou hlavní rozdíly:
Skenování sS TCP SYN je nejzákladnější z těchto skenů a poskytuje většině uživatelů všechny potřebné informace. Tisíce portů jsou skenovány za sekundu a nevzbuzují podezření, protože nedokončí spojení TCP.
Skenování TCP Connect, které se aktivně dotazuje každého hostitele a požaduje odpověď, je hlavní alternativou k této formě skenování. Toto skenování trvá déle než skenování SYN, ale může poskytnout přesnější výsledky.
Kontrola UDP funguje podobně jako kontrola připojení TCP, kromě toho, že kontroluje porty DNS, SNMP a DHCP pomocí paketů UDP. Tento typ skenování pomáhá kontrolovat zranitelnosti, protože na tyto porty se hackeři nejčastěji zaměřují.
SCTP INIT scan prověřuje dvě odlišné služby:SS7 a SIGTRAN. Protože tato kontrola nedokončí celý postup SCTP, může tato kontrola také zabránit podezření při prohledávání externí sítě.
Skenování TOP NULL je další důmyslný proces skenování. Využívá chybu v TCP frameworku, která mu umožňuje odhalit stav portů, aniž by se na ně musel explicitně dotazovat, což vám umožňuje vidět jejich stav, i když je firewall chrání.
V tomto článku se budeme zabývat následujícím:
- Jak nastavím Nmap?
- Jak spustit základní skenování portů na místním a vzdáleném počítači
- Jaký je nejlepší způsob vyhledávání portů TCP a UDP?
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install nmap -y
Porty naslouchající připojení TCP ze sítě lze určit zadáním následujícího příkazu z konzoly:
tuts@fosslinux:~$ sudo nmap -sT -p- 10.10.4.3
Volba -sT dává Nmapu pokyn k vyhledání portů TCP, zatímco volba -p- mu dává pokyn, aby prohledal všechny porty 65535. Pokud volba -p- není zadána, Nmap zkontroluje pouze 1000 nejběžnějších portů.
Podle výkonu jsou na cílovém počítači otevřené pouze porty 22, 80 a 8069.
Místo -sT použijte -sU k vyhledání portů UDP následovně:
tuts@fosslinux:~$ sudo nmap -sU -p- 10.10.4.3
Nyní použijeme Nmap k vyhledání otevřených portů na serveru (hackme.org) a seznamu dostupných služeb na těchto portech. Do příkazového řádku zadejte nmap a adresu serveru.
tuts@fosslinux:~$ nmap hackme.org
Protože potřebuje práva root, použijte volbu -sU se sudo k vyhledání portů UDP.
tuts@fosslinux:~$ sudo nmap -sU hackme.org
Nmap má také mnoho dalších funkcí, včetně:
- -p-:Prohledá celý seznam 65535 portů
- -sT:Toto je kontrola připojení pro TCP
- -O:Vyhledá spuštěný operační systém
- -v:podrobné skenování
- -A:Agresivní skenování, skenování prakticky všeho
- -T[1-5]:Nastavení rychlosti skenování
- -Pn:stane se vždy, když server zablokuje ping
Zenmap
Zenmap je klikací-dětské rozhraní pro Nmap, které eliminuje potřebu zapamatovat si jeho příkazy. Chcete-li jej nastavit, nainstalujte zenmap spuštěním následujícího příkazu.
tuts@fosslinux:~$ sudo apt-get install -y zenmap
Případně
mkdir -p ~/Downloads/zenmap cd ~/Downloads/zenmap wget http://old-releases.ubuntu.com/ubuntu/pool/universe/p/pygtk/python-gtk2_2.24.0-6_amd64.deb wget http://old-releases.ubuntu.com/ubuntu/pool/universe/n/nmap/zenmap_7.80+dfsg1-1build1_all.deb sudo apt install ./*.deb
Zadejte adresu serveru a vyberte z dostupných možností vyhledávání, abyste jej naskenovali.
Netcat
Netcat, který lze označit jako nc, je nástroj příkazového řádku. Ke čtení a zápisu dat prostřednictvím síťových připojení používá protokoly TCP nebo UDP. Je to také surový zapisovač portů TCP a UDP, který může také vyhledávat porty.
Netcat může prohledávat jeden port nebo některé porty.
Protože používá skenování odkazů, je pomalejší než Network Mapper. Chcete-li jej nastavit, použijte formulář
tuts@fosslinux:~$ sudo apt install netcat-traditional -y
Napište následující, abyste zjistili, zda je port k dispozici.
tuts@fosslinux:~$ nc -z -v hackme.org 80
Chcete-li najít seznam portů, zadejte následující hledaný výraz.
tuts@fosslinux:~$ nc -z -nv 127.0.0.1 50-80
Chcete-li vyhledat otevřené porty TCP na vzdáleném počítači s IP adresou 10.10.4.3 v rozsahu 20-80, použijte například následující příkaz:
tuts@fosslinux:~$ nc -z -v 10.10.4.3 50-80
Volba -z dává nc pokyn, aby hledal pouze otevřené porty a neodesílal žádná data, zatímco volba -v poskytuje přesnější podrobnosti.
Takto bude konečný produkt vypadat:
Filtrujte výsledky pomocí příkazu grep, pokud chcete na obrazovce vytisknout řádky s otevřenými porty.
tuts@fosslinux:~$ nc -z -v 10.10.4.3 50-80 2>&1 | grep succeeded
Předejte volbu -u příkazu nc k vyhledání portů UDP:
tuts@fosslinux:~$ nc -z -v -u 10.10.4.3 50-80 2>&1 | grep succeeded
příkaz lsof
Příkaz lsof, který vypisuje otevřené soubory v Linuxu, je posledním nástrojem, na který se podíváme při dotazování na otevřené porty. Protože Unix/Linux je soubor, otevřený soubor může být datový proud nebo síťový soubor.
Pomocí volby -i vypíšete všechna internetová a síťová data. Tento příkaz zobrazí kombinaci názvů služeb a číselných portů.
tuts@fosslinux:~$ sudo lsof -i
Spusťte lsof v tomto formátu a zjistěte, která aplikace naslouchá na konkrétním portu, spusťte následující příkaz.
tuts@fosslinux:~$ sudo lsof -i:80
Pomocí příkazu netstat
Netstat je široce používaný nástroj pro dotazování na informace o síťovém subsystému Linux. Lze jej použít k tisku všech dostupných portů v následujícím formátu:
tuts@fosslinux:~$ sudo netstat -ltup
Příznak -l přikazuje netstatu, aby vytiskl všechny naslouchající sokety, -t všechna připojení TCP, -u všechna připojení UDP a -p všechna jména aplikací/programů naslouchající na portu.
Přidejte parametr -n pro tisk číselných hodnot namísto názvů služeb.
tuts@fosslinux:~$ sudo netstat -lntup
Můžete také použít příkaz grep, abyste viděli, které aplikace naslouchají na konkrétním portu.
tuts@fosslinux:~$ sudo netstat -lntup | grep "apache2."
Alternativně, jak je znázorněno, můžete definovat port a najít k němu připojenou aplikaci.
tuts@fosslinux:~$ sudo netstat -lntup | grep ":80"
Unicornscan
Unicornscan je výkonný a rychlý skener portů určený pro bezpečnostní výzkumníky. Na rozdíl od Network Mapper používá svůj zásobník TCP/IP distribuovaný v uživatelské zemi. Ten má několik funkcí, které Nmap nemá. Některé z nich jsou uvedeny níže.
Asynchronní bezstavové skenování TCP je možné s různými variantami TCP příznaků.
Uchopování banneru TCP je asynchronní a bezstavové skenování UDP se specifiky asynchronního protokolu, které odesílá dostatek podpisů k vyvolání odpovědi. Vyhodnocením reakcí je možné aktivní a pasivní rozpoznávání vzdáleného OS, programu a komponent.
- Filtrování a záznam souborů PCAP
- Výkon z relační databáze
- Podpora vlastních modulů
- Zobrazení souborů dat, které lze přizpůsobit
Do vyhledávacího pole zadejte unicornscan a nainstalujte Unicornscan spuštěním následujícího příkazu na terminálu.
tuts@fosslinux:~$ sudo apt-get install unicornscan -y
Chcete-li spustit skenování, napište následující.
tuts@fosslinux:~$ sudo us 127.0.0.1
Pomocí Bash Pseudo Unit můžete hledat otevřené porty
Při hledání toho, zda je port otevřený nebo zavřený, je velmi užitečné pseudozařízení Bash /dev/tcp/ nebo /dev/udp/.
Bash otevře TCP nebo UDP odkaz na zadaný hostitel na zadaném portu, když je příkaz spuštěn na /dev/$PROTOCOL/$HOST/$IP pseudozařízení.
Příkaz if...else níže zkontroluje, zda je port 443 na kernel.org otevřený:příkaz:
if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null' then echo "Port is open." else echo "Port is closed." fi
Protože výchozí časový limit při připojení k portu pomocí pseudozařízení je tak dlouhý, používáme příkaz timeout ke zničení testovacího příkazu po 5 sekundách. Příkaz test vrátí true, pokud je vytvořen odkaz na kernel.org port 443.
Pomocí smyčky for vyhledejte rozsah portů:
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
Použití příkazu ss
Příkaz ss je dalším cenným nástrojem pro zobrazení informací o soketu. Jeho výkon je velmi podobný netstatu. Následující příkaz zobrazí všechna naslouchající porty TCP a UDP připojením jako číselnou hodnotu.
tuts@fosslinux:~$ sudo ss -lntu
Závěr
Ať už jste hráč, DevOp nebo hacker, skenery portů se vám budou hodit. Mezi těmito skenery není žádný správný kontrast; žádný z nich není bezchybný a každý má svůj vlastní soubor výhod a nevýhod. Vaše potřeby to budou velmi určovat a jak je chcete používat.
Můžete také hledat otevřené porty pomocí jiných nástrojů a metod, jako je modul Python socket, curl, telnet nebo wget. Také jsme ukázali, jak určit, které procesy jsou připojeny ke konkrétním portům.