Acesso remoto – VPN

Essa é uma continuação do post sobre acesso remoto, agora falando dos programas de VPN: OpenVPN, VPNC, AnyConnect e FortiClient. Uma VPN (Virtual Private Network) é uma rede particular virtual que conecta dois ou mais computadores utilizando uma rede pública (geralmente a internet) sem que outras pessoas tenham acesso a essa informação. Desse modo, é possível evitar a construção de uma rede física independente para ligar os computadores de uma empresa com várias filiais, por exemplo.

vida-de-programador-ferias

OpenVPN

O OpenVPN depende do OpenSSL para criptografia SSL/TLS e funcionalidades associadas (confidencialidade, autenticação, integridade, não-repudio). O protocolo SSL (Secure Socket Layer) foi inventado pela Netscape para dar segurança nas conexões com servidores web, sendo depois padronizado pela IETF sob o acrônimo TLS (Transport Layer Security) - veja mais sobre Criptografia clicando no link. O OpenVPN também fornece a ferramenta easy-rsa, a qual serve como uma infraestrutura de certificação X.509 para gerar um certificado de autoridade privado.

Seu funcionamento é basicamente esse: depois de criptografados, os dados são então encapsulados e transmitidos pela Internet, utilizando o protocolo de tunelamento, até encontrar seu destino, onde são recebidos, desencapsulados, descriptografados e armazenados. O tunelamento consiste em criar um túnel (conceito semelhante aos túneis rodoviários, onde quem está fora não vê o que está dentro) para que os dados possam ser enviados sem que outros usuários tenham acesso.

Cada computador da VPN precisa ter o programa de VPN instalado, como o OpenVPN no caso do Linux. A configuração no servidor/matriz podem ser vistas clicando no link. No caso do computador cliente/filial, primeiro execute algum dos seguintes comandos para instalar o OpenVPN:

$ sudo apt-get install openvpn
$ sudo apt-get install -y network-manager-openvpn network-manager-openvpn-gnome

Existem duas opções de instalação: a primeira linha permite o uso do OpenVPN através de linha de comando, enquanto que o segundo atua em conjunto com o NetworkManager, uma ferramenta de rede que possibilita configurar e modificar as conexões com o seu sistema, muito útil principalmente para conexões wireless.

O administrador de rede deve cadastrar um usuário e senha usando um programa que administra as VPNs e depois passar um arquivo de configuração de conexão (.ovpn), um arquivo do certificado de usuário (.pem), um de certificado CA (.pem) e um de chave privada (.key) ao usuário. Caso não passe o arquivo ovn, as informações deverão ser preenchidas "na mão". O conteúdo do arquivo ovpn é algo como:

client
# Usar como interface o driver TUN
dev tun
# OpenVPN usa a porta 5000/UDP por padrão.
# Cada túnel do OpenVPN deve usar
# uma porta diferente
port 5000
proto udp
# Indica onde está o ip da Matriz
remote exemplo.com.br
resolv-retry infinite
nobind
persist-key
persist-tun
auth-user-pass
# Usa a biblioteca lzo de compressão
comp-lzo
auth-retry interact
# Nível de log
verb 3
reneg-sec 0
status crssl_client_status.log
ca RootCertificado.pem
cert UserCertificado.pem
key UserPrivateKey.key

Para criar uma nova VPN usando esse arquivo de configuração, clique no ícone do Network Manager -> Conexões VPN -> Configurar VPN e "importar uma configuração de VPN salva". Escolha o arquivo ".ovpn" e coloque a localização dos arquivos enviados, caso estejam em pastas diferentes. Insira o usuário e a senha utilizados no computador da matriz e clique em salvar.

Também existe a opção do administrador de rede passar ao cliente uma URL para ser aberta em um browser - caso seja um número IP, digite o "https://" antes se não conseguir o acesso. Se aparecer uma tela solicitando login e senha, insira o usuário e senha fornecidos pelo administrador. Então seguirá para uma tela de download do programa para cada sistema operacional (no caso do Linux, o comando para instalação já foi explicado mais acima) e do perfil de conexão ("connection profile", o tal arquivo ".ovpn"), que pode ser do tipo que exige login e senha digitados pelo usuário a cada conexão ("user-locked") ou com login automático ("autologin").

Tela de download do OpenVPN (programa e credenciais de acesso) em link de internet fornecido pelo administrador de rede para o cliente.

Tela de download do OpenVPN (programa e credenciais de acesso) em link de internet fornecido pelo administrador de rede para o cliente.

Para testar, volte ao ícone de rede e escolha a VPN inserida no menu "Conexões VPN". Se não estiver usando o NetworkManager, no terminal de texto, vá para o diretório onde está seu arquivo ".ovpn" e digite o seguinte comando como super usuário:

$ sudo openvpn --config client.ovpn

Abra um terminal só para executar esse comando, pois vai ficar "preso" durante toda a conexão na VPN - digitando "CTRL+C" nesse mesmo terminal, a conexão será encerrada.

Verifique pelo comando "ifconfig tun0" as configurações de sua rede túnel - se não aparecer a conexão "tun0", é porque não foi criado o túnel da VPN. Note que o IP classe 192.168.2.0/24 (note o 2 no meio) geralmente é o reservado para a VPN. Pode ser necessário adicionar regras para permitir o tráfego UDP na porta utilizada na regra de iptables da matriz e da filial - veja mais no post de comandos de rede Linux. Para desligar a VPN, use o comando "sudo ifconfig tun0 down".

