Bemmelhor Wiki
  • Blog
    • Contato
      • Telefonia IP
        • Omnichannel
          • CRM
            • VOIP
              • FAQ
                • APIs

                  Qual é a sua dúvida?

                  • Página inicial do FAQ
                  • Desenvolvimento e Suporte
                  • Configurando um servidor openvpn

                  Configurando um servidor openvpn

                  1. Instalação do Servidor OpenVPN e Criação da CA Local

                  Para instalar o OpenVPN no Ubuntu execute:

                  $ apt-get install openvpn openssl easy-rsa
                  

                  Após a instalação, copie os arquivos de exemplo de configuração da pasta /usr/share/doc/openvpn/examples/easy-rsa/2.0/ para a pasta /etc/openvpn.

                  $ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn
                  

                  Renomeie ou crie uma cópia do arquivo /etc/openvpn/openssl-1.0.0.cnf para /etc/openvpn/openssl.cnf.

                  $ cp /etc/openvpn/openssl-1.0.0.cnf /etc/openvpn/openssl.cnf
                  

                  Edite o arquivo /etc/openvpn/vars ajustando as últimas linhas iniciadas por KEY para refletir o seu ambiente.

                  É interessante, porém não obrigatório, que o parâmetro KEY_CN tenha o mesmo valor que o hostname do servidor OpenVPN.

                  Se existir, remova as últimas linhas referentes as chaves PKCS11_MODULE_PATH e PKCS11_PIN. Se existir uma chave duplicada KEY_EMAIL, remova-a também.

                  O tempo padrão para a expiração do certificado da CA e das chaves a serem geradas é de 10 anos (3650 dias). Se preferir altere estes valores editando os parâmetros CA_EXPIRE e KEY_EXPIRE.

                  O tamanho da chave de criptografia está definido como 1024 bits. Se quiser mudar este valor edite o parâmetro KEY_SIZE.O conteúdo de meu /etc/openvpn/vars segue abaixo:

                  $ nano /etc/openvpn/vars
                  
                  # easy-rsa parameter settings
                  # NOTE: If you installed from an RPM,
                  # don't edit this file in place in
                  # /usr/share/openvpn/easy-rsa --
                  # instead, you should copy the whole
                  # easy-rsa directory to another location
                  # (such as /etc/openvpn) so that your
                  # edits will not be wiped out by a future
                  # OpenVPN package upgrade.
                  
                  # This variable should point to
                  # the top level of the easy-rsa
                  # tree.
                  export EASY_RSA="`pwd`"
                  
                  #
                  # This variable should point to
                  # the requested executables
                  #
                  export OPENSSL="openssl"
                  export PKCS11TOOL="pkcs11-tool"
                  export GREP="grep"
                  
                  # This variable should point to
                  # the openssl.cnf file included
                  # with easy-rsa.
                  export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
                  
                  # Edit this variable to point to
                  # your soon-to-be-created key
                  # directory.
                  #
                  # WARNING: clean-all will do
                  # a rm -rf on this directory
                  # so make sure you define
                  # it correctly!
                  export KEY_DIR="$EASY_RSA/keys"
                  
                  # Issue rm -rf warning
                  echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
                  
                  # PKCS11 fixes
                  export PKCS11_MODULE_PATH="dummy"
                  export PKCS11_PIN="dummy"
                  
                  # Increase this to 2048 if you
                  # are paranoid.  This will slow
                  # down TLS negotiation performance
                  # as well as the one-time DH parms
                  # generation process.
                  export KEY_SIZE=1024
                  
                  # In how many days should the root CA key expire?
                  export CA_EXPIRE=3650
                  
                  # In how many days should certificates expire?
                  export KEY_EXPIRE=3650
                  
                  # These are the default values for fields
                  # which will be placed in the certificate.
                  # Don't leave any of these fields blank.
                  export KEY_COUNTRY="BR"
                  export KEY_PROVINCE="MG"
                  export KEY_CITY="JuizDeFora"
                  export KEY_ORG="BemmelhorSI"
                  export KEY_EMAIL="fabriciojf@gmail.com"
                  

                  Agora execute os comandos abaixo:

                  $ cd /etc/openvpn
                  $ source /etc/openvpn/vars
                  $ /etc/openvpn/clean-all
                  $ /etc/openvpn/build-ca
                  $ /etc/openvpn/build-dh
                  

                  Confirme os valores solicitados pelo build-ca, que serão os mesmos definidos no arquivo /etc/openvpn/vars.

                  A saída dos comandos será semelhante a abaixo:

                  NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys
                  root@openvpn:/etc/openvpn# /etc/openvpn/clean-all
                  root@openvpn:/etc/openvpn# /etc/openvpn/build-ca
                  Generating a 1024 bit RSA private key
                  ...........++++++
                  ............++++++
                  writing new private key to 'ca.key'
                  -----
                  You are about to be asked to enter information that will be incorporated
                  into your certificate request.
                  What you are about to enter is what is called a Distinguished Name or a DN.
                  There are quite a few fields but you can leave some blank
                  For some fields there will be a default value,
                  If you enter '.', the field will be left blank.
                  -----
                  Country Name (2 letter code) [BR]:
                  State or Province Name (full name) [SP]:
                  Locality Name (eg, city) [São Paulo]:
                  Organization Name (eg, company) [Bemmelhor SI]:
                  Organizational Unit Name (eg, section) [Divisão de TI]:
                  Common Name (eg, your name or your server's hostname) [openvpn]:
                  Name [BemmelhorSI CA]:
                  Email Address [suporte@bemmelhor.com.br]:
                  root@openvpn:/etc/openvpn# /etc/openvpn/build-dh
                  Generating DH parameters, 1024 bit long safe prime, generator 2
                  This is going to take a long time
                  ...............+.........................+..................................
                  .................................+..........................................
                  .......+....................................................................
                  ....................+............................................+..........
                  +............+..............................................................
                  ................................+.................................+.........
                  ..................+......................+...........+.....+................
                  ............................................................................
                  +....................................+................+.....+...............
                  .............................+............................................+.
                  ......................+.............+..+....................................
                  ................+...................................................+......+
                  .......+..............................+.....................................
                  ..................................................+.++*++*++*
                  

                  A pasta /etc/openvpn/keys será gerada e dentro dela, 5 arquivos referentes a nova CA criada:

                  1. ca.crt - Certificado Público de sua CA.
                  2. ca.key - Chave Privada de sua CA.
                  3. dh1024.pem - Parâmetros do Diffie-Hellman.
                  4. index.txt - Controle das chaves geradas pela nova CA.
                  5. serial - Controle de número serial das chaves geradas pela nova CA.

                  2. Criação do Certificado do Servidor

                  É necessário a geração de um certificado para o servidor OpenVPN. Para fazer isso execute:

                  $ /etc/openvpn/build-key-server server
                  

                  Você pode substituir a palavra server por outra que desejar, só que se fizer isso, lembre-se de fazer os devidos ajustes no arquivo /etc/openvpn/server.conf que será configurado no próximo passo. A saída do comando será semelhante a abaixo. Ajuste o parâmetro Name para o nome que julgar mais apropriado para seu servidor. Recomendo não atribuir um challenge password. Confirme a assinatura e a atualização do certificado com a tecla 'y'.

                  Saída

                  Generating a 1024 bit RSA private key
                  ...............++++++
                  ..++++++
                  writing new private key to 'server.key'
                  -----
                  You are about to be asked to enter information that will be incorporated
                  into your certificate request.
                  What you are about to enter is what is called a Distinguished Name or a DN.
                  There are quite a few fields but you can leave some blank
                  For some fields there will be a default value,
                  If you enter '.', the field will be left blank.
                  -----
                  Country Name (2 letter code) [BR]:
                  State or Province Name (full name) [SP]:
                  Locality Name (eg, city) [Juiz de Fora]:
                  Organization Name (eg, company) [BemmelhorSI]:
                  Organizational Unit Name (eg, section) [Divisão de TI]:
                  Common Name (eg, your name or your server's hostname) [server]:
                  Name [BemmelhorSI CA]:Bemmelhor SI - OpenVPN Server
                  Email Address [suporte@bemmelhor.com.br]:
                  
                  Please enter the following 'extra' attributes
                  to be sent with your certificate request
                  A challenge password []:
                  An optional company name []:
                  Using configuration from /etc/openvpn/openssl.cnf
                  Check that the request matches the signature
                  Signature ok
                  The Subject's Distinguished Name is as follows
                  countryName : PRINTABLE:'BR'
                  stateOrProvinceName : PRINTABLE:'SP'
                  localityName : T61STRING:'Sao Paulo'
                  organizationName : PRINTABLE:' Bemmelhor SI'
                  organizationalUnitName: T61STRING:'Divisao de TI'
                  commonName : PRINTABLE:'server'
                  name : PRINTABLE:'Bemmelhor SI - OpenVPN Server'
                  emailAddress : IA5STRING:'suporte@bemmelhor.com.br'
                  Certificate is to be certified until Jun 18 18:57:10 2022 GMT (3650 days)
                  Sign the certificate? [y/n]:y
                  
                  1 out of 1 certificate requests certified, commit? [y/n]y
                  Write out database with 1 new entries
                  Data Base Updated
                  root@openvpn:/etc/openvpn#
                  

                  Dois arquivos serão gerados na pasta /etc/openvpn/keys:

                  1. server.crt - Certificado público do servidor OpenVPN.
                  2. server.key - Chave privada do servidor OpenVPN.

                  3. Configuração do Servidor OpenVPN

                  Gere uma chave TLS (opcional) para aumentar ainda mais a segurança da conexão VPN, permitindo a verificação de integridade de cada pacote TLS, digitando o seguinte comando:

                  $ openvpn --genkey --secret /etc/openvpn/keys/ta.key
                  

                  A configuração do OpenVPN é realizada em qualquer arquivo que termine em .conf, localizado na pasta /etc/openvpn/. Neste tutorial iremos usar o arquivo /etc/openvpn/server.conf. Você pode alterar este arquivo para o nome que desejar, desde que ele termine em .conf. Você pode inclusive ter mais de um serviço OpenVPN ouvindo em outras portas, basta configurar outro arquivo .conf.

                  Crie um /etc/openvpn/server.conf vazio e preencha-o conforme segue.

                  Se preferir, você pode iniciar usando o arquivo de configuração de exemplo do OpenVPN, bastando para isso copiar e descomprimir o arquivo /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz para /etc/openvpn/server.conf:

                  Ajuste o arquivo /etc/openvpn/server.conf conforme abaixo, tomando o cuidado de alterar as linhas destacadas para refletir a realidade de seu ambiente.

                  1. A linha local 10.0.0.1 indica o IP local do servidor em que OpenVPN irá ouvir por novas conexões.
                  2. A configuração server 10.15.0.0 255.255.255.0 informa ao servidor OpenVPN que a rede VPN será 10.15.0.0/24. Altere para a rede que definiu durante a fase de pré-requisitos. O primeiro IP dessa rede será o IP do servidor OpenVPN.
                  3. Se desejar você pode ajustar a linha push "route 10.0.0.0 255.0.0.0" informando ao OpenVPN para adicionar uma rota na tabela de rotas dos clientes VPN no momento da conexão. Neste caso todo o tráfego para a rede 10.0.0.0/8 será redirecionado pela VPN. Você pode ser mais radical e direcionar todo o tráfego de rede pela VPN, incluindo o tráfego de Internet. Para fazer isso, substitua a linha push "route 10.0.0.0 255.0.0.0" por push "redirect-gateway def1".
                  4. As configurações push "dhcp-option" são opcionais e relativas aos parâmetros de DNS a serem informados para o computador cliente. Você pode informar os servidores de DNS locais da rede da sede para que os clientes possam resolver nomes de domínio e acessar os serviços internos com maior facilidade.

                  Muitos dos parâmetros são opcionais e o OpenVPN é extremamente versátil e se adapta a praticamente qualquer ambiente. Você pode verificar o manual do OpenVPN para explorar outras configurações. O arquivo /etc/openvpn/server.conf sugerido é o seguinte:

                  $ nano /etc/openvpn/server.conf
                  

                  Conteúdo sugerido

                  local 192.168.25.100 # ip do servidor de vpn
                  port 2294
                  proto udp
                  dev tun0
                  ca /etc/openvpn/keys/ca.crt
                  cert /etc/openvpn/keys/server.crt
                  key /etc/openvpn/keys/server.key
                  dh /etc/openvpn/keys/dh1024.pem
                  
                  server 50.50.0.0 255.255.255.0 # range de ip que deseja utilizar
                  ifconfig-pool-persist ipp.txt
                  keepalive 10 120
                  tls-auth /etc/openvpn/keys/ta.key 0
                  cipher AES-128-CBC
                  comp-lzo
                  max-clients 100
                  user nobody
                  group nogroup
                  persist-key
                  persist-tun
                  status /var/log/openvpn/openvpn-status.log
                  log-append /var/log/openvpn/openvpn.log
                  verb 3
                  client-config-dir /var/openvpn/clients
                  

                  Crie a pasta /var/log/openvpn para manter os logs do OpenVPN:

                  $ mkdir /var/log/openvpn
                  

                  Se desejar crie o arquivo /etc/logrotate.d/openvpn com o conteúdo a seguir para fazer uma rotação automática dos logs do OpenVPN:

                  $ nano /etc/logrotate.d/openvpn
                  

                  Conteúdo Sugerido

                  /var/log/openvpn/*.log {
                      daily
                      rotate 365
                      compress
                      missingok
                      create 0640 root adm
                      missingok
                      postrotate
                          service openvpn reload
                      endscript
                  }
                  

                  Inicie o OpenVPN executando:

                  $ service openvpn start
                  

                  Verifique se o serviço está em execução com o comando:

                  $ service openvpn status
                  

                  Se tudo ocorreu com sucesso, a saída será semelhante a seguinte:

                  $ service openvpn start
                   * Starting virtual private network daemon(s)...
                   *   Autostarting VPN 'server'
                  
                  $ service openvpn status
                   * VPN 'server' is running
                  

                  Se ocorreu algum problema, verifique o arquivo /var/log/openvpn.log:

                  $ cat /var/log/openvpn/openvpn.log
                  

                  Saída

                  Wed Jun 20 16:16:40 2012 OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Mar 30 2012
                  Wed Jun 20 16:16:40 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
                  Wed Jun 20 16:16:40 2012 Diffie-Hellman initialized with 1024 bit key
                  Wed Jun 20 16:16:40 2012 Control Channel Authentication: using '/etc/openvpn/keys/ta.key' as a OpenVPN static key file
                  Wed Jun 20 16:16:40 2012 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
                  Wed Jun 20 16:16:40 2012 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
                  Wed Jun 20 16:16:40 2012 TLS-Auth MTU parms [ L:1558 D:166 EF:66 EB:0 ET:0 EL:0 ]
                  Wed Jun 20 16:16:40 2012 Socket Buffers: R=[229376->131072] S=[229376->131072]
                  Wed Jun 20 16:16:40 2012 ROUTE default_gateway=10.0.0.1
                  Wed Jun 20 16:16:40 2012 TUN/TAP device tun0 opened
                  Wed Jun 20 16:16:40 2012 TUN/TAP TX queue length set to 100
                  Wed Jun 20 16:16:40 2012 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
                  Wed Jun 20 16:16:40 2012 /sbin/ifconfig tun0 10.15.0.1 pointopoint 10.15.0.2 mtu 1500
                  Wed Jun 20 16:16:40 2012 /sbin/route add -net 10.15.0.0 netmask 255.255.255.0 gw 10.15.0.2
                  Wed Jun 20 16:16:40 2012 Data Channel MTU parms [ L:1558 D:1450 EF:58 EB:135 ET:0 EL:0 AF:3/1 ]
                  Wed Jun 20 16:16:40 2012 GID set to nogroup
                  Wed Jun 20 16:16:40 2012 UID set to nobody
                  Wed Jun 20 16:16:40 2012 UDPv4 link local (bound): [AF_INET]10.9.0.172:1194
                  Wed Jun 20 16:16:40 2012 UDPv4 link remote: [undef]
                  Wed Jun 20 16:16:40 2012 MULTI: multi_init called, r=256 v=256
                  Wed Jun 20 16:16:40 2012 IFCONFIG POOL: base=10.15.0.4 size=62, ipv6=0
                  Wed Jun 20 16:16:40 2012 IFCONFIG POOL LIST
                  Wed Jun 20 16:16:40 2012 Initialization Sequence Completed
                  

                  Uma nova interface de rede (tun0) será criada, conforme ilustra a execução do comando ifconfig abaixo.

                  $ ifconfig
                  

                  Saída

                  eth0      Link encap:Ethernet  HWaddr 00:50:56:be:46:45
                            inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
                            inet6 addr: fe80::250:56ff:febe:4645/64 Scope:Link
                            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                            RX packets:135820 errors:0 dropped:0 overruns:0 frame:0
                            TX packets:58093 errors:0 dropped:0 overruns:0 carrier:0
                            collisions:0 txqueuelen:1000
                            RX bytes:149189479 (149.1 MB)  TX bytes:5400632 (5.4 MB)
                  
                  lo        Link encap:Local Loopback
                            inet addr:127.0.0.1  Mask:255.0.0.0
                            inet6 addr: ::1/128 Scope:Host
                            UP LOOPBACK RUNNING  MTU:16436  Metric:1
                            RX packets:14 errors:0 dropped:0 overruns:0 frame:0
                            TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
                            collisions:0 txqueuelen:0
                            RX bytes:1176 (1.1 KB)  TX bytes:1176 (1.1 KB)
                  
                  tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
                            inet addr:10.15.0.1  P-t-P:10.15.0.2  Mask:255.255.255.255
                            UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
                            RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                            TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                            collisions:0 txqueuelen:100
                            RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
                  

                  O servidor já está no ar. Agora precisamos configurar regras de firewall, se necessário, criar as chaves para os clientes e configurá-los.

                  4. Criando Certificados para Clientes

                  Para cada novo cliente VPN de sua rede, é necessário criar um certificado exclusivo. Isto é feito através do comando /etc/openvpn/build-key ou /etc/openvpn/build-key-pass:

                  $ /etc/openvpn/build-key-pass nome-do-cliente
                  

                  Troque nome-do-cliente por um nome único e exclusivo para cada cliente. Ele será o Common Name do certificado gerado. É importante que no nome-do-cliente não haja espaços em branco, nem caracteres especiais ou acentuados. Até é possível, mas se você não usá-los, terá menos problemas. Você pode usar números, a matricula dos funcionários, CPF, ou o Nome completo, lembrando de trocar o separador do nome por _ ou simplesmente suprimi-lo. Por exemplo, a Caixa Econômica Federal costuma emitir seus certificados usando o nome completo do solicitante, seguido do caracter : e dos números do CPF.

                  Antes de executar o build-key é importante executar source /etc/openvpn/vars para atribuir as informações de sua CA às variáveis de ambiente da sessão corrente.

                  Lembre-se de responder as perguntas adequadamente. Elas já virão pré-preenchidas pelos valores de /etc/openvpn/vars. Você pode colocar qualquer informação no campo name, inclusive espaços em branco e caracteres acentuados.

                  É recomendável usar o build-key-pass ao invés do build-key, visto que o primeiro irá solicitar uma senha secreta para cada cliente. Essa senha sera utilizada em cada conexão OpenVPN. Isso é importante pois caso um notebook que contenha as configurações e certificados de determinado usuário seja perdido ou furtado um meliante não seria capaz de fechar a conexão VPN sem ter a senha. É claro que nestes casos recomenda-se ainda revogar o certificado do cliente.

                  Para gerar um novo certificado para o usuário João da Silva você pode digitar o seguinte:

                  $ source /etc/openvpn/vars
                  $ /etc/openvpn/build-key joao_da_silva
                  

                  Saída:

                  NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys
                  root@openvpn:/etc/openvpn# /etc/openvpn/build-key joao_da_silva
                  Generating a 1024 bit RSA private key
                  ..............++++++
                  .........................++++++
                  writing new private key to 'joao_da_silva.key'
                  -----
                  You are about to be asked to enter information that will be incorporated
                  into your certificate request.
                  What you are about to enter is what is called a Distinguished Name or a DN.
                  There are quite a few fields but you can leave some blank
                  For some fields there will be a default value,
                  If you enter '.', the field will be left blank.
                  -----
                  Country Name (2 letter code) [BR]:
                  State or Province Name (full name) [SP]:
                  Locality Name (eg, city) [São Paulo]:
                  Organization Name (eg, company) [Bemmelhor SI]:
                  Organizational Unit Name (eg, section) [Divisão de TI]:
                  Common Name (eg, your name or your server's hostname) [joao_da_silva]:
                  Name [Bemmelhor SI]:João da Silva
                  Email Address [suporte@bemmelhor.com.br]:suporte@bemmelhor.com.br
                  
                  Please enter the following 'extra' attributes
                  to be sent with your certificate request
                  A challenge password []:
                  An optional company name []:
                  Using configuration from /etc/openvpn/openssl.cnf
                  Check that the request matches the signature
                  Signature ok
                  The Subject's Distinguished Name is as follows
                  countryName           : PRINTABLE:'BR'
                  stateOrProvinceName   : PRINTABLE:'SP'
                  localityName          : T61STRING:'Juiz de Fora'
                  organizationName      : PRINTABLE:'Bemmelhor SI'
                  organizationalUnitName: T61STRING:'Divisao de TI'
                  commonName            : T61STRING:'joao_da_silva'
                  name                  : T61STRING:'Joao da Silva'
                  emailAddress          : IA5STRING:'suporte@bemmelhor.com.br
                  Certificate is to be certified until Jun 19 14:04:54 2022 GMT (3650 days)
                  Sign the certificate? [y/n]:y
                  
                  1 out of 1 certificate requests certified, commit? [y/n]y
                  Write out database with 1 new entries
                  Data Base Updated
                  

                  Três novos arquivos serão gerados na pasta /etc/openvpn/keys:

                  1. joao_da_silva.csr - Solicitação do novo certificado
                  2. joao_da_silva.crt - Certificado público
                  3. joao_da_silva.key - Chave privada

                  Será necessário copiar estes arquivos para o computador do cliente no próximo passo.

                  5. Instalando o Izop

                  $ apt-get install lzop
                  Página inicial do FAQ

                  Bemmelhor SI

                  • Omnichannel
                  • Discador Preditivo
                  • Telefonia IP
                  • Bemmelhor CRM
                  • VOIP
                  • PABX Virtual

                  Produtos

                  • Bemmelhor SI
                    • A Empresa
                      • Blog
                        • Contato
                          • Abrir Ticket de Suporte
                            • FAQ
                              • Trabalhe Conosco

                                Social

                                Onde Estamos

                                   Rua José Lourenço Kelmer 02
                                Edifício do CRITT - Campus UFJF
                                São Pedro - Juiz de Fora - MG

                                Contatos

                                (32) 3211.0536

                                suporte@bemmelhor.com.br

                                Whatsapp

                                5532991450735

                                © Copyright 2022 Bemmelhor Soluções Inteligentes

                                Todos os direitos reservados.