Apresentação:
Apresento a vocês um tutorial de como configurar uma vpn roteada. Não tende a ser uma documentação extensa e abrangente sobre o assunto, mas espero que ajude alguém que procura esta solução. Não abordarei detalhes de como configurar as interfaces de rede e a configuração do firewall é apenas uma sugestão básica. Utilizei o servidor OpenVPN em Debian e Ubuntu, mas se adaptado servirá para qualquer distribuição LINUX.
Passo 1 – Instalação por pacote pré-compilado (APT).
Após instalado o sistema operacional no servidor, prossiga instalando o pacote openvpn através do apt-get. Não abordarei aqui a instalação por código fonte já que os pacotes oficiais me atenderam a contento. A instalação por código fonte poderá ser feita seguindo a documentação oficial conforme sua necessidade.
# apt-get install openvpn
Passo 2 – Criando as chaves
Localize (no exemplo abaixo, foi encontrado em /usr/share/doc/openvpn/examples/easy-rsa ) e copie os scripts (versão 2) easy-rsa para o diretório /etc/openvpn/easy-rsa:
# find / -iname easy-rsa
/usr/share/doc/openvpn/examples/easy-rsa
# mkdir /etc/openvpn/easy-rsa
# cp -rv /usr/share/doc/openvpn/examples/easy-rsa/2.0/*.* /etc/openvpn/easy-rsa/
No final do arquivo “vars” , você encontra um conjunto de parâmetros usados para gerar as chaves (país, estado, cidade, empresa, etc.), que devem ser editados:
# vi /etc/openvpn/easy-rsa/vars
Exemplo:
export KEY_EMAIL=”[email protected]“
Em seguida, usar o comando “source” para carregar as variáveis do arquivo “vars”:
# cd /etc/openvpn/easy-rsa/
# source vars
E logo após, limpar vestígios de configurações antigas (caso tenham existido):
# ./clean-all
Gerar o certificado raiz:
# ./build-ca
Gerar os parâmetros Diffie Hellman para reforçar segurança durante trocas de chaves entre servidor e clientes:
# ./build-dh
Criar chave estática:
# openvpn --genkey --secret static.key
Criar a chave do servidor (pode ser o nome que você quiser ao invés de “servidor”):
# ./build-key-server servidor
Criar a chave dos clientes (pode ser o nome que você quiser ao invés de cliente1, cliente2):
# ./build-key cliente-01
# ./build-key cliente-02
Remover as requisições para a assinatura das chaves, esses arquivos são desnecessários após a criação das chaves:
# rm *.csr
Para “bloquear” um cliente, impedindo que ele se conecte na vpn use:
# ./revoke-full
Passo 3 – Configurando o servidor
Crie o arquivo /etc/openvpn/servidor.conf (no caso, o sugerido é servidor), e adicione o conteúdo conforme indicado abaixo:
proto udp
port 10000
dev tun
server 192.168.2.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
client-to-client
comp-lzo
keepalive 10 120
persist-key
persist-tun
float
ifconfig-pool-persist /etc/openvpn/ipp.list
max-clients 20
tls-server
mode server
dh keys/dh1024.pem
ca keys/ca.crt
cert keys/servidor.crt
key keys/servidor.key
tls-auth keys/static.key
status /var/log/openvpn-status.log
verb 6
log /var/log/openvpn.log
log-append /var/log/openvpn.log
Depois copie os arquivos dh1024.pem, ca.crt, servidor.crt e servidor.key gerados de /etc/openvpn/easy-rsa/keys para /etc/openvpn/keys, além do arquivo static.key.
Passo 4 – Exemplo de configuração do firewall
Segue abaixo o script de firewall utilizado:
#!/bin/bash
#Interface de rede interna
I_LOCAL="eth1"
#Rede Local
NET_LOCAL="192.168.1.0/24"
#Interface de rede externa
I_DEFAULT="eth0"
#Rede VPN
NET_VPN="192.168.2.0/24"
start(){
echo "Starting firewall..."
echo 1 > /proc/sys/net/ipv4/ip_forward
# política padrão
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# libera conexão ssh (alterado para 20001)
iptables -A INPUT -p tcp --dport 20001 -j ACCEPT
# libera conexão vpn
iptables -A INPUT -p udp --dport 10000 -j ACCEPT
# libera a entrada de conexões da rede local
iptables -A INPUT -i $I_LOCAL -s $NET_LOCAL -j ACCEPT
# liberando acesso a interface lo
iptables -A INPUT -i lo -j ACCEPT
# roteando pacotes da rede vpn para a rede local
iptables -t nat -s $NET_VPN -A POSTROUTING -o $I_LOCAL -j MASQUERADE
echo "Firewall started!"
}
stop(){
echo "Stopping firewall..."
iptables -F
iptables -t nat -F
iptables -t mangle -F
echo "Firewall stoped!"
}
case "$1" in
"start") start ;;
"stop") stop ;;
"restart") stop ; start ;;
*) echo "Parameters: [ start | stop | restart ]"
esac
Passo 5 – Configurando o cliente (Windows e Linux)
No Windows:
Instale o OpenVPN GUI disponível no site www.openvpn.se, e depois crie o arquivo “C:\Arquivos de programas\OpenVPN\config\.ovpn” com as seguintes configurações:
remote
proto udp
port 10000
client
pull
dev tun
comp-lzo
keepalive 10 120
persist-key
persist-tun
float
tls-client
dh keys/dh1024.pem
ca keys/ca.crt
cert keys/.crt
key keys/.key
tls-auth keys/static.key
Logo após, dentro do diretório config, crie um diretório chamado keys. Dentro deste diretório, copie os arquivos correspondentes: dh1024.pem, ca.crt, .crt, .key e static.key.
Feito isso, configure o serviço OpenVPN para automático.
Problema no Windows Vista/Seven
Se você tiver recebendo um erro referente as rotas nos logs, faça o seguinte:
Adicione essas 2 linhas no seu arquivo .ovpn
route-method exe
route-delay 2
NO LINUX:
Seguir o mesmo exemplo da configuração para Windows, a diferença que a extensão do arquivo deve mudar de *.ovpn para *.conf e colocada no diretório /etc/openvpn/, além das chaves que devem ser colocadas em /etc/openvpn/keys (ou o diretório de sua escolha).
Espero que este artigo seja útil e recomendo a leitura da documentação oficial para maior entendimento sobre as opções.