VPNC

Outro programa é o VPNC (para cliente Cisco), compatível com IPsec, que pode ser instalado através do seguinte comando:

$ sudo apt-get install network-manager-vpnc # ou somente "vpnc" para ficar só

Para conectar/desconectar via terminal, utilizam-se os seguintes comandos, respectivamente:

$ sudo vpnc /<caminho-do-arquivo-conf>/VPN-file.conf
$ sudo vpnc-disconnect

Esse arquivo de configuração (.conf) tem o seguinte formato (é mais seguro não usar as últimas duas linhas com o nome de usuário/senha, digitando-os no prompt):

  IPSec gateway   {numero_ip}
  IPSec ID        {name_of_the_vpn}
  IPSec secret    {pass code for the name_of_the_vpn}

  Xauth username  {real_or_virtual_user}
  Xauth password  {password for the real_or_virtual_user}

Você também pode editar o arquivo "vpn2ctio" e conectar usando o comando "vpnc vpn2ctio", que perguntará o usuário e senha. Os arquivos de configuração normalmente são armazenados no diretório "/etc/vpnc" - utilize "chmod 600 vpn2ctio" para evitar visualizações de 'curiosos'.

Caso possua um arquivo ".pcf", você pode convertê-lo para ".conf" através de um script em Perl e do "cisco decrypt program" (veja mais detalhes no link), alterando suas permissões através de "chmod 600 file.conf" e procedendo da mesma forma que descrito anteriormente.

Também é possível usar tanto o arquivo ".conf" como o ".pcf" diretamente pela interface gráfica, clicando em "Conexões VPN -> Configurar VPN -> VPN -> Importar" e escolher o arquivo enviado pelo administrador do sistema. Não esqueça de checar o item "permitir que todos os usuários conectem a essa rede. Caso não apareça para adicionar/importar a VPN, instale o pacote "network-manager-vpnc-gnome".

AnyConnect

Outro programa que funciona parecido é o AnyConnect VPN Client (também para cliente cisco). Abra um navegador e vá para o link fornecido pelo administrador do sistema. Em seguida, você será redirecionado para uma página de login. Depois da autenticação, o processo de instalação no cliente tem início - caso necessário, clique no link com o kernel do seu sistema operacional, salve o arquivo que aparecer na pop up, vá ao terminal, torne o arquivo baixado executável e execute-o como super usuário. Por fim, vá ao menu Aplicações -> Internet -> Cisco AnyConnect Client, entre com as credenciais e conecte - para ver o status da conexão, clique no ícone aberto com o botão direito.

De todos os modos, o administrador de rede deve cadastrar um usuário e senha para que, ao entrar no túnel, o usuário seja autenticado, aumentado a segurança. Outras opção são usando os programas OpenSwan e Racoon.

Forticlient – SSLVPN

Desenvolvido pela Fortinet, é um cliente para acesso a VPN. Oficialmente, não tem um pacote para Linux, mas possuem versão que podem ser baixadas no blog Bits and Bytes. Caso não consiga instalar uma versão (por causa de dependências com versões superiores às comportadas no seu sistema operacional), tente baixar e instalar uma versão mais antiga. Veja esse exemplo (para Debian Jessie) para instalação e execução:

$ sudo dpkg -i forticlient-sslvpn_4.4.2332-1_i386.deb
$ cd /opt/forticlient-sslvpn
$ ./fortisslvpn.sh

O script chama o binário correspondente à arquitetura baixada. Para incluir um atalho (alias), edite o arquivo ~/.bashrc (válido somente para o usuário) ou /etc/bash.bashrc para incluir a seguinte linha (de preferência, depois de "some more ls aliases"):

alias forti="/opt/forticlient-sslvpn/32bit/forticlientsslvpn"

Esse exemplo é para 32 bits. Depois de salvar o arquivo, execute "source ~/.bashrc" para atualizar. Para abrir o programa, basta agora executar "forti" no terminal.

IPsec

O OpenVPN utiliza a biblioteca OpenSSL, e assim como outros protocolos de segurança (SSL, TLS, etc), operam desde a camada de transporte (camada 4) até a camada de aplicação (camada 7). Já o IPsec opera sob a camada de rede (ou camada 3) do modelo OSI, sendo parte obrigatória do IPv6 e opcional para o uso com IPv4. Veja mais comparações entre o OpenVPN e o IPSec clicando no link. Nesse link também comenta-se das implementações "site-to-site" e "client-to-site" (ou "road warrior").

O IP Security Protocol (IPsec) é uma extensão do protocolo IP que visa a ser o método padrão para o fornecimento de privacidade do usuário, integridade dos dados e autenticidade das informações ou prevenção de identity spoofing (garantia de que uma pessoa é quem diz ser), quando se transferem informações através de redes IP. Ou seja, é o protocolo de criptografia da internet para tunelamento, criptografia e autenticação. Se dois nós da rede têm IPsec, automaticamente há troca de chaves e criptografia, modo de funcionamento esse denominado "modo transporte".

Compartilhe o link desse texto, mas se for copiar algum trecho, cite a fonte. Valorize nosso trabalho.
Mais informações na licença de uso do site.

Um Pingback/Trackback