Roteamento: Maquina da rede interna sendo acessada pela internet.
Caras,
Estou trocando um servidor IPTABLES+DHCP. A máquina velha (em funcionamento hoje) está com FC2 e os serviços/configs da sua época.
A máquina nova que estou trocando está com FC8 toda atualizadinha e com os 2 serviços instalados.
A topologia segue:
http://img182.imageshack.us/img182/5...uvidxx4.th.png
DETALHE: O SERVIÇO DE DHCP NA MÁQUINA NOVA ESTÁ PARADO PARA NÃO DAR CAGADA COM A MÁQUINA VELHA!!!
Cara, ainda to quebrando um pouco a cabeça com esse papo de iptables, roteamento e tals. Eu sou novato no quesito servidores e preciso muito da ajuda dos amigos para aproveitar a oportunidade que estão me dando aqui no trampo.
Bem, vamos aos detalhes:
MAQUINA IPTABLES VELHA:
No script /etc/rc.d/init.d/iptables foram adicionadas algumas linhas que fazem:
- o compartilhamento da internet na eth1 para a eth0;
- o roteamento de saída da eth0 (porta 80 apenas) para o servidor com squid;
- o roteamento de algumas máquinas na rede interna, para serem acessadas pela internet.
Já no arquivo de configuração em /etc/sysconfig/iptables:
- tabela *filter com a liberação de algumas portas, etc.
Está tudo funfando de boa.
Lendo em muitos lugares, descobri que eu poderia colocar a tabela *nat no mesmo aquivo em /etc/sysconfig/iptables, ao invés de mantê-lo no script original do iptables em /etc/rc.d/init.d/iptables. Fiz isso na máquina de IPTABLES NOVA para ficar mais elegante, script de um lado e arquivo de configuração no outro. Reparei também, que nessa versão do fedora (FC8), os flags de /proc/sys/net/ipv4/ip_tables e /etc/sysctl.conf (net.ipv4.conf.default.rp_filter) já estavam, por padrão, inicializados com 1.
O que acontece, toda vez que reinicio esse servidor novo, o script de iniciazliação do iptables lê o arquivo de configuração /etc/sysconfig/iptables e beleza, tudo no lugar.
Quando passei a fazer o MASQUERADE na máquina nova, também funfou de boa apenas alterando o arquivo de configuração. Depois, acrescentei a regra para que, toda a conexão de saída pela porta 80 da rede interna, fosse desviada para o servidor que tem squid instalado. Beleza, funfou de boa!! Por último fui testar o acesso à uma máquina da rede interna, pela internet. Fiz o seguinte: Nessa máquina nova criei 2 alias (210.200.200.223 e 210.200.200.224) na eth1 com IPs válidos e que não estão sendo utilizados pela empresa, claro. Beleza, assim, essa máquina nova passou a responder os pings por esses IPs, da mesma maneira que está a máquina velha. Até aím, sem novidades, tudo OK.
Testei então adicionar a regra PREROUTING para quando chegasse requisições na porta 80 para o IP externo 210.200.200.223 (configurado como alias da eth1 da maquina nova) fosse roteado para a minha máquina, na rede interna, com o IP 192.168.1.25. Maravilha, funcionou de prima. Testei tanto de outras máquinas da rede interna, como de outros servidores que estão antes do router, além de pedir que colegas da maztriz que fica em outro prédio looonge daqui também acessassem a minha máquina com esse IP novo e beleza. Funcionou perfeitamente.
Agora, a cagada: Quando altero o arquivo de configuração e faço com que o roteamento não vá mais para a minha máquina (192.168.1.15) e sim para a máquina correta (192.168.1.16) que já está sendo roteada pelo servidor antigo, apenas esse roteamento não funciona nem a pau. Vou fazer um teste hoje à noite desligando o servidor de ITPABLES velho, deixando apenas esse novo que estou terminando para ver no que dá.
segue o arquivo de configuração do IPTABLES:
# Generated by iptables-save v1.4.1.1 on Mon Sep 8 17:44:01 2008
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#Olha o que descobri!! O tal do RH-Firewall-1-INPUT é apenas uma TAG!!
# Vou utilizar a seguinte TAG que pelo menos não quebra a linha
# na hora de consultar o arquivo no shell. Apenas trocando o nome
# RH-Firewall-1-INPUT.... para TESTE-FW
:TESTE-FW - [0:0]
# Redirecionando todos os INPUTs e FORWARDs para a regra personalizada.
-A INPUT -j TESTE-FW
-A FORWARD -j TESTE-FW
# Filtrando os INPUTs E FORWARDs, igualmente.
#liberadno INPUT e FORWARD para a interface 'lo'
-A TESTE-FW -i lo -j ACCEPT
#liberando INPUT e FORWARD para a interface 'eth0' (rede interna)
-A TESTE-FW -i eth0 -j ACCEPT
#liberando INPUT e FORWARD para a rede '192.168.1.0'
-A TESTE-FW -s 192.168.1.0/24 -j ACCEPT
-A TESTE-FW -d 192.168.1.0/24 -j ACCEPT
#liberando INPUT e FORWARD para o protocolo ICMP para qualquer interface
-A TESTE-FW -p icmp --icmp-type any -j ACCEPT
#liberando INPUT e FORWARD para conexoes com o estado abaixo
-A TESTE-FW -m state --state RELATED,ESTABLISHED -j ACCEPT
#negando INPUT e FORWARD para o protocolo ICMP no estado abaixo
-A TESTE-FW -j REJECT --reject-with icmp-host-prohibited
#liberando portas
-A TESTE-FW -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A TESTE-FW -p tcp --dport 80 -j ACCEPT
COMMIT
*nat
# Regra padrão para NAT
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# Compartilhando a rede da 'eth1'
-A POSTROUTING -o eth1 -j SNAT --to 210.200.200.218
# Desviando o fluxo da eth0-porta 80 para o servidor squid
-A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 210.200.200.212:3128
#### O PROBLEMA ESTÁ AGORA! QUANDO A ROTA É PARA MINHA MÁQUINA (192.168.1.25)
#### FUNFA DE BOA, DE QUALQUER LUGAR. MAS QUANDO ALTERO PARA O IP 192.168.1.16
#### QUE EJÁ ESTÁ SENDO ROTEADO PELO SERVIDOR VELHO, ESSE ROTEAMENTO NÃO
#### FUNCIONA MAIS. APENAS O QUE JÁ ESTÁ NA MÁQUINA VELHA FICA FUNCIONANDO...
# DNAT para o servidor da rede interna na porta 80 apenas
-A PREROUTING -p tcp -m tcp --dport 80 -d 210.200.200.223 -j DNAT --to 192.168.1.16:80
COMMIT
Antemão, além de deixar uma mostra interessante de topologia, distribuição de serviços, roteamento e regras, gostaria de saber o seguinte:
1- por que tá dando essa cagada? Será por causa de ter duas máquinas fazendo o mesmo serviço, apesar de trabalharem com IPs de origem diferentes e apenas os IPs de destino iguais???
2- por que é raríssimo encontrar na internet tutoriais para configuração de IPTABLES que trabalham sempre em cima de scripts e não do próprio arquivo de configuração localizado em /etc/sysconfig/iptables?
Colegas, se o texto que escrevi ficou confuso, por favor, indaguem!! Mas to quebrando a cabeça para esclarecer esses assuntos.
Abaixo segue o arquivo de configuração do iptables da máquina nova!
No aguardo!!
[]s
Daniel
[Resolvido]Roteamento: Maquina da rede interna sendo acessada pela internet.
Caras, loucura loucura. Não sei se é a implementação do iptables, mas o treco resvolveu funcionar apenas da seguinte forma:
Se vocês leram todas as mensagens notarem que fiz um comentário a respeito da tag RH-Firewall-1-INPUT, renomeando a mesma para TESTE-FW. Essa tag apontava para execuções FORWARD e INPUT simultanamente, ou seja, para economizar dedo, ao invés de utilizar INPUT e FORWARD para uma mesma situação, estava sendo utilizado essa TAG escrota:
-A INPUT -j RH-Firewall-1-INPUT
-a FORWARD -j RH-Firewall-1-INPUT
Assim, ao invés de utilizar duas linhas para cada treco que fosse necessário fazer (uma linha de INPUT e outra linha de FORWARD), bastava utilizar a linha RH-Firewall-1-INPUT e a regra, que valia para as duas condições...
Bem, pelo menos no fedora 2 funcionava sem problemas. No fedora 8 não funcionou nem a pau. Fiquei horas comparando detalhes nos arquivos /etc/sysconfig/iptables das máquinas e, como estavam idênticas, alguma coisa estava errada ainda.
Moral: Desfiz a utilização das tags e passei a trabalhar com o método correto:
*filter
:INPUT
todos os inputs ficaram aqui.
:FORWARD
todos os forwards aqui.
:OUTPUT
todos os outputs aqui.
*nat
:PREROUTING
todos os preroutings aqui.
:POSTROUTING
todos os posroutings aqui.
:OUTPUT
todos os outputs aqui.
Ainda não sei pra que me serveria a tabela mangle.
Bem, feito isso, bateu pegou. Tudo funfou de PRIMA, EXCETO, ADIVINHEM QUEM????
FTP.....
Embora estivesse com a porta liberada... nada de FTP funfar... Mas, felizmente, já está NORMAL. Embora, também, muitos sites, artigos, tutoriais, etc dessem soluções mirabólicas, procurei saber como o servidor antigo estava funfando, fiz igual, e minha configuração para acesso FTP também ficou muito mais elegante que qualquer outro pos que encontrei... MAS, essa informação vou colocar em outro tópico!!!
MAGNUN LENO, muito obrigado pelas dicas de como proceder para encontrar o erro. Mesmo utilizando metade da dica, foi o suficiente para raciocinar no funcionamento da coisa! Esta ficará guardada para apreciação das ferramentas e métodos mencionados, obrigado mesmo!!!
Abraços a todos,