Para quem precisa configurar um servidor VPN para conectar empresa matriz e filial ou do escritório e casa, então você está no lugar certo, nesse post vou apresentar um breve resumo descrevendo sobre a VPN e o software OpenVPN que será utilizado para fazer a configuração na distribuição Linux CentOS 6.6, porém pode ser válido também para RHEL 6.6.
O OpenVPN é um software livre e open-source para criar redes privadas virtuais do tipo ponto-a-ponto ou server-to-multiclient através de túneis criptografados entre computadores. O OpenVPN é capaz de estabelecer conexões diretas entre computadores mesmo que estes estejam atrás de NAT e Firewall sem necessidade de reconfiguração da sua rede. OpenVPN foi escrito por James Yonan e publicado sob licença GNU General Pulic Licence (GPL). O OpenVPN permite autenticação ponto-a-ponto através de chaves secretas compartilhadas, certificados digitais ou autenticação com usuário e senha. Quando utilizado em modo multiclient-server ele permite que cada cliente utilize a autenticação pública com certificados digitais, fazendo isto através de assinaturas digitais e certificados de autoridade. OpenVPN utiliza extensivamente a criptografia OpenSSL. Usa também os protocolos SSLv3/TLSv1. Esta disponível para Solaris, Linux, OpenBSD, FreeBSD, NetBSD, Mac OS X, e Windows 2000/XP/Vista. OpenVPN contém muitos recursos de controle e segurança. Ele não é um cliente VPN baseado em web, não é compatível com IPsec ou qualquer outro tipo de pacote VPN.
Considerações:
Linux (CentOS) como servidor
Linux (Ubuntu) como cliente
Windows 7 Professional como cliente
Chega de papo, vamos a prática.
Segue os passos:
1)Instalar o repositório EPEL para o CentOS 6.X, conforme sua arquitetura.
#rpm -i http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm 32bits
#rpm -i http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm64bits
2)Instalar o pacote openvpn.
#yum install openvpn  3)Agora vamos verificar o binário que foi instalado o openvpn.
#which openvpn 
/usr/sbin/openvpn  4)Criar as chaves de criptografia utilizando os scripts do próprio OpenVPN.
Fazer download dos scripts do OpenVPN direto no diretório /etc/openvpn via wget. #wget https://github.com/OpenVPN/easy-rsa/releases/download/2.2.2/EasyRSA-2.2.2.tgz
5)Extrair o pacote
#tar -xzvf EasyRSA-2.2.2.tgz 6)Criar o diretório keys
#mkdir keys && chmod +x *  7)Acessar o diretório EasyRSA
#cd EasyRSA  8)Executar como segue:
#source vars  # ./clean-all  9)Confirmar 2 arquivos serial e index.txt no diretório keys
ls -la keys  10)Criar autoridade do certificado
# ./build-ca  
Generating a 2048 bit RSA private key 
..................+++ 
.................+++  
writing new private key to 'ca.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) [US]:BR 
State or Province Name (full name) [CA]:SC 
Locality Name (eg, city) [SanFrancisco]:Joinville 
Organization Name (eg, company) [Fort-Funston]:SAITAM 
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:SAITAM 
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]: 
Name [EasyRSA]:SAITAM 
Email Address [me@myhost.mydomain]:  11)Confirmar a existência dos arquivos gerados no diretório keys
ls -la keys  12)Criar a chave privada e depois as chaves clientes
#
 ./build-key-server server 
Generating a 2048 bit RSA private key 
.................................................................+++ 
..........................................................+++ 
writing new private key to 'server.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) [US]:BR 
State or Province Name (full name) [CA]:SC 
Locality Name (eg, city) [SanFrancisco]:Joinville 
Organization Name (eg, company) [Fort-Funston]:SAITAM 
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:SAITAM 
Common Name (eg, your name or your server's hostname) [server]: 
Name [EasyRSA]:SAITAM 
Email Address [me@myhost.mydomain]: 
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/EasyRSA-2.2.2/openssl-1.0.0.cnf
Check that the request matches the signature 
Signature ok 
The Subject's Distinguished Name is as follows 
countryName           :PRINTABLE:'BR' 
stateOrProvinceName   :PRINTABLE:'SC' 
localityName          :PRINTABLE:'Joinville' 
organizationName      :PRINTABLE:'SAITAM' 
organizationalUnitName:PRINTABLE:'SAITAM' 
commonName            :PRINTABLE:'server' 
name                  :PRINTABLE:'SAITAM' 
emailAddress          :IA5STRING:'me@myhost.mydomain' 
Certificate is to be certified until Jan  8 17:12:29 2025 GMT (3650 days)
Sign the certificate? [y/n]: y 
 
13)Criar a chave do cliente01
# ./build-key cliente01 
Generating a 2048 bit RSA private key 
.................+++
..................................................................................................+++ 
writing new private key to 'cliente01.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) [US]:BR 
State or Province Name (full name) [CA]:SC 
Locality Name (eg, city) [SanFrancisco]:Joinville 
Organization Name (eg, company) [Fort-Funston]:SAITAM 
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:SAITAM 
Common Name (eg, your name or your server's hostname) [cliente01]: 
Name [EasyRSA]:SAITAM 
Email Address [me@myhost.mydomain]: 
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/EasyRSA-2.2.2/openssl-1.0.0.cnf 
Check that the request matches the signature 
Signature ok 
The Subject's Distinguished Name is as follows 
countryName           :PRINTABLE:'BR' 
stateOrProvinceName   :PRINTABLE:'SC' 
localityName          :PRINTABLE:'Joinville' 
organizationName      :PRINTABLE:'SAITAM' 
organizationalUnitName:PRINTABLE:'SAITAM' 
commonName            :PRINTABLE:'cliente01' 
name                  :PRINTABLE:'SAITAM' 
emailAddress          :IA5STRING:'me@myhost.mydomain' 
Certificate is to be certified until Jan  8 17:17:09 2025 GMT (3650 days)
Sign the certificate? [y/n]: y 
  14)Criar a chave DH (Diffie-Hellman)
