{"id":410,"date":"2012-11-19T17:57:19","date_gmt":"2012-11-19T20:57:19","guid":{"rendered":"http:\/\/blog.abratel.com.br\/?p=410"},"modified":"2012-11-23T20:47:10","modified_gmt":"2012-11-23T23:47:10","slug":"openvpn-linux-cliente-windows","status":"publish","type":"post","link":"https:\/\/blog.abratel.com.br\/?p=410","title":{"rendered":"OpenVpn Linux Cliente Windows"},"content":{"rendered":"<p>Creditos e leitura recomendada: http:\/\/blogdonerd.com.br\/2012\/06\/openvpn-servidor-ubuntu-e-clientes-windows-e-linux\/ &#8211; Angelo<\/p>\n<p>Caso o link esteja indispon\u00edvel segue abaixo conte\u00fado em forma texto (sem imagens) adicionado de algumas observa\u00e7oes:<\/p>\n<p>1. Instala\u00e7\u00e3o do Servidor OpenVPN e Cria\u00e7\u00e3o da CA Local<br \/>\nPara instalar o OpenVPN no Ubuntu execute:<br \/>\napt-get install openvpn<br \/>\nAp\u00f3s a instala\u00e7\u00e3o, copie os arquivos de exemplo de configura\u00e7\u00e3o da pasta \/usr\/share\/doc\/openvpn\/examples\/easy-rsa\/2.0\/ para a pasta \/etc\/openvpn.<\/p>\n<p>cp \/usr\/share\/doc\/openvpn\/examples\/easy-rsa\/2.0\/* \/etc\/openvpn<br \/>\nRenomeie ou crie uma c\u00f3pia do arquivo \/etc\/openvpn\/openssl-1.0.0.cnf para \/etc\/openvpn\/openssl.cnf.<\/p>\n<p>cp \/etc\/openvpn\/openssl-1.0.0.cnf \/etc\/openvpn\/openssl.cnf<br \/>\nEdite o arquivo \/etc\/openvpn\/vars ajustando as \u00faltimas linhas iniciadas por KEY para refletir o seu ambiente.<\/p>\n<p>\u00c9 interessante, por\u00e9m n\u00e3o obrigat\u00f3rio, que o par\u00e2metro KEY_CN tenha o mesmo valor que o hostname do servidor OpenVPN.<\/p>\n<p>Se existir, remova as \u00faltimas linhas referentes as chaves PKCS11_MODULE_PATH e PKCS11_PIN. Se existir uma chave duplicada KEY_EMAIL, remova-a tamb\u00e9m.<\/p>\n<p>O tempo padr\u00e3o para a expira\u00e7\u00e3o do certificado da CA e das chaves a serem geradas \u00e9 de 10 anos (3650 dias). Se preferir altere estes valores editando os par\u00e2metros CA_EXPIRE e KEY_EXPIRE.<\/p>\n<p>O tamanho da chave de criptografia est\u00e1 definido como 1024 bits. Se quiser mudar este valor edite o par\u00e2metro KEY_SIZE.O conte\u00fado de meu \/etc\/openvpn\/vars segue abaixo:<\/p>\n<p># easy-rsa parameter settings<br \/>\n# NOTE: If you installed from an RPM,<br \/>\n# don&#8217;t edit this file in place in<br \/>\n# \/usr\/share\/openvpn\/easy-rsa &#8212;<br \/>\n# instead, you should copy the whole<br \/>\n# easy-rsa directory to another location<br \/>\n# (such as \/etc\/openvpn) so that your<br \/>\n# edits will not be wiped out by a future<br \/>\n# OpenVPN package upgrade.<\/p>\n<p># This variable should point to<br \/>\n# the top level of the easy-rsa<br \/>\n# tree.<br \/>\nexport EASY_RSA=&#8221;`pwd`&#8221;<\/p>\n<p>#<br \/>\n# This variable should point to<br \/>\n# the requested executables<br \/>\n#<br \/>\nexport OPENSSL=&#8221;openssl&#8221;<br \/>\nexport PKCS11TOOL=&#8221;pkcs11-tool&#8221;<br \/>\nexport GREP=&#8221;grep&#8221;<\/p>\n<p># This variable should point to<br \/>\n# the openssl.cnf file included<br \/>\n# with easy-rsa.<br \/>\nexport KEY_CONFIG=`$EASY_RSA\/whichopensslcnf $EASY_RSA`<\/p>\n<p># Edit this variable to point to<br \/>\n# your soon-to-be-created key<br \/>\n# directory.<br \/>\n#<br \/>\n# WARNING: clean-all will do<br \/>\n# a rm -rf on this directory<br \/>\n# so make sure you define<br \/>\n# it correctly!<br \/>\nexport KEY_DIR=&#8221;$EASY_RSA\/keys&#8221;<\/p>\n<p># Issue rm -rf warning<br \/>\necho NOTE: If you run .\/clean-all, I will be doing a rm -rf on $KEY_DIR<\/p>\n<p># PKCS11 fixes<br \/>\nexport PKCS11_MODULE_PATH=&#8221;dummy&#8221;<br \/>\nexport PKCS11_PIN=&#8221;dummy&#8221;<\/p>\n<p># Increase this to 2048 if you<br \/>\n# are paranoid.  This will slow<br \/>\n# down TLS negotiation performance<br \/>\n# as well as the one-time DH parms<br \/>\n# generation process.<br \/>\nexport KEY_SIZE=1024<\/p>\n<p># In how many days should the root CA key expire?<br \/>\nexport CA_EXPIRE=3650<\/p>\n<p># In how many days should certificates expire?<br \/>\nexport KEY_EXPIRE=3650<\/p>\n<p># These are the default values for fields<br \/>\n# which will be placed in the certificate.<br \/>\n# Don&#8217;t leave any of these fields blank.<br \/>\nexport KEY_COUNTRY=&#8221;BR&#8221;<br \/>\nexport KEY_PROVINCE=&#8221;SP&#8221;<br \/>\nexport KEY_CITY=&#8221;S\u00e3o Paulo&#8221;<br \/>\nexport KEY_ORG=&#8221;Blog do Nerd&#8221;<br \/>\nexport KEY_EMAIL=&#8221;nerd@blogdonerd.email.com&#8221;<br \/>\nexport KEY_CN=&#8221;openvpn&#8221;<br \/>\nexport KEY_NAME=&#8221;Blog do Nerd CA&#8221;<br \/>\nexport KEY_OU=&#8221;Divis\u00e3o de TI&#8221;<br \/>\nAgora execute os comandos abaixo:<\/p>\n<p>source \/etc\/openvpn\/vars<br \/>\n\/etc\/openvpn\/clean-all<br \/>\n\/etc\/openvpn\/build-ca<br \/>\n\/etc\/openvpn\/build-dh<br \/>\nConfirme os valores solicitados pelo build-ca, que ser\u00e3o os mesmos definidos no arquivo \/etc\/openvpn\/vars.<\/p>\n<p>A sa\u00edda dos comandos ser\u00e1 semelhante a abaixo:<\/p>\n<p>root@openvpn:\/etc\/openvpn# source \/etc\/openvpn\/vars<br \/>\nNOTE: If you run .\/clean-all, I will be doing a rm -rf on \/etc\/openvpn\/keys<br \/>\nroot@openvpn:\/etc\/openvpn# \/etc\/openvpn\/clean-all<br \/>\nroot@openvpn:\/etc\/openvpn# \/etc\/openvpn\/build-ca<br \/>\nGenerating a 1024 bit RSA private key<br \/>\n&#8230;&#8230;&#8230;..++++++<br \/>\n&#8230;&#8230;&#8230;&#8230;++++++<br \/>\nwriting new private key to &#8216;ca.key&#8217;<br \/>\n&#8212;&#8211;<br \/>\nYou are about to be asked to enter information that will be incorporated<br \/>\ninto your certificate request.<br \/>\nWhat you are about to enter is what is called a Distinguished Name or a DN.<br \/>\nThere are quite a few fields but you can leave some blank<br \/>\nFor some fields there will be a default value,<br \/>\nIf you enter &#8216;.&#8217;, the field will be left blank.<br \/>\n&#8212;&#8211;<br \/>\nCountry Name (2 letter code) [BR]:<br \/>\nState or Province Name (full name) [SP]:<br \/>\nLocality Name (eg, city) [S\u00e3o Paulo]:<br \/>\nOrganization Name (eg, company) [Blog do Nerd]:<br \/>\nOrganizational Unit Name (eg, section) [Divis\u00e3o de TI]:<br \/>\nCommon Name (eg, your name or your server&#8217;s hostname) [openvpn]:<br \/>\nName [Blog do Nerd CA]:<br \/>\nEmail Address [nerd@blogdonerd.email.com]:<br \/>\nroot@openvpn:\/etc\/openvpn# \/etc\/openvpn\/build-dh<br \/>\nGenerating DH parameters, 1024 bit long safe prime, generator 2<br \/>\nThis is going to take a long time<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br \/>\n&#8230;&#8230;.+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..+&#8230;&#8230;&#8230;.<br \/>\n+&#8230;&#8230;&#8230;&#8230;+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;+&#8230;&#8230;&#8230;<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.+&#8230;&#8230;&#8230;..+&#8230;..+&#8230;&#8230;&#8230;&#8230;&#8230;.<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br \/>\n+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;+&#8230;&#8230;&#8230;&#8230;&#8230;.+&#8230;..+&#8230;&#8230;&#8230;&#8230;&#8230;<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..+.<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.+&#8230;&#8230;&#8230;&#8230;.+..+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;.+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;+&#8230;&#8230;+<br \/>\n&#8230;&#8230;.+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;+&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..+.++*++*++*<br \/>\nroot@openvpn:\/etc\/openvpn#<br \/>\nA pasta \/etc\/openvpn\/keys ser\u00e1 gerada e dentro dela, 5 arquivos referentes a nova CA criada:<\/p>\n<p>ca.crt &#8211; Certificado P\u00fablico de sua CA.<br \/>\nca.key &#8211; Chave Privada de sua CA.<br \/>\ndh1024.pem &#8211; Par\u00e2metros do Diffie-Hellman.<br \/>\nindex.txt &#8211; Controle das chaves geradas pela nova CA.<br \/>\nserial &#8211; Controle de n\u00famero serial das chaves geradas pela nova CA.<br \/>\n2. Cria\u00e7\u00e3o do Certificado do Servidor<br \/>\n\u00c9 necess\u00e1rio a gera\u00e7\u00e3o de um certificado para o servidor OpenVPN.<br \/>\nPara fazer isso execute:<\/p>\n<p>\/etc\/openvpn\/build-key-server server<br \/>\nVoc\u00ea pode substituir a palavra server por outra que desejar, s\u00f3 que se fizer isso, lembre-se de fazer os devidos ajustes no arquivo \/etc\/openvpn\/server.conf que ser\u00e1 configurado no pr\u00f3ximo passo.<br \/>\nA sa\u00edda do comando ser\u00e1 semelhante a abaixo.<br \/>\nAjuste o par\u00e2metro Name para o nome que julgar mais apropriado para seu servidor.<br \/>\nRecomendo n\u00e3o atribuir um challenge password.<br \/>\nConfirme a assinatura e a atualiza\u00e7\u00e3o do certificado com a tecla &#8216;y&#8217;.<\/p>\n<p>root@openvpn:\/etc\/openvpn# \/etc\/openvpn\/build-key-server server<br \/>\nGenerating a 1024 bit RSA private key<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;++++++<br \/>\n..++++++<br \/>\nwriting new private key to &#8216;server.key&#8217;<br \/>\n&#8212;&#8211;<br \/>\nYou are about to be asked to enter information that will be incorporated<br \/>\ninto your certificate request.<br \/>\nWhat you are about to enter is what is called a Distinguished Name or a DN.<br \/>\nThere are quite a few fields but you can leave some blank<br \/>\nFor some fields there will be a default value,<br \/>\nIf you enter &#8216;.&#8217;, the field will be left blank.<br \/>\n&#8212;&#8211;<br \/>\nCountry Name (2 letter code) [BR]:<br \/>\nState or Province Name (full name) [SP]:<br \/>\nLocality Name (eg, city) [S\u00e3o Paulo]:<br \/>\nOrganization Name (eg, company) [Blog do Nerd]:<br \/>\nOrganizational Unit Name (eg, section) [Divis\u00e3o de TI]:<br \/>\nCommon Name (eg, your name or your server&#8217;s hostname) [server]:<br \/>\nName [Blog do Nerd CA]:Blog do Nerd &#8211; OpenVPN Server<br \/>\nEmail Address [nerd@blogdonerd.email.com]:<\/p>\n<p>Please enter the following &#8216;extra&#8217; attributes<br \/>\nto be sent with your certificate request<br \/>\nA challenge password []:<br \/>\nAn optional company name []:<br \/>\nUsing configuration from \/etc\/openvpn\/openssl.cnf<br \/>\nCheck that the request matches the signature<br \/>\nSignature ok<br \/>\nThe Subject&#8217;s Distinguished Name is as follows<br \/>\ncountryName           : PRINTABLE:&#8217;BR&#8217;<br \/>\nstateOrProvinceName   : PRINTABLE:&#8217;SP&#8217;<br \/>\nlocalityName          : T61STRING:&#8217;Sao Paulo&#8217;<br \/>\norganizationName      : PRINTABLE:&#8217;Blog do Nerd&#8217;<br \/>\norganizationalUnitName: T61STRING:&#8217;Divisao de TI&#8217;<br \/>\ncommonName            : PRINTABLE:&#8217;server&#8217;<br \/>\nname                  : PRINTABLE:&#8217;Blog do Nerd &#8211; OpenVPN Server&#8217;<br \/>\nemailAddress          : IA5STRING:&#8217;nerd@blogdonerd.email.com&#8217;<br \/>\nCertificate is to be certified until Jun 18 18:57:10 2022 GMT (3650 days)<br \/>\nSign the certificate? [y\/n]:y<\/p>\n<p>1 out of 1 certificate requests certified, commit? [y\/n]y<br \/>\nWrite out database with 1 new entries<br \/>\nData Base Updated<br \/>\nroot@openvpn:\/etc\/openvpn#<br \/>\nDois arquivos ser\u00e3o gerados na pasta \/etc\/openvpn\/keys:<br \/>\nserver.crt &#8211; Certificado p\u00fablico do servidor OpenVPN.<br \/>\nserver.key &#8211; Chave privada do servidor OpenVPN.<br \/>\n3. Configura\u00e7\u00e3o do Servidor OpenVPN<br \/>\nGere uma chave TLS (opcional) para aumentar ainda mais a seguran\u00e7a da conex\u00e3o VPN, permitindo a verifica\u00e7\u00e3o de integridade de cada pacote TLS, digitando o seguinte comando:<\/p>\n<p>openvpn &#8211;genkey &#8211;secret \/etc\/openvpn\/keys\/ta.key<br \/>\nA configura\u00e7\u00e3o do OpenVPN \u00e9 realizada em qualquer arquivo que termine em .conf, localizado na pasta \/etc\/openvpn\/. Neste tutorial iremos usar o arquivo \/etc\/openvpn\/server.conf. Voc\u00ea pode alterar este arquivo para o nome que desejar, desde que ele termine em .conf. Voc\u00ea pode inclusive ter mais de um servi\u00e7o OpenVPN ouvindo em outras portas, basta configurar outro arquivo .conf.<\/p>\n<p>Crie um \/etc\/openvpn\/server.conf vazio e preencha-o conforme segue.<\/p>\n<p>Se preferir, voc\u00ea pode iniciar usando o arquivo de configura\u00e7\u00e3o de exemplo do OpenVPN, bastando para isso copiar e descomprimir o arquivo \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/server.conf.gz para \/etc\/openvpn\/server.conf:<\/p>\n<p>zcat \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/server.conf.gz &gt; \/etc\/openvpn\/server.conf<br \/>\nAjuste o arquivo \/etc\/openvpn\/server.conf conforme abaixo, tomando o cuidado de alterar as linhas destacadas para refletir a realidade de seu ambiente.<\/p>\n<p>A linha local 10.0.0.1 indica o IP local do servidor em que OpenVPN ir\u00e1 ouvir por novas conex\u00f5es.<br \/>\nA configura\u00e7\u00e3o server 10.15.0.0 255.255.255.0 informa ao servidor OpenVPN que a rede VPN ser\u00e1 10.15.0.0\/24. Altere para a rede que definiu durante a fase de pr\u00e9-requisitos. O primeiro IP dessa rede ser\u00e1 o IP do servidor OpenVPN.<br \/>\nSe desejar voc\u00ea pode ajustar a linha push &#8220;route 10.0.0.0 255.0.0.0&#8221; informando ao OpenVPN para adicionar uma rota na tabela de rotas dos clientes VPN no momento da conex\u00e3o. Neste caso todo o tr\u00e1fego para a rede 10.0.0.0\/8 ser\u00e1 redirecionado pela VPN. Voc\u00ea pode ser mais radical e direcionar todo o tr\u00e1fego de rede pela VPN, incluindo o tr\u00e1fego de Internet. Para fazer isso, substitua a linha push &#8220;route 10.0.0.0 255.0.0.0&#8221; por push &#8220;redirect-gateway def1&#8221;.<br \/>\nAs configura\u00e7\u00f5es push &#8220;dhcp-option&#8221; s\u00e3o opcionais e relativas aos par\u00e2metros de DNS a serem informados para o computador cliente. Voc\u00ea pode informar os servidores de DNS locais da rede da sede para que os clientes possam resolver nomes de dom\u00ednio e acessar os servi\u00e7os internos com maior facilidade.<br \/>\nMuitos dos par\u00e2metros s\u00e3o opcionais e o OpenVPN \u00e9 extremamente vers\u00e1til e se adapta a praticamente qualquer ambiente. Voc\u00ea pode verificar o manual do OpenVPN para explorar outras configura\u00e7\u00f5es.<br \/>\nO arquivo \/etc\/openvpn\/server.conf sugerido \u00e9 o seguinte:<\/p>\n<p>######################################################################################<br \/>\n# OpenVPN 2.0 &#8211; Arquivo de configura\u00e7\u00e3o do servidor<br \/>\n######################################################################################<\/p>\n<p># Which local IP address should OpenVPN<br \/>\n# listen on? (optional)<br \/>\nlocal 10.0.0.1<\/p>\n<p># Which TCP\/UDP port should OpenVPN listen on?<br \/>\nport 1194<\/p>\n<p># TCP or UDP server?<br \/>\nproto udp<\/p>\n<p># &#8220;dev tun&#8221; will create a routed IP tunnel,<br \/>\n# &#8220;dev tap&#8221; will create an ethernet tunnel.<br \/>\ndev tun0<\/p>\n<p># SSL\/TLS root certificate (ca), certificate<br \/>\n# (cert), and private key (key).  Each client<br \/>\n# and the server must have their own cert and<br \/>\n# key file.  The server and all clients will<br \/>\n# use the same ca file.<br \/>\nca \/etc\/openvpn\/keys\/ca.crt<br \/>\ncert \/etc\/openvpn\/keys\/server.crt<br \/>\nkey \/etc\/openvpn\/keys\/server.key  # This file should be kept secret<\/p>\n<p># Diffie hellman parameters.<br \/>\ndh \/etc\/openvpn\/keys\/dh1024.pem<\/p>\n<p># Configure server mode and supply a VPN subnet<br \/>\n# for OpenVPN to draw client addresses from.<br \/>\nserver 10.15.0.0 255.255.255.0<\/p>\n<p># Maintain a record of client  virtual IP address<br \/>\n# associations in this file.  If OpenVPN goes down or<br \/>\n# is restarted, reconnecting clients can be assigned<br \/>\n# the same virtual IP address from the pool that was<br \/>\n# previously assigned.<br \/>\nifconfig-pool-persist ipp.txt<\/p>\n<p># Push routes to the client to allow it<br \/>\n# to reach other private subnets behind<br \/>\n# the server.  Remember that these<br \/>\n# private subnets will also need<br \/>\n# to know to route the OpenVPN client<br \/>\n# address pool (10.8.0.0\/255.255.255.0)<br \/>\n# back to the OpenVPN server.<br \/>\npush &#8220;route 10.0.0.0 255.0.0.0&#8221;<\/p>\n<p># Certain Windows-specific network settings<br \/>\n# can be pushed to clients, such as DNS<br \/>\n# or WINS server addresses.  CAVEAT:<br \/>\n# http:\/\/openvpn.net\/faq.html#dhcpcaveats<br \/>\npush &#8220;dhcp-option DNS 10.0.0.10&#8221;<br \/>\npush &#8220;dhcp-option DNS 10.0.0.11&#8221;<br \/>\npush &#8220;dhcp-option DOMAIN blogdonerd.com.br&#8221;<\/p>\n<p># The keepalive directive causes ping-like<br \/>\n# messages to be sent back and forth over<br \/>\n# the link so that each side knows when<br \/>\n# the other side has gone down.<br \/>\n# Ping every 10 seconds, assume that remote<br \/>\n# peer is down if no ping received during<br \/>\n# a 120 second time period.<br \/>\nkeepalive 10 120<\/p>\n<p># For extra security beyond that provided<br \/>\n# by SSL\/TLS, create an &#8220;HMAC firewall&#8221;<br \/>\n# to help block DoS attacks and UDP port flooding.<br \/>\ntls-auth \/etc\/openvpn\/keys\/ta.key 0 # This file is secret<\/p>\n<p># Select a cryptographic cipher.<br \/>\n# This config item must be copied to<br \/>\n# the client config file as well.<br \/>\ncipher AES-128-CBC   # AES<\/p>\n<p># Enable compression on the VPN link.<br \/>\n# If you enable it here, you must also<br \/>\n# enable it in the client config file.<br \/>\ncomp-lzo<\/p>\n<p># The maximum number of concurrently connected<br \/>\n# clients we want to allow.<br \/>\nmax-clients 100<\/p>\n<p># It&#8217;s a good idea to reduce the OpenVPN<br \/>\n# daemon&#8217;s privileges after initialization.<br \/>\nuser nobody<br \/>\ngroup nogroup<\/p>\n<p># The persist options will try to avoid<br \/>\n# accessing certain resources on restart<br \/>\n# that may no longer be accessible because<br \/>\n# of the privilege downgrade.<br \/>\npersist-key<br \/>\npersist-tun<\/p>\n<p># Output a short status file showing<br \/>\n# current connections, truncated<br \/>\n# and rewritten every minute.<br \/>\nstatus \/var\/log\/openvpn\/openvpn-status.log<\/p>\n<p># By default, log messages will go to the syslog (or<br \/>\n# on Windows, if running as a service, they will go to<br \/>\n# the &#8220;\\Program Files\\OpenVPN\\log&#8221; directory).<br \/>\nlog-append \/var\/log\/openvpn\/openvpn.log<\/p>\n<p># Set the appropriate level of log<br \/>\n# file verbosity.<br \/>\nverb 3<br \/>\nCrie a pasta \/var\/log\/openvpn para manter os logs do OpenVPN:<\/p>\n<p>1<br \/>\nmkdir \/var\/log\/openvpn<br \/>\nSe desejar crie o arquivo \/etc\/logrotate.d\/openvpn com o conte\u00fado a seguir para fazer uma rota\u00e7\u00e3o autom\u00e1tica dos logs do OpenVPN:<\/p>\n<p>\/var\/log\/openvpn\/*.log {<br \/>\n    daily<br \/>\n    rotate 365<br \/>\n    compress<br \/>\n    missingok<br \/>\n    create 0640 root adm<br \/>\n    missingok<br \/>\n    postrotate<br \/>\n        service openvpn reload<br \/>\n    endscript<br \/>\n}<br \/>\nInicie o OpenVPN executando:<\/p>\n<p>1<br \/>\nservice openvpn start<br \/>\nVerifique se o servi\u00e7o est\u00e1 em execu\u00e7\u00e3o com o comando:<\/p>\n<p>1<br \/>\nservice openvpn status<br \/>\nSe tudo ocorreu com sucesso, a sa\u00edda ser\u00e1 semelhante a seguinte:<\/p>\n<p>root@openvpn:\/etc\/openvpn# service openvpn start<br \/>\n * Starting virtual private network daemon(s)&#8230;<br \/>\n *   Autostarting VPN &#8216;server&#8217;<br \/>\nroot@openvpn:\/etc\/openvpn# service openvpn status<br \/>\n * VPN &#8216;server&#8217; is running<br \/>\nroot@openvpn:\/etc\/openvpn#<br \/>\nSe ocorreu algum problema, verifique o arquivo \/var\/log\/openvpn.log:<\/p>\n<p>root@openvpn:\/etc\/openvpn# cat \/var\/log\/openvpn\/openvpn.log<br \/>\nWed Jun 20 16:16:40 2012 OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Mar 30 2012<br \/>\nWed Jun 20 16:16:40 2012 NOTE: OpenVPN 2.1 requires &#8216;&#8211;script-security 2&#8217; or higher to call user-defined scripts or executables<br \/>\nWed Jun 20 16:16:40 2012 Diffie-Hellman initialized with 1024 bit key<br \/>\nWed Jun 20 16:16:40 2012 Control Channel Authentication: using &#8216;\/etc\/openvpn\/keys\/ta.key&#8217; as a OpenVPN static key file<br \/>\nWed Jun 20 16:16:40 2012 Outgoing Control Channel Authentication: Using 160 bit message hash &#8216;SHA1&#8217; for HMAC authentication<br \/>\nWed Jun 20 16:16:40 2012 Incoming Control Channel Authentication: Using 160 bit message hash &#8216;SHA1&#8217; for HMAC authentication<br \/>\nWed Jun 20 16:16:40 2012 TLS-Auth MTU parms [ L:1558 D:166 EF:66 EB:0 ET:0 EL:0 ]<br \/>\nWed Jun 20 16:16:40 2012 Socket Buffers: R=[229376-&gt;131072] S=[229376-&gt;131072]<br \/>\nWed Jun 20 16:16:40 2012 ROUTE default_gateway=10.0.0.1<br \/>\nWed Jun 20 16:16:40 2012 TUN\/TAP device tun0 opened<br \/>\nWed Jun 20 16:16:40 2012 TUN\/TAP TX queue length set to 100<br \/>\nWed Jun 20 16:16:40 2012 do_ifconfig, tt-&gt;ipv6=0, tt-&gt;did_ifconfig_ipv6_setup=0<br \/>\nWed Jun 20 16:16:40 2012 \/sbin\/ifconfig tun0 10.15.0.1 pointopoint 10.15.0.2 mtu 1500<br \/>\nWed Jun 20 16:16:40 2012 \/sbin\/route add -net 10.15.0.0 netmask 255.255.255.0 gw 10.15.0.2<br \/>\nWed Jun 20 16:16:40 2012 Data Channel MTU parms [ L:1558 D:1450 EF:58 EB:135 ET:0 EL:0 AF:3\/1 ]<br \/>\nWed Jun 20 16:16:40 2012 GID set to nogroup<br \/>\nWed Jun 20 16:16:40 2012 UID set to nobody<br \/>\nWed Jun 20 16:16:40 2012 UDPv4 link local (bound): [AF_INET]10.9.0.172:1194<br \/>\nWed Jun 20 16:16:40 2012 UDPv4 link remote: [undef]<br \/>\nWed Jun 20 16:16:40 2012 MULTI: multi_init called, r=256 v=256<br \/>\nWed Jun 20 16:16:40 2012 IFCONFIG POOL: base=10.15.0.4 size=62, ipv6=0<br \/>\nWed Jun 20 16:16:40 2012 IFCONFIG POOL LIST<br \/>\nWed Jun 20 16:16:40 2012 Initialization Sequence Completed<br \/>\nUma nova interface de rede (tun0) ser\u00e1 criada, conforme ilustra a execu\u00e7\u00e3o do comando ifconfig abaixo.<\/p>\n<p>root@openvpn:\/etc\/openvpn# ifconfig<br \/>\neth0      Link encap:Ethernet  HWaddr 00:50:56:be:46:45<br \/>\n          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0<br \/>\n          inet6 addr: fe80::250:56ff:febe:4645\/64 Scope:Link<br \/>\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br \/>\n          RX packets:135820 errors:0 dropped:0 overruns:0 frame:0<br \/>\n          TX packets:58093 errors:0 dropped:0 overruns:0 carrier:0<br \/>\n          collisions:0 txqueuelen:1000<br \/>\n          RX bytes:149189479 (149.1 MB)  TX bytes:5400632 (5.4 MB)<\/p>\n<p>lo        Link encap:Local Loopback<br \/>\n          inet addr:127.0.0.1  Mask:255.0.0.0<br \/>\n          inet6 addr: ::1\/128 Scope:Host<br \/>\n          UP LOOPBACK RUNNING  MTU:16436  Metric:1<br \/>\n          RX packets:14 errors:0 dropped:0 overruns:0 frame:0<br \/>\n          TX packets:14 errors:0 dropped:0 overruns:0 carrier:0<br \/>\n          collisions:0 txqueuelen:0<br \/>\n          RX bytes:1176 (1.1 KB)  TX bytes:1176 (1.1 KB)<\/p>\n<p>tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00<br \/>\n          inet addr:10.15.0.1  P-t-P:10.15.0.2  Mask:255.255.255.255<br \/>\n          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1<br \/>\n          RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br \/>\n          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br \/>\n          collisions:0 txqueuelen:100<br \/>\n          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)<\/p>\n<p>root@openvpn:\/etc\/openvpn#<br \/>\nO servidor j\u00e1 est\u00e1 no ar. Agora precisamos configurar regras de firewall, se necess\u00e1rio, criar as chaves para os clientes e configur\u00e1-los.<\/p>\n<p>4. Regras de Firewall<br \/>\nSe seu servidor OpenVPN est\u00e1 configurado no mesmo equipamento que seu firewall, ou se a comunica\u00e7\u00e3o precisa atravessar por um firewall para chegar at\u00e9 o servidor OpenVPN, \u00e9 importante configurar as regras adequadamente.<\/p>\n<p>N\u00e3o vou ensinar aqui a criar as regras para um ambiente espec\u00edfico, pois existe uma diversidade enorme de ferramentas para gerenciar regras de firewall e cada caso \u00e9 um caso.<\/p>\n<p>Vou tratar apenas de regras de uma forma gen\u00e9rica.<\/p>\n<p>Vamos ao pontos importantes:<\/p>\n<p>O primeiro IP definido no par\u00e2metro server do \/etc\/openvpn\/server.conf \u00e9 o IP local do OpenVPN e o segundo IP \u00e9 o endere\u00e7o considerado remoto. No exemplo deste tutorial:<br \/>\nO endere\u00e7o da rede \u00e9 10.15.0.0 com m\u00e1scara 255.255.255.0.<br \/>\nO endere\u00e7o 10.15.0.0 \u00e9 o endere\u00e7o da rede e, por defini\u00e7\u00e3o, n\u00e3o pode ser atribu\u00eddo a nenhum equipamento.<br \/>\nO IP 10.15.0.1 \u00e9 o IP atribu\u00eddo a interface tun0 local<br \/>\nO IP 10.15.0.2 \u00e9 um IP l\u00f3gico, atribu\u00eddo genericamente ao gateway dos clientes. Voc\u00ea pode utilizar este IP para fazer regras de roteamento, por exemplo, se seu cliente est\u00e1 na rede 10.2.0.0\/24, voc\u00ea pode criar uma regra de roteamento que encaminhe todos os pacotes destinados a rede 10.2.0.0\/24 para o gateway 10.15.0.2: route add -net 10.2.0.0\/24 gw 10.15.0.2 dev tun0<br \/>\n\u00c9 necess\u00e1rio criar uma regra que permita que comunica\u00e7\u00e3o oriundas da internet e destinadas ao IP do seu servidor OpenVPN na porta 1194 UDP sejam aceitas. Uma regra iptables seria: iptables -A INPUT -i eth0 -d 10.0.0.1\/32 -p udp -m udp &#8211;dport 1194 -j ACCEPT<br \/>\nUma vez permitida a conex\u00e3o \u00e9 necess\u00e1rio criar regras que permitam que seu cliente converse com os servi\u00e7os de sua rede e vice-versa. Neste caso, cada rede vai ter suas particularidades. Por exemplo, para permitir que qualquer cliente da rede OpenVPN (10.15.0.0\/24) acesse um servidor de DNS de IP 10.0.0.15 em sua rede, as regras iptables seriam:<br \/>\niptables -A FORWARD -i tun0 -s 10.15.0.0\/24 -d 10.0.0.15\/32 -p tcp -m tcp &#8211;dport 53 -j ACCEPT<br \/>\niptables -A FORWARD -i tun0 -s 10.15.0.0\/24 -d 10.0.0.15\/32 -p udp -m udp &#8211;dport 53 -j ACCEPT<br \/>\nLembre-se de que para estas regras funcionarem \u00e9 importante permitir o roteamento entre as interfaces. Isto pode ser feito atribuindo o valor 1 ao par\u00e2metro \/proc\/sys\/net\/ipv4\/ip_forward. Voc\u00ea pode colocar uma linha com o comando a seguir em algum script de inicializa\u00e7\u00e3o de seu servidor, ou ajustar este par\u00e2metro diretamente no seu firewall, se ele assim o permitir: echo 1 > \/proc\/sys\/net\/ipv4\/ip_forward<br \/>\n5. Criando Certificados para Clientes<br \/>\nPara cada novo cliente VPN de sua rede, \u00e9 necess\u00e1rio criar um certificado exclusivo. Isto \u00e9 feito atrav\u00e9s do comando \/etc\/openvpn\/build-key ou \/etc\/openvpn\/build-key-pass:<\/p>\n<p>1<br \/>\n\/etc\/openvpn\/build-key-pass nome-do-cliente<br \/>\nTroque nome-do-cliente por um nome \u00fanico e exclusivo para cada cliente. Ele ser\u00e1 o Common Name do certificado gerado. \u00c9 importante que no nome-do-cliente n\u00e3o haja espa\u00e7os em branco, nem caracteres especiais ou acentuados. At\u00e9 \u00e9 poss\u00edvel, mas se voc\u00ea n\u00e3o us\u00e1-los, ter\u00e1 menos problemas. Voc\u00ea pode usar n\u00fameros, a matricula dos funcion\u00e1rios, CPF, ou o Nome completo, lembrando de trocar o separador do nome por _ ou simplesmente suprimi-lo. Por exemplo, a Caixa Econ\u00f4mica Federal costuma emitir seus certificados usando o nome completo do solicitante, seguido do caracter : e dos n\u00fameros do CPF.<\/p>\n<p>Antes de executar o build-key \u00e9 importante executar source \/etc\/openvpn\/vars para atribuir as informa\u00e7\u00f5es de sua CA \u00e0s vari\u00e1veis de ambiente da sess\u00e3o corrente.<\/p>\n<p>Lembre-se de responder as perguntas adequadamente. Elas j\u00e1 vir\u00e3o pr\u00e9-preenchidas pelos valores de \/etc\/openvpn\/vars. Voc\u00ea pode colocar qualquer informa\u00e7\u00e3o no campo name, inclusive espa\u00e7os em branco e caracteres acentuados.<\/p>\n<p>\u00c9 recomend\u00e1vel usar o build-key-pass ao inv\u00e9s do build-key, visto que o primeiro ir\u00e1 solicitar uma senha secreta para cada cliente. Essa senha sera utilizada em cada conex\u00e3o OpenVPN. Isso \u00e9 importante pois caso um notebook que contenha as configura\u00e7\u00f5es e certificados de determinado usu\u00e1rio seja perdido ou furtado um meliante n\u00e3o seria capaz de fechar a conex\u00e3o VPN sem ter a senha. \u00c9 claro que nestes casos recomenda-se ainda revogar o certificado do cliente.<\/p>\n<p>Para gerar um novo certificado para o usu\u00e1rio Jo\u00e3o da Silva voc\u00ea pode digitar o seguinte:<\/p>\n<p>root@openvpn:\/etc\/openvpn# source \/etc\/openvpn\/vars<br \/>\nNOTE: If you run .\/clean-all, I will be doing a rm -rf on \/etc\/openvpn\/keys<br \/>\nroot@openvpn:\/etc\/openvpn# \/etc\/openvpn\/build-key joao_da_silva<br \/>\nGenerating a 1024 bit RSA private key<br \/>\n&#8230;&#8230;&#8230;&#8230;..++++++<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.++++++<br \/>\nwriting new private key to &#8216;joao_da_silva.key&#8217;<br \/>\n&#8212;&#8211;<br \/>\nYou are about to be asked to enter information that will be incorporated<br \/>\ninto your certificate request.<br \/>\nWhat you are about to enter is what is called a Distinguished Name or a DN.<br \/>\nThere are quite a few fields but you can leave some blank<br \/>\nFor some fields there will be a default value,<br \/>\nIf you enter &#8216;.&#8217;, the field will be left blank.<br \/>\n&#8212;&#8211;<br \/>\nCountry Name (2 letter code) [BR]:<br \/>\nState or Province Name (full name) [SP]:<br \/>\nLocality Name (eg, city) [S\u00e3o Paulo]:<br \/>\nOrganization Name (eg, company) [Blog do Nerd]:<br \/>\nOrganizational Unit Name (eg, section) [Divis\u00e3o de TI]:<br \/>\nCommon Name (eg, your name or your server&#8217;s hostname) [joao_da_silva]:<br \/>\nName [Blog do Nerd CA]:Jo\u00e3o da Silva<br \/>\nEmail Address [nerd@blogdonerd.email.com]:joao@blogdonerd.email.com<\/p>\n<p>Please enter the following &#8216;extra&#8217; attributes<br \/>\nto be sent with your certificate request<br \/>\nA challenge password []:<br \/>\nAn optional company name []:<br \/>\nUsing configuration from \/etc\/openvpn\/openssl.cnf<br \/>\nCheck that the request matches the signature<br \/>\nSignature ok<br \/>\nThe Subject&#8217;s Distinguished Name is as follows<br \/>\ncountryName           : PRINTABLE:&#8217;BR&#8217;<br \/>\nstateOrProvinceName   : PRINTABLE:&#8217;SP&#8217;<br \/>\nlocalityName          : T61STRING:&#8217;S&#92;&#48;xFFFFFFC3&#92;&#48;xFFFFFFA3o Paulo&#8217;<br \/>\norganizationName      : PRINTABLE:&#8217;Blog do Nerd&#8217;<br \/>\norganizationalUnitName: T61STRING:&#8217;Divis&#92;&#48;xFFFFFFC3&#92;&#48;xFFFFFFA3o de TI&#8217;<br \/>\ncommonName            : T61STRING:&#8217;joao_da_silva&#8217;<br \/>\nname                  : T61STRING:&#8217;Jo&#92;&#48;xFFFFFFC3&#92;&#48;xFFFFFFA3o da Silva&#8217;<br \/>\nemailAddress          : IA5STRING:&#8217;joao@blogdonerd.email.com&#8217;<br \/>\nCertificate is to be certified until Jun 19 14:04:54 2022 GMT (3650 days)<br \/>\nSign the certificate? [y\/n]:y<\/p>\n<p>1 out of 1 certificate requests certified, commit? [y\/n]y<br \/>\nWrite out database with 1 new entries<br \/>\nData Base Updated<br \/>\nroot@openvpn:\/etc\/openvpn#<br \/>\nTr\u00eas novos arquivos ser\u00e3o gerados na pasta \/etc\/openvpn\/keys:<\/p>\n<p>joao_da_silva.csr &#8211; Solicita\u00e7\u00e3o do novo certificado<br \/>\njoao_da_silva.crt &#8211; Certificado p\u00fablico<br \/>\njoao_da_silva.key &#8211; Chave privada<br \/>\nSer\u00e1 necess\u00e1rio copiar estes arquivos para o computador do cliente no pr\u00f3ximo passo.<br \/>\n6. Instalando e configurando o OpenVPN nos Clientes Windows ou Linux<br \/>\nBaixe e instale a vers\u00e3o mais recente do OpenVPN. Para clientes Ubuntu basta executar apt-get install openvpn.<\/p>\n<p>No Windows se aparecer uma mensagem solicitando para sua permiss\u00e3o para instalar um novo adaptador de rede TAP-Win32 (conforme abaixo), clique no bot\u00e3o Instalar.<\/p>\n<p>No Windows, um \u00edcone do OpenVPN GUI ser\u00e1 instalado na \u00e1rea de trabalho.<\/p>\n<p>Se seu sistema operacional for Windows Vista ou 7, clique com o bot\u00e3o direito do mouse nesse \u00edcone e escolha Propriedades. Na guia Atalho clique no bot\u00e3o Avan\u00e7ados e na nova janela marque a op\u00e7\u00e3o Executar como administrador.<\/p>\n<p>Isto \u00e9 importante porque as regras de roteamento enviadas pelo servidor OpenVPN s\u00f3 ser\u00e3o atribu\u00eddas se o cliente OpenVPN possuir privil\u00e9gios administrativos.<\/p>\n<p>Se o sistema operacional for Windows XP execute o seguinte procedimento para que a resolu\u00e7\u00e3o de DNS funcione corretamente:<\/p>\n<p>Clique em Iniciar, clique em Executar&#8230;, digite regedit na caixa de di\u00e1logo aberta e ent\u00e3o clique OK.<br \/>\nNavegue at\u00e9 a chave de registro: HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Linkage<br \/>\nNo painel da direita, clique duas vezes no item Bind.<br \/>\nNa caixa que se abre selecione o item &#8220;\\Device\\NdisWanIp&#8221;, pressione CTRL + X, clique no topo da lista de dispositivos, e pressione CTRL + V. Em outras palavras: o que deve ser feito \u00e9 passar o item &#8220;\\Device\\NdisWanIp&#8221; para o primeiro da lista.<br \/>\nClique OK e feche o Editor do Registro.<br \/>\nReinicialize o computador.<br \/>\nAgora vamos configurar o cliente OpenVPN.<\/p>\n<p>V\u00e1 at\u00e9 o servidor e copie os seguintes arquivos da pasta \/etc\/openvpn\/keys:<\/p>\n<p>ca.crt &#8211; Certificado p\u00fablico de sua CA<br \/>\nta.key &#8211; Chave privada para assinatura de pacotes TLS de forma a aumentar a seguran\u00e7a na comunica\u00e7\u00e3o<br \/>\njoao_da_silva.crt &#8211; Certificado p\u00fablico do usu\u00e1rio a ser configurado<br \/>\njoao_da_silva.key &#8211; Certificado privado do usu\u00e1rio a ser configurado<br \/>\nTalvez voc\u00ea tenha dificuldades para copar os arquivos .key que s\u00e3o privados e n\u00e3o possuem permiss\u00e3o de leitura para usu\u00e1rios comuns. Se necess\u00e1rio, copie os arquivos para uma pasta tempor\u00e1ria (\/tmp por exemplo) e altere as permiss\u00f5es com o comando chmod: chmod 644 \/tmp\/joao_da_silva.key.<\/p>\n<p>ATEN\u00c7\u00c3O: Lembre-se o arquivo joao_da_silva.key cont\u00e9m a chave privada do Jo\u00e3o e n\u00e3o deve ser distribuida livremente para n\u00e3o comprometer a seguran\u00e7a, especialmente se ele n\u00e3o possuir uma challenge password.<\/p>\n<p>Copie estes arquivos para a pasta C:\\Program Files\\OpenVPN\\config para o cliente Windows ou para \/etc\/openvpn no caso de um cliente Linux.<\/p>\n<p>Renomeie os arquivos joao_da_silva.crt e joao_da_silva.key no cliente, conforme segue:<\/p>\n<p>joao_da_silva.crt -> client.crt<br \/>\njoao_da_silva.key -> client.key<br \/>\nSe preferir, ao inv\u00e9s de renomear estes arquivos, voc\u00ea pode ajustar os par\u00e2metros cert e key no arquivo openvpn.conf (Linux) ou openvpn.ovpn (Windows) que ser\u00e1 configurado no pr\u00f3ximo passo.<br \/>\n7.1. Particularidades do Cliente Windows<br \/>\nPara um cliente Windows, crie o arquivo C:\\Program Files\\OpenVPN\\config\\openvpn.ovpn com o conte\u00fado abaixo.<\/p>\n<p>Ajuste o par\u00e2metro remote para o endere\u00e7o p\u00fablico IP ou FQDN se seu servidor OpenVPN seguido da porta de conex\u00e3o com o servidor. No meu exemplo usei o FQDN blogdonerd.no-ip.com. Se voc\u00ea configurou o servidor como TCP, ent\u00e3o ajuste o par\u00e2metro proto.<\/p>\n<p>#####################################################################&lt;\/pre&gt;<br \/>\n# OpenVPN 2.0 &#8211; Arquivo de configura\u00e7\u00e3o do cliente Windows<br \/>\n#####################################################################<\/p>\n<p># Specify that we are a client and that we<br \/>\n# will be pulling certain config file directives<br \/>\n# from the server.<br \/>\nclient<\/p>\n<p># Use the same setting as you are using on<br \/>\n# the server.<br \/>\ndev tun<\/p>\n<p>script-security 2<\/p>\n<p># Are we connecting to a TCP or<br \/>\n# UDP server? Use the same setting as<br \/>\n# on the server.<br \/>\nproto udp<\/p>\n<p># The hostname\/IP and port of the server.<br \/>\n# You can have multiple remote entries<br \/>\n# to load balance between the servers.<br \/>\nremote blogdonerd.no-ip.com 1194<\/p>\n<p># Keep trying indefinitely to resolve the<br \/>\n# host name of the OpenVPN server. Very useful<br \/>\n# on machines which are not permanently connected<br \/>\n# to the internet such as laptops.<br \/>\nresolv-retry infinite<\/p>\n<p># Most clients don&#8217;t need to bind to<br \/>\n# a specific local port number.<br \/>\nnobind<\/p>\n<p># Try to preserve some state across restarts.<br \/>\npersist-key<br \/>\npersist-tun<\/p>\n<p># If you are connecting through an<br \/>\n# HTTP proxy to reach the actual OpenVPN<br \/>\n# server, put the proxy server\/IP and<br \/>\n# port number here. See the man page<br \/>\n# if your proxy server requires<br \/>\n# authentication.<br \/>\n;http-proxy-retry # retry on connection failures<br \/>\n;http-proxy [proxy server] [proxy port #]<\/p>\n<p># Wireless networks often produce a lot<br \/>\n# of duplicate packets. Set this flag<br \/>\n# to silence duplicate packet warnings.<br \/>\nmute-replay-warnings<\/p>\n<p># SSL\/TLS parms.<br \/>\n# See the server config file for more<br \/>\n# description. It&#8217;s best to use<br \/>\n# a separate .crt\/.key file pair<br \/>\n# for each client. A single ca<br \/>\n# file can be used for all clients.<br \/>\nca ca.crt<br \/>\ncert client.crt<br \/>\nkey client.key<\/p>\n<p># Verify server certificate by checking<br \/>\n# that the certicate has the nsCertType<br \/>\n# field set to &#8220;server&#8221;. This is an<br \/>\n# important precaution to protect against<br \/>\n# a potential attack discussed here:<br \/>\n# http:\/\/openvpn.net\/howto.html#mitm<br \/>\nns-cert-type server<\/p>\n<p># If a tls-auth key is used on the server<br \/>\n# then every client must also have the key.<br \/>\ntls-auth ta.key 1<\/p>\n<p># Select a cryptographic cipher.<br \/>\n# If the cipher option is used on the server<br \/>\n# then you must also specify it here.<br \/>\ncipher AES-128-CBC<\/p>\n<p># Enable compression on the VPN link.<br \/>\n# Don&#8217;t enable this unless it is also<br \/>\n# enabled in the server config file.<br \/>\ncomp-lzo<\/p>\n<p># Set log file verbosity.<br \/>\nverb 3<br \/>\nA pasta C:\\Program Files\\OpenVPN\\config ficar\u00e1 assim:<\/p>\n<p>Execute o OpenVPN GUI. Um \u00edcone de dois computadores com uma tela vermelha aparecer\u00e1 no canto pr\u00f3ximo ao rel\u00f3gio.<\/p>\n<p>Clique duas vezes neste \u00edcone ou clique com o bot\u00e3o direito no \u00edcone e em seguida clique em Connect.<\/p>\n<p>A tela de conex\u00e3o e logs do OpenVPN ser\u00e1 mostrada. Se voc\u00ea configurou uma challenge password para o certificado do cliente ela deveria ser solicitada agora. Se tudo ocorreu bem o \u00edcone passara de vermelho para verde e uma mensagem informando que a conex\u00e3o foi bem sucedida ser\u00e1 apresentada.<\/p>\n<p>Para desconectar \u00e9 s\u00f3 clicar com o direito no \u00edcone dos computadores verdes e escolher a op\u00e7\u00e3o Disconnect.<\/p>\n<p>7.2. Particularidades do Cliente Linux<br \/>\nCrie o arquivo \/etc\/openvpn\/openvpn.conf com o conte\u00fado abaixo.<\/p>\n<p>Ajuste o par\u00e2metro remote para o endere\u00e7o p\u00fablico IP ou FQDN se seu servidor OpenVPN seguido da porta de conex\u00e3o com o servidor. No meu exemplo usei o FQDN blogdonerd.no-ip.com. Se voc\u00ea configurou o servidor como TCP, ent\u00e3o ajuste o par\u00e2metro proto.<\/p>\n<p>#####################################################################&lt;\/pre&gt;<br \/>\n# OpenVPN 2.0 &#8211; Arquivo de configura\u00e7\u00e3o do cliente Linux<br \/>\n#####################################################################<\/p>\n<p># Specify that we are a client and that we<br \/>\n# will be pulling certain config file directives<br \/>\n# from the server.<br \/>\nclient<\/p>\n<p># Use the same setting as you are using on<br \/>\n# the server.<br \/>\ndev tun0<\/p>\n<p>script-security 2<\/p>\n<p># Are we connecting to a TCP or<br \/>\n# UDP server? Use the same setting as<br \/>\n# on the server.<br \/>\nproto udp<\/p>\n<p># The hostname\/IP and port of the server.<br \/>\n# You can have multiple remote entries<br \/>\n# to load balance between the servers.<br \/>\nremote blogdonerd.no-ip.com 1194<\/p>\n<p># Keep trying indefinitely to resolve the<br \/>\n# host name of the OpenVPN server. Very useful<br \/>\n# on machines which are not permanently connected<br \/>\n# to the internet such as laptops.<br \/>\nresolv-retry infinite<\/p>\n<p># Most clients don&#8217;t need to bind to<br \/>\n# a specific local port number.<br \/>\nnobind<\/p>\n<p># Try to preserve some state across restarts.<br \/>\npersist-key<br \/>\npersist-tun<\/p>\n<p># If you are connecting through an<br \/>\n# HTTP proxy to reach the actual OpenVPN<br \/>\n# server, put the proxy server\/IP and<br \/>\n# port number here. See the man page<br \/>\n# if your proxy server requires<br \/>\n# authentication.<br \/>\n;http-proxy-retry # retry on connection failures<br \/>\n;http-proxy [proxy server] [proxy port #]<\/p>\n<p># Wireless networks often produce a lot<br \/>\n# of duplicate packets. Set this flag<br \/>\n# to silence duplicate packet warnings.<br \/>\nmute-replay-warnings<\/p>\n<p># SSL\/TLS parms.<br \/>\n# See the server config file for more<br \/>\n# description. It&#8217;s best to use<br \/>\n# a separate .crt\/.key file pair<br \/>\n# for each client. A single ca<br \/>\n# file can be used for all clients.<br \/>\nca \/etc\/openvpn\/ca.crt<br \/>\ncert \/etc\/openvpn\/client.crt<br \/>\nkey \/etc\/openvpn\/client.key<\/p>\n<p># Verify server certificate by checking<br \/>\n# that the certicate has the nsCertType<br \/>\n# field set to &#8220;server&#8221;. This is an<br \/>\n# important precaution to protect against<br \/>\n# a potential attack discussed here:<br \/>\n# http:\/\/openvpn.net\/howto.html#mitm<br \/>\nns-cert-type server<\/p>\n<p># If a tls-auth key is used on the server<br \/>\n# then every client must also have the key.<br \/>\ntls-auth \/etc\/openvpn\/ta.key 1<\/p>\n<p># Select a cryptographic cipher.<br \/>\n# If the cipher option is used on the server<br \/>\n# then you must also specify it here.<br \/>\ncipher AES-128-CBC<\/p>\n<p># Enable compression on the VPN link.<br \/>\n# Don&#8217;t enable this unless it is also<br \/>\n# enabled in the server config file.<br \/>\ncomp-lzo<\/p>\n<p># Set log file verbosity.<br \/>\nverb 3<br \/>\nA pasta \/etc\/openvpn ficar\u00e1 assim:<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\nroot@openvpn:\/etc\/openvpn# ls \/etc\/openvpn\/<br \/>\nca.crt       client.crt        client.key      openvpn.conf       ta.key<br \/>\nroot@openvpn:\/etc\/openvpn#<br \/>\nAgora basta executar service openvpn start para que a conex\u00e3o com o servidor seja realizada.<br \/>\nPara encerrar a conex\u00e3o execute service openvpn stop.<br \/>\nPara controlar se a conex\u00e3o ser\u00e1 executada automaticamente na inicializa\u00e7\u00e3o do computador, edite o arquivo \/etc\/default\/openvpn.<br \/>\nDescomente ou inclua a linha abaixo para que a conex\u00e3o seja realizada automaticamente na inicializa\u00e7\u00e3o:<\/p>\n<p>AUTOSTART=&#8221;all&#8221;<br \/>\nPara impedir a inicializa\u00e7\u00e3o autom\u00e1tica do openvpn descomente ou inclua a seguinte linha:<\/p>\n<p>AUTOSTART=&#8221;none&#8221;<br \/>\n7. Revogando Certificados de Clientes<br \/>\nCaso um computador contendo um certificado seja perdido, ou ainda para impedir que determinado usu\u00e1rio realize a conex\u00e3o VPN voc\u00ea deve revogar o certificado.<\/p>\n<p>Uma vez revogado, n\u00e3o h\u00e1 volta, voc\u00ea ter\u00e1 que gerar um novo certificado para permitir a conex\u00e3o de detreminado cliente.<\/p>\n<p>A lista de certificados revogados \u00e9 armazenada no arquivo \/etc\/openvpn\/keys\/crl.pem. O problema \u00e9 que o OpenVPN, ap\u00f3s entrar em execu\u00e7\u00e3o, n\u00e3o possui permiss\u00e3o de leitura para essa pasta. Ent\u00e3o teremos ainda que copiar o arquivo \/etc\/openvpn\/keys\/crl.pem para a pasta \/etc\/openvpn, que \u00e9 o motivo da \u00faltima linha dos comandos abaixo.<\/p>\n<p>Para revogar o certificado de joao_da_silva execute os seguintes comandos:<\/p>\n<p>source \/etc\/openvpn\/vars<br \/>\n\/etc\/openvpn\/revoke-full joao_da_silva<br \/>\ncp \/etc\/openvpn\/keys\/crl.pem \/etc\/openvpn<br \/>\nA sa\u00edda ser\u00e1 a seguinte:<\/p>\n<p>root@openvpn:\/etc\/openvpn# \/etc\/openvpn\/revoke-full joao_da_silva<br \/>\nUsing configuration from \/etc\/openvpn\/openssl.cnf<br \/>\nRevoking Certificate 04.<br \/>\nData Base Updated<br \/>\nUsing configuration from \/etc\/openvpn\/openssl.cnf<br \/>\njoao_da_silva.crt: C = BR, ST = SP, L = Sao Paulo, O = Blog do Nerd, OU = Divisao de TI, CN = joao3, name = Joao da Silva, emailAddress = joao@blogdonerd.email.com<br \/>\nerror 23 at 0 depth lookup:certificate revoked<br \/>\nroot@openvpn:\/etc\/openvpn# cp \/etc\/openvpn\/keys\/crl.pem \/etc\/openvpn\/<br \/>\nroot@openvpn:\/etc\/openvpn#<br \/>\nPrecisamos ainda informar ao servidor OpenVPN para considerar esse arquivo na verifica\u00e7\u00e3o das conex\u00f5es.<\/p>\n<p>Para fazer isso, edite o arquivo \/etc\/openvpn\/server.conf e inclua a seguinte linha no final do arquivo:<\/p>\n<p>crl-verify \/etc\/openvpn\/crl.pem<br \/>\nReinicie o OpenVPN para que esta nova configura\u00e7\u00e3o entre em a\u00e7\u00e3o:<\/p>\n<p>service opevpn reload<br \/>\nVoc\u00ea n\u00e3o precisar\u00e1 reiniciar ou recarregar o OepnVPN a cada vez que revogar um certificado. Somente na primeira vez em que configurar a diretiva crl-verify.<\/p>\n<p>Para gerar um arquivo crl.pem inicial voc\u00ea pode executar o comando revoke-full com um nome qualquer:<\/p>\n<p>1<br \/>\n\/etc\/openvpn\/revoke-full teste<br \/>\n8. Informa\u00e7\u00f5es Adicionais<br \/>\nPara controlar se o servidor OpenVPN ser\u00e1 inicializado automaticamente junto com a inicializa\u00e7\u00e3o do computador, edite o arquivo \/etc\/default\/openvpn.<\/p>\n<p>Descomente ou inclua a linha abaixo para que o servidor OpenVPN inicie automaticamente na inicializa\u00e7\u00e3o:<\/p>\n<p>AUTOSTART=&#8221;all&#8221;<br \/>\nPara impedir a inicializa\u00e7\u00e3o autom\u00e1tica do OpenVPN descomente ou inclua a seguinte linha:<\/p>\n<p>AUTOSTART=&#8221;none&#8221;<br \/>\nDesculpe pelo artigo extremamente longo. Espero que ele seja \u00fatil. Qualquer d\u00favida, sugest\u00e3o ou relato de erros \u00e9 s\u00f3 postar nos coment\u00e1rios.<\/p>\n<p>====================================================<br \/>\nUma observa\u00e7\u00e3o seria qndo for gerar a chave esteja dentro do diret\u00f3rio corrente do bin\u00e1rio gerador (\/etc\/openvpn).<\/p>\n<p>Lembrar do USUARIO NOBODY (criar ou trocar para um que ja exista como realizei).<br \/>\nCriar a sintaxe no boot para compartilhar a conexao:<br \/>\necho 1 > \/proc\/sys\/net\/ipv4\/ip_forward<\/p>\n<p>DIRETORIO OPENVPN dentro de \/etc:<br \/>\ndebian:~# ls \/etc\/openvpn\/<br \/>\nbuild-ca     build-key-pass    build-req-pass  ipp.txt   openssl-0.9.6.cnf  pkitool      sign-req<br \/>\nbuild-dh     build-key-pkcs12  clean-all       keys      openssl-0.9.8.cnf  README       update-resolv-conf<br \/>\nbuild-inter  build-key-server  IHUNTER         list-crl  openssl-1.0.0.cnf  revoke-full  vars<br \/>\nbuild-key    build-req         inherit-inter   Makefile  openssl.cnf        server.conf  whichopensslcnf<\/p>\n<p>CONTEUDO DO ARQUIVO server.conf CRIADO PARA (Servidor vpn):<br \/>\ndebian:\/etc\/openvpn# cat server.conf<br \/>\nport 1194<br \/>\nproto udp<br \/>\ndev tun0<br \/>\nca \/etc\/openvpn\/keys\/ca.crt<br \/>\ncert \/etc\/openvpn\/keys\/server.crt<br \/>\nkey \/etc\/openvpn\/keys\/server.key<br \/>\ndh \/etc\/openvpn\/keys\/dh1024.pem<br \/>\nserver 10.15.0.0 255.255.255.0<br \/>\nifconfig-pool-persist ipp.txt<br \/>\npush &#8220;route 192.168.254.0 255.255.255.0&#8221;<br \/>\npush &#8220;dhcp-option DNS 192.168.254.254&#8221;<br \/>\npush &#8220;dhcp-option DNS 8.8.8.8&#8221;<br \/>\npush &#8220;dhcp-option DOMAIN abratel&#8221;<br \/>\nkeepalive 10 120<br \/>\ntls-auth \/etc\/openvpn\/keys\/ta.key 0 # This file is secret<br \/>\ncipher AES-128-CBC   # AES<br \/>\ncomp-lzo<br \/>\nmax-clients 100<br \/>\nuser root<br \/>\ngroup root<br \/>\npersist-key<br \/>\npersist-tun<br \/>\nstatus \/var\/log\/openvpn\/openvpn-status.log<br \/>\nlog-append \/var\/log\/openvpn\/openvpn.log<br \/>\nverb 3<\/p>\n<p>CONTEUDO DO DIRETORIO CLIENTE WINDOWSXP:<br \/>\n Pasta de C:\\Arquivos de programas\\OpenVPN\\config<\/p>\n<p>18\/11\/2012  21:18    <DIR>          .<br \/>\n18\/11\/2012  21:18    <DIR>          ..<br \/>\n18\/11\/2012  14:38             1.354 ca.crt<br \/>\n18\/11\/2012  14:39             3.951 client.crt<br \/>\n18\/11\/2012  14:39               912 client.key<br \/>\n18\/11\/2012  21:00               213 README.txt<br \/>\n19\/11\/2012  17:38             2.424 server.ovpn<br \/>\n18\/11\/2012  14:39               636 ta.key<br \/>\n               6 arquivo(s)          9.490 bytes<br \/>\n               2 pasta(s) 36.582.776.832 bytes dispon\u00edveis<\/p>\n<p>CONTEUDO DO ARQUIVO server.ovpn  (cliente):<br \/>\nclient<br \/>\ndev tun<br \/>\nproto udp<br \/>\nremote abratel.com.net 1194<br \/>\nresolv-retry infinite<br \/>\nnobind<br \/>\npersist-key<br \/>\npersist-tun<br \/>\nmute-replay-warnings<br \/>\nca ca.crt<br \/>\ncert client.crt<br \/>\nkey client.key<br \/>\nns-cert-type server<br \/>\ntls-auth ta.key 1<br \/>\ncipher AES-128-CBC<br \/>\ncomp-lzo<br \/>\nverb 3<\/p>\n<p>Criei essas duas regras:<br \/>\niptables -A INPUT -i eth0 -d 10.15.0.0\/32 -p udp -m udp &#8211;dport 1194 -j ACCEPT<br \/>\niptables -A INPUT -i eth0 -d 192.168.254.0\/32 -p udp -m udp &#8211;dport 1194 -j ACCEPT<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Creditos e leitura recomendada: http:\/\/blogdonerd.com.br\/2012\/06\/openvpn-servidor-ubuntu-e-clientes-windows-e-linux\/ &#8211; Angelo Caso o link esteja indispon\u00edvel segue abaixo conte\u00fado em forma texto (sem imagens) adicionado de algumas observa\u00e7oes: 1. Instala\u00e7\u00e3o do Servidor OpenVPN e Cria\u00e7\u00e3o da CA Local Para instalar o OpenVPN no Ubuntu execute: apt-get install openvpn Ap\u00f3s&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/410"}],"collection":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=410"}],"version-history":[{"count":0,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/410\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}