Proxy transparente (http e https) no pfSense com Captive Portal

Este tutorial vai explicar, de forma prática, a configurar o pfSense para atender aos requisitos de proxy transparente para os protocolos http/https e autenticação de usuário integrada ao Captive Portal.

Utilizamos aqui o pfSense 2.1.5 e o pacote adicional squid3-dev versão 3.3.10 pkg 2.2.6.

Instale este pacote do squid a partir do menu System -> Packages.

Após instalado o pacote do squid vamos iniciar sua configuração. Acesse o menu Services -> Proxy Server e ajuste as opções conforme segue:

Clique sobre a aba General

Proxy Interface(s): LAN
Proxy Port: 3128
Allow users on interface: marcado
Patch captive portal: marcado
Transparent HTTP Proxy: marcado
Transparent Proxy Interface(s): LAN
HTTPS/SSL interception: marcado
SSL Intercept interface(s): LAN
SSL Proxy Port: 3129
Enable logging: marcado
Log store directory: /var/squid/logs (sem a barra / no final)
Integrations (caso use em conjunto com squidguard):redirect_program /usr/pbi/squidguard-squid3-i386/bin/squidGuard -c /usr/pbi/squidguard-squid3-i386/etc/squidGuard/squidGuard.conf;redirector_bypass off;url_rewrite_children 5
Custom ACLS (Before_Auth): always_direct allow all
                           ssl_bump server-first all

Salve as configurações clicando sobre o botão Save.

Clique agora sobre a aba Authentication.

Authentication method: Captive Portal

Clique sobre o botão Save

A parte de configuração do proxy está pronta, siga os passos a seguir para ativar o Captive Portal.

Clique sobre o menu Services -> Captive Portal.

Adicione uma Zona de autenticação para o Captive Portal clicando sobre o botão + e configure conforme segue:

Aba Captive Portal
Enable captive portal: marcado
Interfaces: LAN
Logout popup window: marcado
Authentication: Local User Manager / Vouchers
Clique sobre o botão Save

O Próximo passo será configurar as regras de firewall, para isto siga os passos descritos a seguir:

Clique sobre o menu Firewall -> NAT

Vamos adicionar duas regras na aba Port Forward, uma que faz o redirecionamento do protocolo http e outra para o protocolo https para que eles sejam encaminhados ao proxy obrigatoriamente.

Clique sobre o botão + para adicionar uma nova regra e configure conforme segue para o protocolo http:

Interface: LAN
Protocol: TCP
Destination: not LAN Address
Destination port range: from http to http
Redirect target IP: 127.0.0.1
Redirect target port: 3128
Clique sobre o botão Save

Clique agora sobre o botão + novamente para adicionar uma nova regra para o protocolo https e configure conforme segue:

Interface: LAN
Protocol: TCP
Destination: not LAN Address
Destination port range: from https to https
Redirect target IP: 127.0.0.1
Redirect target port: 3129
Clique sobre o botão Save

Pronto, as configurações estão prontas.

O protocolo https transparente tem um problema de operação com o certificado quando se utiliza um certificado auto assinado, como é o caso em praticamente todas as configurações como esta que fizemos. Toda vez que um usuário for acessar um site seguro será solicitado que aceite o certificado do pfSense pois o mesmo faz o processo de descriptografia e criptografia do acesso para poder aplicar os filtros de url definidos.

Para resolver esta questão o certificado existente no pfSense deve ser baixado para o computador do usuario final e instalado no navegador como Autoridade Certificadora.

Para baixar o certificado do pfSense utilize algum cliente ssh/scp. O caminho completo do arquivo para baixar é:

/usr/pbi/squid-i386/etc/squid/serverkey.pem

Os usuários para autenticação no Captive Portal devem ser criados em System -> User Manager.

A solução descrita aqui ainda pode ser incrementada com a utilização dos pacotes sarg (para geração de relatórios) e squidguard/dansguard (para implementar filtros de urls por usuário/ip)

Sobre Rodrigo Tomazini 56 Artigos
Analista CNPI-P, Analista de Sistemas e Pós Graduado em Engenharia de Sistemas. Atua atualmente como Analista CNPI e Consultor de TI.