Openvpn- tutorial Criando uma vpn com openvpn.

Esse é o primeiro artigo de uma série de três, onde iremos mostrar como melhorar a comunicação da sua empresa com Software livre.

Na parte 1, falaremos sobre seguranca dessas informações, como protege-la e criar uma vpn através do openvpn.
Na parte 2, mostraremos como instalar um servidor jabber na sua rede.
Na parte 3, teremos o artigo como criar um central telefonica para cominicação interna com
asterisk.

Introdução

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.
Pode estabelecer conexões diretas entre computadores mesmo que estes estejam atrás de Nat.

O OpenVPN permite autenticação ponto-a-ponto através de chaves secretas compartilhadas,
certificados ou autenticação com usuário e senha ou no modo multiclient-server, permitindo
que cada cliente utilize a autenticação pública com certificados, utilizando assinaturas digitais e certificados de autoridade. A sua criptografia utiliza o OpenSSL.

Implantando em ambiente fictício:

Matriz:

Ip de internet: 189.100.100.100
rede do tunel: 10.11.12.0/24
rede interna da matriz: 10.10.1.0/24

Filial1:

Ip de internet: 201.100.100.100
rede interna da matriz: 10.10.2.0/24

Instalando o openvpn no servidor:

Instalaremos o openvpn através do apt-get no debian ou no ubuntu server, tanto na matriz quanto na filial:

root@matriz:~# apt-get install openvpn

Após a instalação do openvpn iremos dar início a criação da vpn na matriz:

Entre no diretório /usr/share/doc/openvpn/examples/easy-rsa/
root@matriz:~#cd /usr/share/doc/openvpn/examples/easy-rsa/

Abra e edite o arquivo vars ajustando as seguintes variáveis

# nano vars
// obs: tudo que tem // no início são comentarios e não deve estar no arquivo

//Início do arquivo vars

//Local onde irão ficar dos arquivos de configuração!

export EASY_RSA="`pwd`"

//Local onde estarão as chaves

export KEY_DIR="$EASY_RSA/keys"

//Local onde serão criadas as configurações

