GNU/Linux >> Znalost Linux >  >> Linux

Použití nástroje SS pro řešení problémů se sítí

Úvod:

Následující článek byl zkopírován zcela 1 ku 1 (úplný plagiat!!) z následujícího webu, aby bylo možné na něj odkazovat zde v případě, že článek zmizí z internetu nebo se přesune.
http:// www.linux-magazine.com/Issues/2015/181/Querying-Sockets-with-ss

Linuxový časopis. Článek z vydání 181/2015
Autoři:Chris Binnie

Nenáročný ss nástroj je snadno pochopitelný a snadno se píše, ale přidává do vaší sady nástrojů pro správu některé výkonné možnosti.

Názvy několika linuxových nástrojů jsou tak malé, že zjistíte, že je nečekaně spouštíte zadáním překlepu na příkazovém řádku. Proč se namáhat psaním sáhodlouhých slov, když vám postačí dokonale vhodná zkratka? Jeden nepatrný příkaz (jak v názvu, tak v jeho kapesní velikosti na pevném disku) je malá utilita zvaná ss .

Ss šíří několik úrovní nad svou muší váhou. Pokud znáte některý z populárních nástrojů, které používají správci systému ke kontrole síťových odkazů, určitě vás potěší, že jeho funkce nebude příliš složitá, abyste se z toho dostali.

Pro zvědavé z nás, „ss ” zkratka je zřejmě pro slova “socket statistics.” Ss je součástí balíčku iproute2. Pokud z nějakého velmi neobvyklého důvodu nenajdete ss na vašem systému podobnému Debianu jej můžete vždy nainstalovat spuštěním:

sudo apt-get install iproute2

Soket je port a IP adresa. Soket si můžete představit jako identifikaci služby naslouchající na konkrétním čísle portu konkrétního počítače. Pár soketů se v tomto případě skládá z adresy IP klienta, čísla portu klienta, adresy IP serveru a čísla portu serveru. Dotazování informací pomocí soketu vám proto umožňuje rychle se zaměřit na konkrétní službu běžící na konkrétní IP adrese.

Byl bych lhostejný, kdybych se nezmínil o Unix Domain Sockets. Unixové doménové sokety, které usnadňují komunikaci mezi procesy běžícími na místním počítači, slouží řadě užitečných účelů, jako je povolení potřebných oprávnění pro přístup ke zdrojům mezi procesy, které by jinak nebyly privilegované.
Začínáme s ss

Ve většině scénářů bude ss spuštěn z běžného uživatelského účtu. V mém systému je ss umístěn v /usr/sbin/ss adresář. Začnu s některými základními způsoby použití pro ss. Následující příkaz zobrazuje výstup pro sítě IPv4:
# ss -4
Zkrácený výstup (výpis 1) zobrazuje komunikaci klienta a serveru. Mějte na paměti, že klient může být také serverem a naopak, v závislosti na směru toku informací.

Zápis 1
Základní ss výstup
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.0.2:37564 192.168.0.100:www
ESTAB 0 0 192.168.0.2:47592 192.168.0.156:smtp
ESTAB 0 0 192.168.0.2:ssh 192.168.0.49:64009

Nahraďte volbu -4 za -6, aby se zobrazily informace o připojeních IPv6.

Jak můžete vidět ve výpisu 1, 192.168.0.2 je IP adresa místního počítače a užitečný nástroj /etc/services převedl některá čísla portů na názvy (jako je ssh, www a smtp).

Vynikající ss také nabízí informace o TCP, UDP, lokálních unixových doménových soketech a vzdálených soketech. Jak popíšu později, to, co dělá ss výjimečně výkonným, je jeho schopnost vypořádat se se stavem připojení.

Často používám ss k dotazu, které porty jsou otevřeny démony nainstalovanými v počítači. Použijte možnost l ke kontrole naslouchacích portů (Výpis 2):

Zápis 2

Zobrazení naslouchacích portů
Stat Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:*
LISTEN 0 100 127.0.0.1:smtp *:*
POSLECHNOUT 0 128 *:sunrpc *:*
POSLECHNOUT 0 128 127.0.0.1:http *:*

