Tutorial OpenVPN + OpenSSL no Raspberry PI (Parte I)

40 Comentários

Na semana passada foram publicados dois tutoriais a ensinar a instalar e a configurar um servidor de VPNs no Ubuntu, usando o OpenVPN. Mas como será no Raspberry Pi? Será que podemos usar o “mini PC” para funcionar como servidor até porque é um dispositivo bastante eficiente em termos energéticos? A resposta é sim, e a instalação e configuração é muito idêntica à que já apresentamos.

rpi_openVPN34


Como sabem, uma rede privada virtual (VPN – Virtual Private Network) garante a segurança das comunicações ponto a ponto, nomeadamente a privacidade, integridade e autenticidade dos dados. Para isso esta tecnologia faz a encriptação dos pacotes, garantindo que estes não sejam lidos por terceiros.

O OpenVPN é um software multi-plataforma que permite a criação de uma VPN entre várias máquinas com sistemas operativos diferentes, e ao contrário do protocolo PPTP, que garante uma criptografia considerada básica, este, para além de conseguir garantir uma elevada criptografia, garante também um elevado desempenho.

vpn_01_thumb

Algumas características do OpenVPN

  • Criptografia entre: 160 bits e 256 bits, sendo os dados autênticos com certificados digitais;
  • Um dos melhores protocolos a nível de desempenho, confiabilidade e estabilidade;
  • Software multi-plataforma, suportado pela maioria dos sistemas operativos desktop e de dispositivos móveis (Android e iOS).

Vamos então começar com a instalação e configuração.

Passo 1)  Instalar os serviços de OpenVPN e OpenSSL

sudo apt-get install openvpn openssl

Passo 2) Copiar a configuração de exemplo do easy-rsa

cd /etc/openvpn && sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa

Passo 3) Modificação do ficheiro “vars”

A ferramenta easy-rsa inclui o ficheiro “vars” que podemos editar e mudar alguns parâmetros definidos por omissão e que serão depois úteis na hora de criar os certificados. Para editar o ficheiro basta usar o comando e editar confirme mostra a figura seguinte.

sudo nano easy-rsa/vars

rpi_openVPN

Nota: Depois de editar o ficheiro, pressionar as teclas: Ctrl + X (sair), seguido de Y para gravar e Enter.

Vamos agora copiar o ficheiro /etc/openvpn/easy-rsa/openssl-1.0.0.cnf para /etc/openvpn/easy-rsa/openssl.cnf para que não haja problemas ao nível do OpenSSL.

sudo cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

Passo 4)  Criação da Public Key Infrastructure usando osscripts easy-rsa

source ./vars
./easy-rsa/vars && sudo -E ./easy-rsa/clean-all

Nota2: -E: Indica que o utilizador deseja preservar as variáveis de ambiente existentes.

— Configuração do servidor — 

Uma vez instalado o OpenVPN, vamos proceder à configuração do servidor. Para isso, vamos começar por criar o ficheiro da Autoridade de certificação (CA), onde irá ser pedido ao utilizador para completar alguns dados como o Nome, País, etc, que podem ser preenchidos ou não.

Passo  6) – Criar o ficheiro da Autoridade de certificação (CA)

cd easy-rsa && sudo -E ./build-ca VPN

Passo  7)  Criação do certificado do servidor

Agora que temos a CA criada, vamos criar o próprio certificado para o servidor OpenVPN

sudo -E ./build-key-server server

O procedimento de preenchimento é o mesmo do anterior, acrescentando apenas um parâmetro ao qual devem responder sim (Y), sendo ele a assinatura do certificado. Se tiver alguma dificuldade veja aqui o nosso tutorial.

Passo  8) Gerar um certificado de cliente

sudo -E ./easy-rsa/build-key ipad

O nome dado ao certificado foi “ipad”, mas foram criados mais dois certificados (android e pc) para usar futuramente em cada dispositivo . Cada um pode criar os certificados que entender.

rpi_openVPN2

É necessário também gerar a chave Diffie Hellman para a troca inicial segura (entre cliente e servidor) das chaves. Para isso basta usar o seguinte comando:

