Por: @jonasc Publicado em: 2021-01-20
Recursos de controle de banda para o Squid
Há dois principais recursos que usamos no squid para controle de banda: Delay pools e o uso da opção tcp_outgoing_address em conjunto ao QoS.
Delay pools: Usado para limitar o consumo de banda para destinos específicos ou para limitar banda por origens/usuários específicos. Por exemplo, limitar o download do Windows Update ou limitar 2 Mbps por usuário do proxy.
tcp_outgoing_address: Usado quando precisamos separar determinando tráfego em uma classe específica de QoS e aplicar uma política para priorização, garantia e limitação da banda consumida.
Requisitos
Ambiente de Firewall iptables + squid proxy configurado e com interceptação SSL. Para este laboratório foi usado o FWFLEX 3.37.3.
Delay Pools
Configuração
Primeiro é necessário definir as ACLs de endereços que não sofrerão limitação pelo delay pools, para criar regra de exceção. Em seguida, defina as ACLs de destino e origem que serão limitadas. Neste exemplo, será criado 1 fila para limitar o Download do CentOS em 2Mbps e 1 fila para limitar a banda de um usuário em 2 Mbps.
# ACLs sem limitação de banda
acl DOMAIN_NODELAY dstdomain "/etc/squid/acl/domain_nodelay"
acl DST_NODELAY dst "/etc/squid/acl/dst_nodelay"
acl DESTINO_CENTOS dstdomain .centos.itsbrasil.net
acl ORIGEM_USER src 192.168.239.3
Defina a quantidade de filas criadas.
# Quantidade de filas
delay_pools 2
Defina a regra de limitação de destino com a classe tipo 1 e limite a banda em 2 Mbps, conforme exemplo abaixo.
# Controle de 2Mbit - DESTINO
# -------------------------------------
delay_class 1 1
delay_access 1 deny DST_NODELAY
delay_access 1 deny DOMAIN_NODELAY
delay_access 1 allow DESTINO_CENTOS
# http://www.matisse.net/bitcalc/?input_amount=30&input_units=megabits¬ation=legacy
# 2mbit = 250000 bytes
delay_parameters 1 250000/250000
Defina a regra de limitação de origem com a classe tipo 3 e limite a banda em 2 Mbps, conforme exemplo abaixo.
# Controle de 2Mbit - ORIGEM
# ----------------------------------------
delay_class 2 3
delay_access 2 deny DST_NODELAY
delay_access 2 deny DOMAIN_NODELAY
delay_access 2 allow ORIGEM_USER
Testes
Para validar a limitação de destino, faça um download do destino especificado. Para validar regra de origem, navegue partindo o host de origem informado. Ambos serão limitados a 2 Mbps.
OBS: Para limitar o tráfego SSL é necessário usar o proxy interceptado.
tcp_outgoing_address
Configuração
Defina uma ACL com os hosts que serão classificados no QoS.
acl USUARIOS_LIMITADOS src 192.168.239.3
Configure um IP do firewall que será dedicado para esta classificação. Esta configuração informa ao squid qual IP de origem utilizar nas requisições web. Normalmente este é um IP secundário de uma conexão lan ou guest.
# IP para SNAT e QoS
tcp_outgoing_address 10.137.0.245 USUARIOS_LIMITADOS
# Demais saem pelo IP da rede LAN
tcp_outgoing_address 10.137.0.253
Neste ponto, o squid já está fazendo as requisições com os IPs de origem configurados. Agora basta configurar o firewall e o QoS. Para limitar os usuários acima, é necessário configurar um SNAT do IP 10.137.0.245
para 1 IP secundário do link WAN, exemplo 200.200.0.2
, dedicado a esta configuração do QoS. Nas configurações de QoS, basta criar uma classe para o IP público 200.200.0.2
e definir uma política, especificando banda garantida e prioridade do tráfego.
Testes
Basta fazer um download partindo da origem específicada. Valide a limitação da banda e também o gráfico de QoS daquela classe.