Tutorial OpenVPN + OpenSSL no Raspberry PI (Parte I)
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.
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.
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 |
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.
É 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 <span>Diffie Hellman </span> 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.
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.
Autor
Por Miguel Almeida para o PPLWARE
Este artigo tem mais de um ano
Ficaram sem ideias?
pplware.sapo.pt/linux/raspberry-pi/transforme-o-seu-raspberry-pi-num-servidor-de-vpns/
Que comentário mais absurdo. Tens um artigo renovado e mais documentado e ainda te queixas? OMG!
+1
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.
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 :/
“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.
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
Obrigado lmx pelas dicas. Abraço
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
usaram o dns do google pq nao o opendns?
É o que preferires. Pessoalmente gosto mais do DNS da Google…e o Miguel também 😉
é só pq no open n tens o google a cheirar
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
Tal como referido no artigo, alguns dos parâmetros são “ao gosto” de cada um. 🙂
Artigos destes a casa agradece! Venham mais!
Nice!
Quando chegar a Portugal vou implementar!
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.
Essa é a parte 2 😀
ou para configurares a vpn no tablet/smartphone e poderes usar com alguma segurança os wifi abertos que andam por ai.
Eu uso no IPhone com muita frequência 🙂
E para quando um tutorial, como ligar o PI a uma VPN?? (peço desculpa se ja existe)
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
Alguém ja tentou correr a firewall ipfire no Raspberry pi2?
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.
Porque não ensinam a instalar no Linux mint? Já que estão numa de quase copia…
Tens aqui para o mint: https://pplware.sapo.pt/linux/openvpn-como-configurar-um-cliente-vpn-no-ubuntu/
é´igual 🙂
Qual a vantagem de usar o openVPN face ao softether, com protocolo L2TP over IPsec?
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…
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.
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.
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?
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?
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
“
Mais um com esse erro.
Alguem pode ajudar?
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?
Hugo,
Tenta na seguinte directoria:
/usr/share/easy-rsa/
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!
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,,,,,,
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
pois, tenho o mesmo problema. Alguém conseguiu por isto a bombar??