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)