Instalar e configurar Servidor OpenVPN no PfSense

Nesse tutorial vamos ensinar como instalar e configurar um servidor OpenVPN no PfSense. 

Depois de mostrar a instalação e configuração do OpenVPN no PfSense, vamos mostrar como instalar o cliente e como criar um cenário de testes virtualizado. 

Configurando o servidor OpenVPN

Inicialmente vamos selecionar a aba de VPN e em seguida vamos clicar em OpenVPN. 

Para esse tutorial, vamos usar o “Wizards” de criação para o  OpenVPN. Dessa forma, vamos clicar em “Wizards“. 

Agora vamos selecionar o tipo de servidor de autenticação. Nesse caso, vamos selecionar “Local User Access”. Dessa forma, o servidor OpenVPN dentro do pfSense será usado para a autenticação dos usuários da VPN. 

Criando a Autoridade Certificadora do Servidor OpenVPN 

Agora vamos criar a nossa autoridade certificadora (CA). 

Para isso vamos preencher alguns campos como na figura abaixo. E Vamos descrever o que inserir nos campos logo abaixo. 

  • Descriptive name: Aqui vamos dar o nome da Autoridade Certificadora. Em nosso caso estamos usando o nome “CA_myVPN”. 
  • Key length: O tamanho da chave, para esse tutorial vamos usar o tamanho padrão de 2048 bit. No entanto, poderíamos aumentar o tamanho da chave para até 16386 bit. 
  • Lifetime: Estamos usando o padrão que é de quase 10 anos. Podemos mudar esse valor para uma data que atenda a nossa necessidade. 
  • Common Name: O nome interno para o certificado. Nesse caso, vamos deixar em branco e vamos herdar o mesmo nome usado em “Descriptive name“.
  • Country Code,State or Province,City e Organization: Essa é a parte onde inserimos informações sobre o código do país, estado, cidade e o nome da organização. Nesse caso, estamos usando informações fictícias de uma organização situada em São Paulo. 

Em seguida vamos clicar em “Add new CA” para criar a nova Autoridade Certificadora. 

Criando o Certificado do Servidor OpenVPN 

Inicialmente, vamos informar que desejamos adicionar um novo Certificado clicando no botão “Add new Certificate“. A figura a seguir descreve onde deveremos clicar.

Agora, vamos criar o certificado do servidor VPN. Para isso vamos iniciar dando um nome como por exemplo “Server_Cert_VPN”

Podemos observar que muitos campos foram preenchidos automaticamente com as informações que inserimos na criação da Autoridade Certificadora.  

No entanto, o campo Lifetime foi preenchido automaticamente com o valor 398. 

Nota. Para evitar problemas com algumas plataformas, o Lifetime de um certificado não deve superar os 398 dias. 

Depois de preenchido, vamos clicar em “Create new Certificate”

Informações do Servidor OpenVPN 

Vamos inserir as informações do servidor OpenVPN para permitir o acesso dos clientes. 

Abaixo vamos descrever os campos: 

  • Description: aqui gosto de informar um nome que depois facilite o cliente ao identificar em qual VPN está se conectando. Portanto, vale a pena colocar um nome que descreva sua VPN. Aqui, vamos usar a description “my_OpenVPN” 
  • Protocol: podemos escolher entre TCP e UDP na camda de transporte. Além disso, podemos escolher entre IPv6 e IPv4 ou usar ambos ao mesmo tempo. Para esse tutorial, vamos usar apenas UDP e IPv4. 
  • Interface: Aqui vamos indicar qual interface o servidor OpenVPN vai operar. Nesse caso, estamos usando um servidor VPN para permitir acesso externo de clientes. Portanto vamos usar a interface WAN
  • Local Port: Informa a porta que o servidor OpenVPN vai usar para aguardar a comunicação com os clientes. Vamos escolher a porta padrão 1194. No entanto, se você já estiver usando essa porta com outro serviço, você pode mudar a porta para que não haja conflito. 

Configurando a Criptografia 

