Intermediário Fundamental Progresso 0%

Redes no Linux

Interfaces, IP, DNS, portas e firewall, diagnóstico de rede pela linha de comando.

01. Hardware

Interfaces de rede no Linux

Explicação

Uma interface de rede é a representação no kernel de uma conexão física ou virtual. O comando principal para inspecioná-las é ip addr show (ou ip a).

  • lo: loopback, endereço 127.0.0.1. Interface virtual para comunicação interna do sistema.
  • eth0 / enp3s0: Ethernet. A nomenclatura moderna (enp3s0) é determinística — enethernet, p3PCI bus 3, s0slot 0. Não muda entre reboots.
  • wlan0 / wlp2s0: Wi-Fi. Mesma lógica de nomenclatura.
  • docker0: bridge virtual criada pelo Docker para comunicação entre containers e host.
Exemplo Concreto
ip addr show                       # lista todas as interfaces
ip addr show eth0                  # só a interface eth0
ip link set eth0 up                # ativa interface
ip link set eth0 down              # desativa interface

# Gerenciadores de configuração de rede:
# /etc/network/interfaces          — Debian puro
# NetworkManager                   — Ubuntu Desktop (nmcli, nmtui)
# /etc/netplan/                    — Ubuntu Server moderno (YAML → networkd/NM)
ℹ️ Saiba mais

A nomenclatura antiga (eth0, wlan0) dependia da ordem de detecção do kernel — podia mudar entre boots. A nomenclatura moderna (enp3s0, wlp2s0) é baseada em topologia de hardware e é previsível. No Ubuntu Server, use nmcli device status para ver o estado de todas as interfaces gerenciadas pelo NetworkManager.

02. Camada 3

Endereçamento IP e roteamento

Explicação

O comando ip (do pacote iproute2) é a ferramenta moderna para gerenciar endereços, rotas e interfaces. Substituiu ifconfig e route, que estão depreciados.

Exemplo Concreto
ip addr show                       # endereços de todas as interfaces
ip addr show eth0                  # só eth0
ip route show                      # tabela de roteamento completa
ip route get 8.8.8.8               # qual rota seria usada para este IP

# Output típico de ip addr:
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
#     inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
#     inet6 fe80::1/64 scope link

# Rota padrão (gateway)
ip route show default
# default via 192.168.1.1 dev eth0 proto dhcp
Analogia: ip route get

Pense em ip route get 8.8.8.8 como perguntar ao GPS "se eu fosse para este endereço, por qual estrada eu sairia?". O kernel responde qual interface e qual gateway ele usaria — sem enviar nenhum pacote. Perfeito para diagnosticar problemas de roteamento sem alterar nada.

Erros comuns
  • Ainda usar ifconfig: depreciado e ausente em instalações mínimas. Use ip addr.
  • Adicionar rota sem gateway correto: ip route add 10.0.0.0/8 via 192.168.1.1 — verifique que o gateway está acessível na interface antes.
  • Alterações com ip são voláteis: sobrevivem apenas até o próximo reboot. Para permanência, edite a configuração do gerenciador de rede (Netplan, NetworkManager).
03. Resolução

DNS no Linux: /etc/resolv.conf e /etc/hosts

Explicação

O Linux tem dois mecanismos principais de resolução de nomes:

  • /etc/hosts: resolução local estática. Mapeamentos hostname→IP verificados antes do DNS. Prioridade configurável em /etc/nsswitch.conf (entrada hosts: files dns).
  • /etc/resolv.conf: lista os servidores DNS a consultar quando /etc/hosts não tem a resposta.

Em sistemas modernos com systemd-resolved (Ubuntu 18.04+), o /etc/resolv.conf pode ser um symlink gerenciado automaticamente.

Exemplo Concreto
cat /etc/resolv.conf               # servidores DNS configurados
# nameserver 8.8.8.8
# nameserver 1.1.1.1

cat /etc/hosts                     # resolução local (antes do DNS)
# 127.0.0.1   localhost
# 127.0.1.1   minhaMaquina
# 192.168.1.50 servidor-interno

nslookup google.com                # consulta DNS simples
dig google.com                     # consulta DNS detalhada
dig +short google.com              # só o IP
dig MX gmail.com                   # registros MX (email)
dig NS google.com                  # servidores de nome
host google.com                    # consulta simples e legível

resolvectl status                  # systemd-resolved: status DNS (Ubuntu moderno)
ℹ️ Saiba mais

Uma técnica útil: adicionar entradas em /etc/hosts para apontar domínios de desenvolvimento para 127.0.0.1 durante o desenvolvimento local. Por exemplo: 127.0.0.1 app.local. Isso funciona porque /etc/hosts tem prioridade sobre DNS por padrão. Use dig +short dominio para verificar rapidamente qual IP um domínio resolve.

04. Camada 4

Portas e sockets: quem está ouvindo

Explicação

Para saber quais serviços estão aceitando conexões em quais portas, use ss (socket statistics) — o substituto moderno do depreciado netstat.

Exemplo Concreto
ss -tuln                           # TCP/UDP em listen, sem resolver nomes
# -t TCP, -u UDP, -l listening, -n numérico (não resolve hostnames)
ss -tulnp                          # inclui o processo que está ouvindo (-p)

netstat -tuln                      # equivalente antigo (depreciado, mas comum)

