Pages

Wednesday, June 02, 2010

OpenVPN server com cliente OpenVPN Windows e Certificado

Este howto mostra a configuração de um servidor openvpn com clientes remotos utilizando o cliente openvpn para Windows usando certificados para cada usuário. Baixe o OpenVPN GUI no site do desenvolvedor http://openvpn.se , ou diretamente pelo link a seguir http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe

O ambiente foi testado sob a distribuição linux Debian 5.04 (lenny), usando clientes windows XP e windows 7 32 bits.

Instale o pacote openvpn direto do repositório
apt-get install openvpn

Copie a pasta que contêm os scripts de geração de certificado para dentro do diretório do openvpn
cp -a /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0/

Dentro deste diretório é preciso editar o arquivo vars e setar com os parametros do seu ambiente, como
export KEY_COUNTRY="BR"
export KEY_PROVINCE="PR"
export KEY_CITY="Curitiba"
export KEY_ORG="Software Livre"
export KEY_EMAIL="admin@domain.com"


Execute o comando abaixo para zerar o diretório keys e também criar o arquivo de index.txt para controle dos certificados
./clean-all

E então
source ./vars
./build-ca


Sendo que o build-ca é o comando que vai criar o certificado de autoridade usando as bibliotecas do openssl. Quando solicitado a informação sobre o "Common name", pode colocar algo como OPENVPNSERVER Ou deixar o padrão que foi definido no arquivo vars.

Agora é preciso criar o certificado para o servidor. Passe como parâmetro o nome do servidor obtido com o comando hostname. Aceite com a tecla y(yes) quando solicitar a opção "Sign the certificate". NÃO UTILIZE SENHA NESTE CERTIFICADO.
./build-key-server debian1

Saída do comando:
Generating a 1024 bit RSA private key
........++++++
................++++++
writing new private key to 'debian1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [BR]:
State or Province Name (full name) [PR]:
Locality Name (eg, city) [Curitiba]:
Organization Name (eg, company) [Software Livre]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [debian1]:
Email Address [admin@teste.local]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'BR'
stateOrProvinceName :PRINTABLE:'PR'
localityName :PRINTABLE:'Curitiba'
organizationName :PRINTABLE:'Software Livre'
commonName :PRINTABLE:'debian1'
emailAddress :IA5STRING:'admin@teste.local'
Certificate is to be certified until May 30 16:13:14 2020 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated


Como iremos utilizar certificado por usuário, precisamos criar os mesmos para serem copiados para as estações que irão fechar a VPN.
./build-key fabio

Quando estiver gerando o certificado, informe na opção Common Name, o nome real do usuário.

Após gerado o certificado, use o comando build-key-pass para colocar uma senha no certificado, desta forma, para conectar na VPN o usuário deve ter o certificado gerado para ele e também saber a senha do certificado para a conexão ser realizada com sucesso.
./build-key-pass fabio

Gere os parametros de diffie hellman
./build-dh

Para revocar um certificado, o comando a ser utilizado deve ser o seguinte.
./revoke-full fabio

Copie o arquivo /etc/openvpn/easy-rsa/2.0/keys/crl.pem para /etc/openvpn/ senão dá problema.
cp /etc/openvpn/easy-rsa/2.0/keys/crl.pem /etc/openvpn/

Todas as chaves criadas devem estar no diretório keys.

O Cliente windows (Neste caso o usuário fabio) deve ter as chaves ca.crt , fabio.crt e fabio.key que estão localizadas dentro do diretório keys do servidor. Estas chaves devem ser copiadas para dentro do diretório c:\program files\openvpn\config na estação Windows. Dentro da pasta config deve existir também o arquivo de configuração com nome client.ovpn com o conteúdo semelhante ao abaixo.

client
dev tun
proto udp
remote 200.200.200.1 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert fabio.crt
key fabio.key
ns-cert-type server
comp-lzo
verb 3

Arquivo de configuração do servidor openvpn server.conf , veja que quando o usuário conectar ele vai receber a rota para a rede 192.168.10.0/24, vai ter como default gateway o tunnel vpn, e vai receber um IP da faixa 192.168.200.0. Para maiores detalhes e outras opções de configuração, favor acessar o link oficial do openvpn aqui http://openvpn.net/index.php/open-source/documentation/howto.html

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/debian1.crt
key /etc/openvpn/easy-rsa/2.0/keys/debian1.key # This file should be kept secret
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
server 192.168.200.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.10.0 255.255.255.0"
push "redirect-gateway"
push "dhcp-option DNS 192.168.200.1"
keepalive 10 120
comp-lzo
max-clients 100
user nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log
verb 6
crl-verify crl.pem

E inicialize o serviço openvpn
invoke-rc.d openvpn restart

Se tudo correu bem, não terá maiores problemas até este ponto e o servidor deve ter inicializado corretamente.
netstat -plntu | grep 1194
udp 0 0 0.0.0.0:1194 0.0.0.0:* 14972/openvpn

A partir de agora, tendo o client windows com os devidos arquivos como explicado logo acima, é só dar dois cliques no ícone do lado do relógio para inicializar a conexão.


Para a configuração, eu utilizei este link como referência, que por sinal é um howto muito bom e bem explicado.
http://www.dicas-l.com.br/dicas-l/20060316.php

1 comment:

  1. APenas um comentário.

    O arquivo server.conf deve estar dentro do diretório /etc/openvpn.

    ReplyDelete