Vamos explicar os principais campos relacionados à criptografia do servidor OpenVPN após a figura abaixo. 

  • TLS Authentication: Nesse campo vamos marcar a opção para habilitar a autenticação por TLS.  
  • Automatically generate a TLS Key : Vamos marcar essa opção para gerar a chave TLS de forma automática. 
  • TLS Shared Key : Aqui poderíamos inserir uma chave TLS que foi gerada no passado. No entanto, para esse tutorial vamos deixar esse campo em branco. 
  • DH Parameters Length: O tamanho da chave Diffie-Hellman (DH) para a segurança na troca de parâmetros da VPN, nesse caso vamos usar 2048bit. 
  • Data Encryption Algorithms: aqui temos os algoritmos que podem ser negociados entre cliente e servidor. É importante usar algoritmos compatíveis com os clientes OpenVPN.
  • Fallback Data Encryption Algorithm: Aqui podemos indicar o algoritmo que será usado quando a negociação dos algoritmos listados acima falhar. 
  • Auth Digest Algorithm: Aqui vamos indicar o método de autenticação entre cliente e servidor VPN. 
  • Hardware Crypto: Como o nome diz, esse campo possibilita usar hardware de aceleração. No entanto, não vamos usar nesse tutorial. 

Configurações do Túnel OpenVPN 

Agora vamos criar as configurações que vão ser usadas no túnel VPN entre o cliente e o Servidor OpenVPN. 

Apresentamos a figura abaixo com as configurações usadas e depois descrevemos cada campo. 

  • Tunnel Network: Aqui vamos indicar a rede que será usada no túnel VPN entre o cliente e o servidor VPN. Vale ressaltar, que devemos usar uma rede que não é usada por outra rede interna. Em nosso caso, vamos usar a rede “10.0.8.0/24“. 
  • Redirect Gateway: Se selecionarmos esse campo, faremos com que os clientes usem o gateway do servidor OpenVPN como gateway padrão. Dessa forma, todo o tráfego para Internet passará pelo servidor OpenVPN. 
  • Local Network: Aqui podemos definir a rede local que será acessada pelos clientes OpenVPN. Nesse caso, vamos escolher a rede “192.168.56.0/24“. 
  • Concurrent Connections: Número de clientes que podem acessar o servidor OpenVPN ao mesmo tempo. Se estivermos rodando o servidor OpenVPN em um hardware mais limitado, podemos reduzir o número de clientes concorrentes. 
  • Allow Compression & Compression: permite a compressão dentro da VPN. No entanto, não vamos para garantir uma maior segurança. 
  • Type-of-Service: Esse campo pode ser marcado quando queremos inserir algum tipo de qualidade de serviço para o tráfego da VPN. 
  • Inter-Client Communication: Se marcarmos essa opção os clientes do OpenVPN poderão se comunicar. Essa comunicação entre clientes vai depender da necessidade do projeto de VPN. 
  • Duplicate Connections: Marcando essa opção o mesmo usuário de VPN pode manter mais de uma conexão com a VPN. Pode ser útil em caso de múltiplos dispositivos do usuário. 
  • Duplicate Connection Limit: Aqui podemos limitar o número de conexões simultâneas que um mesmo usuário pode fazer com o Servidor OpenVPN.

Parâmetros do Cliente OpenVPN 

Agora vamos falar dos principais paramentos que podem ser passados para o cliente OpenVPN. 

  • Dynamic IP: permite manter a conexão do cliente mesmo que mude o IP. 
  • Topology:  Temos a opção de usar o “Subnet” para permitir um IP para cada cliente na rede VPN ou isolar os clientes usando a opção “net30”. Nesse tutorial vamos usar a opção “Subnet”.  
  • DNS Default Domain & DNS Server 1-4 : Aqui podemos indicar os servidores DNS que serão usados pelos clientes da nossa VPN. Nesse caso estamos usando o “DNS Default Domain” apontando para o DNS da google “8.8.8.8” e o “DNS Server 1” apontando para um segundo DNS da google “8.8.4.4”.
  • NTP Servers: especificar um servidor Network Time Protocol para os clientes da VPN. 
  • NetBIOS & WINS : Marcando as opções relacionadas ao NetBIOS  e o WINS vamos permitir o funcionamento desses protocolos pelos clientes que estão acessando nossa VPN. 

