OpenVPN roteada

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=”geowany@softwarelivre-ac.com

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.

Geowany Galdino escreveu 44 artigos

Assistente em Tecnologia da Informação na Universidade Federal do Acre. Licenciado em História na mesma instituição.

Deixe um comentário

Seu endereço de email não será publicado. Os campos com * são obrigatórios

Você pode usar estes tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>