Firewall básico com NAT (Masquerade) usando iptables (modo inciante)

Cenário:

  • eth0 = internet
  • eth1 = rede interna

Objetivo: compartilhar internet da eth0 com a eth1.


1. Ativar roteamento no Linux

echo 1 > /proc/sys/net/ipv4/ip_forward

Persistente:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

2. Limpar regras antigas

iptables -F
iptables -t nat -F
iptables -X

3. Política padrão (segurança básica)

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

4. Liberar tráfego essencial

Loopback:

iptables -A INPUT -i lo -j ACCEPT

Conexões já estabelecidas:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

5. Permitir rede interna sair para internet

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

6. Ativar NAT (Masquerade)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

7. (Opcional) Liberar SSH no firewall

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

8. Persistir via rc.local

Ao invés de usar pacote, você pode jogar tudo no /etc/rc.local pra subir no boot.

Exemplo:

#!/bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -t nat -F
iptables -X

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

exit 0

Dê permissão:

chmod +x /etc/rc.local

Obs: se teu sistema não tiver rc.local habilitado por padrão (comum em distros mais novas), tenho outro post explicando como ativar ele corretamente no systemd.


Da-lhe. Básico, direto e funcional pro dia a dia, o resto vc pode incrementar.

Rolar para cima