# ss -l
Možná budete chtít zkontrolovat naslouchací porty během každodenní rutiny správy systému, abyste se ujistili, že neočekávané a potenciálně nebezpečné služby nebyly ponechány povolené. Nebo možná budete chtít zkontrolovat méně sofistikované rootkity, které by nemusely efektivně skrývat své otevřené porty.

Kterýkoli z příkazů
lsof -i
netstat -tulpn

vám pomůže zjistit, které procesy (PID) otevírají vaše porty, takže je můžete v případě potřeby vypnout.
Jednoduchým spuštěním příkazu ss bez jakýchkoli voleb získáte seznam aktuálních „připojení“ ( všimněte si, že toto jsou ve skutečnosti „zásuvky“), jak je uvedeno ve výpisu 3.

Zápis 3
ss Unadorned

# ss
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.0.2:37564 192.168.0.49:tcpmux
ESTAB 0 64 192.168. 0.2:ssh 192.168.0.143:64009
ESTAB 0 0 192.168.0.2:47609 192.168.0.88:gopher

PID

Pokud nemůžete získat přístup k lsof a nemáte rádi netstat (nejsem velký fanoušek), nástroj super-duper ss může také hlásit PID související s vašimi otevřenými porty. Chcete-li zjistit, které procesy přímo používají sockety, stačí do mixu přidat -p:
# ss -p
Jedno upozornění je, že se musím přihlásit jako root, abych získal rozšířené informace. Výpis 4 ukazuje příklad toho, co lze očekávat.

Výpis 4
ss -p
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 10.10.10.20:ssh 10.10.10.10:52918 users:(( "sshd",31195,3),("sshd",31204,3))

Zpětně od názvu aplikace, což je v tomto případě sshd, můžete vidět PID 31195 a 31204; Číslo 31204 patří neprivilegovanému uživateli (mému přihlášenému uživateli) a číslo 31195 se zdá být výsledkem chytrého oddělení oprávnění, které používá sshd.

SSH je navrženo tak, aby minimalizovalo pravděpodobnost programovacích chyb způsobujících velmi vážné systémové problémy omezením přístupu a omezením služby na chrootované vězení pro proces SSH orientovaný na síť. K dosažení tohoto cíle používá SSH dva procesy. Proces vlastněný rootem monitoruje průběh neprivilegovaného procesu, který má dosud nepoužívané UID a GID.
Podíváme se hlouběji

Můžete použít ss -s k načtení screedů statistik souvisejících s tím, kolik soketů je otevřeno a které protokoly používají (výpis 5).

Zápis 5

ss -s
Celkem:201 (kernel 218)
TCP:6 (estab 2, uzavřeno 0,
osiřelé 0, synrecv 0,
timewait 0/0) , porty 5
Transport Total IP IPv6
* 218 - -
RAW 0 0 0
UDP 5 5 0
TCP 6 6 0
INET 11 1 0
FRAG 0 0 0

Není to nejlepší srovnání, ale nejasně podobný výsledek byste mohli získat pomocí následujícího příkazu netstat:
# netstat -tan | grep -v "Proto" | grep -v "Aktivní" | awk '{print $6}' | uniq -c
Určitě stojí za zmínku, že utilita super ss má ve zvyku překonávat ostatní síťové nástroje v benchmarkových testech. Například ve srovnání s široce používaným netstatem poskytuje ss své výsledky skutečně velmi rychle. Mějte však na paměti, že ss není navržen tak, aby odpovídal na všechny možné otázky, ale spíše odráží filozofii Unixu, že každá systémová komponenta by měla „dělat jednu věc dobře“. Zkušení uživatelé často kombinují ss s nástroji jako netstat a poté ořezávají výstup pomocí nástrojů jako grep, awk a sed.

Pokud byste například chtěli vidět, která aplikace váže konkrétní port, můžete použít ss s grep takto:
# ss | grep 58620

Upřesnění

