Networking
Úvod do sítí
Uchopit a správně začít s tématem networkingu v kontextu Linuxu je poměrně problematické. Se sítí jako takovou se při studiu kybernetické bezpečnosti setká každý student prakticky na denní bázi a je tolik různých způsobu, jak s ní může přijít do styku.
Každý student začíná z jiné startovní pozice, má jiné dosavadní zkušenosti a v kapitole networkingu proto nelze přesně definovat, kde by bylo vhodné začít. Lze se do detailu zabývat naprostými základy, které jsou velice podstatné pro další pokračování. My budeme předpokládat, že nějakou základní představu o tom, jak internet funguje, máš.
Zaměříme se proto primárně na znalosti, které dělí mírně pokročilého uživatele počítače od Tebe, studenta kybernetické bezpečnosti. V následujících podkapitolách si vysvětlíme elementární nástroje, se kterými budeš jakožto expert na IT bezpečnost přicházet denně do kontaktu a značně Ti proto usnadní budoucí studium a práci.
Připojení k síti
Abychom se nějakému networkingu, či česky síťování, vůbec mohli věnovat, je třeba začít s tím podstatným – připojením k síti. Linux může pohánět mnoho rozličných zařízení – od všelijakých serverů, přes osobní počítače, přenosné počítače až po telefony. Některé jsou připojeny kabelem pro zajištění vyšší spolehlivosti, jiné bezdrátově pro možnost s nimi volně manipulovat a přenášet je zpravidla beze ztráty připojení.
Pod takovým připojením si nelze představovat pouze Internet, ten je pouhou abstraktní myšlenkou, v jejímž rámci vnímáme přístup na webové stránky. Připojení do celosvětové sítě Internet však není podmínkou, síť funguje i lokálně v uzavřené síti, třeba té domácí nebo podnikové. V nich následně mohou běžet webové servery, které jsou dostupné pouze z vnitřní sítě, pohánějící intranety, které chceme zpravidla zpřístupňovat pouze zaměstnancům dané společnosti.
Jedno zařízení ale může být připojeno nejen k jedné síti, ale hned k několika současně, přičemž v každé z nich může mít přístup k něčemu jinému.
Síťová rozhraní
To, díky čemu je zařízení poháněné Linuxem připojeno k síti, zajišťují tzv. síťová rozhraní. Ta mohou představovat fyzické síťové adaptéry, kde tento pojem známe z prostředí operačního systému Windows, ale také virtuální, které nás mohou pomocí již existujícího rozhraní připojit do nějaké další sítě.
Dostupná síťová rozhraní
Pojďme si nyní zjistit, do jakých všech sítí může být naše zařízení s Linuxem připojeno. Pozor, není to úplně přesné, protože následující výpis obsahuje i síťová rozhraní, tedy adaptéry, které nás nikam nemusí připojovat – mohou být vypnutá nebo do nich jen nemusí být přiveden například kabel.
Pomocí příkazu ifconfig
si můžeme zobrazit veškerá dostupná rozhraní na našem stroji. Tento příkaz vznikl ze slov „interface“ a „config“, tedy „nastavení rozhraní”. Výsledek může vypadat kupříkladu nějak takto:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
eth0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether 31:b2:00:00:00:00
inet 192.168.0.15 netmask 0xffffff00 broadcast 192.168.0.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
Loopback
Ve většině případů bychom zde měli vidět alespoň dvě síťová rozhraní. V našem případě jde o lo0
a eth0
. První jmenované je tzv. virtuální síťové rozhraní loopback
. Neexistuje k němu žádná fyzická komponenta v počítači ani vně. Linux jej používá k posílání si dat uvnitř systému jako takového. Představ si modelovou situaci, kdy nejsi vůbec připojen k jakékoliv síti – máš odpojený Ethernetový kabel a vypnutou Wi-Fi a žádné další rozhraní kromě loopback
u by se na zařízení nenacházelo.
I v takovém případě stále můžeš spustit třeba webovou aplikaci, která bude běžet lokálně. Takové lokální servery se nejčastěji využívají pro lokální vývoj webových aplikací, kdy pro jejich zobrazení zadáváš do adresního řádku prohlížeče zpravidla „doménu“ http://localhost
. A právě připojení do sítě toho daného počítače zajišťuje onen loopback
.
Jak si můžeš všimnout na ukázce výše, u síťového rozhraní lo0
je uvedena IP adresa 127.0.0.1
. A to je přesně ta adresa, na kterou se Tvůj prohlížeč dotazuje při přístupu na localhost
. Najednou to dává o mnoho větší smysl, že? O tom, jak jsou tyto dva pojmy svázány dohromady již víš díky principu fungování souboru hosts
., který se nachází v /etc/hosts
.
Ethernet a wlan
Druhým dostupným rozhraním je eth0
, což je pro nás jediné fyzické rozhraní poskytující přístup do vnější sítě. Můžeme si zde všimnout IP adresy 192.168.0.15
, která představuje adresu, pod níž s námi jsou schopna ostatní zařízení v síti dostupné pod tímto rozhraní komunikovat. Mezi další informace, které můžeme z poskytnutého výpisu vyčíst, patří MAC adresa síťového rozhraní 31:b2:00:00:00:00
, dále, zda je rozhraní povoleno (tzv. je up
nebo down
) nebo zda je k němu něco připojeno v kolonce status
– kabel, připojení k Wi-Fi routeru/AP.
Pro kontext je vhodné dodat, že třetím nejčastějším fyzickým rozhraním je to bezdrátové. Jeho označení má běžně předponu wlan
nebo wl
a unikátní identifikátor - čísla/písmena.
Setkat se můžeme také s dalšími síťovými rozhraními, zpravidla už ale s těmi virtuálními, a to například pro připojení do vzdálené sítě prostřednictvím služby VPN.
Příkaz ip
Pro lepší práci se síťovými rozhraními v terminálu Linuxu je vhodné využít příkaz ip, který spadá do balíčku s názvem iproute2
. Ke zjištění, zda jej máš nainstalovaný, jej zkrátka spusť příkazem
ip
Instalace příkazu ip
Je totiž poměrně časté, že v některých Linuxových distribucích se vůbec nenachází. Pro jeho instalaci zadej
apt install iproute2
Po zadání příkazu ip se Ti zobrazí malá nápověda a dozvídáme se z ní, že přijímá hned několik možností jako argument.
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip -V
where OBJECT := { link | addr | route | neigh }
OPTIONS := { -4 | -6 }
První použití příkazu ip
Tím úplně nejzákladnějším je
ip link show
který zobrazí prakticky totéž, co již námi dříve použitý ifconfig
. Zobrazí síťová rozhraní. Druhým zajímavým příkazem je
ip route show
který zobrazí všechny dostupné routy. Co to je? Ve zkratce zde máme pohromadě k dispozici veškeré síťové IP rozsahy, ke kterým jsme pomocí síťových rozhraní připojení, a je u nich napsáno, pomocí jakého rozhraní jich lze dosáhnout – připojit se na ně.
Hodně zjednodušeně jde o tzv. DNS, ale nikoliv pro doménová jména a IP adresy serverů, ale o jakousi příručku, která říká, na jaké rozhraní se má požadavek poslat dle cílové IP adresy.
Výpis síťových rout
Výpis příkazu ip route show
může vypadat třeba následovně
default via 192.168.0.1 dev eth0
127.0.0.0/8 via 127.0.0.1 dev lo0
127.0.0.1/32 via 127.0.0.1 dev lo0
169.254.0.0/16 dev eth0 scope link
192.168.0.0/24 dev eth0 scope link
192.168.0.1/32 dev eth0 scope link
224.0.0.0/4 dev eth0 scope link
255.255.255.255/32 dev eth0 scope link
Co zde vidíme? Právě to, co jsme si vysvětlili už dříve. Tak například to, že IP adresy v rozsahu 127.0.0.1/8
jsou dostupné na loopback
rozhraní lo0
. Další rozsahy IP adres, třeba ty v domácí lokální síti v rozsazích 192.168.0.0/24
a 192.168.0.1/32
, má Linux vyhledávat na síťovém rozhraní eth0
a také zde vidíme třeba to, že pro cokoliv dalšího, co není specifikováno v tomto přehledu rout, se má automaticky poslat na rozhraní eth0
. To konkrétně značí hned první řádek naší tabulky.
default via 192.168.0.1 dev eth0
Abychom si pouze nevypisovali informace, které má systém k dispozici, pojďme také ovlivnit jeho fungování a něco změnit. Ale opatrně – doporučuji toto zkoušet na rozhraních, která nepoužíváš nebo ve virtuálním prostředí. V opačném případě by mohlo dojít ke znefunkčnění přístupu k síti.
Vytvoření a nastavení vlastního síťového rozhraní
Pro eliminaci tohoto rizika si pojďme vytvořit zcela nové síťové rozhraní
ip link add mojerozhrani type bridge
Nyní jsme vytvořili nové rozhraní pro naše testování s názvem mojerozhrani
typu bridge
(most). Nebudeme jej reálně využívat, ale aktuálně bude stav down
, tedy shozený mimo provoz. Pro to, abychom jej nahodili do stavu up
, použijme následující příkaz
ip link set mojerozhrani up
Ještě předtím by ale bylo vhodné přidat síťovému rozhraní nějakou IP adresu, respektive rozsah pomocí prefixu
ip a add 192.168.30.0/24 dev mojerozhrani
Podobným způsobem můžeme IP rozsah také odstranit
ip a del 192.168.30.0/24 dev mojerozhrani
Podobně můžeme přidávat a nastavovat i VLANy, ale tomuto tématu se dopodrobna dočtete v jiné kapitole těchto skript.
Ping sem, trace tam
Odezva serveru
Když už víme, jakým způsobem se Linuxový stroj připojuje k síti, potažmo k Internetu, přesuneme se na něco více praktického. Každý z nás již jistě alespoň jednou ve svém životě použil příkaz ping. A pokud ne, tak se to nyní změní.
ping google.com
Výsledek bude vypadat většinou takto
PING google.com (142.251.37.110): 56 data bytes
64 bytes from 142.251.37.110: icmp_seq=0 ttl=114 time=12.708 ms
64 bytes from 142.251.37.110: icmp_seq=1 ttl=114 time=8.240 ms
64 bytes from 142.251.37.110: icmp_seq=2 ttl=114 time=8.338 ms
64 bytes from 142.251.37.110: icmp_seq=3 ttl=114 time=17.008 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.240/11.573/17.008/3.619 ms
Ping nám umožňuje zjistit, za jak dlouho nám server odpoví. To znamená, jak dlouho trvá, než požadavek dorazí na, v tomto případě, servery google.com
a my dostaneme odpověď zpět. Na ukázce výše můžeme vidět, že průměrná doba odezvy je něco okolo 11,5 ms
.
Co když je to ale znatelně více nebo dokonce odpověď na ping ani nedorazí a my dostaneme pouze hlášku
Request timed out.
anebo pro změnu
Ping request could not find hosts google.com
Cesta pingu - traceroute
V takovém případě přichází na scénu debugování, v překladu odhalování chyb. Pomůže nám v tom chytrý nástroj traceroute
, jehož název vychází ze spojení slov „trace“ a „route“, tedy něco ve smyslu „stopuj trasu“.
Příkaz tracert
nám zajistí, aby nám neodpověděl pouze cílový server (např. google.com
), ale aby nám odpověděl každý server, přes který se požadavek přenese, a pošle nám o sobě informaci, jak dlouho mu to trvalo a jaká je jeho IP adresa.
Zadejme proto příkaz
traceroute google.com
Získání výsledku chvíli potrvá, vypsat by se nám mělo něco v tomto formátu
traceroute to google.com (142.251.36.110), 64 hops max, 52 byte packets
1 192.168.0.1 (192.168.0.1) 4.334 ms 1.653 ms 2.056 ms
2 * * *
3 xxx.cz (xx.xx.xx.xx) 16.601 ms 16.267 ms 15.112 ms
4 yyy.cz (yy.yy.yy.yy) 13.656 ms 13.189 ms 11.759 ms
5 * * *
6 * * zzz.cz (zz.zz.zz.zz) 11.797 ms
7 * aaa.cz (aa.aa.aa.aa) 15.318 ms 13.478 ms
8 142.250.164.176 (142.250.164.176) 16.509 ms 22.738 ms 16.489 ms
9 * * *
10 108.170.238.230 (108.170.238.230) 15.592 ms
142.251.224.228 (142.251.224.228) 17.079 ms
142.251.224.128 (142.251.224.128) 11.268 ms
11 142.251.224.125 (142.251.224.125) 15.507 ms
prg03s11-in-f14.1e100.net (142.251.36.110) 12.890 ms 10.362 ms
Z důvodu zachování soukromí jsem některé hostnames
a IP adresy nahradil zástupnými znaky. V přehledu výše ale můžeme vidět podrobné zachycení celé trasy požadavku z mého počítače až do datacentra Googlu.
Jednotlivé kroky jsou očíslované a pro každý zkouší traceroute
vždy natřikrát získat odpověď. Některé servery toto automaticky odmítají, protože někteří poskytovatelé internetových služeb z jakýchkoliv důvodů nechtějí, aby jejich uživatelé měli přístup k informacím o jimi využívaných sítích.
Každý nezdařený pokud je označen hvězdičkou, tam kde se nachází tři hvězdičky, jsou zpravidla požadavky traceroute
blokovány a server na ně záměrně neodpovídá.
Díky takto detailním informacím můžeme krásně zjistit, například při neúspěšném přístupu na google.com zjistit, v jaké fází sítě je chyba. Zda třeba ještě u nás doma, u poskytovatele, anebo jde o nějaký rozšířenější problém ovlivňující mnoho uživatelů.
Další užitečné příkazy
Potřebnou teorii a praxi máme za sebou a nyní nastal čas na přehled několika užitečných příkazů v Linuxu, které se pojí s networkingem a které mohou každému správnému odborníkovi na kybernetickou bezpečnost ušetřit mnoho práce.
Restartování síťového manažeru
Někdy se může stát, že síťové rozhraní v Linuxu nefunguje tak jak má, což může být způsobeno mnoha vlivy. Než složitě zjišťovat, čím to může být, nejjednodušší je restartovat síťový manažer, tedy službu starající se o připojení stroje s běžícím Linuxem do sítě. Výhodou je, že není nutné restartovat celý stroj.
Lze toho docílit dvěma způsoby
sudo service network-manager restart
anebo
sudo systemctl restart network
Použití grepu pro zjištění IP adres na rozhraních
Výpis příkazu ifconfig
je mnohdy velmi obsáhlý a není vůbec těžké se v něm ztratit, už jen proto, že může obsahovat mnoho virtuálních rozhraní pro různé potřeby. Pokud chceme například zjistit, na kterém rozhraní máme jakou IP adresu, můžeme využít grepu v kombinaci v příkazem ifconfig
.
Pokud víme, že výpis každého síťového rozhraní vypadá zhruba takto
eth0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether 31:b2:00:00:00:00
inet 192.168.0.15 netmask 0xffffff00 broadcast 192.168.0.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
A nás zajímá řádek s IP adresou 192.168.0.15
, není nic jednoduššího, než si vypsat pouze řádky obsahující inet
pomocí grep
u.
ifconfig | grep inet
Až nalezneme požadovanou IP adresu, správné rozhraní můžeme nalézt pomocí
ifconfig | grep 192.168.0.15
Aktuální síťová spojení
Dalším užitečným nástrojem pro zjištění, co se právě děje, je využití příkazu netstat. Ten nám přehledně zobrazuje všechna aktuální síťová spojení. Nejde přitom o síťová rozhraní, ale o to, s jakými cílovými adresami naše zařízení komunikuje – kam se my připojujeme a kdo se připojuje na naše zařízení.
netstat
tcp4 0 0 localhost.12443 localhost.56686 ESTABLISHED
tcp4 0 0 localhost.56686 localhost.12443 ESTABLISHED
ARP, soubor hosts, nmap, netcat, tcpdump, Wireshark a další…
Všechny pojmy uvedené výše souvisí také s networkingem. A je jich ještě více. Již jsme se jim ale věnovali v kapitolách skript pro studenty 1. ročníku oboru kybernetické bezpečnosti. Pokud Ti tedy cokoliv z výše uvedeného není jasné, neváhej do nich nakouknout a ujasnit si, jak vše funguje a vzájemně souvisí.