Aprenda a criar um servidor de VPNs no Ubuntu 15.04

25 Comentários

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.

Hoje vamos ensinar como podem criar um servidor de VPNs no Ubuntu 15.04 usando o OpenVPN.

openvpn


O OpenVPN é um software multi-plataforma que permite a criação de uma VPN entre várias máquinas com sistemas operativos diferentes. Para proceder à instalação e configuração do OpenVPN e OpenSSL (obrigatório para a criação de certificados para o serviço), devem seguir os seguintes passos:

Passo 1) Instalar o Openvpn e Openssl

sudo apt-get install openvpn openssl

Passo 2) Copiar configuração de exemplo

O OpenVPN traz já uma configuração exemplo para ser usada como base. Vamos copiar essa configuração para /etc/openvpn

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn

Passo 3) Modificação do ficheiro de configuração do OpenVPN

Como resultado do passo anterior, passamos a ter em /etc/openvpn o ficheiro server.conf. Vamos editá-lo e incluir/alterar os seguintes parâmetros:

#Para encaminhar todo o trafego do cliente via VPN
push "redirect-gateway def1 bypass-dhcp"
#Servidores de DNS a serem usados pelo cliente
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Por questões de segurança, use o user e grupo nobody que têm poucas permissões
user nobody
group nobody

Passo 4) Cópia da estrutura easy-rsa

Após a instalação, é necessário gerar as chaves para o servidor e client. O openvpn traz já uma estrutura de exemplo, designada de easy-rsa, na qual podemos-nos basear para configurar a nossa VPN. Para isso, vamos usar essa estrutura em /etc/openvpn, copiando-a de /usr/share/easy-rsa.

sudo apt-get install easy-rsa
sudo cp -R /usr/share/easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa/

Passo 5) 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:

nano -w /etc/openvpn/easy-rsa/vars

Nota: Adaptem os dados ao vosso cenário. Estes parâmetros podem ser posteriormente modificados, aquando da criação dos certificados.
easyRSA

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

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

Passo 6) Criação da Autoridade de certificação (CA)

Basicamente basta introduzir os comandos seguinte e depois, de forma interativa, ir confirmando ou alterando as informações solicitadas.

cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca

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

./build-key-server server

É necessário também gerar a chave Diffie Hellman para a troca inicial segura (entre cliente e servidor) das chaves.

./build-dh
cd /etc/openvpn/easy-rsa/keys
cp dh1024.pem ca.crt server.crt server.key /etc/openvpn

Por fim, para autenticar os clientes com base no certificado, é preciso criar um certificado por cada cliente. Para isso basta usar executar os seguintes comandos:

cd /etc/openvpn/easy-rsa
./build-key client

Configurações de Encaminhamento

De acordo com a configuração que temos no ficheiro server.conf,  o endereço 10.8.0.1 vai ser atribuído ao túnel do lado do servidor enquanto os restantes IPs da rede 10.8.0.0 passarão a estar disponíveis para os clientes.

vpn_04

Vamos então criar uma regra NAT no iptables para que todos os pacotes com origem na rede 10.8.0.0/24 sejam encaminhados via eth0

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
sudo apt-get install iptables-persistent

Vamos agora activar o encaminhamento IP
nano -w /etc/sysctl.conf
net.ipv4.ip_forward = 1

E por fim vamos aplicar as configurações anteriores e iniciar o servidor OpenVPN

sysctl -p
/etc/init.d/openvpn start

Se tudo correr bem, podemos ver se o túnel já está criado usando o comando

ifconfig tun0

tun
Com as configurações anteriores, criamos com sucesso a parte do servidor. Num próximo tutorial iremos ensinar a configurar um cliente, de forma a podermos estabelecer ligação VPN a partir de qualquer lugar. Estejam atentos, será em breve.

Comentários

25