Můžete se podívat pouze na TCP sokety pomocí:
# ss -t
Případně můžete napsat volbu –tcp. Zvyšte úroveň detailů pomocí přepínače -a (pro „vše“):
# ss -t -a
Jemné pozměnění tohoto příkazu generuje výstup tak, aby zahrnoval UDP, Raw a Unix sockety. Chcete-li získat podrobné zobrazení všech soketů UDP, zadejte
# ss -u -a
a chcete-li zobrazit všechny sokety Raw, zadejte:
# ss -w -a
Pokud si opravdu musíte dopřát ohromující text na několika obrazovkách, můžete si vybrat zobrazení všech soketů unixových domén pomocí:
# ss -x -a

Ve zdánlivě bezedné sadě nástrojů, kterou poskytuje nástroj ss, je také zahrnuta schopnost dávat pozor na zásuvky DCCP; DCCP je méně běžný síťový protokol, který má vlastnosti TCP orientované na připojení a kontrolu chyb s funkcemi typu broadcast UDP. Protokol DCCP se často používá pro streamování médií. Zkontrolujte provoz DCCP pomocí tohoto šikovného malého příkazu:
# ss -d -a
Můžete také sledovat stav připojení k počítači rozšířením úrovně podrobností pomocí volby -e (výpis 6).