sudo -E ./easy-rsa/build-dh

De seguida, vamos proceder à configuração propriamente dita do serviço OpenVPN, definindo alguns parâmetros importantes, como os certificados, servidor, DNS…

Passo  9) Criar ficheiro de configuração

Para criar um ficheiro com o nome server.conf podem usar o editor nano:

sudo nano /etc/openvpn/server.conf

O conteúdo do ficheiro deverá seguir o seguinte exemplo. Não se esqueçam de verificar se têm os certificados criados em /etc/openvpn/easy-rsa/keys.

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
# Chave Diffie Hellman 
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
dev tun
server 10.8.0.0 255.255.255.0
proto udp
port 1194
#DNS Server
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn
comp-lzo
client-to-client
#Para encaminhar todo o trafego do cliente via VPN
push "redirect-gateway def1"

Como se pode verificar na configuração acima, a porta definido para correr o serviço é o 1194. Por omissão, o serviço OpenVPN usa esta porta, mas podem sempre alterar alterar assim como os DNS entre outros parametros.

rpi_openVPN3

E está feito. No próximo tutorial vamos ensinar como podem configurar o NAT no Raspberry e também o Port Forwarding,  no router Technicolor TG784n v3. Estejam atentos, a segunda parte sai já amanha.

Comentários

