Este artigo foi originalmente publicado em meu blog pessoal www.rfranzen.com.br. Muitas vezes precisamos interligar de forma segura diversos pontos que não estão próximos fisicamente, ou, devido a algum imprevisto, acabamos tendo que acessar remotamente e de forma segura os servidores de algum cliente. 1º Requisitos dos Pacotes: # yum install # yum install lzo* (lzo-2.03-2.fc11.i586 e lzo-devel-2.03-2.fc11.i586) # yum install openssl* (openssl-0.9.8n-2.fc11.i686, openssl-devel-0.9.8n-2.fc11.i586) # yum install openvpn* (openvpn-2.1.1-2.fc11.i586) 2º Criando sua própria CA (Certificate Authority) e gerando os certificados e chaves para um servidor e 3 clientes Gerando o CA (Certificate Authority) e as chaves Copiar os scripts easy rsa: # cp -R /usr/share/openvpn/easyrsa /etc/openvpn/ 3º Edite o arquivo /etc/openvpn/vars. Verifique a validade dos certificados. As linhas que interessam estão no final e devem ficar parecidas com isto: # vim vars export KEY_COUNTRY="BR" export KEY_PROVINCE="SP" export KEY_CITY="JUNDIAI" export KEY_ORG="Empresa Cliente" export KEY_EMAIL="novaera@novaerainfo.com.br" export KEY_CN="host.dominio.net" export KEY_NAME="Empresa Cliente CA" export KEY_OU="Dpto de TI" 4 Como root, execute o script em, estando em /etc/openvpn: # chmod +rwx * # source./vars #./cleanall 5º Agora vamos gerar a CA. A saída do mesmo deve ser parecida com o que segue abaixo: #./build-ca Generating a 1024 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) [SP]: Locality Name (eg, city) [JUNDIAI]: Organization Name (eg, company) [Empresa Cliente]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:EmpresaClienteCA Email Address [marcelo@novaerainfo.com.br]: Note na sequencia acima que a maioria dos parâmetros virá preenchida com as informações armazenadas no /etc/openvpn/vars. Os únicos parâmetros que precisa ser explicitamente informado é o Common Name. No exemplo acima usei EmpresaClienteCA. Nova Era Informática sexta-feira, 5 de julho de 2013 19:31 - Pág. 1 de 5.
6º Gerando o certificado e a chave do servidor Agora, iremos gerar o certificado e a chave privada para o servidor. Ainda dentro de /etc/openvpn, execute como root: #./build-key-server srvcert Da mesma forma que no passo anterior, a maioria dos parâmetros virá do aquivo /etc/openvpn/vars. Quando for pedido o Common Name informe server. Para as demais questões, responda afirmativamente, isto é : "Common Name" srvcert "Sign the certificate? [y/n]" y "1 out of 1 certificate requests certified, commit? [y/n]" y 7º Criar e Editar o Arquivo de configuração da VPN # touch /etc/openvpn/openvpn.conf # vim /etc/openvpn/openvpn.conf Lembrando que no servidor devemos ter os certificados da unidade certificadora, do servidor e as chaves públicas dos clientes..: Exemplo do openvpn.conf :. # script : matriz-vpn.conf # descricao : Arquivo de configuracao OPENVPN # versao : 1.0 - SERVIDOR <=> VARIOS CLIENTES # autor : 2009(c), Marcelo B. Rigo # Nova Era Informatica - (11) 3964-0008 # All Rights Reserved # data : MES/ANO # Cliente : 0000 - CLIENTE # Global Settings # Define em qual endereco o servidor aceitara conexoes - IP Valido # IP da internface ethx - LAN local 192.168.200.10 # Porta na qual o servidor aceitara conexoes port 1194 # Protocolo utilizado no tunel - tcp ou udp server? proto udp # Dispositivo utilizado pelo OpenVPN # dev tun - Cria um Tunel IP Roteado # dev tap - Cria um Tunel Ethernet # dev tap0 Para uma Bridge em uma ethernet virtual dev tun # Para nao precisar especificar o caminho completo nas opcoes ca, cert, key, dh e tls-auth, utilizamos esta opcao # cd /etc/openvpn/ # Certificados SSL/TLS ca /etc/openvpn/ca.crt cert /etc/openvpn/srvcert.crt key /etc/openvpn/srvcert.key # Paramentros Diffie Hellman em 1024bits # openssl dhparam -out dh1024.pem 1024 # Pode ser usado para 2048bits. dh /etc/openvpn/dh1024.pem # Define o modo e como o servidor VPN e a faixa de IP's que serao atribuidos aos clientes. # Presisa ser uma rede Exclusiva!!! # o End. 172.16.0.1 sera atribuido ao servidor # e os demais ficam disponibilizados para os clientes. server 172.16.0.0 255.255.0.0 # Mantem registro das conexoes clientes ifconfig-pool-persist ipp.txt # Faz com que o gateway padrao dos clientes passem pela VPN. # push "redirect-gateway" # Permite que os clientes conectados ao servidor troquem pacotes entre si client-to-client Nova Era Informática sexta-feira, 5 de julho de 2013 19:31 - Pág. 2 de 5.
# Permite que 2 ou mais clientes conectem simultaneamente ao servidor # utilizando o mesmo certiicado. Sem esta opcao, o cliente que tentar se # conectar derruba o cliente ja conectado. # duplicate-cn # Esta diretiva envia pacotes 'ping' sobre o link para ambas as conexoes, # para que seja possive descobrir se uma das pontas ficar 'down' # ping a cada 10 segundos, assume que o link ficou down apos 120s sem retorno. keepalive 10 120 # Seguranca EXTRA: # Chave estatica que atua como uma segunda camada de protecao. # Servidor so aceita conexoes caso este arquivo tambem exista no cliente. # Gere com: openvpn --genkey --secret ta.key # O segundo parametro deve ser devinida, '0' p/ Server e '1' p/ Clientes # Este Arquivo e SECRETO # tls-auth /etc/openvpn/ta.key 0 # Habilita a compressao dos dados antes do envio pelo tunel de comunicacao. # Esta opcao deve estar habilitada no servidor e no cliente. comp-lzo # Numero maximo de clientes simultaneos conectados ao servidor. max-clients 3 # Em sistemas clientes NAO Windows descomente as linhas abaixo: user nobody group nobody # Estas opcoes poderao tentar a reconexao caso uma das pontas caia. persist-key persist-tun # No arquivo status sao gravados um pequeno status das conexoes ao servidor. # Bom para controle do servidor. status /etc/openvpn/openvpn-status.log # Define quais serao os logs do sistema. log /var/log/openvpn-conf-vpn.log log-append /var/log/openvpn-conf-vpn.log # Quantidade de informacoes que serao escritas nos logs do OpenVPN. Quanto maior o numero, mais informacoes # # 0 - Retorna Apenas Erros Fatais; # # 3 - Erros, ideal para producao; # # 4 - Bem conservador, Razoavel para uso Geral; # # 5 e 6 - Ajudam a auxiliar problemas de Conexao; # # 9 - Mostra tudo, ideal quando configurando, ideal para resolver problemas; verb 3 8º Gerar o Certificado DH Diffie Hellman #./buid-dh 9º Copiar os certificados gerados para nossa OpenVPN # cp keys/{ca.crt,ca.key,srvcert.crt,srvcert.key} /etc/openvpn # cp keys/dh1024.pem /etc/openvpn Iniciar o Serviço # /etc/init.d/openvpn start (subindo sem erro, iniciar o serviço com o boot.) # chkconfig --level 235 openvpn on 10º Gerar os Certificados Clientes #./build-key <nome> # Exemplo./build-key cliente-01 ou./build-key marcelo Crie um diretório cliente onde ficaram os certificados a serem fornecidos aos clientes. # mkdir /etc/openvpn/clients # cp keys/ {ca.crt,ca.key,<nome).crt,<nome>.csr,<nome>.key} /etc/openvpn/clients Criar arquivo de configuração do Cliente-VPN no formado (DOS), este arquivo pode ter qualquer nome mas a Nova Era Informática sexta-feira, 5 de julho de 2013 19:31 - Pág. 3 de 5.
extensão deve ser.ovpn. # touch client.ovpn # vim client.ovpn.: Exemplo de um client.ovpn :. # ###################################################################### # script : Cliente - VPN [Windows 7 x32_64] # descricao : Arquivo de configuracao OPENVPN # versao : 1.0a - SERVIDOR <=> VARIOS CLIENTES # autor : 2009(c), Marcelo B. Rigo # Nova Era Informatica - (11) 3964-0008 # All Rights Reserved # data : MMMM/AAAA # Cliente : 0000 Cliente # Ao instalar no Windows coloque este arquico junto com os certificados # no caminho C:\Arquivos de Programas\OpenVPN\config\ # # NAO ALTERE AS LINHAS ABAIXO. SE NAO SOUBER O QUE ESTA FAZENDO. # # Global Settings # Define o modo de operacao: client # Define o tipo do tunel (deve ser igual ao Servidor) dev tun # Windows precisa do Nome do Adaptador TAP-Win32 # Defina no seu win o nome do adap. ex: "MyVPN" e descomente a linha abaixo: dev-node MyVPN # Define Protocolo do Servidor: proto udp # Define o end. do Host e a porta TCP/UDP de comunicacao da VPN remote 187.115.132.234 port 1194 # Outros Parametros de Configuracao resolv-retry infinite nobind # Descomente as linhas abaixo para clientes NAO Windows; # user nobody # group nobody persist-key persist-tun # Se for Conectar atraves de um Servidor Proxy # descomente as linhas abaixo # http-proxy-retry # http-proxy [192.168.10.1] [3128] # Certificados de Seguranca e Certificados Clientes. # Abaixo padrao windows. ca cert key./ca.crt./'user-client.crt'./'user-client.key' # Define o tipo de conexao # Este deve ser devinido com o nome do certificado gerado no servidor: # ns-cert-type server # Utilizando Seguranca Extra - tem que estar habilitado no Servidor # tls-auth "C:\\Arquivos de Programas\\OpenVPN\\config\\ta.key 1" # Demais Parametros comp-lzo verb 3 # unix2dos client.ovpn cliente.ovpn # cd /etc/openvpn Nova Era Informática sexta-feira, 5 de julho de 2013 19:31 - Pág. 4 de 5.
# zip -r vpn-client.zip clients Estes Arquivos Clientes deverão ser salvos na pasta C:\ArquivosDeProgramas\OpenVPN\config\ *************************************************************************************************************** Se necessário para REVOGAR um Cliente faça no servidor: # source./vars #./revoke-full <nome-certificad0-cliente> *************************************************************************************************************** Liberando acesso ao Samba: Acrescente aos parametros interfaces e hostsallow conforme exemplo abaixo: interfaces = lo eth0 192.168.200.10/24 tun0 172.16.0.1 hosts allow = 127. 192.168.200. 172.16.0. Se necessário Liberar a OpenVPN e Porta no Firewall, acrescente as linhas abaixo onde o $ipt = /sbin/iptables # VPN Interface Externa (WAN) # VPN Interfaces VPN_IF= tun0 VPN_NT= 172.16.0.0/24 VPN_IP= 172.16.0.1 #.: OpenVPN :. $ipt -A INPUT -i $EXT_IF -p tcp -s $UNIVERSE -d $EXT_IP --destination-port 1194 -j ACCEPT $ipt -A INPUT -i $EXT_IF -p tcp -s $UNIVERSE -d $EXT_IP --destination-port 1194 -j ACCEPT #.: Permitir que a interface do tunel tun conecte ao Servidor VPN $ipt -A OUTPUT -o $INT_IF -s $EXT_IP -d $VPN_NT -j ACCEPT $ipt -A OUTPUT -o $VPN_IF -s $EXT_IP -d $VPN_NT -j ACCEPT $ipt -A FORWARD -i $EXT_IF -o $VPN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT $ipt -A FORWARD -o $INT_IF -s $EXT_IP -d $VPN_NT -j ACCEPT $ipt -A FORWARD -o $VPN_IF -s $EXT_IP -d $VPN_IP -j ACCEPT $ipt -A FORWARD -o $EXT_IF -s $EXT_IP -d $VPN_NT -j ACCEPT $ipt -A FORWARD -o $VPN_IF -s $INT_NT -d $VPN_NT -j ACCEPT Criar um redirecionamento de Portas no Firewall $ipt -t nat -A PREROUTING -s ${UNIVERSO} -p tcp --dport 1194 -i ${EXT_IF} -j DNAT --to 192.168.10.4:1194 $ipt -t nat -A PREROUTING -s ${UNIVERSO} -p udp --dport 1194 -i ${EXT_IF} -j DNAT --to 192.168.10.4:1194 Instalação do GUI no Windows: No Windows XP pode-se Instalar Normalmente o: No Win7 e Win8 Instalar como ADM e Rodar como ADM: openvpn-2.0.9-gui-1.0.3-install.exe openvpn-2.2.1-install.exe Para o Cliente Windows enxergar o servidor pelo NETBIOS NAME, editar o arquivo hosts e acrescentar no final do arquivo a linha: Editar o Arquivo C:\Windows\System32\drivers\etc\hosts No final do arquivo 172.16.0.1 servername Nova Era Informática sexta-feira, 5 de julho de 2013 19:31 - Pág. 5 de 5.