Iptables - Encaminhamento + Mascaramento

3

Eu sou novo no iptables e tentando configurar meu servidor linux como um gateway para meus outros computadores. Então, naturalmente, eu estou jogando com o iptables e precisei de ajuda

Meu servidor tem 2 placas NIC, eth0 (WAN) e eth1 (LAN)

meus objetivos são:

  1. Para eu ter acesso ssh ao servidor linux
  2. Encaminhe todo o tráfego http (80) e https (443) que entra em eth1 (LAN) para eth0 e faça o masquerading ip
  3. Todo o outro tráfego que chega à eth1 (principalmente solicitações DHCP de clientes da LAN) não deve ser encaminhado para a eth0
  4. Não permitir que os clientes da LAN executem qualquer serviço, por exemplo. só tem acesso à web (tcp: 80/443)

As regras que tenho até agora são:

#To clear all IPTables Rules
iptables --flush            
iptables --table nat --flush
iptables --delete-chain     
iptables --table nat --delete-chain

#allow me to ssh into the server + access the web server on it
#ssh
iptables --table FILTER -A INPUT -p tcp --dport 22 -j ACCEPT
#webserver
iptables --table FILTER -A INPUT -p tcp --dport 80 -j ACCEPT
#drop everything else
iptables --table FILTER -A INPUT -j DROP

#enable IP Masquerading on eth0
iptables --table NAT -A POSTROUTING --out-interface eth0 -j MASQUERADE

#accept incoming traffic from eth1
#http
iptables --table FILTER -A INPUT -p tcp -dport 80 --in-interface eth1 -j ACCEPT
#https
iptables --table FILTER -A INPUT -p tcp -dport 443 --in-interface eth1 -j ACCEPT
#drop everything else
iptables --table FILTER -A INPUT --in-interface eth1 -j DROP

Então, neste ponto, eu tenho o tráfego http / https vindo da eth1 (que tinha permissão para entrar no iptables) e minha linha eth0 pronta para o mascaramento.

Minha pergunta é Como encaminhar esse tráfego de eth1 para eth0 ?

Qualquer ajuda seria muito apreciada,
ankit

    
por ankit 09.02.2011 / 18:59

1 resposta

3
Primeiramente, algumas correções: Os nomes das tabelas diferenciam maiúsculas de minúsculas, assim como as opções de linha de comando: você precisa de --table filter -A INPUT . Além disso, o dport para https é 443 (provavelmente um erro de digitação, mas vale a pena apontar)

O que você precisa fazer é descartar as regras INPUT na parte inferior do seu script. A cadeia INPUT é usada apenas por pacotes que estão vinculados a um processo local no próprio servidor. Assim, essas regras permitirão que o cliente na LAN se conecte diretamente aos serviços que atendem na porta 80 + 443 no servidor. Isso está correto para suas regras iniciais de SSH e HTTP, mas não para o encaminhamento de pacotes. Use a cadeia FORWARD em vez disso:

#http
iptables --table filter -A FORWARD -p tcp -dport 80 --in-interface eth1 -j ACCEPT
#https
iptables --table filter -A FORWARD -p tcp -dport 443 --in-interface eth1 -j ACCEPT

Além disso, você precisará ativar o encaminhamento de IP no kernel. Adicione isto ao topo do script:

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

Uma recomendação adicional: em vez de regras que descartam pacotes no final das cadeias, considere o uso das configurações de política:

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

Para referência futura, há um bom diagrama de fluxo de pacotes através do netfilter, aqui: link

    
por 09.02.2011 / 19:25