Marcadores

sexta-feira, 24 de outubro de 2014

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

2 comentários:

  1. Estou com uma duvida, fiz um redirecionamento para meu proxy pfsense + squid , entretanto o squid esta bloqueando todas as paginas mesmo sem eu ter colocado na blacklist.

    Segue abaixo meu squid.conf


    # This file is automatically generated by pfSense
    # Do not edit manually !

    http_port 192.168.254.42:3128
    http_port 127.0.0.1:3128 intercept
    icp_port 0
    dns_v4_first off
    pid_filename /var/run/squid/squid.pid
    cache_effective_user proxy
    cache_effective_group proxy
    error_default_language pt-br
    icon_directory /usr/pbi/squid-amd64/local/etc/squid/icons
    visible_hostname Rogerio
    cache_mgr rogeriolopes1320@gmail.com
    access_log /var/squid/logs/access.log
    cache_log /var/squid/logs/cache.log
    cache_store_log none
    netdb_filename /var/squid/logs/netdb.state
    pinger_enable on
    pinger_program /usr/pbi/squid-amd64/local/libexec/squid/pinger

    logfile_rotate 0
    debug_options rotate=0
    shutdown_lifetime 3 seconds
    # Allow local network(s) on interface(s)
    acl localnet src 192.168.254.0/24
    forwarded_for on
    httpd_suppress_version_string on
    uri_whitespace strip


    cache_mem 2048 MB
    maximum_object_size_in_memory 32 KB
    memory_replacement_policy heap GDSF
    cache_replacement_policy heap LFUDA
    minimum_object_size 0 KB
    maximum_object_size 256000 MB
    cache_dir ufs /var/squid/cache 30000 32 256
    offline_mode off
    cache_swap_low 90
    cache_swap_high 95
    cache allow all
    # Add any of your own refresh_pattern entries above these.
    refresh_pattern ^ftp: 1440 20% 10080
    refresh_pattern ^gopher: 1440 0% 1440
    refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
    refresh_pattern . 0 20% 4320


    #Remote proxies


    # Setup some default acls
    # From 3.2 further configuration cleanups have been done to make things easier and safer. The manager, localhost, and to_localhost ACL definitions are now built-in.
    # acl localhost src 127.0.0.1/32
    acl allsrc src all
    acl safeports port 21 70 80 210 280 443 488 563 591 631 777 901 3128 3129 1025-65535
    acl sslports port 443 563

    # From 3.2 further configuration cleanups have been done to make things easier and safer. The manager, localhost, and to_localhost ACL definitions are now built-in.
    #acl manager proto cache_object

    acl purge method PURGE
    acl connect method CONNECT

    # Define protocols used for redirects
    acl HTTP proto HTTP
    acl HTTPS proto HTTPS
    acl allowed_subnets src 192.168.254.0/24 172.168.254.0/24
    acl blacklist dstdom_regex -i "/var/squid/acl/blacklist.acl"
    http_access allow manager localhost

    http_access deny manager
    http_access allow purge localhost
    http_access deny purge
    http_access deny !safeports
    http_access deny CONNECT !sslports

    # Always allow localhost connections
    # From 3.2 further configuration cleanups have been done to make things easier and safer.
    # The manager, localhost, and to_localhost ACL definitions are now built-in.
    # http_access allow localhost

    quick_abort_min 0 KB
    quick_abort_max 0 KB
    request_body_max_size 0 KB
    delay_pools 1
    delay_class 1 2
    delay_parameters 1 -1/-1 -1/-1
    delay_initial_bucket_level 100
    delay_access 1 allow allsrc

    # Reverse Proxy settings


    # Custom options before auth


    # Block access to blacklist domains
    http_access deny blacklist
    # Setup allowed ACLs
    # Allow local network(s) on interface(s)
    http_access allow allowed_subnets
    http_access allow localnet
    # Default block all to be sure
    http_access deny allsrc


    ResponderExcluir