All pastes #967884 Raw Edit

load

public shellscript v1 · immutable
·published 2008-04-02 18:27 UTC
rendered paste body
# Nesta parte denominamos variáveis para as interfaces como segue.# Denominamos que o nome LAN seja referente à 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 IP´S dos roteadores de# Internet.GW_LINK1='IP1'GW_LINK2='IP2'# 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 $IF_LINK1 -j MASQUERADEiptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE# Aqui começamos a marcar os pacotes diferenciando-os pela porta utilizada.# Observe que escolhemos os pacotes com destino às 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 à porta 80# recebem "carimbo" de número 2, pacotes com destino à porta 25# recebem "carimbo" número 3.# Desta forma, podemos diferenciá-los para que mais à frente no script tenhamos# controle do que saiu/entrou e por onde saiu/entrou.iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 22 -j MARK --set-mark 2iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 2iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 2iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 3iptables -t mangle -A PREROUTING -i $IF_LAN -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# ($IF_LAN), enquanto OUTPUT são os pacotes originados no Firewall, ou seja, na# própria console.iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 2iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3iptables -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 20ip 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.1ip route add default via $GW_LINK1 dev $IF_LINK1 table 20ip route add default via $GW_LINK2 dev $IF_LINK2 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