Vejamos:
# Nesta parte denominamos variáveis para as interfaces como segue.
# Denominamos que o nome LAN seja referente a Interface ETH0 que no nosso
# script é a da rede interna. Verifique no seu Firewall qual é a interface
# correta.
IF_LAN='eth0'
# Aqui denominamos as variáveis dos LINKS 1 e 2, e os chamamos de LINK1 e LINK2
# É claro que você poderá chamá-los do que quiser. Exemplo: ADSL1 e ADSL2,
# mas não esqueça de alterar as variáveis no restante do script.
IF_LINK1='eth1'
IF_LINK2='eth2'
# Aqui colocamos os Gateways dos Links de Internet.
# Geralmente, os Default Gateways dos Links são os IPs dos roteadores de
# Internet.
GW_LINK1='200.70.0.1'
GW_LINK2='200.80.0.1'
# Nesta parte, utilizamos o comando IPTABLES para mascarar os IPs, ou seja,
# fazemos um NAT (Network Address Translation) para que os pacotes que venham da
# Interface ETH0 com IPs da rede interna, ou mesmo pacotes gerados dentro do
# próprio Firewall, possam sair para a Internet com endereços trocados, usando
# os IPs das interfaces ligadas aos Links de Internet.
# O MASQUERADE ao final do comando faz exatamente isto.
# Caso contrário, utilizaria ACCEPT, mas aí os pacotes sairiam para a Internet
# com IPs da rede interna e jamais retornariam ao Firewall.
iptables -t nat -A POSTROUTING -o -j MASQUERADE
iptables -t nat -A POSTROUTING -o -j MASQUERADE
# Aqui começamos a marcar os pacotes diferenciando-os pela porta utilizada.
# Observe que escolhemos os pacotes com destino as portas 80 (HTTP) 443 (HTTPS)
# 25 (SMTP) 110 (POP)
# Todo pacote que passar pelo Firewall com estas particularidades receberão
# uma marca, uma espécie de carimbo. Pacotes destinados a porta 80
# recebem carimbo de número 2, pacotes com destino a porta 25
# recebem carimbo número 3.
# Desta forma, podemos diferenciá-los para que mais a frente no script tenhamos
# controle do que saiu/entrou e por onde saiu/entrou.
iptables -t mangle -A PREROUTING -i -p tcp --dport 80 -j MARK
--set-mark 2
iptables -t mangle -A PREROUTING -i -p tcp --dport 443 -j MARK
--set-mark 2
iptables -t mangle -A PREROUTING -i -p tcp --dport 25 -j MARK
--set-mark 3
iptables -t mangle -A PREROUTING -i -p tcp --dport 110 -j MARK
--set-mark 3
# A diferença entre o PREROUTING e o OUTPUT é que, PREROUTING abrange os
# pacotes que foram originados fora do FIREWALL, por exemplo Interface ETH0
# (), enquanto OUTPUT são os pacotes originados no Firewall, ou seja, na
# própria console.
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3
# Aqui montamos as tabelas dinâmicas a partir das marcas (carimbos) que fizemos
# lá em cima no nosso script.
# Pacotes que foram marcados com 2 vão para a tabela table 20 e os marcados
# com 3, vão para a tabela table 21, com a mesma prioridade. Perceba o PRIO 20
# após os comandos.
ip rule add fwmark 2 table 20 prio 20
ip rule add fwmark 3 table 21 prio 20
# se quisermos condicionar esta marcação de outra forma, podemos utilizar o
# comando das seguintes formas:
# Este condiciona que todos os pacotes que vierem da rede 192.160.0.0 vão para
# a tabela 20.
# O comando está comentado. Caso queira utilizá-lo, apenas retire o sinal de
# da frente.
# ip rule add from 192.160.0.0/24 table 20
# Este outro condiciona os pacotes da rede 192.170.0.0 a irem para a tabela 21
# O comando está comentado. Caso queira utilizá-lo, apenas retire o sinal de
# # da frente do comando.
# ip rule add from 192.170.0.0/24 table 21
# Agora sim daremos rumo aos pacotes que foram marcados e cadastrados na tabela
# dinâmica.
# Veja que os pacotes que foram enviados para a tabela 20 têm como DEFAULT
# GATEWAY o LINK1. Sendo assim, os pacotes serão enviados para o LINK1 na
# Interface ETH1 com o IP 200.70.0.1.
# Já os pacotes da tabela 21 serão enviados para o LINK2 na Interface ETH1, com
# o IP 200.80.0.1
ip route add default via dev table 20
ip route add default via dev table 21
# Este último comando limpa a tabela, caso ela já tenha sido utilizada
# anteriormente, ou apenas para termos certeza de que quando você resetar as
# regras todas, o Firewall não guarde nenhum tipo de informação na
# memória (cache). Daí o nome FLUSH CACHE.
ip route flush cache
### FIM DO SCRIPT ######
Nenhum comentário:
Postar um comentário