40

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Pedro A.
    Pedro A.

    Ficaram sem ideias?
    pplware.sapo.pt/linux/raspberry-pi/transforme-o-seu-raspberry-pi-num-servidor-de-vpns/

    1. Avatar de Pedro Pinto

      Que comentário mais absurdo. Tens um artigo renovado e mais documentado e ainda te queixas? OMG!

      1. Avatar de Pedro A.
        Pedro A.

        Ai que o menino ficou picado.
        Como não referiram que já tinham feito um artigo mais antigo e que este estava mais documentado, e porque tive um dejá-vu fui procurar.
        Mas pronto, já estou habituado à vossa falta de humildade.

        1. Avatar de Maximvs
          Maximvs

          Mais um comentário ridículo, tu é que demostras falta de humildade. Informação gratuita, tens um artigo renovado e mais completo o que queres mais?
          Quando a ignoraria chega a este tamanho o que devemos de dizer mais… alguém que se deu ao trabalho de ir buscar um artigo com quase 2 anos e dizer que é o suficiente, vai chegar muito longe nesta vida :/

          1. Avatar de RMG
            RMG

            “Informação gratuita, tens um artigo renovado e mais completo o que queres mais?” lol? > informação gratuita só se te referires à tradução do conteúdo. Isto é só artistas.

            +1 para o Pedro A.

            Se querem atualizar as infos de um post, editem-no – senão quem der com o outro post primeiro fica agarrado a informação desatualizada.

  2. Avatar de lmx
    lmx

    Boas,

    Parabéns Pedro pelo artigo, estas ferramentas nos dias de hoje são mesmo uteis..

    Omitis-te o comando “source ./vars” … 😉
    podes acrescentar também uma directiva útil no ficheiro de config, para revogar certificados..
    “crl-verify crl.pem” (que é a lista de users com certificado revogado..)

    cmps

    1. Avatar de Pedro Pinto

      Obrigado lmx pelas dicas. Abraço

      1. Avatar de Renato
        Renato

        Pedro, poderia entrar em contato comigo, preciso de uma força sua numa configuração do raspberry para vpn, (remunerada claro!) 11 99326.2323 Renato

  3. Avatar de Marco
    Marco

    usaram o dns do google pq nao o opendns?

    1. Avatar de Pedro Pinto

      É o que preferires. Pessoalmente gosto mais do DNS da Google…e o Miguel também 😉

      1. Avatar de Marco
        Marco

        é só pq no open n tens o google a cheirar

      2. Avatar de Renato Pichelli
        Renato Pichelli

        Pedro, poderia entrar em contato comigo, preciso de uma força sua numa configuração do raspberry para vpn, (remunerada claro!) 11 99326.2323 Renato

    2. Avatar de Miguel Almeida
      Miguel Almeida

      Tal como referido no artigo, alguns dos parâmetros são “ao gosto” de cada um. 🙂

  4. Avatar de kekes
    kekes

    Artigos destes a casa agradece! Venham mais!

  5. Avatar de Daniel
    Daniel

    Nice!
    Quando chegar a Portugal vou implementar!

  6. Avatar de José
    José

    muito interessante para quem de fora queira ter acesso a casa. e usar o RPI para servir de getway para um servidor nos usa, acho que faz mais sentido.

    1. Avatar de Pedro Pinto
    2. Avatar de Marco
      Marco

      ou para configurares a vpn no tablet/smartphone e poderes usar com alguma segurança os wifi abertos que andam por ai.

      1. Avatar de David Jesus
        David Jesus

        Eu uso no IPhone com muita frequência 🙂

  7. Avatar de HugoP
    HugoP

    E para quando um tutorial, como ligar o PI a uma VPN?? (peço desculpa se ja existe)

  8. Avatar de Blind
    Blind

    e o que me dizem deste projeto que está no kickstarter e que necessitava de 50.000 USD e já tem mais de 1,6 milhoes de USD …. 9 USD por um minipc (512mb ram, 4gb internos, wifi, bluetooth, saida a/v, usb)!!!
    https://www.kickstarter.com/projects/1598272670/chip-the-worlds-first-9-computer

  9. Avatar de lmx
    lmx

    Alguém ja tentou correr a firewall ipfire no Raspberry pi2?

    1. Avatar de RP
      RP

      Também gostava de saber isso.
      Eu tenho a IPFire a correr no Raspberry Pi B+, mas no novo modelo não sei se corre.

  10. Avatar de Alex
    Alex

    Porque não ensinam a instalar no Linux mint? Já que estão numa de quase copia…

  11. Avatar de Pedro
    Pedro

    Qual a vantagem de usar o openVPN face ao softether, com protocolo L2TP over IPsec?

  12. Avatar de Daniel G.
    Daniel G.

    por coincidencia, no sabado aggarei no meu pi que estava pra la num canto e procurei um tuturial como fazer isto e encontrei varios, mas acabei por desistir do open vpn porque estava a ter problemas com o pkitool, acabei por usar PPTP e esta a funcionar impecavelmente, mas assim que tiver tempo vou voltar a estaca zero e tentar com este guia.
    ja agora alguem me pode esclarecer o porque de ter sempre problemas com o pkitool quando tento fazer isto? e sempre na altura de gerar as chaves…

  13. Avatar de David Jesus
    David Jesus

    Instalei a pouco tempo o openvpn business, dispõe de uma interface gráfica que achei bastante interessante, e para quem quiser experimentar tem duas licenças gratuitas.

  14. Avatar de TESToculos
    TESToculos

    ja alguem testou?
    o ultimo tutorial deste tipo no raspberry nao funcionou comigo e acabei de instalar novos serviços.
    alguem que de o feedback por favor se ja tiverem testado.

  15. Avatar de Tico
    Tico

    o raspberry mesmo com um cartão de memória “grande”, isto é, com capacidade não aproveitada, está sempre a dizer que não tem espaço e não dá para apagar programas para ganhar o espaço necessário para instalar novos. Alguém sabe como fazer para aumentar a capacidade da partição que ele cria por defeito onde são instalados os programas?

  16. Avatar de Cesar Almeida
    Cesar Almeida

    Bom guia, no entanto no passo 4 quando eu insiro o comando “source ./vars” recebo o seguinte erro: -bash: ./vars: No such file or directory

    Alguém pode esclarecer/ajudar?

    1. Avatar de Tiago Ermida
      Tiago Ermida

      Também me deparei com esse erro.
      estando a trabalhar na directoria /etc/openvpn e o ficheiro vars estar na directoria /etc/openvpn/easy-rsa retorna esse erro.

      Mudando de directoria para /etc/openvpn/easy-rsa retorna a mensagem “NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

      1. Avatar de Jose Guerreiro
        Jose Guerreiro

        Mais um com esse erro.
        Alguem pode ajudar?

  17. Avatar de Hugo
    Hugo

    Fiz a instalação do openvpn e openssl porém, não encontrei o easy-rsa. Acessei a pasta e não há nada com esse nome, apenas três pastas, sendo elas: “sample-config-files”, “sample-keys” e “sample-scripts”.
    Alguém poderia me ajudar?

    1. Avatar de josé Matias
      josé Matias

      Hugo,
      Tenta na seguinte directoria:
      /usr/share/easy-rsa/

  18. Avatar de Romão
    Romão

    Alguém me pode ajudar!
    Quando faço source ./vars devolve-me o seguinte:
    bash: /etc/openvpn/easy-rsa/whichopensslcnf: Permission denied
    Note: If yuo run ./clean-all, I will …….
    Já tentei dar o comando como root e dá o mesmo resultado.
    Obrigado!

  19. Avatar de Eduardo
    Eduardo

    Boa noite,estou com problemas no openvpn no raspberrypi com pipplware 5,não sei como resolver problema.
    Aqui fica os logs.Obrigado

    2015-12-12 19:09:37 auth_user_pass_file = ‘[UNDEF]’
    2015-12-12 19:09:37 OpenVPN 2.4-icsopenvpn [git:icsopenvpn_645-e6b5e62e37c02d5b] android-14-armeabi-v7a [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH] [IPv6] built on Dec 8 2015
    2015-12-12 19:09:37 library versions: OpenSSL 1.0.2e 3 Dec 2015, LZO 2.09
    2015-12-12 19:09:37 MANAGEMENT: Connected to management server at /data/data/de.blinkt.openvpn/cache/mgmtsocket
    2015-12-12 19:09:37 MANAGEMENT: CMD ‘hold release’
    2015-12-12 19:09:37 MANAGEMENT: CMD ‘bytecount 2’
    2015-12-12 19:09:37 MANAGEMENT: CMD ‘state on’
    2015-12-12 19:09:37 MANAGEMENT: CMD ‘proxy NONE’
    2015-12-12 19:09:38 LZO compression initializing
    2015-12-12 19:09:38 Control Channel MTU parms [ L:1542 D:1212 EF:38 EB:0 ET:0 EL:3 ]
    2015-12-12 19:09:38 MANAGEMENT: >STATE:1449947378,RESOLVE,,,,,,
    2015-12-12 19:09:39 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:393 ET:0 EL:3 ]
    2015-12-12 19:09:39 Local Options String (VER=V4): ‘V4,dev-type tun,link-mtu 1542,tun-mtu 1500,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client’
    2015-12-12 19:09:39 Expected Remote Options String (VER=V4): ‘V4,dev-type tun,link-mtu 1542,tun-mtu 1500,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server’
    2015-12-12 19:09:39 TCP/UDP: Preserving recently used remote address: [AF_INET]188.##.##.110:1194
    2015-12-12 19:09:39 Socket Buffers: R=[163840->163840] S=[163840->163840]
    2015-12-12 19:09:39 MANAGEMENT: CMD ‘needok ‘PROTECTFD’ ok’
    2015-12-12 19:09:39 UDP link local (bound): [AF_INET][undef]188.##.##.110:1194
    2015-12-12 19:09:39 UDP link remote: [AF_INET]ip :1194
    2015-12-12 19:09:39 MANAGEMENT: >STATE:1449947379,WAIT,,,,,,

  20. Avatar de Marcio
    Marcio

    Boas
    Antes de mais obrigado pelo tutorial, mas estou a ter problemas. Alguém utilizando passo a passo deste tutorial conseguiu meter a funcionar? Logo no passo dois empanca, a pasta easy-rsa com muitos falaram aqui não existe… Será que desde a sua criação ate a data de hoje os caminhos das pastas alteraram?
    Cumprimentos

    1. Avatar de Miguel
      Miguel

      pois, tenho o mesmo problema. Alguém conseguiu por isto a bombar??