Configurando o OpenVPN
Para a configuração do OpenVPN, iremos criar o diretório /etc/openvpn, e iremos colocar lá todas as configurações referentes a ele, inclusive os certificados de segurança. Por esse motivo, restrinja o acesso a esse diretório apenas para o super-usuário.
[root@matriz root]# mkdir /etc/openvpn [root@matriz root]# chmod 700 /etc/openvpn
Em nosso primeiro exemplo, essa será a topologia de trabalho.
A empresa XYZ possui em sua Matriz um link permanente com a internet, e sua filial possui um link ADSL com ip dinâmico. Em ambos os lados, existe um servidor Linux rodando o OpenVPN. A Matriz possui vários servidores, desde SQL até NFS, todos rodando em cima do TCP/IP. Começaremos pela configuração da Matriz.
Em primeiro lugar, vamos criar os certificados publico e privado da Matriz.
É através dele que a filial irá criptografar os dados que serão enviados
pela VPN. Para isso, gere os certificados com os comandos
openssl req -nodes -new -keyout matriz.key -out matriz.csr
openssl ca -out matriz.crt -in matriz.csr
O primeiro comando, cria um pedido de certificado, e o segundo, faz com que a CA
assine o certificado, concordando que o certificado é válido. Da maneira que
iremos configurar o OpenVPN, ele irá aceitar qualquer conexão que tenha um
certificado válido assinado pela sua CA. Por isso a segurança da sua CA é
tão importante. Se ela for comprometida, sua VPN pode entrar em apuros.
[root@toti certificados]# openssl req -nodes -new \ -keyout matriz.key -out matriz.csr Generating a 2048 bit RSA private key ...................................+++ ..............................................+++ writing new private key to 'matriz.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) [AU]:BR State or Province Name (full name) [Some-State]:SANTA CATARINA Locality Name (eg, city) []:JOINVILLE Organization Name (eg, company) [Internet Widgits Pty Ltd]: ARP INFORMATICA Organizational Unit Name (eg, section) []:MATRIZ Common Name (eg, YOUR name) []:VPN Email Address []:INFO@ALTORIOPRETO.COM.BR Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@toti certificados]# openssl ca -out matriz.crt -in matriz.csr Using configuration from /etc/ssl/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Oct 31 00:30:24 2003 GMT Not After : Oct 30 00:30:24 2006 GMT Subject: countryName = BR stateOrProvinceName = SANTA CATARINA organizationName = ALTO RIO PRETO INFORMATICA organizationalUnitName = MATRIZ commonName = VPN emailAddress = INFO@ALTORIOPRETO.COM.BR X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: F1:4A:6C:C7:7D:EB:FD:13:BE:2B:6B:16:91::BA:DE:E4:02 X509v3 Authority Key Identifier: keyid:D7:3B:97:76:AE:AE:E2:C8:5D:46:D7:71:65:36:C5 DirName:/C=BR/ST=SANTA CATARINA/L=JOINVILLE /O=ALTO RIO PRETO INFORMATICA /OU=VPN/CN=ARP /emailAddress=INFO@ALTORIOPRETO.COM.BR serial:00 Certificate is to be certified until Oct 30 00:30 2006 GMT (1095 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 [root@toti certificados]#
Com isso você criou 3 arquivos. O matriz.crt, matriz.csr e matriz.key. Você deve copiar os arquivos matriz.crt e matriz.key para o diretório /etc/openvpn do servidor da matriz. O arquivo matriz.csr pode ser descartado. Os arquivos my-ca.crt e dh.pem também devem estar no mesmo diretório! Não se esqueça de copiar eles com alguma segurança, via scp por exemplo. Toda a segurança da sua VPN está nesses arquivos.
Você terá que fazer isso para cada túnel que criar. É tecnicamente possível, usar os mesmos certificados para todos os túneis, entretanto, isso quebraria o esquema de segurança que o OpenSSL fornece.
Agora crie o arquivo de configuração do túnel. Na matriz, chamaremos o arquivo simplesmente de matriz.conf. Se você tiver vários tuneis, pode chamar os arquivos e certificados de joinville-sao_paulo.conf, joinville-florianopolis.crt....
# Exemplo de configuração do OpenVPN # para a Matriz, usando o modo SSL/TLS e # chaves RSA. # # '#' ou ';' são comentarios. # # Obs: Tradução livre do arquivo # sample-config-files/tls-office.conf # no diretorio de sources do OpenVPN. # Usar como interface o driver tun. dev tun # 10.10.0.1 é o nosso IP local (matriz). # 10.10.0.2 é o IP remoto (filial). ifconfig 10.10.0.1 10.10.0.2 # Diretorio onde estão todas as configurações cd /etc/openvpn # O OpenVPN irá executar esse script # quando o tunel estiver carregado. # Ideal para setar as rotas up ./matriz.up # No modo SSL/TLS a matriz irá # assumir a parte do servidor, # e a filial será o cliente. tls-server # Parametros Diffie-Hellman (apenas no servidor) dh dh.pem # Certificado da CA ca my-ca.crt # Certificado publico da Matriz cert matriz.crt # Certificado privado da Matriz key matriz.key # OpenVPN usa a porta 5000/UDP por padrão. # Cada tunel do OpenVPN deve usar # uma porta diferente. # O padrão é a porta 5000 ; port 5000 # Mudar UID e GID para # "nobody" depois de iniciado # para uma segurança exta. ; user nobody ; group nobody # Envia um ping via UDP para a parte # remota a cada 15 segundos para manter # a coneção em firewall statefull # Muito recomendado, mesmo se você não usa # um firewall baseado em statefull. ping 15 # Nivel dos logs. # 0 -- silencioso, exeto por erros fatais. # 1 -- quase silencioso, mas mostra erros não fatais da rede. # 3 -- médio, ideal para uso no dia-a-dia # 9 -- barulhento, ideal para solução de problemas verb 3
É necessário que exista um arquivo chamado matriz.up, que será executado quando a vpn estiver ativa. Vamos usar ele para setar a rota para a rede remota. Ele é chamado com algumas opções via linha de comando. A principio só precisamos saber que o parametro $5 é o ip da VPN da parte remota.
#!/bin/bash route add -net 10.10.1.0 netmask 255.255.255.0 gw $5
Com o arquivo de configuração criado, e com os certificados copiados, você pode rodar o programa.
[root@matriz root]# /usr/local/sbin/openvpn --config \ /etc/openvpn/matriz.conf --daemon [root@matriz root]#
Você deve ter estranhado não ter feito nenhuma saída. Entretanto o OpenVPN já deve estar rodando e esperando por uma conexão remota. Você pode verificar isso, visualizando os logs do sistema.
[root@matriz root]# tail /var/log/messages Nov 1 00:48:23 matriz openvpn[22083]: OpenVPN 1.4.3 i686-pc-linux-gnu [SSL] built on Oct 13 2003 Nov 1 00:48:23 matriz openvpn[22083]: UDP link local (bound): [undef]:5000 Nov 1 00:48:23 matriz openvpn[22083]: UDP link remote: [undef] Nov 1 00:48:23 matriz openvpn[22083]: Diffie-Hellman initialized with 2048 bit key Nov 1 00:48:23 matriz openvpn[22083]: Data Channel MTU parms [ MUITOS PARAMETROS ] Nov 1 00:48:23 matriz openvpn[22083]: Control Channel MTU parms [ MUITOS PARAMETROS ] Nov 1 00:48:23 matriz openvpn[22083]: TUN/TAP device tun0 opened Nov 1 00:48:23 matriz openvpn[22083]: /sbin/ifconfig tun0 10.1.0.1 pointopoint 10.1.0.2 mtu 1259 Nov 1 00:48:23 matriz openvpn[22083]: ./matriz.up tun0 1259 1300 10.1.0.1 10.1.0.2 [root@matriz root]#
Agora já podemos configurar a filial.
Parte 5: Configurando a filial -->