Proxy Squid filtrando HTTPS no PFSense

Tempo de leitura: 6 minutos

Fui uma grande surpresa minha, ao ver que no PFSense 2.3.1 foi criado um nova feature, que permite interceptar o tráfego HTTPs via squid, e ainda mais no modo transparente.

De fato, já funcionava antes, mas o processo para realizar essa função, além de trabalho, era bem complicado, com a geração do certificado, configuração do squid.conf, seja através do squid.inc ou das opções customizadas na Guia Geral do Squid.

Vou assumir que já esteja instalado o PFSense 2.3 e funcionando corretamente com sua LAN e WAN.

 

Por que habilitar HTTPS

Por default o squid não monitora e não pode monitorar tráfego criptografado HTTPS. O  Squid simplesmente estabelece uma conexão TCP com o servidor de destino e responde ao cliente com uma resposta HTTP 200 para indicar que a conexão foi estabelecida.

Uma vez que o túnel criptografado tenha sido estabelecido, osquid passa os pacotes entre o cliente e o servidor, mas não tem nenhuma visibilidade para o tráfego, uma vez que é protegido por criptografia SSL.

E ao longo dos anos muitos sites começaram a ativar a criptografia HTTPS por padrão, como é o caso do google, gmail, facebook entre outros, tornando o monitoramento muito limitado, caso não fosse configuração interceptação proxy HTTPS.

Felizmente o squid suporta “man in the middle SSL Filter”, que permitirá visualizar o conteúdo que passa através do tráfego.

Apesar de suportar isso a algum tempo, sua configuração era no mínimo complicada, para não falar outra coisa. Mas na versão mais nova do PFSense esta tarefa se tornou tão simples como habilitar o próprio Squid.

Então vamos aos passos para habilitar essa feature no Squid.

 

Passo 1 – Instalar o Pacote Squid 3

O primeiro passo é instalarmos o Squid usando o Package Manager do PFSense, indo em System->Packages.

Após localizar o Squid3 da lista de pacotes click no botão mais “+” do lado direito do pacote para iniciar a instalação do pacote.

O package manager irá automaticamente fazer download e instalar o Squid 3.

squid_https-1

Instalando pacote Squid 3 do Gerenciador de Pacotes do PFSense

squid_https-2

Progresso de instalação do Pacote Squid3

Passo 2 – Configurações Gerais do Squid

Após a instalação do pacote Squid, as configurações gerais devem ser feitas. A página de configuração podem ser encontrada em Services \ Squid Proxy Server.

Configure as seguintes opções:

  1. Enable Squid Proxy – Checado
  2. Keep Settings/Data – Checado
  3. Proxy Interface(s) – Selecione LAN e Loopback.

O restante das configurações nesta guia Geral pode deixar como estão, o padrão.

squid_https-3

Página de Configuração do Squid3

Passo 3 – Configuração do Proxy Transparente

Logo abaixo das configurações Gerais, vamos encontrar as configurações de proxy transparente. Na maioria dos casos, você irá utilizar  o proxy transparente de forma que não seja necessário nenhuma configuração adicional nos browsers dos cliente. Quando ativamos o proxy transparente, o firewall redireciona automaticamente todo tráfego WEB (HTTP) para a entrada do servidor proxy.

Para habilitar o modo proxy transparente configure as seguinte opções:

  1. Transparent HTTP Proxy – Checado
  2. Transparent Proxy Interface(s) – LAN

o restante das configurações pode ficar padrão, a não ser que queira faze alguma configuração especifica como bypass para algum endereço externo ou interno.

Vá até o pé da página  e clique em save para salvar e aplicar as configurações feitas.

Se você não habilitar o modo transparente, terá que configurar o browser do cliente, e apontar as configurações de proxy para o IP do PFSense.

squid_https-4

Neste  ponto já temos o nosso proxy Squid configurado e pronto para uso no modo transparente. Já seria interessante testar nesse momento se está funcionado.

 

Passo 4 – Configurando Certificado de Autoridade (Certificate Authority)

Um certificado de autoridade deverá ser configurado no pfSense antes de habilitarmos a filtro HTTPS no Squid. A CA irá user usada para gerar novos certificados SSL para os clientes em termpo real e então criptografar e descriptografar o tráfego da web automaticamente.

  1. Acesso o gerenciado de certificado no menu System \ Cert Manager.
  2. Clique em “+” para criar um novo certificado de autoridade.

Configure os seguintes campos nos certificado:

  1. Descriptive Name: Escolha um nome para sua CA. Este nome será visível para os clientes.
  2. Method:  Selecione “Create an internal Certificate Authority” no menu dropdown.
  3. Key length: É recomendado 2048 para máxima compatibilidade, mas você pode usar 4096 bits para máxima segurança.
  4. Digest Algorithm – use SHA256 ou superior.
  5. LifeTime – Configure para 3650 dias (10 anos).
  6. Distinguished Name – Preencha todos os campos como Country, State, etc.

E posteriormente Salve.

squid_https-5

Passo 5 – Exportando o Certificado CA

Após a criação da nova CA, essa deve ser exportada. Este certificado irá deverá ser instalado em qualquer cliente que irá usar o proxy.

A partir do gerenciador de Certificados click em export CA para baixar o certificado, que salvara um arquivo com extensão .crt.

Se você quer aprender na prática, isso e muito mais, faça já matricula para o curso ao vivo online que ocorrerá em 28 de Maio de 2018.

Curso Firewall PFSense Online: 28 de Maio

 

Passo 6 – Importando o Certificado

Para importar o certificado para um computador com Windows, clique duas vezes no arquivo .crt para abrir a caixa de diálogo do certificado.

Clique no botão de instalação de certificado para iniciar o assistente de importação.
Clique em Avançar na primeira página do assistente de importação de certificados.
Selecione a opção colocar todos os certificados no armazenamento a seguir.
Clique no botão procurar e selecione Autoridades de certificação raiz confiáveis.
Clique em próximo e clique em Concluir na página de confirmação de importação.
Quando solicitado, clique em sim para confirmar o aviso de segurança.
Você deverá ver uma mensagem indicando que a importação do certificado foi bem-sucedida.

Windows 7 certificate properties dialog

Passo 6 – Habilitando Filtro SSL em Man in The Middle

Depois de carregar o certificado nos computadores clientes, você estará pronto para ativar a filtragem de SSL no Squid. Acesse a página de configurações do squid (Services \ Squid Proxy Server) e defina as configurações abaixo.

Interceptação HTTPS / SSL – Verificada
Interface (s) de Interceptação SSL – Selecione LAN
CA – Selecione a autoridade de certificação criada na etapa 4
Clique em salvar na parte inferior da página para aplicar as configurações.

 