Aplicando as regras de firewall para o OpenVPN 

Agora vamos usar as opções  Firewall Rule  e OpenVPN rule para aplicar as regras de VPN em nosso firewall. Esse procedimento poderia ser feito de forma manual caso o administrador prefira.

Finalizando a Instalação do servidor OpenVPN 

Agora terminamos a instalação do servidor OpenVPN. O próximo passo vai ser criar um usuário para fazermos o teste. 

Em seguida, vamos ver o nosso servidor OpenVPN criado.

Pacote para exportar Clientes OpenVPN 

Agora, vamos instalar um pacote que vai permitir exportar a configuração dos clientes de nossa VPN. 

Para isso, vamos clicar em System-> Package Manager

Depois vamos clicar em Available packages e pesquisar por openvpn. Depois disso vamos clicar em Install para o pacote openvpn-client-export. 

Depois, teremos uma página pedindo para confirmar a ação.

E finalmente veremos a tela que demonstra que o pacote foi instalado.

Criando um usuário para a VPN 

Agora precisamos criar um usuário para podermos exportar a configuração para uma máquina que será usada como cliente do nosso servidor OpenVPN. 

Para criar um usuário para nossa VPN, vamos clicar em System->User Manager.

Em seguida, vamos clicar em “User” e depois em “Add”. 

Agora vamos criar nosso usuário, nesse caso vamos criar um usuário chamado “maria” e vamos usar uma senha para o usuário maria. 

Depois vamos marcar a opção “Click to create a user certificate”. 

Agora vamos dar um nome descritivo para o certificado da maria. Nesse caso demos o nome “maria cert”. 

Observe que o Certificate authority está indicando o certificado que criamos lá quando configuramos o servidor OpenVPN. 

Em seguida podemos clicar em Save

Veremos uma tela como a figura abaixo demonstrando que o usuário maria foi criado com sucesso. 

Exportando o usuário OpenVPN 

Agora vamos clicar em VPN e vamos escolher OpenVPN. 

Em seguida, vamos clicar em Client Export, como na figura abaixo. 

Agora veremos alguns parâmetros que podem ser definidos para o cliente. Vamos comentar sobre cada parâmetro abaixo da figura. 

Remote Access Server: Aqui vamos escolher o protocolo UDP e a porta que será usada para o servidor 1194. 

  • Host Name Resolution: Aqui podemos deixar o “Interface IP Address”  que vai usar o IP da WAN do nosso pfsense. Além disso temos outras opções como usar Multi WAN com portforwarding e DDNS. No entanto, para esse tutorial vamos usar apenas o “Interface IP Address”. 
  • Verify Server CN: Aqui temos a opção de verificar de forma automática o certificado do servidor. 
  • Block Outside DNS: Aqui podemos forçar os clientes de nossa VPN a usar o DNS do servidor OpenVPN. 
  • Legacy Client: Se marcar essa opção não teremos configurações do OpenVPN 2.5 e isso permitirá compatibilidade com versões mais antigas.  
  • Silent Installer: Uma opção de instalação silenciosa para Windows. 
  • Bind Mode: Por default escolhemos a opção  “Do not bind the local port” e isso permite que múltiplos clientes se conectem a mesma porta do nosso servidor OpenVPN. Se você escolher a opção “bind to default OpenVPn port” só poderá atender a um cliente por vez.  
  • PKCS#11 Certificate Storage e Microsoft Certificate Storage: temos as opções de armazenamento de certificados. 
  •  Além disso, podemos usar a opção de password para Viscosity bundle com o Password Protect Certificate. 
  • Use A Proxy: indica se usaremos um proxy para acessar o servidor OpenVPN. 
  • Additional configuration options: Aqui podemos inserir configurações adicionais para o cliente OpenVPN. 

