CentOS 5x + OpenVPN (Revisão 2011)

Escrito por Bruno Mesquita Santana;
Atualizado por Angelo de Barros Delphini;

Pode até parecer piada, mas não é... Já instalei outras vezes o OpenVPN em servidores, mas na última vez, simplesmente não funcionava! Claro que eu tentei pelos pacotes padrões do Yum, depois compilei, etc, etc, etc... Simplesmente não conseguia fazer o treco rodar... Então ontem, enquanto fazia um outro trampo (que servirá para outro artigo no futuro), pesquisei muito na net e, finalmente, consegui instalar o OpenVPN 2.0.9 no CentOS 5.5.
O mais intrigante é que existem muitos manuais na net, mas em todos, do jeito como estão, não funcionaram. Bem, deixa de papo e vamos lá:
1 - Vamos ver se o seu CentOS esta preparado para suportar dev/tun:
# ls -al /dev/net/tun
Se o CentOS suporta, você recebera uma reposta como esta:
# ls -al /dev/net/tun
crw------- 1 root root 10, 200 Mar 1 09:35 /dev/net/tun


2 - Então também devemos verificar se o dispositivo /dev/tun foi habilitado ou não:
# cat /dev/net/tun
Você obterá resultados iguais a este abaixo como resposta do seu CentOS se o dispositivo estiver habilitado.
# cat /dev/net/tun
cat: /dev/net/tun: Descritor de arquivo em mal estado


3 - Se não tiver habilitado, deverá instalar dispositivo dev/tun:
Este comando ira instalar as dependências necessarias:
# yum -y install gcc make zlib-devel pam-devel openssl-devel rpm-build autoconf.noarch nano openssl lzo2

4 - Instale os pacotes existentes no repositório do CentOS:
# yum -y update device-mapper glibc
# yum -y install openssl openssl-devel pam pam-devel
5 - Faça o download dos pacotes "extras":
# wget -c ftp://ftp.pbone.net/mirror/dag.wieers.com/packages/lzo2/lzo2-2.02-3.el5.rf.x86_64.rpm
# wget -c ftp://ftp.pbone.net/mirror/dag.wieers.com/packages/lzo2/lzo2-devel-2.02-3.el5.rf.x86_64.rpm
# wget -c ftp://ftp.pbone.net/mirror/ftp.freshrpms.net/pub/freshrpms/pub/dag/redhat/el5/en/x86_64/dag/RPMS/lzo-1.08-4.2.el5.rf.x86_64.rpm
# wget -c ftp://ftp.icm.edu.pl/vol/rzm1/linux-dag/dries/redhat/el5/en/x86_64/RPMS.dries/openvpn-2.0.9-1.el5.rf.x86_64.rpm
6 - Instale os pacotes (inclusive o OpenVPN):
# rpm -Uvh lzo2-2.02-3.el5.rf.x86_64.rpm lzo2-devel-2.02-3.el5.rf.x86_64.rpm openvpn-2.0.9-1.el5.rf.x86_64.rpm
Repare que eu uso "rpm -Uvh ...", por se já houverem pacotes instalados de versões anteriores, este comando rodará atualizando os pacotes.
7 - Vá ao diretório de configurações do OpenVPN e copie os arquivos necessários:
# cd /etc/openvpn
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/openssl.cnf .
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/whichopensslcnf .
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/pkitool .
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/vars .
8 - Mude as permissões dos arquivos:
# chmod 744 *
9 - Edite o arquivo de variáveis, alterando os dados abaixo de acordo com sua conveniencia:
# vi /etc/openvpn/vars
export KEY_COUNTRY="US" --> BR
export KEY_PROVINCE="CA" --> DF
export KEY_CITY="SanFrancisco" --> Brasilia
export KEY_ORG="Fort-Funston" --> MinhaEmpresa
export KEY_EMAIL="me@myhost.mydomain" --> ti@minhaempresa.com.br
10 - Copie os executáveis:
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/clean-all .
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/build-ca .
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/build-dh .
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/build-key-server .
# cp /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/build-key .
11 - Mude as permissões dos executáveis:
# chmod 750 /etc/openvpn/clean-all /etc/openvpn/build-ca /etc/openvpn/build-dh /etc/openvpn/build-key-server /etc/openvpn/build-key
12 - Carregue as variáveis para a sessão:
# source /etc/openvpn/./vars
13 - Limpe qualquer chave pre-existente (isso apagará tudo que existir no diretório /etc/openvpn/keys):
# /etc/openvpn/clean-all
14 - Crie o arquivo dh1024.pem, que conterá os parâmetros Diffie-Hellman, de 1024 bits. Ele servirá para que as máquinas troquem chaves seguras num canal inseguro, para depois trocar as chaves simétricas.
# /etc/openvpn/build-dh
15 - Crie um certificado para o Servidor:
# /etc/openvpn/build-ca
16 - Crie uma identidade digital para o servidor:
# /etc/openvpn/build-key-server server
17 - Crie uma identidade digital para os clientes com o comando abaixo, onde "cliente1" é o nome do cliente que se está criando:
# /etc/openvpn/build-key cliente1
18 - Crie um arquivo de configuração para o servidor:
# E porta que o servidor escutara
local 192.168.0.254
port 1194

# E o protocolo de comunicao
proto udp

# E a interface virtual (de rede)
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450

#---- Seccion de llaves -----
# Especifica a localizao do arquivo da Autoridade Certificadora (.ca)
ca /etc/openvpn/keys/ca.crt

# Especifica a localizao do arquivo de identidade do servidor (.crt)
cert /etc/openvpn/keys/server.crt

# Especifica a localizao do arquivo de chave de identidade do servidor (.key)
key /etc/openvpn/keys/server.key

# Especifica a localizao do arquivo que conteras parametros Diffie-Hellman (.pem)
dh /etc/openvpn/keys/dh1024.pem

#----------------------------
server 192.168.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-options DNS 208.67.222.222"
push "dhcp-options DNS 208.67.220.220"

# Arquivo onde se encontrarao os dados de conexao dos clientes
ifconfig-pool-persist /var/log/openvpn/ipp.txt

# Especifica que os pacotes serao enviados a cada 10 segundos e que a conexao e finalizada em 120
keepalive 10 120

# Espevifica que os dados tramitarao compactados
comp-lzo

# Garante que chaves sejam persistentes.
persist-key

# Permite que os dispositivos TUN/TAP sejam persistentes
persist-tun

# Onde se localizarao os arquivo de log
status /var/log/openvpn/status.log

# Nivel de informacao para o log.
verb 3

19 - Crie os arquivos de Log:
# touch /var/log/openvpn/status.log
# touch /etc/openvpn/ipp.txt
20 - Inicie o serviço e configure-o para inicializar junto com o sistema:
# service openvpn start
Iniciando openvpn: RTNETLINK answers: File exists
[ OK ]
# chkconfig openvpn on
21 - Crie o arquivo de conexão do cliente:
# vi cliente1.ovpn
client
dev tun
proto udp
remote DOMINIO_OU_IPdoSERVIDOR 1194
float
resolv-retry infinite
nobind
persist-key
persist-tun
#------ SECCION DE LLAVES --------
ca ca.crt
cert cliente1.crt
key cliente1.key
ns-cert-type server
#---------------------------------
comp-lzo
verb 3
#route 192.168.0.0 255.255.255.0
#dhcp-option DNS 192.168.0.1
#dhcp-option WINS 192.168.26.1
Este arquivo "cliente1.ovpn" somados aos outros arquivos que foram criados (cliente1.crt, cliente1.key), quando executou o comando "./build-key cliente1" e, ainda, o arquivo ca.crt (que são todos criados no diretório /etc/openvpn/keys) devem ser entregues à pessoa que se conectará via OpenVPN Client.
OpenVPN possui também uma versão Windows, que está disponível no link abaixo:

Esta versão inclui um instalador gráfico e funciona em todas as versões do Windows a partir do Windows 2000. Ela inclui também o driver tun/tap, que é instalado automaticamente, você precisa apenas prestar atenção nas mensagens de instalação. Em um certo ponto, será exibida uma mensagem avisando que o driver TAP/Win32 não passou pelo processo de certificação de compatibilidade com o Windows. Responda "Continuar assim mesmo" para efetuar a instalação, do contrário o OpenVPN não funcionará.(Fonte: http://www.hardware.com.br).
O processo de certificação dos drivers para o Windows é um processo caro e demorado, onde os fabricantes de componentes submetem os drivers de dispositivo à Microsoft para que eles sejam certificados. Este é um processo que não está ao alcance de projetos independentes, como o OpenVPN, daí a exibição da mensagem. De qualquer forma, isso não significa que o software seja instável ou inseguro, muito pelo contrário. Se a certificação da Microsoft fosse um indicador de qualidade, softwares como o IIS e o IE não teriam tantas falhas e brechas de segurança.(Fonte: http://www.hardware.com.br).

Até a próxima,
Bruno.
Fonte: http://www.bruno.eng.br

Nenhum comentário

Tecnologia do Blogger.