Linux: roteando o tráfego entre duas redes com iptables

4

Ok, esta é uma estranha configuração de rede, mas estou tentando obter as internets de uma rede para outra.

headless server ((((( wireless router (other network)-----internet
       |
       |
router (my network) ))))) wireless computers
   |   |   |
wired computers

Então, basicamente, eu tenho uma caixa Linux sem cabeçalho que eu quero configurar como um roteador entre minha rede (eth0) e a outra rede (wlan0). Eu deveria ser capaz de configurar todo o resto, mas não tenho muita experiência com o iptables.

Eu fiz a mesma coisa antes entre duas redes com fio, mas nunca escrevi as regras.

    
por Eric Coutu 09.05.2011 / 04:57

1 resposta

8

Na verdade, você não precisa realmente do iptables para o roteamento básico - o iptables ajuda você com a filtragem e o NAT (e outras coisas também).

Você pode ativar o encaminhamento de pacotes com:

sysctl -w net.ipv4.conf.all.forwarding=1

Adicione net.ipv4.conf.all.forwarding=1 ao /etc/sysctl.conf para fazer a configuração ficar firme.

Caso você esteja sendo filtrado no servidor (você pode verificar isso com iptables -nvL - se a cadeia FORWARD tiver a política ACCEPT que você não está filtrando), é necessário adicionar regras para permitir pacotes a serem encaminhados entre redes:

iptables -I FORWARD -i eth0 -o wlan0 -s wi.red.net.work/24 -d wire.less.net.work/24 -j ACCEPT
iptables -I FORWARD -i wlan0 -o eth0 -s wire.less.net.work/24 -d wi.red.net.work/24 -j ACCEPT

Se você não estiver filtrando, mas quiser (você deve também, a propósito - veja o comentário do @Red Tux, é uma boa prática filtrar por padrão e permitir apenas o mínimo) adicionar as regras anteriores mais esta:

iptables -P FORWARD DROP

Isso altera a política para que todos os pacotes que não correspondam a nenhuma regra sejam descartados.

Além disso, se você está indo para a segurança real, você provavelmente deve filtrar a cadeia INPUT também. Essa cadeia processa as solicitações que chegam ao seu roteador com um IP de destino que corresponde a um dos seus próprios - isto é, conexões de entrada (por exemplo, SSH). Um padrão sensato seria:

iptables -I INPUT -i eth0 -s allowed.admin.ip.here -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT
iptables -P INPUT DROP # make sure you've put your IP on the first rule before running this 
                       # or you'll lock you out of the server

Isso permite SSH apenas de um host projetado na rede com fio (observe o aviso), permite todo o tráfego na interface de loopback (exigido por alguns softwares) e descarta todo o restante.

Como você pode ver, você pode permitir apenas algumas portas usando -p tcp|udp --dport N . Você também deve considerar fazer isso na cadeia FORWARD para aumentar a segurança.

    
por 09.05.2011 / 05:29