elgio
(usa OpenSuSE)
Enviado em 23/12/2008 - 10:31h
Para que uma máquina Linux atue como roteador fazendo redirecionamento de portas, muitas configurações são necessárias, a saber:
I) ligar o roteamento: consiste em dizer para o Linux que ele é um roteador. Se isto não for feito, ele irá descartar qualquer pacote que não seja para o(s) seu(s) ip(s). Isto se faz de várias maneiras, dependendo da distribuição. Em algumas um flag em /etc/sysconfig. Contudo, alterando o flag direto no /proc funciona em qualquer distribuição.
II) permitir roteamento: atuar na tabela filter, lista FORWARD, permitindo que determinados pacotes sejam roteados. Algumas distribuições podem ter firewall ativado por padrão e normalmente esta lista está em DROP.
III) realizar reescrita de portas (forward de portas): atuando na tabela nat, listas PREROUTING ou POSTROUTING para reescrever pacotes que entram (PREROUTING) ou que saem (POSTROUTING) da máquina.
IV) realizar nat dinâmico, mais conhecido como "mascaramento de ip": também na tabela nat, no caso da lista POSTROUTING.
No seu caso mais específico, recuperando o cenário que postei em outro tópico do qual você concordou:
a) a placa que vem do modem chama-se eth0 (troque-a para a que você realmente tem)
b) o ip da máquina é 10.0.29.209 (que deve responder pela porta 8080)
c) a placa de rede que vai para a tua sub-rede interna, na qual encontra-se a máquina do item b, é a eth1 (novamente, troque-a para a verdadeira)
d) O ip do servidor/roteador não importam nas configurações
Neste caso, os seguintes comandos fazem tudo:
# Comentarios comecam com #
# I) ligando o roteamento
echo 1 > /proc/sys/net/ipv4/ip_forward
# II) permitindo roteamento de e para a rede da máquina
iptables -I FORWARD -i eth1 -j ACCEPT
iptables -I FORWARD -o eth1 -j ACCEPT
# III) Redirecionando a porta 8080 para a maquina
# considerando eth0 como a placa que VEM DO MODEM!
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to 10.0.29.209
# IV) Mascaramento de IP: nao eh necessario para que o item III funcione. Apenas se queres que todas as maquinas que estejam na tua sub-rede acessem a Internet atraves do teu roteador
# novamente, eth0 é a placa que VEM DO MODEM
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
As regras acima darão CONECTIVIDADE a tua máquina, o que pediste. Elas não priorizam a segurança, ou seja, não tem aqui nenhuma regra visando proteger a tua rede ou o teu micro, pois isto seria outro tópico. Sugiro que, como root, edite um arquivo qualquer (sugestão: /etc/firewall.sh) e colo as regras neste arquivo. Dê permissão de execução para ele:
chmod a+x /etc/firewall.sh
E o execute:
/etc/firewall.sh
Depois de testado, se quiser que sempre estas regras executem quando a máquina ligar, como usas o debian, podes fazer isto:
# ir para o /etc/rcN.d onde N é o teu runlevel
cd /etc/rc`runlevel|cut -d' ' -f2 `.d
# criar um link simbolico para que o script seja executado ao iniciar
ln -s /etc/firewall.sh S99firewall
(claro, isto fazendo na mão, mas o debian tem uma ferramenta que faz isto, não lembro o seu nome)
Sugiro que leias os tutoriais de iptables sobre a sua estrutura:
http://www.vivaolinux.com.br/artigo/Estrutura-do-Iptables/
http://www.vivaolinux.com.br/artigo/Estrutura-do-IPTables-2-a-tabela-nat/
[]'s