14 utili comandi di rete Linux

Pubblicato: 2015-02-15

La configurazione, il monitoraggio e la protezione delle reti costituiscono una parte essenziale del lavoro di un amministratore di sistema. Quando si tratta di gestire reti Linux, sono disponibili molti comandi e utilità.

A volte i sistemi in rete falliscono. Tu come amministratore sei tenuto a diagnosticare e risolvere i problemi. Il monitoraggio aiuta a rilevare i problemi e risolverli prima che le cose sfuggano di mano. Anche il monitoraggio della sicurezza e delle prestazioni costituisce una parte essenziale delle attività di un amministratore.

Qui discutiamo alcuni comandi comunemente usati per gestire le reti Linux.

ip

Il pacchetto iproute2 include il comando IP utilizzato per la configurazione della rete e del routing. Questo sostituisce i tradizionali comandi ifconfig e route .

ip accetta un secondo argomento che specifica l'oggetto su cui desideri eseguire un comando e un'azione come aggiungi, elimina o mostra.

collegamento IP

ip link serve per configurare, aggiungere ed eliminare le interfacce di rete. Utilizzare il comando ip link show per visualizzare tutte le interfacce di rete sul sistema:

 $ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 02:35:97:08:6b:2a brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff:ff

Puoi vedere la pagina man per il ip link con:

 $ man ip-link

indirizzo IP

Utilizzare il comando indirizzo ip per visualizzare gli indirizzi, associare un nuovo indirizzo o eliminare quelli vecchi. Il comando ip address della pagina man è denominato ip-address.

Ad esempio, il seguente comando mostra l'indirizzo IP assegnato all'interfaccia di rete enp0s8:

 ip address show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff:ff inet 10.0.0.51/24 brd 10.0.0.255 scope global enp0s8 ...

percorso IP

Utilizzare l'instradamento IP per stampare o visualizzare la tabella di instradamento. Il seguente comando visualizza il contenuto della tabella di routing:

 $ ip route show default via 10.0.2.2 dev enp0s3 10.0.0.0/24 dev enp0s8 proto kernel scope link src 10.0.0.51 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15

nmap

Mentre Nmap era stato utilizzato in molti film, The Matrix Reloaded ( Wikipedia , IMDB , Amazon ) ha trasformato Nmap in una star del cinema!.

Nmap ("Network Mapper") è una potente utility utilizzata per il rilevamento della rete, il controllo della sicurezza e l'amministrazione. Molti amministratori di sistema lo utilizzano per determinare quali dei loro sistemi sono online e anche per il rilevamento del sistema operativo e il rilevamento del servizio.

La scansione predefinita di Nmap mostra le porte, il loro stato (aperto/chiuso) e i protocolli. Invia un pacchetto alle 1000 porte più comuni e verifica la risposta.

 $ nmap 10.0.0.50 Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 10:32 UTC Nmap scan report for 10.0.0.50 Host is up (0.00077s latency). Not shown: 997 filtered ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp closed mysql

Per controllare quali host sulla tua rete sono attivi:

 $ nmap -sn 10.0.0.0/24 Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 11:59 UTC Nmap scan report for 10.0.0.1 Host is up (0.00084s latency). Nmap scan report for 10.0.0.50 Host is up (0.0021s latency). Nmap scan report for 10.0.0.51 Host is up (0.00026s latency). Nmap done: 256 IP addresses (3 hosts up) scanned in 2.61 seconds

Utilizzare il flag -O per identificare il sistema operativo in esecuzione su un host.

 $ sudo nmap 10.0.0.50 -O Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 13:44 UTC Nmap scan report for 10.0.0.50 Host is up (0.00053s latency). ... Running: Linux 3.X OS CPE: cpe:/o:linux:linux_kernel:3 OS details: Linux 3.10 - 3.19 Network Distance: 1 hop OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 21.95 seconds

Un avvertimento: nessuno apprezza che i propri sistemi vengano scansionati su Internet. Quindi, prima di farlo, chiedi il permesso.

Puoi anche usare Nmap su Windows, dai un'occhiata a questa guida all'installazione.

ping

Usa il ping per vedere se un host è attivo. Questo semplicissimo comando ti aiuta a controllare lo stato di un host o di un segmento di rete. Il comando ping invia un pacchetto ICMP ECHO_REQUEST all'host di destinazione e attende per vedere se risponde.

Tuttavia, alcuni host bloccano le richieste echo ICMP con un firewall. Anche alcuni siti su Internet possono fare lo stesso.