Výpis 6
# ss -e
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.0.2:ssh 192.168.0.88:58302 timer:( keepalive,40min,0) ino:2184870 sk:ffff880138d26700
ESTAB 0 0 192.168.0.2:48246 192.1680.56:ntp timer:(keepalive,105:2787sk

Výpis 6 ukazuje možnosti časovače, které nabízejí pohled na aktuální stav všech udržování na připojení. Tato funkce může být užitečná pro služby, jako je HTTP nebo SSH, které mají tendenci využívat udržování života (viz rámeček s názvem „Udržovací poznámky“). Výpis 7 ukazuje podobný výstup pomocí příkazu netstat -to.

Uchovávejte poznámky

Udržovací paket má obecně TCP ACK konfigurovaný s pořadovým číslem nastaveným na jedno menší, než je aktuální číslo použité na připojení. Každý stroj, který přijme šťouchnutí z takového paketu, jednoduše odpoví správným pořadovým číslem a Frankenstein žertuje stranou, oznámí, že je skutečně živý.

Tyto typy paketů jsou někdy prázdné a obecně mají tři související parametry. Parametr retry bude deklarovat, kolikrát se má odeslat paket, než dojde k závěru, že druhý konec spojení se vzdal ducha. Nastavení času je nakonfigurováno jako frekvence kontrol a nakonec interval určuje dobu mezi dvěma odeslanými pakety, pokud není přijata žádná odpověď.

Uvnitř jádra můžete tato nastavení změnit úpravou těchto hodnot v okouzlujícím pseudo-souborovém systému známém a oblíbeném jako /proc . Jeden soubor je v tomto případě /proc/sys/net/ipv4/tcp_keepalive_time a můžete jej upravit následovně:
# echo 75> /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo 9> /proc/sys/net/ipv4/tcp_keepalive_probes
Výpis 7
# netstat -to
Proto Recv-Q Send-Q Místní adresa Cizí adresa State Timer
tcp 0 0 host-one:48340 host-four:45358 ESTABLISHED keepalive (6830.00/ 0/0)
tcp 0 64 hostitel-dva:ssh hostitel-tři:58302 Zřízeno dne (0.45/0/0)

Netstat také umožňuje předřadit všestranný příkaz watch a zobrazit aktualizace v reálném čase:
# watch netstat -to
Je to blízko, ale musím přiznat, že v tomto případě netstat udržuje svůj výstup pěkný a stručný a vypadá stejně dobře jako výstup nástroje ss.
Zdroj a cíl
The následující příkaz vám umožní najít informace o všech soketech s cílem (dst) zaměřeným na konkrétní IP adresu:
# ss dst 192.168.0.1
Naopak, nebude to znamenat velký skok, když vezmeme v úvahu, že použití možnosti src odhalí informace na zdrojové straně soketu:
# ss src 192.168.0.2
Šikovné, co? Tato syntaxe je snadno zapamatovatelná, pokud jste ve spěchu, což vám ušetří den, kdy vám při výpadku dýchá na krk podrážděný šéf.
V popisku adresy můžete dokonce použít síťové notace CIDR:
# ss dst 192.168.0.1/24
Přidejte dvojtečku na konec a můžete současně zkontrolovat velmi specifický port a velmi široký rozsah IP adres:
# 192.168.0.1/24:53
Opravdu oceňuji tuto funkci v situacích s velkým provozem a mnoha otevřenými porty. Tato možnost vám například umožňuje sledovat veškerou aktivitu související s DNS v celé podsíti /24 pomocí jednoho jednoduchého příkazu ss.
Regulární výrazy
Kromě názvů DNS a IP adres můžete také použít regulární výraz (regex) operátory ve vaší syntaxi ss. Podívejte se na tento malý nugget:
# ss dport !=:53
Tento příkaz vylučuje cílový dport na portu DNS 53.
Pokud si potřebujete zachovat zdravý rozum a vyhnout se pouhému prohlížení čísel, můžete také přeložit porty do formátu /etc/services:
# ss 192.168.0.1:http
Pokud jste připraveni být ohromeni, můžete také zahrnout větší-než, menší-než, menší-než-nebo-rovno a tak dále:
# ss dport> :53
Jsou možné i jiné speciální znaky, i když někdy speciální znaky potřebují escapování. Fungují také abecední ekvivalenty, jako je eq (rovná se), ne (není se rovná), gt (větší než) a le (menší než). Váš počet najetých kilometrů se může lišit podle různých verzí nástroje ss.

Stav připojení

Můžete použít –dotaz nebo -A dotaz přidání k výpisu tabulky soketů. Kouzelné slovo autobound kontroluje pomíjivé porty, ke kterým se zásuvky připojily. Připravte se na potěry na výstupu, dokonce i na tichém systému. Zkrácená verze výstupu je uvedena ve výpisu 8.

Výpis 8

# ss -a -A vše automaticky
01 u_str ESTAB 0 0 * 11984 * 0
02 u_str ESTAB 0 0 * 11996 * 0
03 u_str ESTAB 0 0 * 12003 * 0
04 u_str ESTAB 0 0 * 12005 * 0
05 u_str ESTAB 0 0 * 12010 * 0

Můžete také filtrovat podle stavů TCP; například následující filtry příkazů pro provoz sFTP:
# ss state connected dport =:sftp
Cokoli, co je ve vztahu k portu sFTP považováno za „aktuální“, se okamžitě zobrazí.
Příkaz můžete trochu více zkomplikovat pomocí booleovského operátoru:
# ss ( sport =:ftp nebo dport =:http )
Můžete dokonce použít ss k vyhledání připojení, která jsou ve specifickém stavu TCP, včetně navázaných, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listen a close.

Parametry stavu TCP vám umožňují provádět velmi výkonné dotazy. Například kontrola stavů FIN–WAIT–1 vám umožní zjistit, zda vaše aplikace uzavřela svou stranu připojení, ale vzdálený hostitel neuzavřel svou stranu, a tak svázal cenné porty vašeho počítače:

ss -o state fin-wait-1 '( sport =\
:ftp nebo sport =:http )' \
dst 10.10.3.3/24:22

Tak to končí

ss utility je mocný nástroj, který vám pomůže dotázat se na vaši síť s významnými podrobnostmi. Ss je extrémně vysoký výkon pro ruční i automatické dotazy a vyžaduje velmi málo stisknutí kláves k provádění běžných příkazů.

Tento malý, ale hrdinský nástroj pomáhá protahovat svaly každého správce systému. Pokud chcete zvýšit výkon své sady nástrojů pro správu, zkuste si procvičit některé složitější příkazy ve své každodenní práci.


Linux
  1. Začněte používat systemd jako nástroj pro odstraňování problémů

  2. Vyvíjejte síťové aplikace pro ESP8266 pomocí Mongoose v Linuxu

  3. Použití Bash pro automatizaci

  1. 6 dovedností pro odstraňování problémů pro Ansible playbooky

  2. Používáte Tcpdump pro protokolování veškeré síťové aktivity procházející serverem routeru?

  3. Příklady použití příkazu tcpdump pro řešení problémů se sítí

  1. 10 Linuxových příkazů pro diagnostiku sítě

  2. 5 Příkazy pro odstraňování problémů se sítí Linux

  3. Nutty – Nástroj pro diagnostiku sítě pro Ubuntu