14 comandos úteis de rede Linux
Publicados: 2015-02-15Configurar, monitorar e proteger redes é uma parte essencial do trabalho de um Sysadmin. Quando se trata de gerenciar redes Linux, existem muitos comandos e utilitários disponíveis.
Às vezes, os sistemas em rede falham. Você, como administrador, deve diagnosticar e resolver problemas. O monitoramento ajuda a detectar problemas e corrigi-los antes que as coisas saiam do controle. O monitoramento de segurança e desempenho também é uma parte essencial das atividades de um administrador.
Aqui discutimos alguns comandos comumente usados para gerenciar redes Linux.
ip
O pacote iproute2 inclui o comando IP que é usado para configuração de rede e roteamento. Isso substitui os comandos tradicionais ifconfig
e route
.
ip
recebe um segundo argumento que especifica o objeto no qual você deseja executar um comando e uma ação como adicionar, excluir ou mostrar.
ligação ip
ip link
é para configurar, adicionar e excluir interfaces de rede. Use o comando ip link show
para exibir todas as interfaces de rede no 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
Você pode ver a página man para o ip link
com:
$ man ip-link
endereço de IP
Use o comando ip address para exibir endereços, vincular novos endereços ou excluir os antigos. O comando man page ip address é nomeado como ip-address.
Por exemplo, o seguinte comando mostra o endereço IP atribuído à interface de rede 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 ...
rota ip
Use a rota IP para imprimir ou exibir a tabela de roteamento. O seguinte comando exibe o conteúdo da tabela de roteamento:
$ 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
Embora o Nmap tenha sido usado em muitos filmes, The Matrix Reloaded ( Wikipedia , IMDB , Amazon ) transformou o Nmap em uma estrela de cinema!.
Nmap (“Network Mapper”) é um poderoso utilitário usado para descoberta de rede, auditoria de segurança e administração. Muitos administradores de sistema o usam para determinar quais de seus sistemas estão online e também para detecção de sistema operacional e detecção de serviço.
A varredura padrão do Nmap mostra as portas, seu estado (aberto/fechado) e protocolos. Ele envia um pacote para as 1000 portas mais comuns e verifica a resposta.
$ 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
Para verificar quais hosts em sua rede estão ativos:
$ 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
Use o sinalizador -O para identificar qual sistema operacional um host está executando.
$ 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
Uma palavra de cautela: ninguém aprecia que seus sistemas sejam verificados pela Internet. Portanto, antes de fazer isso, peça permissão.
Você também pode usar o Nmap no Windows, confira este guia de instalação.
ping
Use o ping para ver se um host está ativo. Este comando super simples ajuda a verificar o status de um host ou segmento de rede. O comando Ping envia um pacote ICMP ECHO_REQUEST para o host de destino e espera para ver se ele responde.
No entanto, alguns hosts bloqueiam solicitações de eco ICMP com um firewall. Alguns sites na internet também podem fazer o mesmo.
Por padrão, o ping é executado em um loop infinito. Para enviar um número definido de pacotes, use o sinalizador -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
Com o sinalizador -o, o ping sai com sucesso após receber um pacote de resposta.
$ 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
Você pode usar o sinalizador -n
para evitar pesquisas reversas de DNS. O número de sequência do ICMP é particularmente importante. Uma quebra nos números de sequência indica pacotes perdidos.
Um ping com falha pode ser devido a
- falha na rede
- hospedeiro não estando vivo
- firewall bloqueando solicitações ICMP ECHO
Você também pode realizar um teste de ping online para verificar a conectividade de diferentes partes do mundo.
iPerf
Enquanto o ping verifica a disponibilidade de um host, o iPerf ajuda a analisar e medir o desempenho da rede entre dois hosts. Com o iPerf, você abre uma conexão entre dois hosts e envia alguns dados. O iPerf então mostra a largura de banda disponível entre os dois hosts.
Você pode instalar um iPerf usando seu gerenciador de pacotes de distribuição. Por exemplo, em distribuições baseadas no Ubuntu, você pode instalar assim:
$ sudo apt install iperf -y
Depois de instalar o iPerf em ambas as máquinas, inicie o servidor iPerf em uma delas. O exemplo a seguir inicia o servidor iPerf em um host com endereço IP 10.0.0.51.
$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------
Na segunda máquina, inicie o iPerf com o sinalizador -c. Isso se conecta com o servidor e envia alguns dados.
$ 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
O iPerf retorna com os resultados da largura de banda em alguns segundos.
traceroute
Se o ping mostrar pacotes ausentes, você deve usar traceroute para ver qual rota os pacotes estão tomando. Traceroute mostra a sequência de gateways através dos quais os pacotes viajam para chegar ao seu destino. Por exemplo, traceroute from my machine to google.com mostra o seguinte:
$ 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
A linha 4 nesta saída mostra um * nos tempos de ida e volta. Isso indica que nenhuma resposta foi recebida. Isso pode ser devido a vários motivos - como os pacotes ICMP do traceroute são de baixa prioridade, eles podem ser descartados por um roteador. Ou pode haver simplesmente congestionamento. Se você vir um * em todos os campos de tempo para um determinado gateway, possivelmente o gateway está inoperante.
Muitas ferramentas de rastreamento de rota baseadas na web permitem que você faça um traceroute reverso, ou seja, de um site para o seu host. Você pode verificá-los em traceroute.org ou Geekflare Traceroute.
tcpdump
O tcpdump é uma ferramenta de detecção de pacotes e pode ser de grande ajuda na resolução de problemas de rede. Ele escuta o tráfego de rede e imprime as informações do pacote com base nos critérios que você define.
Por exemplo, você pode examinar todos os pacotes enviados de ou para um determinado host, Ubuntu18 neste exemplo:
$ 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
Por padrão, o tcpdump resolve endereços IP para nomes de host. Use o sinalizador -n
se não quiser que o tcpdump execute pesquisas de nome.

