Sempre nos deparamos com links usando sua capacidade máxima em alguns clientes hoje em dia, e isso dificulta a produção da empresa, diante deste cenário o seu gerente de TI, lhe sugere colocar mais um link no firewall usando outro provedor de internet para assim distribuir o tráfego entres os links usando o roteamento em seu firewall linux.
Diante de um cenário mais complexo vamos destrinchar cada serviço:
LINK1 = deve passar apenas navegação ( 80, 443, 53)
LINK2 = deve passar apenas email (143, 110, 25, 993, 995, 465, 587)
uma conexão quando aberta pelo usuário em sua rede deve sair pelo link escolhido e voltar pelo mesmo link para completar com sucesso a conexão, no entanto se não houver um roteamento adequado o pacote originado no usuário final da sua LAN vai sair pela default gateway do firewall e este pode não ser o link adequado, para isto acontecer corretamente o linux usa marcações nos pacotes alimentando uma tabela de roteamento dinâmico para manter esta regularidade, neste post eu vou nomear as tabelas para ficar mais fácil o entendimento. Exemplo: Quando o usuário solicita uma conexão a uma pagina HTTPS e este sai pelo LINK1 a conexão deverá voltar pelo mesmo LINK1 para funcionar corretamente, caso o default gateway deste exemplo for o LINK2, o usuário ao passar pelo firewall este deverá receber uma marcação no seu pacote referente ao LINK1, porque senão a conexão não funcionará.
Para manter a disponibilidade do acesso deste servidor devemos também rotear as portas de gerência do firewall que no caso farei apenas com o serviço de SSH.
Usando o roteamento avançado no linux você pode rotear origem e destino, neste caso vou rotear apenas a origem para estes serviços mencionados acima e dar alguns exemplos de regras.
Vamos dar nomes as tabelas:
acrescentarei ao final deste arquivo /etc/iproute2/rt_tables duas tabelas 100 e 200 usando os nomes EMB e OI respectivamente.
100 EMB 200 OI
Feito isso vamos criar as marcações:
ip rule add fwmark 1 table EMB prio 10 ip route add default via $GATEWAY_LINK1 dev $IF_WAN1 table EMB ip rule add fwmark 2 table OI prio 20 ip route add default via $GATEWAY_LINK2 dev $IF_WAN2 table OI ip route flush cache
Ao final vamos limpar as tabelas de seu cache.
Com esses comandos estarei adicionando a marca 1 aos pacotes que saírem pela tabela EMB e a marca 2 para os pacotes que saírem pela tabela OI, agora posso começar a trabalhar nas regras do Iptables.
A camada OUTPUT serve para pacotes que se originam no próprio firewall, seguindo isso, para manter a disponibilidade do servidor nos serviços SSH e HTTP, mais o ICMP para verificar a estabilidade do link,
iptables -t mangle -A OUTPUT -p tcp -s $LINK1 -d ! $REDE_LAN --sport 22 -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -p tcp -s $LINK1 -d ! $REDE_LAN--sport 80 -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -p icmp -s $LINK1 -d ! $REDE_LAN -j MARK --set-mark 1
A camada PREROUTING serve para pacotes que se originam em outra rede. Exemplo: LAN -> WAN
Pacotes que saíram pelo LINK1 (tabela EMB)
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 1 # HTTP iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 1 # HTTPS iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 53 -j MARK --set-mark 1 # DNS
Pacotes que saíram pelo LINK2 (tabela OI)
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 2 # SMTP iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 2 # POP iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 143 -j MARK --set-mark 2 # IMAP iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 993 -j MARK --set-mark 2 # IMAPS iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 995 -j MARK --set-mark 2 # POPS iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 465 -j MARK --set-mark 2 # SMTPS iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 587 -j MARK --set-mark 2 # SMTPS
Fazendo assim poderemos balancear os serviços entre os dois links…………
Pingback: Blog do Luiz Fernando Nunes » Roteamento