Other posts related to firewall

Roteamento Avançado – Forçando as rotas

16 de novembro de 2006 12:14 pm · Tags: ,,

Após a implementação do segundo link de internet aqui da empresa (Roteando múltiplos links de internet) descobri que alguns sites não funcionavam direito.
Os problemas começaram a ocorrer principalmente nos Internet Banking devido a mudança do IP durante a sessão do sistema.

Como sou usuário do Bradesco comecei a testar o acesso e verifiquei que durante uma sessão de Internet Banking, aproximadamente 4 hosts diferentes do Bradesco são conectados.
Como os hosts são de redes diferentes, é bem possível que cada para cada host seja utilizado um gateway diferente e é ai que ocorre a alteração do IP do cliente.

Para contornar esse problema de forma fácil e rápida é possível marcar os pacotes no firewall que atenderem a uma certa condição, como por exemplo o endereço de destino.
Uma vez que os pacotes estejam marcados é possível definir a tabela de roteamento a ser utilizada por esses pacotes.

Após inúmeros testes e muito monitoramento com tcpdump, netstat e whois, descobri as 3 redes de IP do Bradesco que eu deveria forçar a utilização por 1 dos links. Inseri 3 regras no firewall para marcar os pacotes destinados a essas redes.

# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.173.19.0/25 -j MARK --set-mark 0x1
# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.246.210.0/23 -j MARK --set-mark 0x1
# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.155.80.0/20 -j MARK --set-mark 0x1

Uma vez que os pacotes estejam marcados é possível definir a tabela de roteamento a ser utilizada. Para isso utilizamos novamente o iproute2:

# ip rule add prio 11 fwmark 0x1 table isp1
# ip route flush cache

O exemplo acima assume que o nome da tabela do link 1 é isp1. Para maiores informações sobre como criar/nomear tabelas de roteamento consulte o artigo Roteando múltiplos links de internet

Após mais um tempo alguns usuários detectaram outros sites com o mesmo problema e o que percebi é que em sua grande maioria os serviços em questão rodavam sobre conexões seguras (https). Sendo assim alterei a regra no firewall para trafegar todu que for destinado a porta 443 pela link 1.
A regra abaixo cuida do serviço:

# iptables -A PREROUTING  -t mangle -p tcp -m tcp --dport 443 -j MARK --set-mark 0x1
# ip route flush cache

É importante executar o comando ip route flush cache toda vez que for alterada alguma regra referente ao roteamento de pacotes.

Pronto, agora toda conexão https será direcionada para o primeiro link. Caso o link falhe é possível trocarmos a tabela de roteamento a ser utilizada:

# ip rule del prio 11 fwmark 0x1 table isp1
# ip rule add prio 11 fwmark 0x1 table isp2
# ip route flush cache

Usando o Nagios ou algum outro software de monitoramento (um simples shell script) é possível automatizar a detecção de problemas no link para alterar o link a ser utilizado por essas conexões, tornando assim o serviço praticamente ininterrupto.

Switch to our mobile site