Firewall Linux - Roteamento avançado usando iproute2 e iptables (load balance)
Tutorial completo e detalhado sobre roteamento avançado no Linux. Explica como fazer "balanceamento de carga" em 2 ou mais links de internet usando iproute2 e iptables no Linux, bem como rotear pacotes pela origem, pela porta e etc.
Introdução
Olá amigos(as)...
Certo tempo atrás escrevi um script usando iproute2 e iptables que desenvolvi na ocasião, já que havia a necessidade de utilizar 2 links de internet distintos. Desta vez reescrevi com muito mais detalhes mostrando exatamente como funciona cada passo.
Lembrando que este script foi desenvolvido no Slackware, mas acredito que funcione em qualquer outra distribuição Linux com Kernel 2.4.x e superiores, com algumas poucas modificações.
Quanto aos links, vamos chamá-los de LINK1 e LINK2...
Imagine que você queira que determinado protocolo use o LINK1 e outro protocolo use o LINK2.
Um exemplo fácil seria dizer que mensagens de e-mail SMTP e POP (portas 110 e 25) utilizam o LINK1, enquanto o tráfego de internet (portas 80, 21, 53, 443...) utiliza o LINK2. Isto permitiria que usuários fizessem downloads pesados sem comprometer o tráfego de mensagens, ou ainda, enviar e receber mensagens de e-mail grandes sem interferir na velocidade dos usuários que navegam na Internet.
Um outro exemplo para quem tem Vlans em suas redes seria dizer que a REDE 192.160.0.X utiliza o Link1, enquanto a REDE 192.170.0.X utiliza o LINK2.
Basicamente o processo funciona marcando pacotes que entram e saem do FIREWALL onde o script será implementado com o comando IPTABLES usando Mark, um artifício que faz com que o firewall monte uma tabela dinâmica de todos os pacotes que passam por ele.
Imagine que você tenha um firewall com 4 interfaces, assim vamos chamá-las de: ETH0, ETH1, ETH2 e ETH3, onde ETH0 está conectada à sua LAN interna, a ETH1 conectada em uma DMZ e as interfaces ETH3 e ETH4 conectadas a 2 links distintos.
Se um pacote entrou pela interface ETH0 e saiu pela interface ETH3, é necessário que ele retorne para o mesmo lugar de onde veio. Eis o motivo de marcar os pacotes; caso contrário, eles se utilizarão do DEFAULT GATEWAY do Firewall, que pode não ser o mesmo que você deseja.
Entendendo isto, podemos seguir adiante com nosso script.
Certo tempo atrás escrevi um script usando iproute2 e iptables que desenvolvi na ocasião, já que havia a necessidade de utilizar 2 links de internet distintos. Desta vez reescrevi com muito mais detalhes mostrando exatamente como funciona cada passo.
Lembrando que este script foi desenvolvido no Slackware, mas acredito que funcione em qualquer outra distribuição Linux com Kernel 2.4.x e superiores, com algumas poucas modificações.
Quanto aos links, vamos chamá-los de LINK1 e LINK2...
Imagine que você queira que determinado protocolo use o LINK1 e outro protocolo use o LINK2.
Um exemplo fácil seria dizer que mensagens de e-mail SMTP e POP (portas 110 e 25) utilizam o LINK1, enquanto o tráfego de internet (portas 80, 21, 53, 443...) utiliza o LINK2. Isto permitiria que usuários fizessem downloads pesados sem comprometer o tráfego de mensagens, ou ainda, enviar e receber mensagens de e-mail grandes sem interferir na velocidade dos usuários que navegam na Internet.
Um outro exemplo para quem tem Vlans em suas redes seria dizer que a REDE 192.160.0.X utiliza o Link1, enquanto a REDE 192.170.0.X utiliza o LINK2.
Basicamente o processo funciona marcando pacotes que entram e saem do FIREWALL onde o script será implementado com o comando IPTABLES usando Mark, um artifício que faz com que o firewall monte uma tabela dinâmica de todos os pacotes que passam por ele.
Imagine que você tenha um firewall com 4 interfaces, assim vamos chamá-las de: ETH0, ETH1, ETH2 e ETH3, onde ETH0 está conectada à sua LAN interna, a ETH1 conectada em uma DMZ e as interfaces ETH3 e ETH4 conectadas a 2 links distintos.
Se um pacote entrou pela interface ETH0 e saiu pela interface ETH3, é necessário que ele retorne para o mesmo lugar de onde veio. Eis o motivo de marcar os pacotes; caso contrário, eles se utilizarão do DEFAULT GATEWAY do Firewall, que pode não ser o mesmo que você deseja.
Entendendo isto, podemos seguir adiante com nosso script.