Redes e Segurança

Rede no Linux: ip, ss, netstat e configuração de interfaces

• 6 min de leitura

Rede no Linux: ip, ss, netstat e configuração de interfaces
O gerenciamento de rede no Linux passou por uma evolução significativa nas últimas décadas. Antigamente, administradores utilizavam comandos como ifconfig e route para configurar interfaces e rotas. Essas ferramentas, embora funcionais, faziam parte do pacote net-tools, que foi gradualmente substituído pelo conjunto iproute2.

Rede no Linux: ip, ss, netstat e configuração de interfaces

1. Introdução ao Gerenciamento de Rede no Linux

O gerenciamento de rede no Linux passou por uma evolução significativa nas últimas décadas. Antigamente, administradores utilizavam comandos como ifconfig e route para configurar interfaces e rotas. Essas ferramentas, embora funcionais, faziam parte do pacote net-tools, que foi gradualmente substituído pelo conjunto iproute2.

O comando ip tornou-se o padrão moderno para configuração de rede, oferecendo uma sintaxe unificada e recursos mais avançados. Para diagnóstico de conexões, temos o ss (socket statistics) como substituto moderno do netstat, além de arquivos de configuração que variam conforme a distribuição.

É importante distinguir entre configurações temporárias (aplicadas via comandos e perdidas após reinicialização) e configurações permanentes (definidas em arquivos como /etc/network/interfaces ou via Netplan).

2. Comando ip: O Novo Padrão para Configuração de Rede

O comando ip é a ferramenta central do iproute2. Vamos explorar seus principais subcomandos.

Listar interfaces disponíveis:

ip link show

Ativar ou desativar uma interface:

sudo ip link set eth0 up
sudo ip link set eth0 down

Modificar o MTU (Maximum Transmission Unit):

sudo ip link set eth0 mtu 1500

Configuração de endereços IP com ip addr

Exibir endereços configurados:

ip addr show

Adicionar um endereço IP a uma interface:

sudo ip addr add 192.168.1.100/24 dev eth0

Remover um endereço IP:

sudo ip addr del 192.168.1.100/24 dev eth0

Roteamento com ip route

Visualizar a tabela de roteamento:

ip route show

Adicionar rota padrão (gateway):

sudo ip route add default via 192.168.1.1

Adicionar rota estática para uma rede específica:

sudo ip route add 10.0.0.0/8 via 192.168.1.254

3. Diagnóstico com ss e netstat

Comando ss (socket statistics)

O ss é mais rápido e eficiente que o netstat, especialmente em sistemas com muitas conexões. Opções principais:

  • -t: exibe conexões TCP
  • -u: exibe conexões UDP
  • -l: exibe apenas sockets em modo listen
  • -p: mostra o processo associado (requer sudo)
  • -n: exibe portas numericamente

Exemplos práticos:

# Todas as conexões TCP ativas
ss -t

# Portas em escuta (TCP e UDP)
ss -tln
ss -uln

# Portas em escuta com processo associado
sudo ss -tlnp

Comando netstat

Embora considerado legado, o netstat ainda está presente em muitos sistemas. Exemplos úteis:

# Conexões ativas com portas numéricas
netstat -an

# Portas TCP em escuta
netstat -tln

# Tabela de roteamento
netstat -rn

Comparação prática: ss vs netstat

O ss oferece melhor desempenho em sistemas com milhares de conexões, além de fornecer informações mais detalhadas sobre sockets. O netstat é mais intuitivo para iniciantes, mas o ss é recomendado para uso moderno.

4. Configuração de Interfaces de Rede

Estilo Debian/Ubuntu (/etc/network/interfaces)

Exemplo de configuração estática:

auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 8.8.4.4

Para DHCP:

auto eth0
iface eth0 inet dhcp

Estilo Red Hat/CentOS (/etc/sysconfig/network-scripts/ifcfg-*)

Arquivo ifcfg-eth0 para IP estático:

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4

Configuração via Netplan (Ubuntu moderno)

Arquivo YAML em /etc/netplan/01-netcfg.yaml:

network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

Aplicar configuração:

sudo netplan apply

NetworkManager (nmcli e nmtui)

Interface via terminal:

# Listar conexões
nmcli connection show

# Criar conexão estática
nmcli connection add type ethernet con-name "minha-rede" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1

# Modificar DNS
nmcli connection modify "minha-rede" ipv4.dns "8.8.8.8 8.8.4.4"

5. Resolução de Nomes e DNS

Arquivo /etc/hosts

Resolução local de nomes, sobrescreve DNS:

127.0.0.1   localhost
192.168.1.100 servidor.local

Arquivo /etc/resolv.conf

Configuração de servidores DNS:

nameserver 8.8.8.8
nameserver 8.8.4.4
search meudominio.local

systemd-resolved e resolvectl

Gerenciamento moderno de DNS:

# Verificar status
resolvectl status

# Configurar DNS para interface
sudo resolvectl dns eth0 8.8.8.8

# Verificar resolução de nome
resolvectl query google.com

6. Diagnóstico Avançado e Solução de Problemas

Verificação de conectividade

Teste básico com ping:

ping -c 4 8.8.8.8

Rastreamento de rota com traceroute:

traceroute google.com

Ferramenta combinada mtr (my traceroute):

mtr google.com

Análise de tráfego local

Captura de pacotes com tcpdump:

# Capturar pacotes na interface eth0
sudo tcpdump -i eth0

# Capturar tráfego HTTP na porta 80
sudo tcpdump -i eth0 port 80

Escaneamento de portas com nmap:

# Escanear portas abertas no localhost
nmap localhost

# Escanear portas específicas
nmap -p 22,80,443 192.168.1.100

Depuração de problemas comuns

Interface down: verifique com ip link show e ative com ip link set eth0 up.

Rota ausente: confirme com ip route show e adicione rota padrão se necessário.

DNS falhando: teste com ping 8.8.8.8 (IP direto) e depois com ping google.com. Se o IP funcionar mas o nome não, revise /etc/resolv.conf.

7. Boas Práticas e Automação

Script para configuração rápida

Crie um script config-rede.sh:

#!/bin/bash
INTERFACE="eth0"
IP="192.168.1.100"
MASCARA="24"
GATEWAY="192.168.1.1"

# Configuração temporária
sudo ip addr flush dev $INTERFACE
sudo ip addr add $IP/$MASCARA dev $INTERFACE
sudo ip link set $INTERFACE up
sudo ip route add default via $GATEWAY

echo "Rede configurada em $INTERFACE com IP $IP/$MASCARA"

Persistência com systemd-networkd

Arquivo /etc/systemd/network/10-eth0.network:

[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4

Ativar:

sudo systemctl enable --now systemd-networkd

Monitoramento básico

Script para log de conectividade:

#!/bin/bash
LOG="/var/log/rede-monitor.log"
echo "$(date) - Verificando conectividade..." >> $LOG
ping -c 2 8.8.8.8 > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "Conectividade OK" >> $LOG
else
    echo "FALHA na conectividade" >> $LOG
fi

# Registrar conexões ativas
echo "Conexões TCP ativas:" >> $LOG
ss -tln >> $LOG
echo "---" >> $LOG

Referências

💬 Comentários
Mais em Redes e Segurança