#
 ./build-dh 
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time 
.................................................................+..........+..............................+.....+............................................................................................................................................+...........................................................................................................+..............+...+.........+................................................................................+........................................................++*++*  15)Criar o diretório keys no /etc/openvpn/keys
#mkdir -p /etc/openvpn/keys 16)Copiar as chaves geradas anteriormente para o diretório criado
#cp -R /etc/openvpn/EasyRSA-2.2.2/keys/* /etc/openvpn/keys/  17)Criar o arquivo de configuração do servidor
#vim server.conf 
#Porta VPN 
port 1194 
#Prototolo VPN 
proto udp 
#Interface VPN 
dev tun0 
#chaves e certificados 
ca /etc/openvpn/keys/ca.crt 
cert /etc/openvpn/keys/server.crt 
key /etc/openvpn/keys/server.key 
dh /etc/openvpn/keys/dh2048.pem 
#Rede clientes VPN (deve ser diferente da LAN) 
server 172.16.10.0  255.255.255.0 
#ifconfig-pool-persist ipp.txt 
#Rota de acesso a LAN (10.0.0.0/24 para os clientes VPN) 
push "route 10.0.0.0 255.255.255.0" 
route 172.16.10.0 255.255.255.0 # roteamento do cliente VPN 
client-to-client 
#Permitir que múltiplos clientes se conectem na mesma chave/certificado
#duplicate-on 
#Monitoriamento da conexão: primeiro ping, segundo restart da vpn em segundos 
keepalive 10 120 
#compressão de dados 
comp-lzo 
user nobody 
group nobody 
#Mantém a chave carregada quando a VPN é reiniciada 
#persist-key 
#Mantém a interface tun carregada quando a VPN é reiniciada 
#persist-tun 
#Informações de status de conexao 
status /var/log/openvpn/openvpn-status.log 
#Arquivo de log 
log /var/log/openvpn/openvpn.log 
log-append /var/log/openvpn/openvpn.log 
verb 3 
 
18)Criar o diretório de log do openvpn #
 mkdir -p /var/log/openvpn 19)Iniciar o servidor do openvpn
#chkconfig openvpn on 
## service openvpn start 
Iniciando o openvpn:                                       [  OK  ]  Se não apresentou nenhum erro ao iniciar o serviço do OpenVPN, execute #ifconfig para verificar a interface tun foi iniciada.
#ifconfig  
eth0      Link encap:Ethernet  Endereço de HW 08:00:27:2B:F5:19 
          inet end.: 10.0.0.103  Bcast:255.255.255.255  Masc:255.255.255.0 
          endereço inet6: fe80::a00:27ff:fe2b:f519/64 Escopo:Link 
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1 
          RX packets:25249 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:19705 errors:0 dropped:0 overruns:0 carrier:0 
          colisões:0 txqueuelen:1000 
          RX bytes:11346462 (10.8 MiB)  TX bytes:2651997 (2.5 MiB)
          IRQ:10 Endereço de E/S:0xd020 
lo        Link encap:Loopback Local 
          inet end.: 127.0.0.1  Masc:255.0.0.0 
          endereço inet6: ::1/128 Escopo:Máquina 
          UP LOOPBACKRUNNING  MTU:65536  Métrica:1 
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 
          colisões:0 txqueuelen:0 
          RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b) 
tun0      Link encap:Não Especificado  Endereço de HW 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet end.: 172.16.10.1  P-a-P:172.16.10.2  Masc:255.255.255.255 
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Métrica:1 
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          colisões:0 txqueuelen:100 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) 
 
