Re: [GTER] Roteamento avançado: identificação de pacotes
Rubens Kuhl Jr.
rubensk at gmail.com
Thu May 18 03:30:51 -03 2006
> Rubens e "ouvintes",
>
> Certo... já que você está disposto mesmo a colaborar, o que agradeço
> imensamente, vou detalhar minha infra-estrutura para ver se facilita
> seu apoio. Vamos lá.
Facilita e possibilita... eu vou deixar apenas os trechos da resposta
que foram relevantes para minhas recomendações.
> Meu Firewall (vou me referir a ele como NS2) possui 4 interfaces de
> rede, sendo elas conforme segue:
Eu vi uma quinta numa rota, imagino que seja a interface que você vá
usar para separar o trafégo entre ebt e brt depois. Só cuidado para
não deixar esta rota inadvertidamente:
> [root at ns2 fwconf]# ip route show table main
> 200.199.217.112/29 dev eth4 proto kernel scope link src 200.199.217.115
> *** Estes firewalls que estão conectados a estas interfaces atendem
> nossa rede Administrativa e Rede Acadêmica. Eles estão tratando o
> acesso na camada de Forward e cada um deles gerencia diversas redes
> diferentes. Por este motivo tive que alimentar a tabela de roteamento
> do servidor de balanceamento com rotas estáticas para as redes que
> estão atras dos dois firewalls. Como poderá ser visto lá na frente.
Mas como eles usam só DNAT e só há IPs privados, vou assumir que nada
atrás deles recebe conexão externa que não a DMZ.
> --------------------------- RULES ------------------------
> 0: from all lookup local
> 14: from all lookup principal
> 16: from 200.199.217.66 lookup brt
> 17: from 200.241.189.130 lookup ebt
> 30: from all fwmark 0x3 lookup load
> 32766: from all lookup main
> 32767: from all lookup default
Os lookups de IPs do firewall nas tabelas brt e ebt estão corretos,
mas faltaram dois que parece que você pressentiu que precisavam, que
seriam para obrigar a seguir a tabela ebt ou a tabela brt.
Assim, eu colocaria além dessas:
ip rule add fwmark 1 lookup ebt
ip rule add fwmark 2 lookup brt
>
> ########### FIREWALL ###########33
>
> Vou colocar a regra apenas para uma das redes atras dos firewalls,
> pois elas são identicas para as demais redes.
>
> => Tabela mangle
>
> Chain PREROUTING (policy ACCEPT)
> target prot opt source destination
> MARK all -- 192.168.1.37 0.0.0.0/0 MARK set 0x3
> MARK all -- 0.0.0.0/0 200.241.189.160/27 MARK set 0x1
> MARK all -- 0.0.0.0/0 200.199.217.80/28 MARK set 0x2
> MARK all -- 0.0.0.0/0 0.0.0.0/0 MARK set 0x3
O problema aqui é que a origem dos pacotes na DMZ é que deveria ser
usada para escolher o link de saída; se as conexões vieram pelo link
EBT, elas tem que voltar por ele.
Então onde havia
iptables -A PREROUTING -t mangle -i eth1 -d 200.241.189.160/27 -j MARK
--set-mark 1
iptables -A PREROUTING -t mangle -i eth1 -d 200.199.217.80/28 -j MARK
--set-mark 2
iptables -A PREROUTING -t mangle -i eth1 -j MARK --set-mark 3
(eu acho, estou chutando os -i baseado em seus e-mails anteriores)
Deveria haver
iptables -A PREROUTING -t mangle -i eth1 -s 200.241.189.160/27 -j MARK
--set-mark 1
iptables -A PREROUTING -t mangle -i eth1 -s 200.199.217.80/28 -j MARK
--set-mark 2
iptables -A PREROUTING -t mangle -i eth1 -j MARK --set-mark 3
Repare que é o IP origem e não o destino que está sendo testado.
Além disso, as conexões de saída geradas pela DMZ serão balanceadas,
mas as de entrada sairão por onde elas foram inicialmente
estabelecidas.
Outro detalhe é que apenas as conexões da DMZ serão balanceadas, as
outras vão seguir a rota default, que é a Embratel. Será que você não
imagina replicar o balanceamento para as redes dos firewalls também,
adicionando as seguintes regras ?
iptables -A PREROUTING -t mangle -i eth2 -j MARK --set-mark 3
iptables -A PREROUTING -t mangle -i eth3 -j MARK --set-mark 3
E eu vou especular sobre porque você não fez isso: porque não há todas
as rotas locais na tabela load. Eu recomendo você replicar todas as
rotas internas em todas as tabelas(ebt, brt, load), variando entre
elas apenas a rota default. Assim pode-se aplicar as políticas de
roteamento para Internet sem que isso afeta a conectividade interna.
Eu já perdi muito tempo de diagnóstico por tentar colocar numa tabela
apenas o que eu acreditava estritamente necessário para rotear no
cenário que imaginei... a experiência me mostrou que eu deveria fazer
limitações apenas no netfilter/iptables, deixando o roteamento o mais
abrangente possível, tentando levar o tráfego para onde os objetivos
do projeto quisessem mas sempre entregando o tráfego em algum lugar.
> MASQUERADE tcp -- 10.2.1.2 0.0.0.0/0 tcp dpt:80
> MASQUERADE tcp -- 10.2.1.2 0.0.0.0/0 tcp dpt:53
> MASQUERADE udp -- 10.2.1.2 0.0.0.0/0 udp dpt:53
Como eu já disse em outro e-mail, livre-se do MASQUERADE e dos
problemas de funcionalidade e performance que costumam vir com ele em
situações de dual-homing.
Você vai ter que dividir a regra de MASQUERADE em duas regras de SNAT,
uma para cada interface de saída, e o IP estará fixo na regra com
--to-ip, o src da tabela de roteamento não será utilizado.
> Chain net-dmz (2 references)
> target prot opt source destination
> ACCEPT tcp -- 0.0.0.0/0 200.241.189.170 tcp dpt:80
>
> Chain dmz-net (2 references)
> target prot opt source destination
> ACCEPT tcp -- 200.241.189.170 0.0.0.0/0 tcp
> spt:80 flags:!0x16/0x02
> -----------------------------------------
Se você quer ter balanceamento das conexões iniciadas fora, vai ter
que levar o aliasing até o servidor HTTP da DMZ. Para isso, além de
permitir o tráfego HTTP para 200.241.189.170, vai ter que permitir
para (por exemplo) 200.199.217.90. E configurar no serivdor web um
alias com esse IP, configurar o web-server para atender também por
esse IP.
Com os dois IPs atendendo, é preciso também configurar isso no DNS:
www IN A 200.241.189.170
www IN A 200.199.217.90
> Veja que o firewall simplesmente autoriza tudo. Acontece que toda
> regra de segurança é realizada pelos outros 2 firewalls antes deste.
> Com exceção é claro da relacão Internet<-> dmz.
Curiosidade: HTTP é o único serviço disponibilizado pela DMZ ?
Serviços de uma única conexão TCP(SMTP, por exemplo) seguem o mesmo
padrão de HTTP acima, mas coisas mais complexas como FTP, PPTP e IPSEC
tem uma complexidade adicional com dual-homing...
> Neste cenário enfrentamos o problema que coloquei, de sair pelo router
> da embratel com IP da Brasil Telecom. Vou copiar aqui o resultado do
> Tarcert para um site hospedado na Brasil Telecom. Estou dando este
> tracert a partir do firewall anterior ao do balanceamento.
O estranho é que pela sua configuração (apesar de que na table mangle
não tinha o verbose para ver se a regra estava mesmo restringindo o
--set-mark 3 à interface eth1 da DMZ), tráfego de nenhum firewall
deveria ser balanceado, só da DMZ.
Boa sorte e nos mantenha a par dos resultados.
Rubens
More information about the gter
mailing list