Configuração de Firewall com iptables no Linux

Firewalls atuam na camada de rede ou aplicação, inspecionando pacotes que entram ou saem de um host ou rede. Eles podem ser classificados em firewalls de rede, que filtram com base em endereços IP e portas, e firewalls de aplicação, que operam como gateways para protocolos específicos.

O sistema netfilter fornece cinco pontos de gancho no kernel: PREROUTING, INPUT, FORWARD, OUTPUT e POSTROUTING. Cada ponto é associado a uma ou mais tabelas de regras: filter, nat, mangle e raw.

A tabela filter é responsável por permitir ou bloquear pacotes, enquanto a nat gerencia a tradução de endereços de rede. A tabela mangle permite alterações nos pacotes, e a raw é usada para contornar o rastreamento de conexões.

As regras do iptables são compostas por condições de correspondência e uma ação associada. Condições genéricas incluem endereços de origem (-s), destino (-d), protocolo (-p), e interfaces de entrada (-i) ou saída (-o). Extensões explícitas podem ser usadas para critérios avançados, como intervalos de IP (-m iprange), portas múltiplas (-m multiport), ou estados de conexão (-m state).

A ação mais comum é ACCEPT para permitir pacotes, ou DROP para descartá-los silenciosamente. Outras ações incluem REJECT, que envia uma resposta de erro, e LOG, que registra pacotes em logs do sistema.

Para regras de NAT, utilize a ação SNAT para traduzir endereços de origem em pacotes que saem da rede interna, e DNAT para redirecionar tráfego para hosts internos a partir de endereços externos. O mascaramento (MASQUERADE) é uma variação de SNAT dinâmica para interfaces com IPs variáveis.

Exemplos práticos de configuração:

Bloquear tráfego SSH de uma rede específica:

iptables -t filter -A INPUT -s 10.10.0.0/16 -d 192.168.1.5 -p tcp --dport 2222 -j DROP

Permitir tráfego HTTP e HTTPS com extensões de porta múltipla:

iptables -I INPUT -d 192.168.1.5 -p tcp -m multiport --dports 8080,8443 -j ACCEPT
iptables -I OUTPUT -s 192.168.1.5 -p tcp -m multiport --sports 8080,8443 -j ACCEPT

Configurar NAT para compartilhar uma conexão com a Internet:

iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth1 -j MASQUERADE

Redirecionar portas para um servidor interno:

iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.20:8080

Para regras persistentes, salve a configuração usando iptables-save e restaure com iptables-restore. Ajuste parâmetros do kernel, como net.ipv4.ip_forward para habilitar roteamento, e net.nf_conntrack_max para limitar conexões rastreadas.

Utilize extensões como recent para mitigar ataques de negação de serviço, controlando a taxa de novas conexões. Por exemplo, limitar tentativas de SSH:

iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set --name SSH_CONN
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH_CONN -j DROP

Este comando registra novas conexões SSH e bloqueia endereços IP que excederem quatro tentativas em sessenta segundos.

Tags: iptables netfilter firewall-linux NAT seguranca-rede

Publicado em 7-11 21:35