Per impostazione predefinita, il ping viene eseguito in un ciclo infinito. Per inviare un numero definito di pacchetti, utilizzare il flag -c .

 $ ping -c 3 google.com PING google.com (172.217.167.238): 56 data bytes 64 bytes from 172.217.167.238: icmp_seq=0 ttl=118 time=7.898 ms 64 bytes from 172.217.167.238: icmp_seq=1 ttl=118 time=7.960 ms 64 bytes from 172.217.167.238: icmp_seq=2 ttl=118 time=6.247 ms --- google.com ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 6.247/7.368/7.960/0.793 ms

Con -o flag ping esce con successo dopo aver ricevuto un pacchetto di risposta.

 $ ping -o google.com PING google.com (172.217.167.46): 56 data bytes 64 bytes from 172.217.167.46: icmp_seq=0 ttl=118 time=7.540 ms --- google.com ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 7.540/7.540/7.540/0.000 ms

È possibile utilizzare il flag -n per evitare ricerche DNS inverse. Il numero di sequenza ICMP è particolarmente importante. Un'interruzione nei numeri di sequenza indica i pacchetti persi.

Un ping non riuscito potrebbe essere dovuto a

  • errore di rete
  • l'host non è vivo
  • firewall che blocca le richieste ICMP ECHO

Puoi anche eseguire un test ping online per verificare la connettività da diverse parti del mondo.

iPerf

Mentre il ping verifica la disponibilità di un host, iPerf aiuta ad analizzare e misurare le prestazioni della rete tra due host. Con iPerf, apri una connessione tra due host e invii alcuni dati. iPerf mostra quindi la larghezza di banda disponibile tra i due host.

Puoi installare un iPerf utilizzando il tuo gestore di pacchetti di distribuzione. Ad esempio su distribuzioni basate su Ubuntu puoi installare in questo modo:

 $ sudo apt install iperf -y

Dopo aver installato iPerf su entrambe le macchine, avvia il server iPerf su una di esse. L'esempio seguente avvia il server iPerf su un host con indirizzo IP 10.0.0.51.

 $ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------

Sulla seconda macchina avvia iPerf con il flag -c. Questo si connette al server e invia alcuni dati.

 $ iperf -c 10.0.0.51 ------------------------------------------------------------ Client connecting to 10.0.0.51, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.0.0.50 port 42177 connected with 10.0.0.51 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.13 GBytes 972 Mbits/sec

iPerf ritorna con i risultati della larghezza di banda in pochi secondi.

traceroute

Se il ping mostra pacchetti mancanti, dovresti usare traceroute per vedere quale percorso stanno prendendo i pacchetti. Traceroute mostra la sequenza di gateway attraverso i quali i pacchetti viaggiano per raggiungere la loro destinazione. Ad esempio, traceroute dalla mia macchina a google.com mostra quanto segue:

 $ traceroute google.com traceroute to google.com (172.217.167.46), 64 hops max, 52 byte packets 1 dlinkrouter.dlink (192.168.0.1) 5.376 ms 2.076 ms 1.932 ms 2 10.194.0.1 (10.194.0.1) 5.190 ms 5.125 ms 4.989 ms 3 broadband.actcorp.in (49.207.47.201) 7.165 ms 5.749 ms 5.755 ms 4 broadband.actcorp.in (49.207.47.225) 5.918 ms * 8.483 ms ... 9 108.170.251.97 (108.170.251.97) 6.359 ms del03s16-in-f14.1e100.net (172.217.167.46) 5.448 ms 108.170.251.97 (108.170.251.97) 6.400 ms

La riga 4 in questo output mostra un * nei tempi di andata e ritorno. Ciò indica che non è stata ricevuta alcuna risposta. Ciò può essere dovuto a molte ragioni: poiché i pacchetti ICMP traceroute hanno una priorità bassa, questi possono essere eliminati da un router. Oppure potrebbe esserci semplicemente congestione. Se vedi un * in tutti i campi dell'ora per un determinato gateway, è possibile che il gateway sia inattivo.

Molti strumenti di tracciamento del percorso basati sul Web ti consentono di eseguire un traceroute inverso, ovvero da un sito Web al tuo host. Puoi controllarli su traceroute.org o Geekflare Traceroute.

tcpdump

tcpdump è uno strumento di sniffing dei pacchetti e può essere di grande aiuto nella risoluzione dei problemi di rete. Ascolta il traffico di rete e stampa le informazioni sui pacchetti in base ai criteri definiti.

Ad esempio, puoi esaminare tutti i pacchetti inviati a o da un particolare host, Ubuntu18 in questo esempio:

 $ sudo tcpdump host ubuntu18 -n -c 5 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 14:12:11.509092 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 2991049004:2991049112, ack 2956233368, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 108 14:12:11.509146 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 108:252, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 144 14:12:11.509218 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 252:288, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 36 14:12:11.509259 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 288:500, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 212 14:12:11.509331 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 500:768, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 268 5 packets captured 6 packets received by filter 0 packets dropped by kernel