Caso você tenha alterado algum parâmetro, então deve clicar em “Save as default”. Dessa forma a configuração que foi criada será padronizada. 

Selecionando o certificado do usuário 

Agora vamos selecionar o certificado do nosso usuário. 

Nesse caso vamos exportar para uma máquina Linux então vamos escolher a opção indicada “Most Clients” 

Em seguida, você vai fazer o download do arquivo “ovpn” para um diretório do seu computador.

Se você desejar, pode editar o arquivo “ovpn” e verificar como está a configuração. Observe no nosso arquivo a linha” remote 10.0.2.15 1194 udp4” indica que nosso servidor openvpn tem o IP “10.0.2.15” na WAN e usa a porta 1194 UDP.

Lembre-se de alterar o IP da linha “remote” para o IP da WAN do seu pfSense.

Depois disso, podemos enviar o certificado para o cliente.  

Enviando o arquivo para o cliente  

Apresentamos aqui uma forma opcional de enviar o arquivo ovpn para o cliente no cenário de testes que criamos na próxima sessão. 

Uma forma de enviar o arquivo de configuração para o cliente que está em uma rede externa é usando o comando netcat como demonstrado abaixo. 

No PC externo(que será o cliente VPN) abra o terminal e que possui o IP 172.16.10.4.  

Digite:  

nc -nlv -w 2 8080 > maria.ovpn  

No PC interno que está na rede 192.168.56.0/24 abra o terminal  

Vá para o diretório do arquivo baixado e digite  

nc -nv 172.16.10.4 8080 < pfSense-UDP4-1194-maria-config.ovpn 

Depois de alguns segundos o arquivo será transferido.

Configurando o cliente OpenVPN

Temos um tutorial ensinando a configurar o cliente OpenVPN em Linux: Clique Aqui.

Temos um tutorial ensinando a configurar o cliente OpenVPN em Linux: Clique Aqui.

Criando o cenário de testes 

Vamos apresentar um cenário de testes que pode ser usado para treinar a criação de um servidor OpenVPN e Cliente OpenVPN. 

Lembrando que estamos usando uma máquina virtual com pfSense que ensinamos nesse post.

Criando a rede NAT network 

Se estiver em uma versão mais nova do Virtualbox, como na figura abaixo, a NAT Network estará em File -> Tools -> Network Manager. 

Depois vamos selecionar NAT Network e clicar com o botão direito do mouse e criar uma rede NAT. Como na figura abaixo. Vamos inserir a rede 172.16.10.0/24 e marcar a opção “Enable DHCP”.

Em seguida, vamos selecionar nossa máquina virtual do pfSense e vamos alterar a rede do “Adapter1”.

Nesse caso, estamos alterando a primeira rede que estava em “NAT” e vamos alterar para “NAT Network”. Além disso estamos usando a rede com nome NatNetwork.

Configurando o PfSense

Agora vamos configurar as interfaces do pfsense.

Caso queira aprender como instalar o pfsense em uma máquina virtual do VirtualBox, clique AQUI.

Para configurar a interface WAN do PfSense, precisamos localizar essa interface no pfsense.

Para isso vamos abrir a máquina virtual que tem o pfsnse e digitar 1. Ao digitar 1 vamos acessar a opção “Assign Interfaces” , nesse caso estamos apenas acessando para ver os endereços MACs das interfaces.

Após digitar 1 veremos os nomes das interfaces e os respectivos endereços MACs. A interface em0 está como WAN portanto podemos verificar o seu endereços MAC.

Agora vamos acessar a configuração do virtualBox da máquina que está o pfsense. Em seguida vamos selecionar Network e depois selecionar o Adapter1.

Essa interface estará como NAT Network.

Na segunda aba valos selecionar Adapter2 e vamos clicar em “Enable Network Adapter” e em seguida vamos escolher Host-only Adapter e vboxnet0.