É necessário habilitar IP forwarding no arquivo /etc/sysctl.conf e trocar 0 por 1 na linha net.ipv4.ip_forward = 1 .
Efetuar o atualização do arquivo com o comando
#sysctl -p.
Adicionar no script firewall
#!/bin/bash 
#Encaminhar os pacotes recebidos da interface local para IP do cliente 
 iptables -t nat -A POSTROUTING -d 10.0.0.0/24 -s 172.16.10.0/24 -j ACCEPT 
#Encaminhar os pacotes do IP cliente para interface local 
iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE  20)Configurar o cliente VPN no Windows
Premissas:
* Fazer o download do OpenVPN e instalar ( https://openvpn.net/index.php/open-source/downloads.html )
* Copiar as chaves e certificados gerados no servidor para o cliente deixando o arquivo cliente.ovpn e arquivos de chaves e certificados no mesmo diretório, que estão no diretório do servidor /etc/openvpn/keys, devem copiar: ca.crt, cliente01.crt, cliente01.key para C:\Program Files\OpenVPN\config no computador cliente Windows 7.
* Criar um arquivo cliente.ovpn no diretório C:\Program Files\OpenVPN\config junto com as chaves e certificados.
cliente.ovpn
client 
tls-client 
dev tun 
proto udp 
remote 10.0.0.103 #IP fixo do servidor VPN
remote-random 
resolv-retry infinitive 
nobind 
persist-key 
persist-tun 
#SSL 
ca ca.crt 
cert cliente01.crt 
key cliente01.key 
comp-lzo 
pull 
tun-mtu 1500 
Executar o Gui VPN como Administrador e conectar na VPN do servidor.Digite no cmd (prompt) do Windows o comando ipconfig para mostrar o IP do cliente VPN atribuído.
21)Configurar o cliente VPN no Linux (Ubuntu)
No terminal execute:
$sudo apt-get update $sudo apt-get install openvpn É necessário fazer o procedimento da geração das chaves e certificados da mesma forma que foi feito para o cliente01 para o cliente02, copiar os arquivos ca.crt, cliente02.crt, cliente02.key do servidor para o /etc/openvpn.
Criar o arquivo cliente02.conf
client 
tls-client 
dev tun 
proto udp 
remote 10.0.0.103 #IP fixo do servidor VPN
remote-random 
resolv-retry infinitive 
nobind 
persist-key 
persist-tun 
#SSL 
ca /etc/openvpn/ca.crt 
cert /etc/openvpn/clinte02.crt 
key /etc/openvpn/cliente02.key 
comp-lzo 
 Reiniciar o serviço do OpenVPN.
#/etc/init.d/openvpn restart Verificar se a interface tun0 foi iniciada com comando
#ifconfigLog do Servidor
root@Saitam# tail -f /var/log/openvpn/openvpn.log Mon Jan 12 16:01:56 2015 10.0.0.102:55858 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key 
Mon Jan 12 16:01:56 2015 10.0.0.102:55858 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication 
Mon Jan 12 16:01:56 2015 10.0.0.102:55858 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA 
Mon Jan 12 16:01:56 2015 10.0.0.102:55858 [cliente01] Peer Connection Initiated with [AF_INET]10.0.0.102:55858 
Mon Jan 12 16:01:56 2015 cliente01/10.0.0.102:55858 MULTI_sva: pool returned IPv4=172.16.10.6, IPv6=(Not enabled) 
Mon Jan 12 16:01:56 2015 cliente01/10.0.0.102:55858 MULTI: Learn: 172.16.10.6 -> cliente01/10.0.0.102:55858 
Mon Jan 12 16:01:56 2015 cliente01/10.0.0.102:55858 MULTI: primary virtual IP for cliente01/10.0.0.102:55858: 172.16.10.6 
Mon Jan 12 16:01:59 2015 cliente01/10.0.0.102:55858 PUSH: Received control message: 'PUSH_REQUEST' 
Mon Jan 12 16:01:59 2015 cliente01/10.0.0.102:55858 send_push_reply(): safe_cap=940 
Mon Jan 12 16:01:59 2015 cliente01/10.0.0.102:55858 SENT CONTROL [cliente01]: 'PUSH_REPLY,route  10.0.0.0 255.255.255.0,route 172.16.10.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 172.16.10.6 172.16.10.5' (status=1) 
^C  root@Saitam# tail -f /var/log/openvpn/openvpn-status.log  OpenVPN CLIENT LIST 
Updated,Mon Jan 12 16:04:42 2015 
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since 
cliente01,10.0.0.102:55858,9251,7357,Mon Jan 12 16:01:56 2015 
ROUTING TABLE 
Virtual Address,Common Name,Real Address,Last Ref 
172.16.10.6,cliente01,10.0.0.102:55858,Mon Jan 12 16:03:31 2015 
GLOBAL STATS 
Max bcast/mcast queue length,0
END 
  Referências
[1] Documentação OpenVPN. https://openvpn.net/index.php/open-source/documentation/howto.html
Feito!
 
 
Nenhum comentário:
Postar um comentário