Per impostazione predefinita, tcpdump risolve gli indirizzi IP in nomi host. Utilizzare il flag -n , se non si desidera che tcpdump esegua ricerche di nomi.

L'output di tcpdump stampa una riga per ogni pacchetto. Usa -c flag per limitare l'output, 5 nell'esempio precedente.

tcpdump è utile per risolvere problemi di rete e anche per identificare potenziali problemi. È una buona idea eseguire occasionalmente un tcpdump sulla rete per verificare che tutto sia in ordine.

netstat

Il comando Netstat viene utilizzato per esaminare le connessioni di rete, le tabelle di routing e varie impostazioni e statistiche di rete.

Usa il flag -i per elencare le interfacce di rete sul tuo sistema.

Ecco un esempio:

 $ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 4001 0 0 0 2283 0 0 0 BMRU eth1 1500 0 27154 0 0 0 838962 0 0 0 BMRU lo 65536 0 0 0 0 0 0 0 0 0 LRU

L'uso del flag -r visualizzerà la tabella di routing. Mostra il percorso configurato per l'invio dei pacchetti di rete.

 $ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 10.0.0.0 * 255.255.255.0 U 0 0 0 eth1 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0

Un asterisco nelle ultime due righe indica che non è richiesto alcun gateway per inviare pacchetti a qualsiasi host su queste reti. Questo host è connesso direttamente alle reti 10.0.0.0 e 10.0.2.0.

Nella prima riga, la destinazione è quella predefinita, il che significa che qualsiasi pacchetto destinato a una rete non elencata in questa tabella viene gestito dal router 10.0.2,2.

Il comando netstat senza alcuna opzione visualizza un elenco di socket aperti. Usa -l flag per mostrare solo i socket in ascolto, che per impostazione predefinita non sono mostrati. Puoi usare -a flag per mostrare i socket in ascolto e non in ascolto. Ecco un esempio:

 $ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 36 10.0.2.15:ssh 10.0.2.2:51017 ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 *:bootpc *:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 3 [ ] DGRAM 8186 /run/systemd/notify ...

Altro esempio di comando Netstat qui

ss

Le installazioni Linux hanno molti servizi in esecuzione per impostazione predefinita. Questi dovrebbero essere disabilitati o preferibilmente rimossi, in quanto ciò aiuta a ridurre la superficie di attacco. Puoi vedere quali servizi sono in esecuzione con il comando netstat. Sebbene netstat sia ancora disponibile, la maggior parte delle distribuzioni Linux sta passando al comando ss .

usa il comando ss con i flag -t e -a per elencare tutti i socket TCP. Visualizza sia le prese in ascolto che quelle non in ascolto.

 $ ss -t -a State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:sunrpc *:* LISTEN 0 128 *:http *:* LISTEN 0 128 *:ssh *:* LISTEN 0 128 *:60031 *:* ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:51699 ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:51049 LISTEN 0 128 :::sunrpc :::* LISTEN 0 128 :::http :::* LISTEN 0 128 :::ssh :::* LISTEN 0 128 :::54715 :::*

Per visualizzare solo le connessioni TCP con stato stabilito:

 ss -a -t -o state established Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 10.0.2.15:ssh 10.0.2.2:51699 timer:(keepalive,23min,0) 0 0 10.0.2.15:ssh 10.0.2.2:51049 timer:(keepalive,114min,0)

ssh

ssh ti consente di connetterti in modo sicuro con host remoti su Internet. In precedenza rlogin e telnet venivano usati per connettersi e amministrare host remoti. Tuttavia, entrambi soffrono di un difetto fondamentale, ovvero inviano tutte le informazioni, inclusi i nomi di accesso e le password, in chiaro.

ssh consente la comunicazione sicura su Internet con le seguenti due funzionalità:

  • Conferma che l'host remoto è, chi dice di essere.
  • Crittografa tutte le comunicazioni tra gli host.

Per connettersi a un host remoto è necessario disporre di un server OpenSSH in esecuzione sull'host remoto. Puoi installarlo usando il tuo gestore di pacchetti di distribuzione. Ad esempio su Ubuntu puoi installarlo in questo modo:

 $ sudo apt install openssh-server

Ecco un esempio che mostra come connettersi all'host remoto 10.0.0.50 utilizzando il comando ssh:

 me@ubuntu-xenial:~$ ssh 10.0.0.50 The authenticity of host '10.0.0.50 (10.0.0.50)' can't be established. ECDSA key fingerprint is SHA256:s2tNJQa/C1/W0SevGm7Rt3xoBZG1QL5yT3ff/+PMpnY. Are you sure you want to continue connecting (yes/no)? yes