Agora vamos para a máquina virtual do pfSense para dar um IP para a interface LAN. Para isso vamos para a tela de terminal do pfsense e vamos digitar 2.

Agora, vamos selecionar a interface LAN para inserir o novo IP. Para isso vamos digitar 2 novamente.

Em seguida, vamos inserir o IP da interface LAN. Para esse tutorial, vamos usar o IP “192.168.56.2” para a interface LAN do pfsense. Além disso, vamos usar a máscara “/24”. Para inserir o IP apenas digite o IP e para a máscara digite apenas o número correspondente por exemplo 24.

Depois disso, vem a pergunta se desejamos configurar um gateway para a WAN. Nesse caso, nesse caso estamos configurando a LAN e por isso vamos apenas clicar em ENTER.

Depois virá a pergunta se desejamos inserir IPv6 para a LAN. Nesse tutorial não vamos inserir IPv6 e por isso vamos pressionar ENTER.

Agora, vamos habilitar o serviço de DHCP na interface LAN. Dessa forma, os computadores que forem anexados na interface LAN vão receber IPs de forma automática.

Para habilitar o DHCP na interface LAN vamos digitar y e pressionar ENTER.

Depois disso vamos inserir o range de IPs que serão destinados aos hosts. Nesse caso usamos o 192.168.56.100 como inicio do range de IPs e o 192.168.56.200 como o fim do range de IPs para hosts.

Em seguida vem a pergunta se desejamos reverter o webconfigurator para HTTP. Nesse caso vamos digitar n pois não queremos usar HTTP e sim HTTPS.

Depois disso, podemos pressionar ENTER até que a tela inicial volte a aparecer e veremos uma tela semelhante a tela abaixo.

Podemos ver na figura acima que a interface LAN já está com o IP 192.168.56.2.

Configurando o PC externo

Vamos iniciar a configuração do PC externo. Nesse caso, o nosso PC externo usa o Ubuntu 22.

Primeiramente vamos adicionar a interface de rede do PC externo como NAT Network e na mesma rede que a interface WAN do nosso PfSense.

Para isso vamos abrir a configuração do VirtualBox da máquina virtual do PC Externo e selecionar “Adapter1” e selecionar “NAT Network”.

Em seguida, vamos selecionar o nome da rede como “NatNetwork” esse nome deve ser o mesmo nome que você usou na Nat Network da WAN do PfSense.

Agora, vamos ligar a máquina virtual com Ubuntu 22 e acessar o ícone de rede na parte superior esquerda da tela. 

Em seguida, vamos clicar em “Wired Settings”. 

Logo depois, vamos clicar no ícone de configuração da interface Wired, como na figura abaixo. 

Dentro do menu de configuração, vamos acessar a aba de IPv4 e vamos clicar em “Automatic (DHCP)”. Essa configuração vai permitir que a interface de rede da máquina virtual receba um IP da rede “NatNetwork” do VirtualBox. 

Além disso, vamos inserir um IP de DNS. Nesse caso, vamos optar por usar o DNS da google “8.8.8.8”. 

Depois de realizar os procedimentos acima, vamos reiniciar a interface de rede. Para isso, podemos clicar duas vezes no botão de habilitar a interface Wired. A figura abaixo mostra onde devemos clicar duas vezes. 

Agora podemos abrir o terminal para verificar se a máquina externa pegou um IP no range da rede “NatNetwork” do VirtualBox. Para isso, vamos digitar o comando abaixo.

ip addr

Podemos observar na figura abaixo, que a máquina virtual pegou o IP “172.16.10.5”. Esse IP pertence ao range da rede “NatNetwork” do VirtualBox, portanto a configuração está correta.

Depois de ter o cenário montado, você pode começar a fazer os testes.

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer

Referências:

https://docs.netgate.com/pfsense/en/latest/vpn/openvpn/index.html

https://serverfault.com/questions/1114167/pfsense-nat-a-port-to-a-site-to-site-openvpn-host

https://www.pfsense.org/