GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo dello strumento SS per la risoluzione dei problemi di rete

Introduzione:

Il seguente articolo è stato copiato completamente 1 a 1 (pieno plagiat!!) dal seguente sito inn per poterlo fare riferimento qui nel caso in cui l'articolo scompaia dall'accesso a Internet o si sposti.
http:// www.linux-magazine.com/Issues/2015/181/Querying-Sockets-with-ss

Rivista Linux. Articolo tratto dal numero 181/2015
Autore/i:Chris Binnie

Il ss senza pretese è facile da capire e da digitare, ma aggiunge alcune potenti opzioni al tuo toolkit di amministrazione.

I nomi di alcune utility Linux sono così piccoli che ti ritrovi ad avviarli inaspettatamente inserendo un errore di battitura sulla riga di comando. Perché preoccuparsi di digitare parole lunghe quando un'abbreviazione perfettamente adatta è sufficiente? Un minuscolo comando (sia nel nome che nel suo ingombro tascabile sul disco rigido) è una piccola utility chiamata ss .

Ss pugni diversi livelli al di sopra della sua classe di peso mosca. Se hai familiarità con uno degli strumenti popolari utilizzati dagli amministratori di sistema per controllare i collegamenti di rete, sono sicuro che sarai felice di sapere che la sua funzionalità non sarà troppo complicata per farti capire.

Per i curiosi tra noi, il “ss "l'abbreviazione è apparentemente per le parole "statistiche socket".Ss è in bundle con il pacchetto iproute2. Se, per qualche motivo molto insolito, non trovi ss sul tuo sistema simile a Debian, puoi sempre installarlo eseguendo:

sudo apt-get install iproute2

Un socket, è una porta e un indirizzo IP. Puoi pensare a un socket come all'identificazione di un servizio in ascolto su un numero di porta specifico di un computer specifico. Una coppia di socket, in questo caso, è costituita da un indirizzo IP del client, un numero di porta del client, un indirizzo IP del server e un numero di porta del server. L'interrogazione delle informazioni per socket consente quindi di concentrarsi rapidamente su un servizio specifico in esecuzione a un indirizzo IP specifico.

Sarei negligente nel non menzionare i socket di dominio Unix. Gli Unix Domain Sockets, che facilitano la comunicazione tra i processi in esecuzione su una macchina locale, servono una serie di scopi utili, come abilitare le autorizzazioni necessarie per accedere alle risorse tra processi che altrimenti non sarebbero privi di privilegi.
Guida introduttiva a ss

Nella maggior parte degli scenari, ss verrà eseguito da un normale account utente. Sul mio sistema, ss risiede in /usr/sbin/ss directory. Inizierò con alcuni usi di base per ss. Il comando seguente mostra l'output per le reti IPv4:
# ss -4
L'output abbreviato (Listato 1) mostra la comunicazione tra client e server. Tieni presente che un client può anche essere un server e viceversa, a seconda della direzione del flusso di informazioni.

Elenco 1
Basic ss Output
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

Sostituisci l'opzione -4 con -6 per emettere informazioni sulle connessioni IPv6.

Come puoi vedere nel Listato 1, 192.168.0.2 è l'indirizzo IP della macchina locale e l'utile utilità /etc/services ha convertito alcuni numeri di porta in nomi (come ssh, www e smtp).

L'eccellente ss offre anche informazioni su TCP, UDP, socket di dominio Unix locali e socket remoti. Come descriverò più avanti, ciò che rende ss eccezionalmente potente è la sua capacità di affrontare lo stato delle connessioni.

Uso spesso ss per interrogare quali porte vengono aperte dai demoni installati sul computer. Usa l'opzione l per controllare le porte in ascolto (Listato 2):

Elenco 2

Visualizzazione delle porte di ascolto
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:*
LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 128 127.0.0.1:http *:*

# ss -l
Potresti voler controllare le porte in ascolto durante la tua routine quotidiana di amministrazione del sistema per assicurarti che i servizi imprevisti e potenzialmente non sicuri non siano stati lasciati abilitati. Oppure, potresti voler controllare rootkit meno sofisticati che potrebbero non nascondere le loro porte aperte in modo efficace.

Uno dei comandi
lsof -i
netstat -tulpn

ti aiuterà a capire quali processi (PID) stanno aprendo le tue porte, in modo da poterle eliminare se necessario.
La semplice esecuzione del comando ss senza alcuna opzione fornisce un elenco di "connessioni" correnti ( nota che questi sono in realtà "prese"), come mostrato nel Listato 3.

Listato 3
ss disadorno

# 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

Se non riesci ad accedere a lsof e non ti piace netstat (non sono un grande fan), l'utilità super-duper ss può anche segnalare i PID pertinenti alle tue porte aperte. Per vedere quali processi stanno usando i socket direttamente, inserisci un -p nel mix:
# ss -p
Un avvertimento è che devo accedere come root per ottenere le informazioni estese. Il Listato 4 mostra un esempio di cosa aspettarsi.

Listato 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))