Ricevi un messaggio che dice che l'autenticità dell'host 10.0.0.50 non può essere stabilita, questo perché è la prima volta che viene stabilita una connessione con 10.0.0.50 (server) e il client ssh non ha mai visto questo host remoto prima. Inserisci sì per continuare a connetterti. Una volta stabilita la connessione, viene richiesta una password:

 Warning: Permanently added '10.0.0.50' (ECDSA) to the list of known hosts. [email protected]'s password:

Dopo aver inserito la password corretta, sei connesso all'host remoto.

 Welcome to Ubuntu 14.04.6 LTS (GNU/Linux 3.13.0-170-generic x86_64) * Documentation: https://help.ubuntu.com/ .. me@vagrant-ubuntu-trusty-64:~$

Puoi uscire da questa shell remota con il comando exit.

Inoltre, puoi facilmente eseguire un singolo comando sull'host remoto usando ssh. Ad esempio, per eseguire df -h sull'host remoto:

 $ ssh 10.0.0.50 df -h [email protected]'s password: Filesystem Size Used Avail Use% Mounted on udev 241M 12K 241M 1% /dev tmpfs 49M 384K 49M 1% /run /dev/sda1 40G 1.6G 37G 5% / ... none 224G 113G 111G 51% /vagrant me@ubuntu-xenial:~$

scp e sftp

scp (secure copy) è molto simile al comando cp per copiare i file, con un'aggiunta: puoi includere nomi host remoti nei nomi di percorso di origine o di destinazione. Il nome host e il percorso della directory sono separati da due punti. Ciò consente di copiare i file in modo sicuro sulla rete in forma crittografata. Il seguente comando copia a.txt dalla macchina locale a 10.0.0.50 :

 me@ubuntu-xenial:~$ scp a.txt 10.0.0.50:/home/me [email protected]'s password: a.txt 100% 0 0.0KB/s 00:00

sftp (secure ftp) è anche un programma di copia di file simile a ftp . Tuttavia, utilizza un tunnel crittografato SSH per copiare i file, invece di inviare tutto in chiaro. Inoltre, non è necessario un server FTP in esecuzione sull'host remoto. Hai solo bisogno di un server ssh. Ecco una sessione di esempio:

 me@ubuntu-xenial:~$ sftp 10.0.0.50 [email protected]'s password: Connected to 10.0.0.50. sftp> put kali-linux-2020.3-installer-netinst-i386.iso Uploading kali-linux-2020.3-installer-netinst-i386.iso to /home/me/kali-linux-2020.3-installer-netinst-i386.iso kali-linux-2020.3-installer-netinst-i386.iso 100% 435MB 27.2MB/s 00:16 sftp> bye

Ifconfig

Principalmente usiamo il comando ifconfig per controllare l'indirizzo IP assegnato al sistema.

 [root@lab ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 209.97.137.171 netmask 255.255.240.0 broadcast 209.97.143.255 inet6 fe80::c035:b2ff:fe9d:72d5 prefixlen 64 scopeid 0x20<link> ether c2:35:b2:9d:72:d5 txqueuelen 1000 (Ethernet) RX packets 1333200 bytes 167143230 (159.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 979666 bytes 93582595 (89.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 16 bytes 1392 (1.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16 bytes 1392 (1.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@lab ~]#

scavare

dig (Domain Information Groper) è uno strumento flessibile per interrogare i server dei nomi DNS.

Esegue ricerche DNS e visualizza le risposte restituite dai server dei nomi.

 [root@lab ~]# dig geekflare.com ; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12310 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 30 IN A 104.27.119.115 geekflare.com. 30 IN A 104.27.118.115 ;; Query time: 12 msec ;; SERVER: 67.207.67.2#53(67.207.67.2) ;; WHEN: Wed Sep 16 17:58:45 UTC 2020 ;; MSG SIZE rcvd: 74 [root@lab ~]#

telnet

telnet collega l'host e la porta di destinazione tramite un protocollo telnet se viene stabilita una connessione significa che la connettività tra due host funziona correttamente.

 [root@lab ~]# telnet gf.dev 443 Trying 104.27.153.44... Connected to gf.dev. Escape character is '^]'.

nslookup

nslookup è un programma per interrogare i server dei nomi di dominio e risolvere l'IP.

 [root@lab ~]# nslookup relicflare.com Server: 67.207.67.2 Address: 67.207.67.2#53 Non-authoritative answer: Name: relicflare.com Address: 192.64.119.178 [root@lab ~]#

Riepilogo

Il networking in Linux è un argomento vasto, con un gran numero di comandi e utilità. In questo articolo, abbiamo discusso alcuni comandi di uso comune che, si spera, ti aiuteranno a gestire e proteggere la tua rete.