Análise de Conexões de Rede com o Comando netstat no Linux

Introdução ao netstat

O comando netstat é uma ferramenta essencial no Linux para administradores de sistema e desenvolvedores, oferecendo uma visão detalhada do estado das conexões de rede ativas, tabelas de roteamenot, estatísticas de interface, e membros de multicast. Ele permite monitorar e diagnosticar problemas relacionados à rede, exibindo informações cruciais sobre o tráfego e as portas em uso.

Estrutura da Saída do netstat

Ao executar netstat, a saída é geralmente dividida em duas seções principais:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address       Foreign Address     State
tcp   0      2      210.34.6.89:telnet  210.34.6.96:2873    ESTABLISHED
tcp   296    0      210.34.6.89:1165    210.34.6.84:netbios-ssn ESTABLISHED

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type     State       I-Node Path
unix  1      [ ]   STREAM   CONNECTED   16178  @000000dd
unix  9      [ ]   DGRAM    5292         /dev/log

  • Conexões de Internet Ativas (Active Internet connections): Refere-se às conexões TCP e UDP.

  • Proto: Indica o protocolo (TCP, UDP).

  • Recv-Q: Quantidade de bytes na fila de recebimento para esta conexão (ainda não lidos pelo programa).

  • Send-Q: Quantidade de bytes na fila de envio para esta conexão (aguardando transmissão). Idealmente, ambos devem ser zero.

  • Local Address: Endereço IP local e número da porta.

  • Foreign Address: Endereço IP remoto e número da porta.

  • State: Estado atual da conexão (ex: ESTABLISHED, LISTEN, TIME_WAIT).

  • Sockets de Domínio UNIX Ativos (Active UNIX domain sockets): Sockets utilizados para comunicação entre processos no mesmo sistema.

  • Proto: Protocolo (geralmente unix).

  • RefCnt: Número de processos anexados a este socket.

  • Flags: Bandeiras de uso do socket.

  • Type: Tipo de socket (ex: STREAM, DGRAM).

  • State: Estado do socket.

  • I-Node: Número do inodo associado ao socket.

  • Path: Caminho do socket para outros processos.

Opções Comuns do Comando netstat

O netstat suporta diversas opções para filtrar e formatar sua saída:

  • -a ou --all: Exibe todas as conexões e sockets, incluindo aqueles em estado de "escuta" (LISTEN).
  • -t ou --tcp: Lista apenas as conexões TCP.
  • -u ou --udp: Lista apenas as conexões UDP.
  • -n ou --numeric: Exibe endereços IP e números de porta em formato numérico, sem tentar resolver nomes de host, nomes de serviço ou nomes de usuário. Isso pode acelerar a saída.
  • -l ou --listening: Mostra apenas os sockets que estão em estado de escuta.
  • -p ou --programs: Exibe o PID (ID do Processo) e o nome do programa associado a cada conexão. Requer privilégios de root para ver todos os processos.
  • -r ou --route: Apresenta a tabela de roteamento do kernel.
  • -e ou --extend: Mostra informações estendidas, como UID e inodo.
  • -s ou --statistics: Exibe estatísticas por protocolo (TCP, UDP, ICMP, IP).
  • -c ou --continuous: Atualiza as informações de rede continuamente, a cada segundo.

Exemplos Práticos de Uso do netstat

1. Listar Todas as Conexões e Portas

Para visualizar todas as conexões, incluindo as portas que estão aguardando conexões (LISTEN) e as já estabelecidas:

# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:30037         *:*                     LISTEN
udp        0      0 *:bootpc                *:*

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     6135     /tmp/.X11-unix/X0
unix  2      [ ACC ]     STREAM     LISTENING     5140     /var/run/acpid.socket

Apenas conexões TCP:

# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:30037         *:*                     LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp        0      0 *:smtp                  *:*                     LISTEN
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN

Apenas conexões UDP:

# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 *:bootpc                *:*
udp        0      0 *:49119                 *:*
udp        0      0 *:mdns                  *:*

2. Exibir Apenas Sockets em Estado de Escuta (LISTEN)

Para ver apenas as portas que estão escutando por novas conexões:

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN
udp        0      0 *:49119                 *:*

Sockets TCP em escuta:

# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:30037         *:*                     LISTEN
tcp        0      0 *:smtp                  *:*                     LISTEN
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN

