sexta-feira, 23 de março de 2007

Usando o OpenVPN

Estou aqui mais uma vez para documentar mais uma experiência que tive nestes últimos dias.
A configuração da vez foi:

- Configurar uma VPN segura entre a Matriz e os diversos notebooks de usuários que ficavam residentes em outras empresas, sendo que
cada usuário remoto deveria ter uma identificação única para poder criar o túnel VPN. E o melhor pessoal utilizando PKI

A estrutura do cliente:

Firewall com Linux
Servidor de Dados com Linux

A idéia era colocar o OpenVPN rodando no Firewall, ai... por restrições de tempo, tive que colocar o OpenVPN na File Server,
acredito que num tenha problema.... mas em breve eu irei atualizar esta configuração !!!! :)

Vamos ao que interessa....

Software utilizado:

openSuSE-10.2 X86_64
openvpn-2.0.8-16
kernel-default-2.6.18.8-0.1

Blz, galera, acredito que eu não precise explicar aqui como instalar software no openSuse, sendo assim, fica p/ a próxima vez
um tutorial de como add novas entradas de repositórios no openSuSE.

1° Configurando o OpenVPN

Pois bem, a partir da versão 2.0.X do OpenVPN muita coisa mudou, como configurações de portas default, formas de utilização de certificados, e outros. Sendo assim é uma boa dar uma olhada no changelog, e com isso utilizar as configurações default do OpenVPN contidas em "/usr/share/doc/packages/openvpn" .

A 1° coisa à ser feita é copiar o conteúdo do diretório "/usr/share/doc/packages/openvpn/easy-rsa/2.0" p/ o diretório "/etc/openvpn", é com estes arquivos que vamos começar a configuração.

2° Alterando as configurações padrões

Após a cópia destes arquivos é necessário alterar algumas informações em alguns arquivos, sendo que o 1° arquivo à ser alterado é o "vars" edite as linhas:

export KEY_COUNTRY=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""

E coloque as informações que vc's acharem melhor... :)


Após alterar estas configurações execute o script "clean-all" dentro do diretorio do openvpn,

***** TOME CUIDADO*******
Caso vc já tenha criado certificado de autoridade para algum cliente, este comando irá limpar td dentro do diretorio "`pwd`/keys", sendo assim tome cuidado.


3° Criando os certificados, chaves...etc...etc...

Criando o CA
./pkitool --initca
./pkitool --server
./pkitool
./build-dh


Blz, com esses comandos temos um CA, uma chave para o servidor e 1 chave p/ o cliente.

4° Alterando as configurações do Servidor VPN

Galera segue abaixo a configuração que estou utilizando aqui, sendo assim, essa funfou !!!!

# server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server1.crt
key /etc/openvpn/easy-rsa/keys/server1.key # This file should be kept secret
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 192.168.10.0 255.255.255.0 192.168.10.10 192.168.0.20
push "route 192.168.10.0 255.255.255.0"
push "redirect-gateway"
client-to-client
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 6

OBS:
1°) A configuração das chaves e dos certificados de autoridade no Windows,deve especificar o caminho completo até os arquivos criados, sendo que para isso é necessário utilizar "\\" para indicar o caminho,com isso, caso tenhamos as chaves em C:\openvpn\ca.crt deveremos especificar da seguinte forma: C:\\openvpn\\ca.crt

2°) Os arquivos cliente1.crt e cliente1.key foram as chaves criadas no próprio servidor VPN, sendo assim é necessário transferir estas chaves para os clientes que irão conectar-se à VPN, já o ca.crt é o CA criado no servidor tb.


# client.conf

client
dev tun
proto udp
remote
resolv-retry infinite
nobind
persist-key
persist-tun
ca D:\\openvpn\\ca.crt
cert D:\\openvpn\\cliente1.crt
key D:\\openvpn\\cliente1.key
comp-lzo
verb 3


4° A Configuração do Firewall ---> SuSEfirewall

Galera, como vc's sabem o openSuSE tem um firewall "embutido" e muitas vezes ajuda/atrapalha um pouco, aconselho a galera que está lendo este artigo que leiam o arquivo de configuração e o entendam, eu já passei maus bocados com este firewall... :(

Esta parte á um tanto quanto "única", sendo que as configurações aqui apresentadas poderão não ajudar-lhe no teu ambiente , sendo assim
aqui serão apresentadas configurações genéricas, segue:

- Indique ao SuSEfirewall que serão utilizadas regras customizadas pelo usuário, isto é feito assim:
FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"

- Libere a porta 1194 UDP, tanto p/ acesso Interno quanto para Externo, assim:
FW_SERVICES_INT_UDP="1194"
FW_SERVICES_EXT_UDP="1194"

- Altere o arquivo de regras customizadas do SuSEfirewall,
vi /etc/sysconfig/scripts/SuSEfirewall2-custom

- Adicione as seguintes entradas na função "fw_custom_after_antispoofing()"

# Allow TUN interface connections to OpenVPN server
iptables -A INPUT -i tun+ -j ACCEPT
# Allow TUN interface connections to be forwarded through other interfaces
iptables -A FORWARD -i tun+ -j ACCEPT
# Allow TAP interface connections to OpenVPN server
iptables -A INPUT -i tap+ -j ACCEPT
# Allow TAP interface connections to be forwarded through other interfaces
iptables -A FORWARD -i tap+ -j ACCEPT
#


Pronto galera, estamos quase lá.

5° Configurando o openvpn p/ iniciar junto com a máq:
#chkconfig openvpn on

OBS:
dependendo da configuração algumas alterações deverão ser feitas no arquivo de configuração do samba, sendo assim atente para as entradas:

interfaces
allow hosts

Tomando os devidos cuidados, analisando os logs e com um pouco de paciência vc's conseguirão fazer a VPN funcionar... abraços...

Até a próxima.

Um comentário:

André Luiz disse...

Vou testar essa jabiraca em breve... :-)


falou!