Marcadores

sexta-feira, 24 de outubro de 2014

CONFIGURANDO O PFSENSE COM SQUID 2.7 STABLE + DNS SERVER + DSCP/TOS MARK

CONFIGURANDO O PFSENSE


O pfSense é um ótimo Firewall baseado em FreeBDS, mas no nosso caso pouco usaremos o potencial que ele tem a nos oferecer como Firewall, apenas o usaremos pela facilidade de configuração do pacote Squid que está disponível para ele, por ter uma interface gráfica intuitiva e completa, de fácil configuração, atendendo bem do iniciante ao experiente em sistemas Firewall.

Nesse caso precisaremos de uma máquina (física ou virtual) com 2 interfaces, 01 para WAN e 01 para LAN, apesar de não usarmos a WAN. Como o pfSense é um sistema Firewall a primeira interface disponível ele a trata como WAN, por isso a necessidade da segunda que ele a define como LAN, e no nosso caso será a que usaremos.

No meu caso tenho uma máquina virtual em vSphere, com um processador Xeon, 6GB de memória e um HD de apenas 50GB, somente para explicação, como se trata de um servidor para cache, o ideal é ter um HD maior. Ao menos 1 TB.

Importante lembrar que na seção de configuração do cache do Squid, o valor configurado para memória deve ser igual ou inferior a 50% da memória RAM total da máquina. E o total livre no HD do sistema do pfSense deve ser de ao menos 30GB.


BOM MÃOS A OBRA.



Baixe o ISO do pfSense no seguinte endereço:

https://www.pfsense.org/download/mirror.php?section=downloads

Grave num CD ou pendrive e configure o boot para a correspondente inicialização.

Instale o pfSense conforme mostra o vídeo com as configurações padrões e defina o endereço da interface LAN para 172.16.0.2 com máscara /30 e o gateway apontando para o endereço que colocamos no MikroTik, 172.16.0.1 vide post anterior, as outras opções apenas aperte enter, e quando perguntado sobre ativar o DHCP responda que não. Pressione y no final para concluir as configurações, assim que voltar ao meno principal, escolha a opção 5 para rebootar o pfSense.

Conecte o cabo na interface LAN e ligue na porta corresponde do MikroTik.

CONFIGURANDO O BÁSICO + SQUID NO PFSENSE





Parâmetros que devem ser adicionados ao campo custom options para que seja realizada as marcações DSCP/TOS no Squid do pfSense.

tcp_outgoing_tos 0x30 all;
zph_mode tos;
zph_local 0x30;
zph_parent 0;
zph_option 136;

CACHE FULL - MIKROTIK / PFSENSE PARALELO (SQUID 2.7) / DNS SERVER / MARCAÇÃO TOS

1º PASSO - CONFIGURANDO O MIKROTIK


Presumindo que já temos nossos clientes navegando na internet através no MikroTik, que o link já esteja mascarado e que os serviços de DNS estejam configurados, bem como suas rotas.

Primeiro escolha uma porta livre e dê um nome a ela sugestivo. (Ex. Cache, pfSense, no nosso caso ether4-proxy)


1 - Configure o endereço para a interface nomeada - ether4-proxy que é onde meu proxy está ligado)

/ip address add address=172.16.0.1/30 comment=CACHE disabled=no interface=ether4-proxy network=172.16.0.0


2 - Mascare a rede do pfSense para que ele possa ter acesso a internet. No nosso caso a ether1-internet-west é onde está meu link de internet, se for conexão PPPoE coloque sua conexão PPPoE) 

/ip firewall nat add action=masquerade chain=srcnat disabled=no out-interface=ether1-internet-west src-address=172.16.0.0/30


3 - Criaremos um lista em Address Lists com o endereço do proxy pois vamos usá-la na regra Mangle para que nosso tráfego não entre em loop quando for redireicionado.

/ip firewall address-list add address=172.16.0.2 comment=Proxy disabled=no list=sem_proxy


4 - Criaremos um rota estática para o nosso endereço do proxy 172.16.0.2, marcando essa rota, de forma que iremos identificá-la na regra Mangle a frente. O nome da marcação pode ser qualquer um. Escolhi route_to_proxy.

/ip route add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=172.16.0.2 routing-mark=route_to_proxy scope=30 target-scope=10


5 - Faremos o redirecionamento da porta 80 para rota estática que configuramos excluindo a própria interface do proxy e seu endereço que está em Address Lists, para evitar um loop de rede. A exclusão é sinalizada com a ! na frente da caixa.

src-address é a rede que você deseja redirecionar, no caso seus clientes.

5.1
/ip firewall mangle add action=mark-routing chain=prerouting comment="REDIRECT PPPoE" disabled=no dst-address-list=!sem_proxy dst-port=80 fragment=no hotspot="" in-interface=!ether4-proxy new-routing-mark=route_to_proxy passthrough=no protocol=tcp src-address=10.2.0.0/24

No caso de HOTSPOT observe que para redirecionar o tráfego, deve se marcar a opção auth conforme item 5.2

5.2

/ip firewall mangle add action=mark-routing chain=prerouting comment="REDIRECT HOTSPOT AUTENTICADOS" disabled=no dst-address-list=!sem_proxy dst-port=80 fragment=no hotspot=auth in-interface=!ether4-proxy new-routing-mark=route_to_proxy passthrough=no protocol=tcp src-address=192.168.0.0/24


6 - Feito isso iremos marcar nossos pacotes para que possamos identificá-los na saída global-out e podendo assim definir a que velocidade serão entregues aos nossos clientes.

Aqui eu fiz as marcações DNS para que a resolução seja feita a 100M já que os pacoes UDP DNS são pequenos e não há um consumo representativo de rede.

MARCAR PACOTES DNS

/ip firewall mangle add action=mark-packet chain=prerouting comment="DNS Packets" disabled=no dst-port=53 new-packet-mark=dns-packets passthrough=no protocol=udp

MARCAR PACOTES COM DSCP/TOS 12

/ip firewall mangle add action=mark-packet chain=prerouting comment="Mark Cache Hit Packets" disabled=yes dscp=12 new-packet-mark=proxy-hit passthrough=no


7 - Aqui vamos definir a velocidade de entrega dos pacotes marcados. Crio primeiro uma Queue Type pois uso o tipo PCQ por uma questão de desempenho. Recomendo sua leitura no Google para mais informações. Depois criaremos um Queue Tree para os pacotes DNS e os pacotes que sairão do cache.

EM QUEUES TYPE PRIMEIRO PARA QUE NOSSAS TREE POSSAM USAR ESSA TYPE

/queue type add kind=pcq name=CACHE pcq-burst-rate=50M pcq-burst-threshold=30M pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=2k pcq-rate=30M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=4000


Aqui defini que cada cliente terá um pico de 50M por 10s e se o tráfego for contínuo cairá para 30M, respeitando o total dividido ou não na Tree, que vamos setar logo a seguir.

EM QUEUES TREE DEPOIS

Aqui defino que o total para os pacotes marcados com DSCP/TOS será de 100M, ou seja se tivermos 3 clientes, 1 a 50M e 2 a 30, limitará em 100M. Ajuste conforme suas necessidades.

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=yes limit-at=0 max-limit=100M name="CACHE-FULL TOS" packet-mark=proxy-hit parent=global-out priority=8 queue=CACHE

Aqui defino que nossos clientes farão resolução DNS a no máximo 100M


/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=100M name="DNS Packets" packet-mark=dns-packets parent=global-out priority=8 queue=default

VÍDEO:

http://youtu.be/f5EB95j1Hxw