configuração padrão
A rede não precisa ter, necessariamente, um switch. Pode ser um roteador Wi-Fi
direto. A topologia acima é baseada no cenário atual, mas a distribuição da LAN pode se
dar de qualquer forma, pois tudo irá passar pelo pfSense.
1. Instalação do sistema operacional
Criar uma mídia de instalação do pfSense e dar boot na máquina que será instalado o
sistema. Ao efetuar o boot, será apresentada a seguinte tela:
Vamos escolher o Standard Kernel, que nos dará um console quando conectado com
monitor e teclado.
Essa é a tela customizada do console do pfSense. Por aqui iremos configurar a rede, para
então podermos usar o painel de administração web. Note que ele já lista as interfaces de
rede e seus IPs.
2. Configuração da rede
A dica é deixar o sinal de internet na porta primária do computador, ou seja, a onboard, no
caso de um desktop. Como o sinal de internet está isolado e deixamos o modem com
DHCP ativado, a placa WAN irá receber um IP. Estando no padrão, deverá ser 172.16.0.X
na WAN e 192.168.1.1 na LAN.
No exemplo acima está 10.0.2.15 pois esse é um DHCP criado internamente no VirtualBOX,
onde instalei a VM.
DNS Rebind Check - Proteção contra-ataques de DNS Rebinding. Para usar essa opção,
seria necessária configuração nos servidores DNS que encaminham para o site. Como não
vamos usar acesso remoto por IP fixo, marcamos para desativar. Se ficar desmarcado,
impedirá o acesso remoto por DDNS.
Browser HTTP_REFERER enforcement - Marcamos essa opção para desativar essa
verificação, que também impede acesso remoto por DDNS.
Secure Shell Server - Marcamos para ativar o SSH, pois assim será possível acessar o
console do servidor remotamente.
SSH port - Definimos 50222 como porta SSH.
Por fim, marque para proteger a console física com senha e salve. Agora vá no menu
System > General Setup
Definimos o Hostname e domínio no padrão acima. Altere o hostname conforme a loja, no
padrão que temos usados (veja lista atual).
Agora, vamos configurar o squid pelo menu Services > Squid Proxy Server.
Deixe tudo no padrão, exceto os destaques acima. Em Destination port range coloque o
range de portas a liberar. Como é somente uma, repita ou deixe em branco o segundo
campo. Em Description, forneça breve descrição do que se trata.
Faça uma regra para cada porta: 443 (HTTPS) e 50222 (SSH Externo)
6. Ativação do Captive Portal
Vamos, agora, ativar e configurar o Captive Portal, que é a página que aparecerá pedindo
cupom e CPF do usuário. Vá no menu Services > Captive Portal. Clique em Add para
adicionarmos uma zona.
OBS.: é possível criar diversos portais em um mesmo servidor. Cada portal pode ser
linkado a uma interface de rede. Usuários provenientes de cada interface passarão pelo seu
respectivo portal.
Acima, ao marcar para ativar o portal, será carregado o resto das configurações. Selecione
a LAN como interface de rede desse portal.
Mais abaixo, preencha conforme acima. No primeiro campo, definimos a página para a
qual o usuário será redirecionado após autenticar no portal.
No segundo, definimos o caminho da página à qual o usuário será redirecionado quando o
seu MAC estiver bloqueado. Preencha conforme acima pois depois enviaremos a imagem
para o servidor.
No terceiro, marcamos para definir que somente o dispositivo do último login efetuado será
aceito. Isso também valerá para os cupons e significa que, consequentemente, será
possível utilizar apenas 1 dispositivo por cupom: aquele que você usou o cupom por último.
Mais abaixo, marque a opção do meio em Authentication para indicar que desejamos usar
cupons. Desmarque o checkbox embaixo, para permitir que qualquer usuário autentique no
portal. Por fim, carregue as páginas.
Auth error page contents: apresentada quando erram o cupom, ou o mesmo está
vencido. Carregue o arquivo portal_erro.html
Por fim, abra o servidor via SSH, com o PuTTY, também porta 50222. Rode o
comando abaixo:
touch /var/log/acesso.log
7. Configuração dos cupons
Nas configurações do captive portal, acesse a aba Vouchers. Aqui vamos configurar
os parâmetros para o algoritmo de geração de cupons (vouchers). Marque o checkbox
para ativar.
Para gerar cupons, o sistema utiliza uma chave RSA, um set de caracteres para
usar, mais 3 parâmetros. Quanto maior o tamanho da chave, da quantidade de caracteres
possíveis e quanto maior o tamanho dos parâmetros, maior será o código do cupom.
Para gerar uma chave, acesse o servidor via SSH. Lembre que a porta é 50222.
1. Rode o comando openssl genrsa 31 > key.private para criar uma chave privada
dentro do arquivo key.private.
2. Rode o comando openssl rsa -pubout < key.private > key.public para obter a
chave pública da chave privada e salvar no arquivo key.public
3. Rode o comando cat key.public para imprimir na tela a chave pública. Cole ela no
campo Voucher Public Key no pfSense.
4. Rode o comando cat key.private para imprimir na tela a chave pública. Cole ela no
campo Voucher Private Key no pfSense.
Coladas as chaves, defina o Character set e os outros campos conforme acima.
O restante pode ficar com o padrão que estiver. Salve o portal. Se necessário siga a
doc sobre criação de cupons, referenciada na introdução, para criar os mesmos.
8. Configuração do DDNS
Como os links que utilizamos para a redes são com IP dinâmico, ou seja, o IP
externo é alterado periodicamente, temos que utilizar um servidor de DDNS para acessar o
portal de forma remota. Basicamente, é um servidor DNS com ferramentas para atualização
automática do IP de certo domínio.
No caso, criamos um domínio gratuito no DuckDNS e programamos o pfSense para
atualizar o IP do mesmo sempre que ele muda.
Acesse o www.duckdns.org, crie uma conta e um domínio no padrão atual.
Depois, vá na página install do site, marque pfSense, escolha o domínio e copie o
link que irá aparecer no fim da página.
Esse link, quando acessado, atualiza o IP de nosso servidor para o domínio
especificado no servidor do DuckDNS. O IP é passado pela variável %IP% que devolve o IP
atual do pfSense.
Acesse o menu Services > Dynamic DNS
Selecione a opção Custom, cole o link em Update URL e digite OK em Result
Match. O OK é o retorno do DuckDNS avisando que o update foi bem-sucedido.