Servidores OpenVPN são úteis para se conectar de maneira segura à rede de casa/escritório de lugares remotos, como parques da Disney ou até de algum outro país quando estiver de férias. Neste artigo vamos configurar um servidor OpenVPN em seu pfSense usando o banco de dados local do pfSense para autenticação.
Preparando-se
Uma breve nota sobre desempenho
A VPN depende de criptografia que pode ser muito pesada para sua CPU. Os comandos a seguir não são necessários para configurar o servidor VPN em si, mas ajuda você a determinar o comprimento da chave RSA, dispositivos criptográficos, etc que vão ajudar o seu dispositivo sofrer menos.
Comprimento da chave RSA
Conecte via SSH em seu dispositivo pfSense e execute:
para testar quantas mensagens sua CPU pode assinar e verificar por segundo. Os resultados variam de acordo com seu hardware, mas aqui está o que eu consegui no meu Netgate SG-2440:openssl speed rsa2048 rsa4096
sign verify sign/s verify/s
rsa 2048 bits 0.006880s 0.000246s 145.4 4068.6
rsa 4096 bits 0.048953s 0.000834s 20.4 1198.6
Como você pode ver, dobrando o comprimento da chave de 2048 para 4096 bits causou uma redução de 7x no desempenho para assinar mensagens e cerca de 3x para verificar as mensagens recebidas. Como regra geral, a menos que você realmente precise de 4096 bits para uma aplicação especial, comprimento de chave de 2048 bit deve ser mais do que suficiente.
Dispositivos criptográficos
Dependendo da sua CPU, você pode aproveitar instruções especiais definidas para criptografia, como AES-NI. O OpenSSL tem um comando para listar todas implementações de hardware ou software de dispositivos criptográficos.
Novamente acesse o seu pfSense via SSH e execute
. Os resultados variam dependendo da sua configuração. Meu Netgate SG-2440 retornou o seguinte:openssl engine -t -c
(cryptodev) BSD cryptodev engine
[RSA, DSA, DH, AES-128-CBC, AES-192-CBC, AES-256-CBC]
[ available ]
(rdrand) Intel RDRAND engine
[RAND]
[ available ]
Como podemos ver, meu sistema tem suporte tanto para motores BSD crypto (cryptodev) quanto Intel RDRAND (rdrand). Entre colchetes podemos ver todas as capacidades que cada motor (aka engine) suporta. O cryptodev BSD suporta algoritmos de criptografia AES-XXX-CBC, que irei usar ao configurar o servidor OpenVPN:
Ao executar openssl speed -evp aes-256-cbc
no meu pfSense eu tenho o seguinte:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 14736.50k 55675.86k 189614.37k 773839.01k 6153626.51k
Ao executar openssl speed -evp aes-256-cbc -engine rdrand
no meu pfSense eu tenho o seguinte:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 14008.64k 50313.22k 235134.98k 960143.36k 6944325.63k
Por fim, ao executar
no meu pfSense o seguinte é retornado:openssl speed -evp aes-256-cbc -engine cryptodev
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 12968.82k 64247.92k 223889.18k 769165.66k 6966214.66k
Como podemos ver, o uso de dispositivos crypto não melhorou os números do meu Netgate SG-2440, mas se você ver números melhores em seu sistema, tome nota de qual motor funcionou melhor para usar depois!
Outros ajustes
Quando o servidor OpenVPN estiver rodando, volte nessa seção e test os seguintes itens com diferentes valores para determinar quais usar.
Tamanho do buffer de envio/recebimento vale a pena experimentar ao invés de chutar valores, pois depende do seu hardware e do link de internet. Comece com 512 KiB, teste a velocidade, aumente/diminua o buffer e repita até encontrar o valor ótimo.
UDP Fast I/O tenta otimizar a escrita do pacote, mas não é compatível com todo hardware. No meu Netgate SG-2440, por exemplo, parece causar algumas instabilidades no upload (picos rápidos de upload seguido de breves travadas).
Certificado do servidor
Um servidor VPN seguro requer certificados para criptografar dados. O OpenVPN recomenda o uso de Certificados e Certificados de Autorização auto assinados (Self-Signed Certificate Authority) para melhor segurança. A explicação deles para essa escolha ao invés de usar certificados SSL let’s encrypt, por exemplo, é restringir o universo de certificados emitidos por terceiros a serem aceitos pelo seu servidor VPN. Se um CA público for comprometido, quaisquer certificados comprometidos poderiam ser usados para tentar acessar sua rede. Nada legal. Contudo, isso não quer dizer que você não pode usar certificados do Let’s Encrypt pois a chance de eles terem o CA comprometido é bem baixa.
No seu pfSense, vá para Sistema >> Gerenciador de Cert. >> CAs e clique em Adicionar para criar o CA da seguinte forma e clique em Salvar na parte inferior da página.
Criar / editar CA
- Nome descritivo: CA auto-assinado para servidor OpenVPN
- Método: Criar uma Autoridade de Certificado Interna
- Loja verdadeira: desmarcado
- Randomizar serial desmarcado
Fonte Autorizadora de Certificado Interno
- Tipo de chave: RSA
- Comprimento: 2048 (de acordo com a discussão do comprimento da chave RSA)
- Algoritmo digest: sha256 (de acordo com a discussão de dispositivos crypto)
- Tempo de Vida (dias): 3650
- Nome Comum: pfSense_RootCA
- Código de país, Estado ou Província, Cidade, Organização, Unidade Organizacional são opcionais e você pode deixá-los em branco
Agora que você tem o seu CA, vá para Sistema >> Gerenciador de Cert. >> Certificados e clique em Adicionar/Assinar para criar um certificado e clique em Salvar na parte inferior da página
Adicionar / Assinar um novo certificado
- Método: Crie um certificado interno
- Nome descritivo: Certificado auto-assinado para servidor OpenVPN
Certificação interna
- Autoridade de Certificado: CA auto-assinado para servidor OpenVPN
- Comprimento da chave: 2048 (deve corresponder ao comprimento da chave do seu CA)
- Algoritmo digest: sha256 (deve corresponder algoritmo de digestão do seu CA)
- Tempo de Vida (dias): 3650
- Nome Comum: pfSense_Cert
- Código de país, Estado ou Província, Cidade, Organização, Unidade Organizacional são opcionais e você pode deixá-los em branco
Atributos de certificado
- Tipo de certificado: Certificado de servidor
- Nomes alternativos: deixe em branco
Servidor VPN
Assim que você obter o seu CA e Certificado, você está pronto para criar o servidor VPN. Vá para VPN >> OpenVPN >> Servidores , clique em Adicionar, preencha como a seguir e finalize clicando em Salvar assim que terminar.
Informação geral
- Desativado: desmarcado
- Descrição: Servidor OpenVPN para acesso remoto
Modo de configuração
- Modo servidor: Acesso remoto (SSL/TLS + Autenticação de usuário)
- Alternativa: O Acesso Remoto (Autenticação de usuário) não precisa de certificados
- DCO: desmarcado
- Backend para autenticação: Selecione banco de dados local (local database)
- Modo do dispositivo: tun – Modo túnel de camada 3
Configuração do terminal
- Protocolo: UDP somente no IPv4
- Dispositivo: WAN
- Porta local: 1194
Configurações criptográficas
- Configuração TLS:
- Use uma chave TLS: selecionado
- Gerar automaticamente uma tecla TLS: selecionado
- Autoridade de Certificado de Pares: Selecione seu CA auto-assinado
- Lista de revogação do certificado de pares: vazia
- Verificação OCSP: demarcado
- Certificado do servidor: Selecione seu certificado auto-assinado
- Comprimento do parâmetro DH: 2048 bit
- Curva ECDH: Use padrão
- Algoritmo de Criptografia: AES-256-CBC (de acordo com a discussão de dispositivos criptográficos)
- Algoritmo de Criptografia alternativa: AES-256-CBC (não quero permitir criptografia mais fraca)
- Algoritmo de Autenticação: sha256
- Hardware de criptografia: Selecione de acordo com a discussão sobre dispositivos criptográficos
- Profundidade de certificado um (Cliente+Servidor)
- Correspondência rigorosa do usuário-CN: desmarcado
- Validação do uso de chave de certificado do cliente: selecionado
Configurações do túnel
- Rede de Túnel IPv4: 10.1.0.0/24 (ou qualquer outra rede que não seja usada pelo seu LAN/WAN)
- Rede de Túnel IPv6: vazia
- Redirecionar o Gateway IPv4: verificado
- Redirecionar o Gateway IPv6: sem controle
- Rede local IPv4: vazia
- Rede local IPv6: vazia
- Conexões simultâneas: 5 (ou qualquer outro número)
- Compressão: Omitir preferência (embora o mais seguro seja Recusar qualquer compressão)
- Tipo de serviço: desmarcada
- Comunicação entre clientes: desmarcado (ou verificada se você deseja se conectar a dispositivos não-VPN)
- Conexão duplicada: selecionado (como você pode se conectar a partir de mais do que o dispositivo ao mesmo tempo)
- Limite de conexões duplicadas: 2 9ou qualquer número que lhe sirva melhor)
Configurações do cliente
- IP dinâmico: selecionado
- Topologia: Subrede – Um endereço IP por cliente em uma sub-rede comum
Configurações de ping
- Inativos: 0
- Método ping: keepalive
- Intervalo: 5
- Tempo limite: 30
Configurações avançadas do cliente
- Domínio padrão DNS: selecionado
- Domínio padrão DNS: lan.domain.com
- Ativação do servidor DNS: selecionado
- Servidor DNS 1: 10.1.0.1
- Servidor DNS 2: vazio
- Servidor DNS 3: vazio
- Servidor DNS 4: vazio
- Bloquear DNS externo: selecionado
- Forçar atualização do cache DNS: selecionado
- Habilitar servidor NTP: selecionado
- Servidor NTP 1: 10.1.0.1
- Servidor NTP 2: vazio
- NetBIOs habilitado: desmarcado
Configuração avançada
- Opções personalizadas: vazia (ou mssfix 1400 se você estiver experimentando muitas desconexões)
- Nome de usuário como Nome Comum: selecionado
- UDP Fast I/O: desmarcado (leia sobre outros ajustes)
- Notificação de saída: Reconectar ao servidor / tentar uma vez
- Buffer de Envio/Recebimento: 256 KiB (leia sobre outros ajustes)
- Criação de gateway: Apenas IPv4
- Nível de verbosidade: 3
Depois de clicar em Salvar, seu servidor VPN começará a ser executado.
Contas de usuários
Como escolhemos usar o Banco de Dados Local como backend para autenticação, precisamos criar contas de usuários e certificados para todos os usuários que precisam se conectar à VPN. Se você escolheu o Acesso Remoto (Autenticação de Usuário) como Backend para autenticação, pule esta seção.
Visite Sistema >> Gerenciador de usuários e pressione Adicionar e faça o seguinte:
- Propriedades do usuário
- Desativado: desmarcado
- Nome de usuário: novo usuário
- Senha: escolha uma senha forte
- Nome completo: nome completo
- Clique para criar um certificado de usuário: selecionado (importante)
- Criar certificado para usuário
- Nome descritivo: certificado de nome de usuário
- Autoridade certificadora: selecione seu CA auto-assinado
- Comprimento da chave: 2048
- Tempo de Vida: 3650
- Chaves:
- Chaves SSH autorizadas: chave pública SSH opcional
Pressione Salvar para terminar a criação do usuário.
Configuração de clientes
Primeiro, precisamos instalar um novo pacote para simplificar a configuração de clientes VPN. Vá para Sistema >> Gerenciador de Pacotes >> Pacotes Disponíveis e clique em Instalar para o pacote openvpn-client-export.
Em seguida, vá para VPN >> Exportação de clientes >> OpenVPN e faça o seguinte:
Servidor OpenVPN
- Servidor de acesso remoto: selecione o servidor OpenVPN criado
Comportamento de conexão do cliente
- Resolução do nome do host: Escolha seu cliente DDNS (CloufFlare ou DuckDNS)
- Verificar servidor CN: Automático
- Bloquear DNS externo: selecionado
- Cliente Legado: selecionado
- Instalador silencioso: desmarcado
- Modo de associação: Não associar a porta local
Opções de exportação de certificados
- Armazenamento de certificados PKCS #11: desmarcado
- Armazenamento de certificados Microsoft: desmarcado
- Certificado de proteção por senha: desmarcado
Opções de proxy
- Use um proxy: desmarcado
Avançado
- Opções adicionais de configuração: vazias
Clique em Salvar como padrão e role para baixo até ver a seção Clientes OpenVPN . Na tabela de usuário você verá uma entrada para cada usuário que você criou antes. Na coluna de exportação você encontrará vários botões para diferentes clientes de sistemas operacionais e clientes VPN. Escolha um de sua preferência e baixe o arquivo de configuração. Use esse arquivo para importar a conexão VPN em seu cliente VPN. Eu gosto do Viscosity que não é grátis, mas vale cada centavo! O cliente OpenVPN é gratuito e uma boa alternativa também.
Atribuindo uma interface ao servidor VPN
Seu servidor VPN deve estar rodando já. Os próximos passos atribuirão uma interface virtual ao seu servidor VPN para que você possa monitorar o tráfego, seu tempo de atividade e criar regras de firewall.
Vá para a página Interfaces >> Atribuições >> Atribuições de Interface . Na parte inferior da tabela, você deve ver uma linha como portas de rede disponíveis na coluna Interface . Em sua coluna de porta Rede , você tem que selecionar o servidor VPN que acabou de criar e clicar em Adicionar e Salvar. Isso criará uma interface que provavelmente será chamada de OPT1 (ou qualquer outro OPTn).
Clique no link OPT1 e faça o seguinte:
- Habilitar: selecionado
- Descrição: Renomeie OPT1 para VPNServer_1 ou algo significativo para você
Clique em Salvar e, em seguida, Aplicar alterações. Isso criará uma interface virtual com o novo nome. Seu servidor VPN será capaz de se conectar, mas não passará em nenhum tráfego até que você dê um trato nas regras de firewall. Vamos lá!
Permitir conexões VPN na interface WAN
Precisamos criar uma regra de firewall para que as conexões VPN provenientes da Internet sejam permitidas e cheguem ao serviço de servidor OpenVPN. Vá para Firewall >> Regras >> WAN . Clique em Adicionar para criar uma nova regra e faça o seguinte:
- Editar regra de firewall
- Ação: Liberar
- Desativado: desmarcado
- Interface: WAN
- Família de endereços: IPv4
- Protocolo: UDP
- Origem
- Origem: Qualquer
- Destino
- Destino: Endereço WAN
- Faixa de porta de destino: 1194
- Opções extras
- Log: desmarcado
- Descrição Liberar servidor OpenVPN
Clique em Salvar e Aplicar alterações.
Permitir tráfego através da interface VPN
Acesse Firewall >> Regras >> OpenVPN . Haverá uma tabela de regras, que é usada por todos os servidores VPN que não têm interface atribuídas. Mas você acabou de atribuir uma interface, então você precisa movê-la (e não duplicar!) da interface genérica OpenVPN para a interface OpenVPN_1. Clique no ícone editar e, em seguida, altere Interface do OpenVPN para VPNServer_1 e clique em Salvar. Dependendo da versão pfSense, a lista de regras estará vazia. Neste caso, criaremos uma nova regra. Clique no nome da interface (também conhecido como VPNServer_1), clique em Adicionar e faça o seguinte:
- Editar regra de firewall
- Ação: Liberar
- Desativado: desmarcado
- Interface: VPNServer_1
- Família de endereços: IPv4
- Protocolo: Qualquer
- Origem
- Origem: Qualquer
- Destino
- Destino: Qualquer
- Opções extras
- Log: desmarcado
- Descrição Liberar servidor OpenVPN
Clique em Salvar e Aplicar alterações.
Configure o Gateway da VPN
A última peça que falta é configurar o gateway do servidor VPN. Vá para a página Sistema >> Roteamento >> Gateways e na linha que mostra o gateway do servidor VPN, clique no ícone editar. Certifique-se de que Desabilitado não está selecionado e adicione seu IP de servidor VPN, como 10.1.0.1 no campo IP do Monitor e clique em Salvar e Aplicar alterações.
Bônus para o dashboard
Você pode adicionar diversos widgets como gateways, interfaces e gráficos de tráfego ao painel do pfSense e ver suas estatísticas de VPN na página principal. Divirta-se!