A saída tcpdump imprime uma linha para cada pacote. Use o sinalizador -c
para limitar a saída, 5 no exemplo acima.
tcpdump é útil para resolver problemas de rede e também identificar problemas potenciais. É uma boa ideia executar um tcpdump em sua rede ocasionalmente para verificar se tudo está em ordem.
netstat
O comando Netstat é usado para examinar conexões de rede, tabelas de roteamento e várias configurações e estatísticas de rede.
Use o sinalizador -i
para listar as interfaces de rede em seu sistema.
Aqui está um exemplo:
$ 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
Usar o sinalizador -r
exibirá a tabela de roteamento. Isso mostra o caminho configurado para enviar pacotes de rede.
$ 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
Um asterisco nas duas últimas linhas indica que nenhum gateway é necessário para enviar pacotes para qualquer host nessas redes. Este host está conectado diretamente às redes 10.0.0.0 e 10.0.2.0.
Na primeira linha, o destino é o padrão, o que significa que qualquer pacote destinado a uma rede não listada nesta tabela é tratado pelo roteador 10.0.2,2.
O comando netstat sem nenhuma opção exibe uma lista de soquetes abertos. Use o sinalizador -l
para mostrar apenas os soquetes de escuta, que por padrão não são mostrados. Você pode usar o sinalizador -a para mostrar soquetes de escuta e não escuta. Aqui está um exemplo:
$ 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 ...
Mais exemplo de comando Netstat aqui
ss
As instalações do Linux têm muitos serviços em execução por padrão. Estes devem ser desativados ou preferencialmente removidos, pois isso ajuda a reduzir a superfície de ataque. Você pode ver quais serviços estão sendo executados com o comando netstat. Embora o netstat ainda esteja disponível, a maioria das distribuições do Linux está migrando para o comando ss
.
use o comando ss com os sinalizadores -t
e -a
para listar todos os soquetes TCP. Isso exibe soquetes de escuta e não escuta.
$ 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 :::*
Para exibir apenas conexões TCP com estado estabelecido:
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
O ssh permite que você se conecte com segurança a hosts remotos pela Internet. Anteriormente, rlogin e telnet eram usados para conectar e administrar hosts remotos. No entanto, ambos sofrem de uma falha fundamental, ou seja, eles enviam todas as informações, incluindo nomes de login e senhas em texto não criptografado.
O ssh permite a comunicação segura pela Internet com os dois recursos a seguir:
- Ele confirma que o host remoto é quem ele diz ser.
- Ele criptografa toda a comunicação entre os hosts.
Para se conectar a um host remoto, você precisa ter um servidor OpenSSH em execução no host remoto. Você pode instalá-lo usando seu gerenciador de pacotes de distribuição. Por exemplo, no Ubuntu, você pode instalá-lo assim:
$ sudo apt install openssh-server
Aqui está um exemplo mostrando como você pode se conectar ao host remoto 10.0.0.50 usando o 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
Você recebe uma mensagem dizendo que a autenticidade do host 10.0.0.50 não pode ser estabelecida, porque é a primeira vez que uma conexão está sendo feita com 10.0.0.50 (servidor) e o cliente ssh nunca viu esse host remoto antes. Digite sim para continuar conectando. Depois que a conexão for estabelecida, você será solicitado a fornecer uma senha:
Warning: Permanently added '10.0.0.50' (ECDSA) to the list of known hosts. [email protected]'s password:
Depois de digitar a senha correta, você está conectado ao 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:~$
Você pode sair desse shell remoto com o comando exit.
Além disso, você pode facilmente executar um único comando no host remoto usando ssh. Por exemplo, para executar df -h no 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 (cópia segura) é muito semelhante ao comando cp
para copiar arquivos, com uma adição – você pode incluir nomes de host remotos nos nomes de caminho de origem ou destino. O nome do host e o caminho do diretório são separados por dois pontos. Isso permite que você copie arquivos com segurança pela rede de forma criptografada. O seguinte comando copia um.txt da máquina local para 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 (ftp seguro) também é um programa de cópia de arquivo semelhante ao ftp
. No entanto, ele usa um túnel criptografado SSH para copiar arquivos, em vez de enviar tudo em texto não criptografado. Além disso, você não precisa de um servidor FTP em execução no host remoto. Você só precisa de um servidor ssh. Aqui está uma sessão de exemplo:
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 usamos o comando ifconfig
para verificar o endereço IP atribuído ao 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 ~]#
escavação
dig (Domain Information Groper) é uma ferramenta flexível para interrogar servidores de nomes DNS.
Ele executa pesquisas de DNS e exibe as respostas que são retornadas dos servidores de nomes.
[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 conecte o host e a porta do destino por meio de um protocolo telnet se uma conexão for estabelecida significa que a conectividade entre dois hosts está funcionando bem.
[root@lab ~]# telnet gf.dev 443 Trying 104.27.153.44... Connected to gf.dev. Escape character is '^]'.
nslookup
nslookup é um programa para consultar servidores de nomes de domínio e resolver 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 ~]#
Resumo
A rede no Linux é um assunto vasto, com um grande número de comandos e utilitários. Neste artigo, discutimos alguns comandos comumente usados que, esperamos, irão ajudá-lo a gerenciar e proteger sua rede.