Lavorando a ritroso dal nome dell'applicazione, che in questo caso è sshd, puoi vedere i PID 31195 e 31204; 31204 appartiene a un utente non privilegiato (il mio utente di accesso) e 31195 sembra derivare dall'intelligente separazione dei privilegi utilizzata da sshd.

SSH è progettato per ridurre al minimo le possibilità che bug di programmazione causino problemi sistemici molto seri limitando l'accesso e limitando il servizio a una jail con chroot per il processo SSH rivolto alla rete. Per raggiungere questo obiettivo, SSH utilizza due processi. Il processo di proprietà della radice monitora lo stato di avanzamento del processo senza privilegi, che ha un UID e un GID precedentemente inutilizzati.
Guardando più a fondo

Puoi usare ss -s per recuperare screed di statistiche relative a quanti socket sono aperti e quali protocolli stanno usando (Listato 5).

Elenco 5

ss -s
Total: 201 (kernel 218)
TCP: 6 (estab 2, closed 0,
orphaned 0, synrecv 0,
timewait 0/0), ports 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

Non è il migliore dei confronti, ma potresti ottenere un risultato vagamente simile usando il seguente comando netstat:
# netstat -tan | grep -v "Proto" | grep -v "Active" | awk '{print $6}' | uniq -c
Vale sicuramente la pena ricordare che l'utility super ss ha l'abitudine di superare gli altri strumenti di rete nei test di benchmark. Rispetto al netstat ampiamente utilizzato, ad esempio, ss fornisce i suoi risultati molto rapidamente. Tieni presente, tuttavia, che ss non è progettato per rispondere a tutte le possibili domande ma, piuttosto, riflette la filosofia Unix secondo cui ogni componente del sistema dovrebbe "fare bene una cosa". Gli utenti esperti spesso combinano ss con strumenti come netstat, quindi eliminano l'output utilizzando strumenti come grep, awk e sed.

Ad esempio, se desideri vedere quale applicazione sta occupando una porta specifica, puoi usare ss con grep, come segue:
# ss | grep 58620

Diventare specifico

Puoi guardare solo i socket TCP con:
# ss -t
In alternativa, puoi scrivere l'opzione –tcp. Aumenta il livello di dettaglio con l'opzione -a (per "tutto"):
# ss -t -a
Alterando leggermente quel comando si genera un output che include i socket UDP, Raw e Unix. Per una visualizzazione dettagliata di tutti i socket UDP, inserisci
# ss -u -a
e per visualizzare tutti i socket Raw, inserisci:
# ss -w -a
Se devi davvero sbizzarrirti con diversi schermi di testo sbalorditivo, puoi scegliere di visualizzare tutti i socket di dominio Unix con:
# ss -x -a

Inclusa anche nella cassetta degli attrezzi apparentemente senza fondo fornita dall'utilità ss è la possibilità di fare attenzione ai socket DCCP; DCCP è un protocollo di rete meno comune che ha le caratteristiche di controllo degli errori orientate alla connessione di TCP con le caratteristiche di tipo broadcast di UDP. Il protocollo DCCP viene spesso utilizzato per lo streaming multimediale. Controlla il traffico DCCP con questo piccolo e ingegnoso comando:
# ss -d -a
Puoi anche monitorare lo stato delle connessioni al tuo computer estendendo il livello di dettaglio usando l'opzione -e (Listato 6).

Listato 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,105min,0) ino:2187726 sk:ffff880138d2748

Il Listato 6 mostra le opzioni del timer che offrono una panoramica dello stato corrente di eventuali keepalive su una connessione. Questa funzionalità può essere utile per servizi come HTTP o SSH, che tendono a utilizzare i keepalive (vedere il riquadro intitolato "Note Keepalive"). Il Listato 7 mostra un output simile usando il comando netstat -to.

Mantieni le note

Un pacchetto keepalive ha generalmente un TCP ACK configurato con un numero di sequenza impostato su uno in meno rispetto al numero corrente utilizzato sulla connessione. Qualsiasi macchina che riceve una spinta da un tale pacchetto risponderà semplicemente con il numero di sequenza corretto e, a parte gli scherzi di Frankenstein, annuncerà che è davvero viva.

Questi tipi di pacchetti a volte sono vuoti e generalmente hanno tre parametri associati. Il parametro retry dichiarerà quante volte inviare un pacchetto prima di giungere alla conclusione che l'altra estremità della connessione ha rinunciato al ghost. L'impostazione dell'ora è configurata come frequenza dei controlli e, infine, l'intervallo determina l'intervallo di tempo tra due pacchetti inviati se non viene ricevuta alcuna risposta.

All'interno del kernel, puoi modificare queste impostazioni modificando questi valori nell'appassionante pseudo-filesystem noto e amato come /proc . Un file, in questo caso, è /proc/sys/net/ipv4/tcp_keepalive_time e puoi modificarlo come segue:
# echo 75 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo 9 > /proc/sys/net/ipv4/tcp_keepalive_probes