Deixe um comentário

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

  1. Avatar de KikoFHM
    KikoFHM

    É com VPN’s que me consigo ligar a uma rede wifi usando outra?
    Caso prático: tenho um jogo que permite lan mode por wifi (pokemon) mas os meus colegas não estão na mesma rede. com isto podemos ficar ligados como se tivéssemos lado a lado?
    ou não é esta a finalidade?

    1. Avatar de Samuel Tavares
      Samuel Tavares

      Sim com VPN podem até criar uma rede privada p jogarem em LAN, mas teem que configurar os IP’s e um tem que estar todos ligados na mesma rede (router / switch).

    2. Avatar de Pedro Pinto

      De certa forma sim, mas esta não será a solução para ti 🙂

    3. Avatar de LeCru
      LeCru

      Boa pergunta, tambem gostava de saber se, criando uma VPN numa rede publica(Ex.: rede da universidade) é possivel ter uma rede de partilha de ficheiros entre um pequeno grupo dentre dessa mesma VPN?

      1. Avatar de W10 Incoming
        W10 Incoming

        Sim mas nota que esta é uma arquitetura de cliente->servidor. O que pretendes é melhor numa arquitetura P2P em que os clientes “falam entre si”. Também pode ser feito com OpenVPN mas existem soluções mais user-friendly e rápidas de configurar se o que pretendes é uma coisa pontual. Soluções do género Hamachi.

    4. Avatar de Thyago Brasileiro
      Thyago Brasileiro

      Otimo tutorial, Parabens.

      Depois de um certo tempo as variaveis KEY dão problemas, e ao criar usuarios aparecem msg de erros, muito reportados em foruns, resolvi isso usando o comando:
      root@ServerVPN009: [/etc/openvpn/easy-rsa] :# source /vars

      Em relação ao comando de criar usuarios(./build-key client), eu prefiro o ./build-key-pass client

      Em relaçao ao uso da VPN para tentar driblar localizaçao para jogos eu digo que funciona SE BEM CONFIGURADO e depende o pouco de como tudo é interligado. Mas não se apeguem apenas a OPENVPN, a tecnologia de TunnelSSH é muito utilizada nesse sentido tambem, este ultimo é muito usadas ate por empresas como serviço de tunnelamento para jogos e que com um pouco de conhecimento todos podem usar gratis.

      Para aqueles que citaram uso de VPS, uma solução interessante a ser pesquisada para tunnel para jogos é “tunnel ssh com putty” onde é possivel driblar muitos firewall e ate usar a localizaçao do VPS como origem para muitos serviços. EX, eu tenho um servidor VPN nos EUA, nele esta instalado o serviço de ssh que se for no Debian-Like é openSSH e se for no Red-Hat-Like(Fedora ou CentOS) é SSHD, tendo este serviço configurado e funcionando podemos conectar de qualquer lugar usando o putty, porque todos os VPN tem um ip publico e fixo para acesso do cliente. Depois habilita o ip-forward(mencionado no tutorial), e ai vem a magica, ainda com o putty com o ssh conectado, mexa nas configuração de tunnel do putty e configure o tunnel, onde criará um serviço local na sua maquina com um porta, tudo que se conectar nesta posta será direcionado para dentro do tunnel ssh ate o VPS, driblando firewall no caminho. O navegador é um exemplo de aplicativo que pode ser conectado nesta porta local, usando assim um tipo de http-proxy. Caso use o navegador para isso cuidado ao usar site como o facebook, ele detectará que a conexao estará vindo do VPS e bloqueara seu usuario caso vc nao prove o teste que o facebook faz para usuarios conectando pela primeira vez de outra localidade.

      Pesquisem sobre “port forwarding com putty” que sua mente abrira bastante

      OBS: no vps é interessante instalar o squid em modo transparente bastando editar no squid.conf
      port 3128 transparent

  2. Avatar de João
    João

    Eu tenho alugado um servidor nos States, onde tenho instalado o openvpn, para jogos, mas a playstation não permite configurar vpn, será possivel com o RPI, ligar-me a vpn e por rede ligar a playstation ao RPI e ter tambem na playstation vpn ?

  3. Avatar de diogofdsilva
    diogofdsilva

    Kiko, uma vpn permite aceder a redes privadas a partir de um ponto exterior a essa rede.

    Parece-me que o que queres é isto: https://secure.logmein.com/PT/products/hamachi/

    Instalas isso com os teus colegas e crias uma rede privada entre todos, funciona como se todos estivessem na mesma rede física mesmo estando cada um em sua casa.

    1. Avatar de W10 Incoming
      W10 Incoming

      Concordo, para o caso dele parece-me mais adequado. OpenVPN para esse tipo de utilização é excessivamente complicado e overkill.
      OpenVPN é mais para quem quer aceder à rede de casa/escritório de forma segura e não para andar a fazer redes para jogos ocasionais.

    2. Avatar de KikoFHM
      KikoFHM

      O Hamachi conheço mas penso que agora a versão gratuita estava ou tem os dias contados.
      o OpenVPN parece-me bem pois permite multiplataforma.

      a ideia é ter um serviço em que o jogar seja também em dispositivos móveis.
      Até porque eu já não jogo à anos, por motivos profissionais e pessoais, mas os dispositivos móveis quando existem jogos em que para se jogar 2 jogadores tem ser na mesma rede wifi ao ler isto despertou interesse e fez-me pensar 🙂

  4. Avatar de W10 Incoming
    W10 Incoming

    Bom tutorial.
    +Respect

    No meu setup tenho ainda mais uma layer de segurança que é uma chave estática que tem de ser introduzida no servidor e no cliente, ao fim ao cabo a fazer de “HMAC Firewall”.

  5. Avatar de rodrigo silva
    rodrigo silva

    cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
    cp: impossível obter estado de “/usr/share/doc/openvpn-*/sample/sample-config-files/server.conf”: Arquivo ou diretório não encontrado
    achado em /usr/share/doc/openvpn/examples/sample-config-files/server.conf
    não estou conseguindo achar easy-rsa 🙁 algum pode me ajudar?

    1. Avatar de Luis
      Luis

      Tenho o mesmo problema!!!

    2. Avatar de Pedro Pinto

      Bom dia Rodrigo,

      Certamente não tens o easy-rsa instalado.
      sudo apt-get install easy-rsa

      Depois dá feedback.

    3. Avatar de Pedro Pinto

      Já agora, reparei que entre versões do Ubuntu mudam alguns pormenores. Estive a testar com o Ubuntu 14.10 e o server.conf está compactado no ficheiro /user/share/doc/openvpn/examples/sample-config-files/server.conf.gz

      Descompacta gunzip /user/share/doc/openvpn/examples/sample-config-files/server.conf.gz
      e passa o ficheiro server.conf para a estrutura.

      cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn

  6. Avatar de rodrigo silva
    rodrigo silva

    VLW 🙂 gente funciono direitinho, desculpa a demora para responder.

  7. Avatar de Diogo
    Diogo

    Boa tarde,

    Após seguir todas as indicações e sem identificar nenhum erro, no final quando digito: ifconfig tun0 dá a seguinte msg de erro: tun0: error fetching interface information: Device not found
    Correndo o ifconfig apenas tenho a eth0, alguma sugestão?

    obrigado.

    1. Avatar de adb
      adb

      Tenho o mesmo problema. 🙁
      Alguem pode ajudar?

      1. Avatar de Rodrigo Vidoi
        Rodrigo Vidoi

        Estou com o mesmo problema , conseguiram resolver ???

  8. Avatar de LuisF
    LuisF

    Fiz como manda o pplware e não consegui fazer rodar a VPN.
    Segui os passos neste link : https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04
    E agora sim tenho tudo a rodar.
    Neste link explica o cliente para Windows e Linux.
    Estou a utilizar o Ubuntu 14.04 LTS ultima versão de Novembro de 2015
    Quero agradecer ao pplware tudo o que tem feito para o Linux, vosso site *****
    Parabéns a toda a equipa.

  9. Avatar de jmrdocs14
    jmrdocs14

    Estou com um problema aqui: quando escrevo push “redirect-gateway def1 bypass-dhcp” aparece push: MAILHOST not set

    Não percebo quase nada do assunto e já pesquisei muito mas todos os sites eram muito complicados. Por favor, ajudem-me!!!

  10. Avatar de Cleber
    Cleber

    Olá Pedro, em pesquisa na internet achei seu artigo de VPN, configurando o servidor.
    No final vc cita que vai criar artigo sobre a configuração do cliente da VPN, não estou encontrando o mesmo…
    Poderia colar o link para o mesmo?
    Abraço.

  11. Avatar de Rafael Medeiros
    Rafael Medeiros

    Olá eu fiz a instalação do openVpn server no meu Ubuntu, fiz conexão e funcionou perfeitamente, eu posso usar meu usuário admin em vários dispositivos ? Ou só um conexão para um usuário apenas?

  12. Avatar de jucelino
    jucelino

    como instalar e configurar uma arquitetura p2p em vps ou dedicado linux? alguem teria alguma base para me ajudar?