Sockets UDP em escuta:

# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 *:49119                 *:*
udp        0      0 *:mdns                  *:*

Sockets de domínio UNIX em escuta:

# netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     6294     private/maildrop
unix  2      [ ACC ]     STREAM     LISTENING     6203     public/cleanup

3. Obter Estatísticas por Protocolo

Para ver um resumo estatístico para todos os protocolos:

# netstat -s
Ip:
    11150 total packets received
    1 with invalid addresses
    0 forwarded
    0 incoming packets discarded
    11149 incoming packets delivered
    11635 requests sent out
Icmp:
    0 ICMP messages received
    0 input ICMP message failed.
Tcp:
    582 active connections openings
    2 failed connection attempts
    25 connection resets received
Udp:
    1183 packets received
    4 packets to unknown port received.

Estatísticas específicas para TCP ou UDP:

# netstat -st
# netstat -su

4. Identificar Processos Associados (PID e Nome)

Útil para depuração, esta opção mostra qual processo está usando uma determinada conexão ou porta.

# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        1      0 ramesh-laptop.loc:47212 192.168.185.75:www        CLOSE_WAIT  2109/firefox
tcp        0      0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox

5. Formato Numérico (Evitar Resolução de Nomes)

Para uma saída mais rápida e sem resolução de nomes, use a opção -n:

# netstat -an

Você pode ser mais específico se quiser evitar a resolução apenas para portas, hosts ou usuários:

# netstat -a --numeric-ports
# netstat -a --numeric-hosts
# netstat -a --numeric-users

6. Monitoramento Contínuo

Para observar as mudanças nas conexões de rede em tempo real, use a opção -c:

# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
tcp        1      1 ramesh-laptop.loc:52564 101.11.169.230:www      CLOSING
^C

7. Exibir Famílias de Endereço Não Suportadas

A opção --verbose pode mostrar informações detalhadas e avisos sobre famílias de endereços não suportadas pelo sistema:

netstat --verbose

No final da saída, você poderá ver mensagens como:

netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.

8. Visualizar Tabela de Roteamento do Kernel

Para insepcionar a tabela de roteamento do sistema:

# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     *               255.255.255.0   U         0 0          0 eth2
link-local      *               255.255.0.0     U         0 0          0 eth2
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth2

Use -rn para exibir a tabela de roteamento com endereços numéricos, o que é mais rápido e útil para scripts.

9. Filtrar Conexões por Processo ou Porta

Combinando netstat com grep, é possível encontrar conexões específicas. Por exemplo, para encontrar conexões relacionadas ao SSH:

# netstat -ap | grep ssh
tcp        1      0 dev-db:ssh           101.174.100.22:39213        CLOSE_WAIT  -
tcp        1      0 dev-db:ssh           101.174.100.22:57643        CLOSE_WAIT  -

Para encontrar processos que estão utilizando a porta 80:

# netstat -an | grep ':80'

10. Listar Interfaces de Rede

Para obter um resumo das interfaces de rede e suas estatísticas básicas:

# 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         0      0      0 0             0      0      0      0 BMU
eth2       1500 0     26196      0      0 0         26883      6      0      0 BMRU
lo        16436 0         4      0      0 0             4      0      0      0 LRU

Para uma saída mais detalhada, similar ao ifconfig:

# netstat -ie
Kernel Interface table
eth0      Link encap:Ethernet  HWaddr 00:10:40:11:11:11
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Memory:f6ae0000-f6b00000

11. Análise de IP e Estados TCP

Para identificar os endereços IP que mais se conectam a uma porta específica (ex: porta 22 para SSH):

netstat -nat | grep "192.168.1.15:22" | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -20
18 221.136.168.36
3 154.74.45.242
2 78.173.31.236

Para listar e contar os diferentes estados das conexões TCP (ESTABLISHED, TIME_WAIT, LISTEN, etc.):

netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn
143 ESTABLISHED
36 LISTEN
113 TIME_WAIT
6 SYN_SENT

Também é possível usar técnicas similares para analisar logs, por exemplo, para encontrar os 10 IPs mais ativos em um access.log de um servidor web:

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

Tags: netstat Linux rede diagnóstico TCP/IP

Publicado em 6-12 23:08 por Thomas