Pra quem procura um software livre para implantar uma VPN, fácil de configurar, com ótimo desempenho, e compatível com a criptografia TLS/SSL(ou seja, muito seguro), minha dica de hoje é o OpenVPN. Neste artigo vamos aprender a configurar esse poderoso software pra quem quer interligar redes de filiais com gateway VPN(servidor linux) e pra quem quer tambem estações autônomas espalhadas pelo mundo com um link de internet.E vamos instalar um software que permitirá o administrador da rede acompanhar as conexões da VPN em uma interface web amigável, o OpenVPN Web GUI.
Distribuição Usada:
Ubuntu Server 8.04 (mas deve funcionar em qualquer uma)
Pacotes necessários:
OpenVPN-2.09
lzo-2.03
openssl
libssl-dev
apache2
Considerações:
Matriz
Internet 201.58.xxx.xx
Rede - 192.168.0.0/24
Gateway VPN - eth1 - 192.168.0.254
Túnel - 10.0.0.1
Filial
Internet - (ip qualquer)
Rede - 192.168.1.0/24
Gateway VPN - eth1 - 192.168.1.254
Túnel - 10.0.0.2
Estação autônoma(um notebook em viagem por exemplo)
Rede - (faixa qualquer)
Gateway VPN - N/A (OpenVPN Cliente Windows)
Túnel - 10.0.0.3
Etapas comuns dos gateways vpn(servidores matriz e filiais)
Instale os pacotes
# apt-get update
# apt-get install openssl libssl-dev apache2
Antes do OpenVPN instalar o LZO
# cd /usr/src
# wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
# tar xzvf lzo-2.03.tar.gz
# cd lzo-2.03
# ./configure
# make
# make install
Agora o OpenVPN
# cd /usr/src
# wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
# tar zxvf openvpn-2.0.9.tar.gz
# cd openvpn-2.0.9
# ./configure
# make && make install
No Servidor
Vamos criar a pasta de configuração do OpenVPN
# mkdir /etc/openvpn
O OpenVPN vem com um conjunto de scripts que facilitam a criação dos certificados para aumentar a segurança da nossa VPN, vamos copiar esses scripts para a pasta de configuração do OpenVPN.
# cp -R /usr/src/openvpn-2.0.9/easy-rsa /etc/openvp
Vamos criar o arquivo principal de configuração de nosso servidor
# vim /etc/openvpn/matriz.conf
# Define o ip do servidor dentro do túnel seguro
ifconfig 10.0.0.1 255.255.255.0
# Arquivo onde ficará gravado os ips dos clientes
# para fazermos um dhcp com ip fixo, uma espécie de pool dhcp.
ifconfig-pool-persist /etc/openvpn/ipp.txt
# Porta onde o servidor irá escutar
port 1194
# Protocolo usado
# dê preferencia ao UDP por ser muito mais rápido
proto udp
# Interface virtual a ser criada(túnel)
dev tap0
# Define que o servidor será autenticador de certificados.
tls-server
# Pasta onde os certificados e chaves estão com respectivos nomes
cd /etc/openvpn/easy-rsa/keys
ca ca.crt
cert servidor.crt
key servidor.key
dh dh1024.pem
# Arquivo que irá impedir conexões através de certificados revogados
crl-verify /etc/openvpn/easy-rsa/keys/crl.pem
# Proteção adicional com uma chave estática( além dos certificados)
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
user openvpn
group openvpn
mode server
max-clients 30
server 10.0.0.0 255.255.255.0
# Configurações do servidor dhcp
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option WINS 192.168.0.1"
push "default-gateway 192.168.0.254"
# Essa linha faz com que o gateway principal da estação windows(autônoma)
# conectada diretamente a vpn seja o ip do gateway da matriz
# possibilitando assim bloquear sites pelo squid da matriz por exemplo.
push "redirect-gateway def1"
# Mantem o túnel ativo mesmo em caso de inatividade
ping 10
ping-restart 120
push "ping 10"
push "ping-restart 40"
# Compactação usada
comp-lzo
status-version 2
# Configuração de Log
status /etc/openvpn/statusgwmatriz.log
verb 4
log /etc/openvpn/gwmatriz.log
log-append /etc/openvpn/appendgwmatriz.log
# Scripts que serão executados com a
# VPN subir(.up) e quando for derrubada(.down)
up /etc/openvpn/gwmatriz.up
down /etc/openvpn/gwmatriz.down
###### FIM DO ARQUIVO ##############
Crie o arquivo /etc/openvpn/gwmatriz.up com seguinte conteúdo:
#!/bin/sh
ip route add 192.168.1.0/24 via 10.0.0.2
exit 0
###### FIM DO ARQUIVO ##############
e o /etc/openvpn/gwmatriz.down com o seguinte conteúdo:
#!/bin/sh
ip route del 192.168.1.0/24 via 10.0.0.2
exit 0
###### FIM DO ARQUIVO ##############
Note que você devera adicionar uma linha dentro dos arquivos gwmatriz.up e gwmatriz.down para cada gateway vpn em filiais obedecendo a faixa em que a filial for usar e em qual IP o OpenVPN irá atribuir a ela dentro do túnel seguro, pois eles adicionaram as rotas no kernel para que os pacotes com destino a essas redes das filiais encontrem o caminho, no servidor da filial digite "ifconfig tap0" depois que a conexão estiver estabelecida para saber qual o ip que foi utilizado.
Coloque as duas linhas a seguir no arquivo "/etc/rc.local" ou qualquer outro script de inicialização:
/sbin/sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE
A primeira linha habilita o roteamento de pacotes e a segunda permite que todos os pacotes provenientes da rede 192.168.1.0/24(filial) alcancem a rede da matriz, adicione uma para cada rede de filial. eth1 é a interface ligada a rede interna.
Vamos gerar uma chave estática de autenticação que é uma proteção adicional a nossa VPN
# cd /etc/openvpn
# openvpn --genkey --secret ta.key
# mv ta.key easy-rsa/keys/
Agora vamos gerar os certificados. Edite o arquivo /etc/openvpn/easy-rsa/vars para definirmos as variáveis.
# vim /etc/openvpn/easy-rsa/vars
* KEY_COUNTRY: coloque BR para Brasil;
* KEY_PROVINCE: coloque a sigla do seu estado (MG, por exemplo);
* KEY_CITY: coloque o nome ou sigla da sua cidade;
* KEY_ORG: coloque o nome da sua empresa;
* KEY_EMAIL: coloque o email do administrador do servidor.
Agora vamos carregar as variáveis definidas para gerarmos os certificados
# cd /etc/openvpn/easy-rsa/
# source vars
O próximo comando é limpar a pasta de chaves, cuidado pois apaga todos os certificados gerados, inclusive do servidor.
# ./clean-all
Vamos gerar a autoridade certificadora
# ./build-ca
Nunca apague esses arquivos gerados senão terá que gerar todos os certificados novamente, pois são assinados digitalmente por essas chaves
Para gerar o certificado do servidor digite
# ./build-key-server servidor
Onde "servidor" é o nome do seu servidor de vpn( preencha o campo "Common Name" o nome do seu servidor. Para uma autenticação automática com os certificados não digite senha ao criar o certificado e responde "y" nas perguntas finais.
Agora vamos gerar os parametros DH para criptografia com o comando:
# ./build-dh
Os arquivos para uso do TLS no servidor estão prontos, agora vamos gerar certificados para os clientes.
Toda vez que for criar um novo certificado para os clientes digite:
# cd /etc/openvpn/easy-rsa/
# source vars
# ./buld-key filial
Onde "filial" é o nome do certificado de cliente. Preencha os dados corretamente e responda sim as duas últimas perguntas. É melhor que o certificado não tenha senha para que nossa VPN fique menos dependente de interação humana desnecessária.
Para revogar o certificado use
# cd /etc/openvpn/easy-rsa/
# source vars
# ./revoke-full filial
Onde "filial" é o nome do certificado a revogar
Antes de subir a VPN crie um certificado de cliente qualquer e revogue em seguida para que o script gere um arquivo crl.pem(que define os certificados revogados) válido para nossa vpn começar a funcionar.
Vamos criar um usuário para o OpenVPN
# adduser --system --disabled-password --disabled-login --group openvpn
e dar permissão para ele de acessar a pasta onde estão os certificados
# chown -R /etc/openvpn/easy-rsa/keys/
Agora vamos fazer "subir" nossa VPN no servidor
# openvpn --config /etc/openvpn/matriz.conf &
Para acompanhar o log e verificar possíveis erros digite
# tail -f /etc/openvpn/gwmatriz.log
Vamos verificar se a interface virtual do túnel está de pé
# ifconfig tap0
Servidores Filiais( gateways VPN)
Após concluir os passos da seção "Etapas comuns", vamos criar a pasta de configuração do OpenVPN
# mkdir /etc/openvpn
Vamos criar o arquivo de configuração de nossa filial
# vim /etc/openvpn/filial.conf
com o seguinte conteúdo:
# ip do servidor(ip real, pode se usar nome ex. vpnserver.no-ip.org)
remote 201.58.xxx.xx
proto udp
# especifica que o servidor irá verificar o certificado
ns-cert-type server
port 1194
# tenta infinitamente autenticar mesmo depois de nao conseguir
auth-retry nointeract
client
dev tap
comp-lzo
# mantem o túnel de pé por "echo request"
keepalive 10 120
# utilização da chave estática
tls-client
tls-auth ta.key 1
# certificado raiz e certificado da filial gerado no servidor
ca ca.crt
cert filial.crt
key filial.key
up /etc/openvpn/filial.up
down /etc/openvpn/filial.down
log /etc/openvpn/filial.log
###### FIM DO ARQUIVO ##############
Crie o arquivo /etc/openvpn/filial.up com seguinte conteúdo:
#!/bin/sh
ip route add 192.168.0.0/24 via 10.0.0.1
exit 0
###### FIM DO ARQUIVO ##############
e o /etc/openvpn/filial.down com o seguinte conteúdo:
#!/bin/sh
ip route del 192.168.0.0/24 via 10.0.0.1
exit 0
###### FIM DO ARQUIVO ##############
Coloque as duas linhas a seguir no arquivo "/etc/rc.local" ou qualquer outro script de inicialização:
/sbin/sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE
A primeira linha habilita o roteamento de pacotes e a segunda permite que todos os pacotes provenientes da rede 192.168.0.0/24(matriz) alcancem a rede da filial. eth1 é a interface ligada a rede interna.
Para se conectar a VPN precisamos copiar 4(quatro) arquivos que geramos para autenticação, para isso procure utilizar um método seguro, no exemplo utilizaremos o "scp".
scp root@201.58.xxx.xx:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/
scp root@201.58.xxx.xx:/etc/openvpn/easy-rsa/keys/filial.key /etc/openvpn/
scp root@201.58.xxx.xx:/etc/openvpn/easy-rsa/keys/filial.crt /etc/openvpn/
scp root@201.58.xxx.xx:/etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn/
Agora vamos subir o lado da filial da VPN
# openvpn --config /etc/openvpn/filial.conf &
Para acompanhar o log e verificar possíveis erros digite
# tail -f /etc/openvpn/filial.log
Vamos verificar tentar pingar por dentro do túnel os ips da matriz.
# ping 10.0.0.1
# ping 192.168.0.254
Para você conseguir pingar os ips das estações na matriz elas devem ter como gateway o ip do gateway vpn(192.168.0.254) assim também acontece na filial, o gateway das estações na filial deve ser 192.168.1.254.
Estações Windows autônomas
Baixe e instale http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe
Dentro da pasta C:\Arquivos de programas\OpenVPN\config\ crie um arquivo qualquer com extenção .ovpn(Ex. cliwindows.ovpn) com o seguinte conteúdo:
remote 201.58.xxx.xx # ip do nosso servidor(pode se usar nome ex. vpnserver.no-ip.org)
proto udp
ns-cert-type server
port 1194
auth-retry nointeract
client
# a linha abaixo faz com que se aplique as
# configurações "push" no conf do servidor.
pull
dev tap
comp-lzo
keepalive 10 120
tls-client
tls-auth ta.key 1
# A linha abaixo adiciona a rota para a rede da matriz
route 192.168.0.0 255.255.255.0 10.0.0.1
ca ca.crt
cert cliwindows.crt
key cliwindows.key
###### FIM DO ARQUIVO ##############
No servidor da VPN gere e copie os certificados para o cliente windows, no exemplo utilizaremos o certificado "cliwindows" que geramos apartir do script ./build-key em nosso servidor. Coloque-o na mesma pasta (C:\Arquivos de programas\OpenVPN\config)
Agora basta dar dois cliques sobre o ícone do OpenVPN GUI na barra de tarefas para a conexão ser iniciada.
Instalação do OpenVPN Web GUI
Voltando ao servidor da matriz vamos instalar um pacote necessário
# apt-get install smarty
Crie a pasta para o OpenVPN Web GUI
# mkdir /var/www/owg
# cd /var/www/owg
Vamos baixar o pacote e descompactar
# wget http://hivelocity.dl.sourceforge.net/sourceforge/openvpn-web-gui/openvpn-web-gui-0.3.2b.tgz
# tar zxvf openvpn-web-gui-0.3.2b.tgz
De as permissões necessárias para o funcionamento
# chown -R www-data /var/www/owg
# chmod 755 /etc/openvpn/statusgwmatriz.log
# chmod -R 755 /etc/openvpn/easy-rsa/keys/
Para funcione no ubuntu é necessário que se modifique os scripts php nos seguintes arquivos:
/var/www/owg/action-buildcertificate.inc
/var/www/owg/action-downloadconfigfile.inc
/var/www/owg/action-certificates.inc
/var/www/owg/action-newcertificate.inc
/var/www/owg/action-config.inc
/var/www/owg/action-status.inc
/var/www/owg/action-downloadcertificate.inc
/var/www/owg/action-viewcertificate.inc
/var/www/owg/plugins/systemcheck/action.inc
Encontre dentro de cada um dos arquivos a expressão "Smarty.class.php" e mude pra "/usr/share/php/smarty/Smarty.class.php" de acordo com sua distribuição
Vamos substituir o arquivo config.inc por outro acertando os caminhos de acordo com sua distro.
# mv /var/www/owg/config.inc /var/www/owg/config.inc.original
# vim /var/www/owg/config.inc
Cole o conteúdo acertando os caminhos e arquivos em vermelho:
/var/www/owg/plugins/';
// If there are no plugins
// $config['Plugins'] = NULL;
// Otherwise, follow this example:
//$config['Plugins']['PLUGINMANE']['Folder'] = 'FOLDERNAME';
// The post-install helper plugin. Shows if PHP5 has the neccessary functions available
$config['Plugins']['systemcheck']['Folder'] = 'systemcheck';
// OPENVPN ________________________________
// Change: the configuration directory
$config['openvpn']['folder'] = '/etc/openvpn/';
// Change: configuration and status file names
$config['openvpn']['config'] = $config['openvpn']['folder'] .'matriz.conf';
$config['openvpn']['status'] = $config['openvpn']['folder'] .'statusgwmatriz.log';
// OPENSSL ________________________________
// Change: openssl keys directory
$config['openssl']['folder'] = '/etc/openvpn/easy-rsa/keys/';
// Change: different folders for Public Certificates, Certificate Requests and Private Keys.
// NOTE: openssl somehow respects only newpem folder (for Public Certificates).
$config['openssl']['pubfolder'] = '/usr/local/etc/openvpn/keys/newpem/';
$config['openssl']['reqfolder'] = '/usr/local/etc/openvpn/keys/newpem/';
$config['openssl']['prvfolder'] = '/usr/local/etc/openvpn/keys/newpem/';
// Change: openssl CA private and public keys
$config['openssl']['CA']['priv'] = 'file://'. $config['openssl']['folder'] .'ca.key';
$config['openssl']['CA']['pub'] = 'file://'. $config['openssl']['folder'] .'ca.crt';
// Change: openssl serial file
$config['openssl']['serial'] = $config['openssl']['folder'] .'serial';
// Change: openssl database
$config['openssl']['database'] = $config['openssl']['folder'] .'index.txt';
// Change: openssl configuration
$config['openssl']['config'] = array ('config' => $config['openvpn']['folder'] .'openssl.cnf',
'encrypt_key' => 0);
// NEW OPENSSL CERTIFICATE DEFAULTS _________
// Change all of them as it is done in your easy-rsa/vars
$config['openssl']['default']['expiration'] = 3560;
$config['openssl']['default']['countryName'] = 'CA';
$config['openssl']['default']['stateOrProvinceName'] = 'Ontario';
$config['openssl']['default']['localityName'] = 'Mississauga';
$config['openssl']['default']['organizationName'] = 'Home';
$config['openssl']['default']['organizationalUnitName'] = 'Enter Department Name';
$config['openssl']['default']['commonName'] = 'Enter First and Last names';
$config['openssl']['default']['emailAddress'] = 'Enter user@home.on.ca';
?>
Depois de feito acesse em seu navegador o endereço
http://192.168.0.254/owg
Pronto. Espero ter ajudado.
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário