traceroute-mini-howto-blog-header-big-2016

Linux mini-howto: Diagnostický nástroj Traceroute

Linux mini-howto?
Krátce o nástrojích ze života sysadmina.

Diagnostický nástroj Traceroute


Info: Následující krátký jednoduchý text vznikl na základě praktické zkušenosti dotazů a z workshopů, je cílen na mladší generaci síťařů/adminů pro objasnění, že i za tak jednoduchým nástrojem traceroute není žádná magie, není cílem nikoho urazit, pouze osvěta. Děkuji.

Nástroj traceroute umožňuje základní analýzu počítačové sítě formou textového výpisu směrovačů (uzlů) na cestě paketu od zdroje v cíli, jde tedy o velmi efektivní nástroj pro rychlé zobrazení aktuálních cesty (routování) v sítí, standardně je tento nástroj obsažen ve většině Linux/Unix systémech, ve světě Windows má svoji implementaci v podobě nástroje tracert.

Ilustrace traceroute google.com
Ilustrace traceroute google.com

Pozn.: Popisujeme implementaci traceroute v systému Linux, který používá protokol UDP  a chování v IPv4 sítích.

Jak funguje traceroute aneb TTL

TTL = Time to live (životnost), je položka v hlavičce IPv4 datagramu o velikost 8bitů (maximální hodnota 255), výchozí hodnotu nastavuje odesílatel, při průchodu směrovačem na cestě sítí je snížena o 1, při dosažení hodnoty 0 je datagram zahozen a odesílatel je informován pomocí ICMP zprávy 11 Time Exceeded.

Hlavní význam pole TTL v IPv4 je definovat maximální životnost datagramu a aktivně bránit zacyklení/zahlcení sítě v nekonečných smyčkách např. z důvodu chyby v routování, TTL je je definováno v RFC 791.

Ilustrace IPv4 hlavička
Ilustrace IPv4 hlavička

Nástroj traceroute klíčově využívá popsané chování TTL a ICMP 11 (Time Exceeded) zpráv pouze triviální zvyšováním hodnoty TTL a čekáním na ICMP, tedy konkrétně odešle paket s TTL hodnotou 1 k cíli, první směrovač na cestě sníží hodnotu o 1 na TTL=0, zahodí tedy paket a pošle zpět odesílateli ICMP zprávu, traceroute odešle nový paket s TTL=2 atd., jednoduché.

V Linux implementaci traceroute std. používá UDP protokol (pravděpodobně kvůli tomu, že k ICMP jsou nutná práva root uživatele), toto chování lze změnit (ICMP, TCP SYN, UDP), lze měnit mnoho parametrů (výchozí hodnota TTL std. 30 , počet paketů std. 3, timeouty, odchozí IP adresy, … ), viz man traceroute.

Jak číst výpis traceroute ?

Nekomplikovaně, i když někdy to může být záhada std. výstup obsahuje pořadové číslo, IP adresu směrovače a trojici hodnot času odpovědí (RTT), pokud ve výstupu najdete “* * *” je to příznak, že směrovač na trase filtruje/negeneruje ICMP odpovědi. Nenechte se zmást divným chování některých boxů, vracejí např. odpověď na první datagram a ostatní ignorují, jiné reagují velmi pomalu, protože ICMP pro ně není prioritu(priorita je odbavit data v řádech např. 10-ky Gbit) a nereflektuje tak skutečnost RTT, také lze pozorovat různé trasy ke stejnému cíli měnící se v krátkém čase, což může ukazovat např. na rozklad zátěže na trase (Equal cost multipath routing), internet je pěkně divoké místo !

Bezpečnost, omezení traceroute

Z pohledu bezpečnosti nebudí chování traceroute takové nadšení, šikovný útočník dokáže zmapovat topologii sítě, použité aktivní prvky a následně vybrat vhodný bod pro svůj útok, tomuto chování lze předejít vhodným nastavením firewallu či ACL.

Proto se lze setkat s blokování ICMP 11 (Time Exceeded) zpráv, jednoduchá triviální ukázka blokace ICMP zprava 11:0.

Linux:

iptables -A INPUT -p icmp --icmp-type time-exceeded -j DROP
iptables -A OUTPUT -p icmp --icmp-type time-exceeded -j DROP
iptables -A FORWARD -p icmp --icmp-type time-exceeded -j DROP

Mikrotik:

/ip firewall filter
chain=output action=drop protocol=icmp icmp-options=11:0 log=no log-prefix="" comment="Blokuje odeslani ICMP11"
chain=forward action=drop protocol=icmp icmp-options=11:0 log=no log-prefix="" comment="Blokojuje predavani ICMP11"

Cisco ACL:

R1(config)#access-list 101 deny icmp any any time-exceeded
R1(config)#int g0/0
R1(config-if)#ip access-group 101 in
R1(config-if)#ip access-group 101 out

A to je vše, teď už to neztratíme, děkuji za pozornost.
František Havel, MOJEservery.cz