Dicas, Linux

Roteamento avançado no Linux usando iptables e iproute2 ( Load Balance )

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…………

Standard
Dicas, Linux

Bloqueio Facebook usando usando proxy transparente com iptables

Facebook

Usar um proxy como o Squid pode complicar na hora de bloquear o sites como o facebook.com, sendo assim poderemos usar o Iptables como recurso a mais pra bloquear esta rede social.

Acontece o seguinte: quando você acessa o Facebook é muito comum o site direcionar o tráfego para usar o protocolo HTTPS, HTTPS não é um protocolo separado, mas se refere ao uso do HTTP sobre uma camada encriptada de conexão SSL/TLS, para ser mais seguro para o usuário final, no entanto isso dificulta o uso do proxy já que o pacote quando usa o HTTPS ele já sai da maquina do usuário encriptado, não podendo mais ser verificado durante seu trajeto até o servidor de destino, poderia sim ser comparado a uma VPN entre o browser do usuário e o servidor de destino, que neste post se refere ao site do amigo Mark Zuckerberg, Facebook.

Basicamente através de uma pesquisa na internet encontrei muitos endereços que fazem referência a rede social em questão, e vamos bloquear o acesso a estes endereços de fato usando Iptables do Linux.

#!/bin/bash

iptables -I FORWARD -d 74.119.76.0/22 -j DROP
iptables -I FORWARD -d 69.63.184.0/21 -j DROP
iptables -I FORWARD -d 69.63.176.0/24 -j DROP
iptables -I FORWARD -d 69.63.176.0/21 -j DROP
iptables -I FORWARD -d 69.171.255.0/24 -j DROP
iptables -I FORWARD -d 69.171.240.0/20 -j DROP
iptables -I FORWARD -d 69.171.239.0/24 -j DROP
iptables -I FORWARD -d 69.171.224.0/20 -j DROP
iptables -I FORWARD -d 66.220.159.0/24 -j DROP
iptables -I FORWARD -d 66.220.152.0/21 -j DROP
iptables -I FORWARD -d 66.220.144.0/21 -j DROP
iptables -I FORWARD -d 31.13.77.0/24 -j DROP
iptables -I FORWARD -d 31.13.76.0/24 -j DROP
iptables -I FORWARD -d 31.13.75.0/24 -j DROP
iptables -I FORWARD -d 31.13.73.0/24 -j DROP
iptables -I FORWARD -d 31.13.72.0/24 -j DROP
iptables -I FORWARD -d 31.13.69.0/24 -j DROP
iptables -I FORWARD -d 31.13.64.0/19 -j DROP
iptables -I FORWARD -d 31.13.24.0/21 -j DROP
iptables -I FORWARD -d 2a03:2880::/32 -j DROP
iptables -I FORWARD -d 2620:0000:1c00::/40 -j DROP
iptables -I FORWARD -d 204.15.20.0/22 -j DROP
iptables -I FORWARD -d 173.252.96.0/19 -j DROP
iptables -I FORWARD -d 173.252.70.0/24 -j DROP
iptables -I FORWARD -d 173.252.64.0/19 -j DROP
Standard