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&notation=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.