15 Comentários

  1. Nelson Pinto da Cunha Junior

    Boa tarde, Stato.
    Comprei os cursos de pfSense e Firewall Linux.

    Estou utilizando o pfsense com squid transparent com SSL. Alguns sites entram numa boa, como caixa, bb, itau, mas ao acessar sites e-CAC da receita federal dentre outros dá o seguinte erro:
    “Falha ao estabelecer uma conexão segura com 161.148.231.190

    The system returned:

    (92) Protocol error (TLS code: SQUID_ERR_SSL_HANDSHAKE)
    Handshake with SSL server failed: [No Error]”

    Sabe o que pode ser?
    Abraço e obrigado.

    Responder

    1. Boa tarde Nelson,
      bom esse é um problema cronico no Brasil. A caixa não permite que seja feita conexão passando por proxy.
      Existem alguns tutoriais quebra galho pela Internet, mas tudo daquele jeitinho brasileiro… e muito trabalhoso as vezes , e as vezes dá certo.
      O ideal é tirar o range da caixa, e deixar em by pass, sem passar pelo proxy. Eu normalmente faço isso nos meus clientes, para evitar futuros problemas.
      Espero ter ajudado.

      Responder
      1. Nelson Pinto da Cunha Junior

        Vale, cara.
        Resolvi da seguinte maneira para o e-CAC:
        no bypass Destination do http transparent coloquei o ip: 161.148.231.190
        e nas exceções de proxy do Windows coloquei: *fazenda.gov.br

        agora tá beleza.

        Grato.

        Responder
  2. Ricardo Soares Teixeira

    Bom dia. Afinal você habilitou o “man in the middle” ou não?

    Responder

    1. Bom, na realidade seria até um man in middle, mas a facilidade de se fazer isso nessa versão é incrível. Basta marcar que deseja usar https proxy transparente, e lógico instalar os certificados nos clientes, e tudo funciona.
      Enfim, o PFSense cria toda configuração diretamente no Squid para trabalhar e pode fazer o cache e verificação de pacotes https, usando o certificado do PFSense.

      Responder
  3. Edileno Menegaz

    Amigo blza?
    preciso muito de sua ajuda.
    consegui validar todo o processo, porem o skype nao reconhece como conexao o certificado.

    como, e quais portas e ips devo liberar no bypass do skype?

    preciso liberar…

    Responder

    1. Segundo a Microsoft somente a porta 80 e 443 devem ser liberadas para o funcionamento do Skype, caso estejam sendo usadas por outro aplicativos é necessário configurar uma porta alternativa. Além de todas as portas de destino acima de 1024 devem ser liberadas também.
      Quanto ao IPs vc pode dar uma olhada em http://bgp.he.net/ para descobrir o range que pertence ao skype, que imagino ser bem grande também.

      Abs

      Responder
  4. Edson

    Stato esse comentário é apenas uma observação. Mas veja só, mesmo o squid estabelecendo um túnel seguro para entregar as páginas solicitadas pelo cliente(navegador) ele consegue sim bloquear as páginas caso não use proxy transparante.

    Por que quando o cliente inicia uma conexão ele informa qual endereço, porta e método da conexão para o squid.

    Responder

    1. Sim, até sei disso. Mas o caso aqui é usando proxy transparente, com certificado emitido pelo pfsense, fazendo tipo um MIM, Man in the middle, mas para coisas boas lógicos.rsrs. Mas sim , ele suporta filtragem desde que informado pelo browser ou software, o que ocorre é que alguns sites e dominios não suportam este tipo de conexão, como no caso da caixa economica federal, mas o bloqueio funciona de boa.
      Vlw Abraços

      Responder
  5. Gustavo

    Professor, perfeito acho bem interessante efetuar caching dos conteudos em HTTPS.

    A questão é, após essa configuração temos muitos problemas por exemplo com o Skype e acessos HTTPS a Ambientes Citrix. Como contornar isso?

    Responder

    1. Neste caso temos que analisar os logs e ver o que está sendo proibido ainda, para então proceder liberação que as vezes manualmente deverá ser feita.

      Responder
  6. Claudinei Rangel

    Stato no meu PfSense está funcionando certinho. Porém do nada os navegadores começam a dar erro de certificado em todos os sites, Sabe o que posso estar fazendo de errado?

    obrigado.
    Claudinei

    Responder

    1. Bem Claudinei,é difícil avaliar sem ver LOGS e etc.
      Pode ser uma coisa bem simples como hora incorreta entre os clientes e o PFSense, como pode ser coisa mais grave. Uma simples permissão pode ocasionar problema, mas como disse é dificil analisar. Tenta visualizar os logs quando esse problema ocorrer.

      Responder
  7. andre vinicius

    Bom dia Amigo,

    Antes conseguia bloquear sites https pelo squid, na opção ”Enable SSL filtering’ ”Slice All”, mas do fim do ano para ca, quando marco a opção bloqueia todos sites em https, até os que são permitidos.

    Pode me ajudar nisso.

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.