Listato 7
# netstat -to
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 0 0 host-one:48340 host-four:45358 ESTABLISHED keepalive (6830.00/0/0)
tcp 0 64 host-two:ssh host-three:58302 ESTABLISHED on (0.45/0/0)

Netstat ti consente anche di anteporre il versatile comando watch e visualizzare gli aggiornamenti in tempo reale:
# watch netstat -to
È una chiamata ravvicinata, ma devo ammettere che, in questo caso, netstat mantiene il suo output bello e conciso e sembra buono come l'output dell'utilità ss.
Sorgente e destinazione
Il seguente comando consente di trovare informazioni su eventuali socket con una destinazione (dst) rivolta a un indirizzo IP specifico:
# ss dst 192.168.0.1
Al contrario, non è necessario considerare che l'utilizzo dell'opzione src rivela informazioni sul lato sorgente del socket:
# ss src 192.168.0.2
A portata di mano, eh? Questa sintassi è facile da ricordare se sei di fretta, salvando il giorno in cui un capo irritabile ti ha il fiato sul collo durante un'interruzione.
Puoi anche usare le notazioni di rete CIDR nel callout dell'indirizzo:
# ss dst 192.168.0.1/24
Aggiungi due punti alla fine e puoi verificare contemporaneamente una porta molto specifica e un intervallo di indirizzi IP molto ampio:
# 192.168.0.1/24:53
Apprezzo molto questa funzionalità in situazioni con molto traffico e numerose porte aperte. Ad esempio, questa opzione ti consente di monitorare tutte le attività relative al DNS su un'intera sottorete /24 con un semplice comando ss.
Espressioni regolari
Oltre ai nomi DNS e agli indirizzi IP, puoi anche utilizzare l'espressione regolare (regex) operatori nella tua sintassi ss. Dai un'occhiata a questa piccola pepita:
# ss dport != :53
Questo comando esclude la destinazione dport sulla porta DNS 53.
Se hai bisogno di mantenere un po' di sanità mentale ed evitare di guardare solo i numeri, puoi anche tradurre le porte nel formato /etc/services:
# ss 192.168.0.1:http
Se sei pronto per essere colpito, puoi anche includere maggiore di, minore di, minore o uguale a e così via:
# ss dport > :53
Sono possibili anche altri caratteri speciali, anche se a volte è necessario eseguire l'escape dei caratteri speciali. Anche gli equivalenti alfabetici, come eq (uguale), ne (non uguale), gt (maggiore di) e le (minore di). Il tuo chilometraggio potrebbe variare a seconda delle versioni dell'utilità ss.

Stato connessione

Puoi utilizzare la –query o -A aggiunta di query per eseguire il dump di una tabella socket. La parola magica autobound verifica la presenza di porte effimere a cui si sono collegati i socket. Preparatevi per massetti di produzione, anche su un sistema silenzioso. Una versione abbreviata dell'output è mostrata nel Listato 8.

Listato 8

# ss -a -A all autobound
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

Puoi anche filtrare per stati TCP; ad esempio, il seguente comando filtra il traffico sFTP:
# ss state connected dport = :sftp
Tutto ciò che viene trattato come "corrente" in relazione alla porta sFTP viene visualizzato immediatamente.
Puoi complicare un po' di più il comando con un operatore booleano:
# ss ( sport = :ftp or dport = :http )
Puoi anche usare ss per trovare connessioni che si trovano in uno stato TCP specifico, inclusi stabili, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listen e chiusura.

I parametri dello stato TCP consentono di eseguire query molto potenti. Ad esempio, il controllo degli stati FIN–WAIT–1 ti consente di identificare se la tua applicazione ha chiuso il lato di una connessione, ma un host remoto non ha chiuso il lato, occupando così le preziose porte della tua macchina:

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

Così finisce

Le ss utility è un potente strumento che ti aiuterà a interrogare la tua rete in modo molto dettagliato. Ss offre prestazioni estremamente elevate sia per le query manuali che automatiche e richiede pochissime sequenze di tasti per eseguire comandi comuni.

Questo strumento minuscolo ma eroico aiuta a flettere i muscoli di qualsiasi amministratore di sistema. Se vuoi aumentare la potenza del tuo toolkit di amministrazione, prova a esercitarti con alcuni dei comandi più complessi nel tuo lavoro quotidiano.


Linux
  1. Inizia a utilizzare systemd come strumento di risoluzione dei problemi

  2. 10 comandi Linux per la diagnostica di rete

  3. 5 Comandi per la risoluzione dei problemi di rete Linux

  4. Nutty:uno strumento diagnostico di rete per Ubuntu

  5. strumento simile a teamviewer per ssh?

Una guida per principianti alla risoluzione dei problemi di rete in Linux

Utilizzo di ifstat per le statistiche di rete Linux

Suggerimenti per l'utilizzo di tmux

Suggerimenti per l'utilizzo dello schermo

Utilizzo di Xdg-open per l'accesso alla rete con Explorer normale?

I 10 migliori strumenti di test di penetrazione per Linux