Olá Pessoal.
Esse artigo apresenta a solução para um problema comum nas empresas que é o bloqueio de determinados sites na Internet. A maioria das empresas utiliza um proxy para esse fim, o que é recomendado e torna as coisas bem mais fáceis. No entanto, nem sempre esse equipamento está disponível e pode ser interessante utilizar o próprio roteador de borda, responsável por prover acesso à Internet, para realizar esse serviço de filtragem, afinal todo roteador de borda é um firewall natural.
A princípio a escrita de ACLs no roteador de borda para bloquear um determinado site através do seu endereço IP de destino é realmente bastante simples, mas acontece que muitas vezes é necessário escrever regras dessa natureza informando como destino os nomes de domínio FQDN (fully qualified domain name), por exemplo www.labcisco.com.br.
Até então o problema parece continuar bastante simples, afinal basta substituir o endereço de destino pelo nome FQDN e tudo deve funcionar, não é? Não, nem sempre é simples assim... Os sites de serviços providos por grandes empresas, a exemplo da Google e Facebook (e vários outros) não possuem apenas um único endereço de destino, sendo acessíveis através de vários endereços para assegurar a disponibilidade em caso de falha.
Ao utilizar nomes de domínio na escrita de uma ACL, será realizado o processo de resolução de nomes apenas para o primeiro endereço válido e não para todos os endereços possíveis. Ou seja, caso o administrador queira bloquear o YouTube por completo, então seria necessário bloquear todos os endereços vinculados com o domínio youtube.com.
Uma solução para fazer isso seria levantar previamente todos os endereços IP correspondentes ao site que deve ser bloqueado e, posteriormente, escrever regras para cada um desses destinos. O problema dessa solução é que esses endereços não são estáticos e por isso é comum eles mudarem ao longo do tempo, o que torna o trabalho de bloqueio a sites bastante complicado.
Para resolver esse problema esse artigo apresentará um recurso denominado NBAR (Network Based Application Recognition) que será utilizado em conjunto com as ACLs tradicionais. O NBAR é uma ferramenta para implementar QoS que é suportada em todos os equipamentos mais recentes, viabilizando a classificação do tráfego da rede em categorias baseadas nos protocolos e outros parâmetros. O cenário desse laboratório é ilustrado na figura abaixo.
Implementar QoS requer a configuração de (1) classes de tráfego via class-map, (2) de políticas a serem aplicadas nessas classes via policy-map e (3) a inserção das políticas nas interfaces de rede via service-policy. Então utilizaremos class-map, policy-map e service-policy para classificar/marcar todo o tráfego destinado para youtube.com e, na sequência, utilizaremos ACLs para bloquear esse tráfego previamente marcado com a codificação DSCP (Differentiated Services Code Point) comumente utilizada para fins de QoS. Nosso objetivo nesse artigo não é aprofundar a discussão sobre QoS e nem entrar em detalhes da codificação DSCP.
Os comandos necessários para classificar o tráfego e bloqueá-lo são:
!---- Parte 1: Class-Map p/ Identificar o Site
01. Router(config)# class-map match-any Classe-YouTube
02. Router(config-cmap)# match protocol http url "*youtube.com*"
03. Router(config-cmap)# exit
!---- Parte 2: Policy-Map p/ Marcar a Classe de Tráfego
04. Router(config)# policy-map Politica-YouTube
05. Router(config-pmap)# class Classe-YouTube
06. Router(config-pmap-p)# set ip dscp 1
07. Router(config-pmap-p)# exit
08. Router(config-pmap)# exit
!---- Parte 3: Service-Policy p/ Aplicar a Marcação na Rede Local
09. Router(config)# interface f0/0
10. Router(config-if)# description "Rede Local"
11. Router(config-if)# service-policy input Politica-YouTube
12. Router(config-if)# exit
!--- Parte 4: ACL p/ Bloquear o Tráfego Marcado
13. Router(config)# ip access-list extended NegaYouTube
14. Router(config-acl-ext)# deny ip any any dscp 1
15. Router(config-acl-ext)# permit ip any any
16. Router(config-acl-ext)# exit
!--- Parte 5: Aplicação da ACL na Saída p/ Internet
17. Router(config)# interface f0/1
18. Router(config-if)# description "Internet"
19. Router(config-if)# ip access-group NegaYouTube out
20. Router(config-if)# exit
Observem na primeira parte que foi criada uma class-map para classificar todo tráfego HTTP com a URL desejada, processo realizado através da inspeção dos pacotes. Na segunda parte escrevemos uma policy-map que aplica o código DSCP=1 para todo perfil de tráfego identificado na class-map anterior. A codificação DSCP tem alguns códigos padronizados, então optamos pelo código 1 porque provavelmente esse código não estará associado com nenhuma aplicação. Na terceira parte aplicamos a política de marcação dos pacotes em todo tráfego entrante na interface do roteador que está conectada na rede interna (gateway da rede interna). Por fim é configurada uma ACL que nega acesso a todo pacote que tenha o campo DSCP=1, cabendo destacar que essa regra deve ser aplicada no sentido sainte da interface conectada à Internet.
Uma observação importante é que essa solução funciona muito bem para tráfego HTTP (80) porque o NBAR consegue fazer a inspeção do cabeçalho dos pacotes, no entanto é impossível fazer a leitura de conteúdo cifrado via HTTPS (443). Por isso o NBAR não irá funcionar para serviços que somente operam através do HTTPS. Nesse caso o jeito é fazer uso das vantagens de um proxy...
Abraço.
Samuel.