lsof -i :80                        # qual processo usa a porta 80
lsof -i tcp:443                    # porta 443 TCP

# Output típico de ss -tulnp:
# Netid  State  Recv-Q  Send-Q  Local Address:Port
# tcp    LISTEN 0       128     0.0.0.0:80          users:(("nginx",pid=1234,...))
# tcp    LISTEN 0       128     0.0.0.0:443         users:(("nginx",pid=1234,...))
# tcp    LISTEN 0       128     127.0.0.1:5432      users:(("postgres",pid=789,...))
Analogia: 0.0.0.0 vs 127.0.0.1

Uma porta ouvindo em 0.0.0.0:80 é como uma loja com porta para a rua — aceita conexões de qualquer IP que chegue até a máquina. Uma porta em 127.0.0.1:5432 é uma sala interna sem janela para fora — só acessível de dentro da própria máquina. PostgreSQL ouvindo só no loopback é uma decisão de segurança correta para bancos que não devem ser expostos.

Erros comuns
  • Usar netstat sem instalar net-tools: em instalações mínimas, netstat não está presente. Use ss — vem com iproute2, sempre disponível.
  • Não usar -p: sem -p, você vê a porta mas não sabe qual processo. Adicione sempre para diagnóstico.
  • Confundir LISTEN com ESTABLISHED: LISTEN = esperando conexões. ESTABLISHED = conexão ativa. ss -tunp (sem -l) mostra conexões estabelecidas.
05. Segurança

Firewall básico com ufw e iptables

Explicação

O Linux tem um firewall embutido no kernel (Netfilter). As ferramentas de userspace para configurá-lo evoluíram:

  • iptables: interface clássica, muito poderosa, sintaxe complexa.
  • nftables: successor moderno do iptables, mais eficiente.
  • ufw (Uncomplicated Firewall): abstração amigável sobre iptables/nftables, padrão no Ubuntu. Ideal para uso geral.
  • firewalld: padrão no Fedora/RHEL, suporta zonas de rede.
Exemplo Concreto
# UFW (Uncomplicated Firewall) — padrão Ubuntu
sudo ufw enable
sudo ufw status verbose
sudo ufw allow 22/tcp              # SSH
sudo ufw allow 80/tcp              # HTTP
sudo ufw allow 443/tcp             # HTTPS
sudo ufw allow from 192.168.1.0/24 # toda uma rede local
sudo ufw deny 8080                 # bloqueia porta 8080
sudo ufw delete allow 80/tcp       # remove regra
sudo ufw reset                     # reseta todas as regras

# iptables (mais poderoso, mas complexo)
sudo iptables -L -n -v             # lista regras atuais
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT   # aceita HTTP
sudo iptables -A INPUT -j DROP     # nega todo o resto
Erros comuns
  • Habilitar ufw sem liberar SSH: sudo ufw enable antes de ufw allow 22/tcp pode te bloquear do servidor. Sempre libere SSH primeiro.
  • Regras iptables sem persistência: iptables não persiste entre reboots sem iptables-persistent ou equivalente. ufw persiste automaticamente.
  • Bloquear INPUT sem regra ESTABLISHED: ao criar regras restritivas com iptables, adicione -m state --state ESTABLISHED,RELATED -j ACCEPT para não quebrar conexões existentes.
06. Diagnóstico

Ferramentas de diagnóstico e monitoramento

Explicação

Um conjunto de ferramentas essenciais para diagnosticar problemas de rede, testar conectividade, transferir arquivos e criar túneis seguros.

Exemplo Concreto
ping -c 4 google.com               # testa conectividade (ICMP)
ping6 ::1                          # ping IPv6

traceroute google.com              # rastreia rota hop a hop
mtr google.com                     # ping + traceroute contínuo (melhor que ambos)

curl -I https://example.com        # cabeçalhos HTTP (HEAD request)
curl -v https://example.com        # verbose — mostra handshake TLS, headers
wget https://example.com/arquivo   # baixa arquivo

ssh usuario@servidor               # login remoto
ssh -p 2222 usuario@servidor       # porta não-padrão
ssh -L 8080:localhost:80 servidor  # túnel SSH: local:8080 → servidor:80

scp arquivo.txt usuario@servidor:/home/usuario/   # copia via SSH
rsync -avz pasta/ usuario@servidor:/backup/       # sincroniza (delta, eficiente)

nmap -sS 192.168.1.1               # scan TCP SYN (requer root)
nmap -p 80,443 exemplo.com         # verifica portas específicas
Analogia: Túnel SSH

Um túnel SSH (ssh -L) é como um cano secreto entre sua máquina e o servidor. Tudo que entra em localhost:8080 sai na porta 80 do servidor, completamente criptografado. Muito usado para acessar PostgreSQL, Redis ou painéis admin que ouvem só no loopback do servidor — sem precisar expor essas portas para a internet.

O que você precisa guardar
  • ip a / ip route: interfaces e rotas
  • ss -tulnp: portas abertas e processos responsáveis
  • dig +short dominio: resolução DNS rápida
  • ufw allow/deny porta: firewall simplificado
  • ssh -L: túnel seguro para serviços internos
  • mtr: melhor diagnóstico de rota (substitui ping + traceroute)

🃏 Flashcards

📝 Quiz: Módulo 08