export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`

//Tamanho da chave em bits

export KEY_SIZE=2048

//Informações para gerar os certificados

export KEY_COUNTRY="BR"
export KEY_PROVINCE="RN"
export KEY_CITY="NATAL"
export KEY_ORG="seudominio.com.br"
export KEY_EMAIL="eu@seudominio.com.br"

Salve e feche o arquivo.

Para carregar informações do arquivo vars em memória, execute o comando abaixo:

root@matriz:~#. ./vars

Poderá aparecer a saída abaixo:

NOTE: If you run ./clean-all, I will be doing a rm -rf on

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys

Limpe as antigas chaves, certificados e parâmetros com o comando abaixo:

root@matriz:~#./clean-all

Aparecerá a saída abaixo:

Please source the vars script first (i.e. "source ./vars")
Make sure you have edited it to reflect your configuration.

Gere o certificado CA (certificate authority) que será utilizado na sua vpn:

root@matriz:~#./build-ca

Aparecerá a saída abaixo:

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) [BR]:
State or Province Name (full name) [DF]:
Locality Name (eg, city) [Brasilia]:
Organization Name (eg, company) [dominio.com.br]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [dominio.com.br

CA]:servidor.dominio.com.br
Email Address [pessoa@dominio.com.br]:

Agora iremos criar chave para o seu servidor.

root@matriz:~#./build-key-server servidor

Agora iremos criar chave para as filiais da nossa empresa.

root@matriz:~#./build-key filial1
root@matriz:~#./build-key filia2

Agora criamos os parametros diff hellman, eles são necessários para o servidor openvpn trocar as chaves entre os pontos.

root@matriz:~#./build-dh

Aparecerá a saída abaixo:

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.................+...........................................
...................+.............+.................+.........
......................................

Terminamos a parte de gerar as chaves e teremos que move-las para o diretorio etc/openvpn/keys

root@matriz:~#mkdir /etc/openvpn/keys
root@matriz:~#cp keys/* /etc/openvpn/keys

Configurando do servidor openvpn:

Crie o arquivo abaixo com editor de texto nano:

root@matriz:~#nano /etc/openvpn/servidor.conf

Insira o seguinte conteúdo no arquivo:

//inicio do arquivo server.conf

dev tun # interface da vpn
mode server # modo de funcionamento
proto udp # protocolo TCP / UDP ?
port 1194 # porta que o openvpn vai rodar
# declarando chaves, certificados e parametros
ca keys/ca.crt
cert keys/servidor.crt
key keys/servidor.key
dh keys/dh2048.pem
server 10.11.12.0 255.255.255.0 # rede e mascara a sua interface de tunelamento
ifconfig-pool-persist /etc/openvpn/ipp.txt # cache do pool utilizando pelos clientes
push "route 10.10.1.0 255.255.255.0" # Rota para rede da matriz
ping 15 # mantendo conexao aberta com ping a cada 15 segundos
client-config-dir ccd
# mantem a conexao persistente (reconecta caso falhe)
ping-timer-rem
persist-tun
persist-key
# usuario e grupo que vao rodar o openvpn
user nobody
group nogroup
comp-lzo # tipo de compressão
keepalive 10 120
# configuracoes de log
status-version 2
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 5
//fim do arquivo server.conf

Após salvar e fechar o aquivo server.conf, iremos configurar o arquivo da filial para que a mesma possa se conectar a vpn:

Configuração da filial openvpn:

Crie o arquivo abaixo com editor de texto nano:

root@matriz:~#nano /etc/openvpn/filial.conf

Insira o seguinte conteúdo no arquivo:

//inicio do arquivo filial.conf
client
dev tun
ifconfig 10.11.12.2 10.11.12.1
proto tcp
remote 189.100.100.100 1194
resolv-retry infinite
nobind
ca /etc/openvpn/ca.crt
cert /etc/openvpn/filial.crt
key /etc/openvpn/filial.key
persist-tun
persist-key
user nobody
ns-cert-type server
comp-lzo
verb 5
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn.log

//fim do arquivo filial.conf

Crie o diretório /var/log/openvpn no servidor:

root@matriz:~#mkdir /var/log/openvpn

Envie os arquivo ca.crt,filial1.crt,filial1.key,ca.key,filial1.conf via ssh da matriz para a filial com o comando scp.

root@matriz:/etc/openvpn/keys# scp ca.crt filial1.crt filial1.key ca.key 201.100.100.100:/etc/openvpn/keys
root@matriz:/etc/openvpn#scp filial1.conf 201.100.100.100:/etc/openvpn

Inicie o openvpn manualmente:

openvpn --config servidor.conf -daemon

ou pelo init.d

root@matriz:/etc/openvpn# /etc/init.d/openvpn start

Verifique se a interface foi criada:

root@matriz:/etc/openvpn# ifconfig tun0

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.150.1 P-t-P:192.168.150.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Veja se as rotas foram adicionadas automaticamente:

root@matriz:/etc/openvpn# route -n
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.11.12.1 10.11.12.5 255.255.255.255 UGH 0 0 0 tun0
10.11.12.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.10.1.0 0.0.0.0 255.255.255.0 UG 0 0 0 eth0
189.100.100.0 0.0.0.0 255.255.192.0 U 1 0 0 eth1
0.0.0.0 189.100.100.1 0.0.0.0 UG 0 0 0 eth1

Caso tenha algum problema veja os logs:

root@matriz:/etc/openvpn#tail -f /var/log/openvpn/openvpn.log

Crie odiretorio /var/log/openvpn:
root@filial:/etc/openvpn# mkdir /var/log/openvpn

Start o openvpn, após isso verifique a interface:

root@filial:/etc/openvpn# openvpn --config servidor.conf -daemon

Verifique se a interface de tunelamento foi criada:

root@filial:/etc/openvpn# ifconfig tun0

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.: 10.11.12.6 P-a-P:10.11.12.5 Masc:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Métrica:1
pacotes RX:385 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:670 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:100
RX bytes:66460 (66.4 KB) TX bytes:55127 (55.1 KB)

Veja se as rotas foram adiconadas automaticamente:

root@filial:/etc/openvpn# route -n
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.11.12.1 10.11.12.5 255.255.255.255 UGH 0 0 0 tun0
10.11.12.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.10.1.0 10.11.12.5 255.255.255.0 UG 0 0 0 tun0
10.10.2.0 0.0.0.0 255.255.192.0 U 1 0 0 eth0
0.0.0.0 201.100.100.1 0.0.0.0 UG 0 0 0 eth1

Verifique a saída do log:

root@filial:/etc/openvpn# tail -f /var/log/openvpn/openvpn.log

Teste se a vpn esta funcionado corretamente com o comando ping da matriz para a filial:

root@matriz:/etc/openvpn# ping 10.11.12.6
PING 10.11.12.6 (10.11.12.1) 56(84) bytes of data.
64 bytes from 10.11.12.6: icmp_seq=1 ttl=64 time=25.6 ms
64 bytes from 10.11.12.6: icmp_seq=2 ttl=64 time=26.1 ms
64 bytes from 10.11.12.6: icmp_seq=3 ttl=64 time=19.2 ms
64 bytes from 10.11.12.6: icmp_seq=4 ttl=64 time=23.8 ms
64 bytes from 10.11.12.6: icmp_seq=5 ttl=64 time=27.1 ms
64 bytes from 10.11.12.6: icmp_seq=6 ttl=64 time=35.6 ms
64 bytes from 10.11.12.6: icmp_seq=7 ttl=64 time=20.2 ms
^C
--- 10.11.12.6 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6009ms
rtt min/avg/max/mdev = 19.240/25.417/35.674/5.023 ms

Testando da filial: para a matriz:

root@filial:~# ping 10.11.12.1
PING 10.11.12.1 (10.11.12.1) 56(84) bytes of data.
64 bytes from 10.11.12.1: icmp_seq=1 ttl=64 time=53.7 ms
64 bytes from 10.11.12.1: icmp_seq=2 ttl=64 time=50.3 ms
64 bytes from 10.11.12.1: icmp_seq=3 ttl=64 time=19.6 ms
64 bytes from 10.11.12.1: icmp_seq=4 ttl=64 time=24.0 ms

--- 10.11.12.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3037ms
rtt min/avg/max/mdev = 19.649/36.955/53.788/15.247 ms

Testando o ping da filial para rede interna da matriz:

root@filial:~# ping 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 56(84) bytes of data.
64 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=173 ms
64 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=171 ms
64 bytes from 10.10.1.1: icmp_seq=3 ttl=64 time=174 ms
64 bytes from 10.10.1.1: icmp_seq=4 ttl=64 time=174 ms
64 bytes from 10.10.1.1: icmp_seq=5 ttl=64 time=175 ms

Se na sua rede tem um firewall será necessario liberar a porta vpn,a ssim como os acessos da rede:

root@filial:~# iptables -A INPUT -i tun0 -j ACCEPT
root@filial:~#iptables -A OUTPUT -o tun0 -j ACCEPT
root@filial:~#iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
root@filial:~#iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
root@filial:~#iptables -A POSTROUTING -o tun0 -j MASQUERADE

root@matriz:~# iptables -A INPUT -i tun0 -j ACCEPT
root@matriz:~#iptables -A OUTPUT -o tun0 -j ACCEPT
root@matriz:~#iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
root@matriz:~#iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
root@matriz:~#iptables -A POSTROUTING -o tun0 -j MASQUERADE

Fim da primeira parte do nosso, na próxima semana publicaremos a segunda parte.


Siga o @def_linux no twitter e fique por dentro dos nossos tutoriais, dicas e promoções.

Veja mais notícias Linux e tutoriais do blog aqui.

Nenhum comentário: