Qual é a sua dúvida?
Configurando um servidor openvpn
1. Instalação do Servidor OpenVPN e Criação da CA Local
Para instalar o OpenVPN no Ubuntu execute:
$ apt-get install openvpn openssl easy-rsa
Após a instalação, copie os arquivos de exemplo de configuração da pasta /usr/share/doc/openvpn/examples/easy-rsa/2.0/ para a pasta /etc/openvpn.
$ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn
Renomeie ou crie uma cópia do arquivo /etc/openvpn/openssl-1.0.0.cnf para /etc/openvpn/openssl.cnf.
$ cp /etc/openvpn/openssl-1.0.0.cnf /etc/openvpn/openssl.cnf
Edite o arquivo /etc/openvpn/vars ajustando as últimas linhas iniciadas por KEY para refletir o seu ambiente.
É interessante, porém não obrigatório, que o parâmetro KEY_CN tenha o mesmo valor que o hostname do servidor OpenVPN.
Se existir, remova as últimas linhas referentes as chaves PKCS11_MODULE_PATH e PKCS11_PIN. Se existir uma chave duplicada KEY_EMAIL, remova-a também.
O tempo padrão para a expiração do certificado da CA e das chaves a serem geradas é de 10 anos (3650 dias). Se preferir altere estes valores editando os parâmetros CA_EXPIRE e KEY_EXPIRE.
O tamanho da chave de criptografia está definido como 1024 bits. Se quiser mudar este valor edite o parâmetro KEY_SIZE.O conteúdo de meu /etc/openvpn/vars segue abaixo:
$ nano /etc/openvpn/vars
# easy-rsa parameter settings # NOTE: If you installed from an RPM, # don't edit this file in place in # /usr/share/openvpn/easy-rsa -- # instead, you should copy the whole # easy-rsa directory to another location # (such as /etc/openvpn) so that your # edits will not be wiped out by a future # OpenVPN package upgrade. # This variable should point to # the top level of the easy-rsa # tree. export EASY_RSA="`pwd`" # # This variable should point to # the requested executables # export OPENSSL="openssl" export PKCS11TOOL="pkcs11-tool" export GREP="grep" # This variable should point to # the openssl.cnf file included # with easy-rsa. export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` # Edit this variable to point to # your soon-to-be-created key # directory. # # WARNING: clean-all will do # a rm -rf on this directory # so make sure you define # it correctly! export KEY_DIR="$EASY_RSA/keys" # Issue rm -rf warning echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR # PKCS11 fixes export PKCS11_MODULE_PATH="dummy" export PKCS11_PIN="dummy" # Increase this to 2048 if you # are paranoid. This will slow # down TLS negotiation performance # as well as the one-time DH parms # generation process. export KEY_SIZE=1024 # In how many days should the root CA key expire? export CA_EXPIRE=3650 # In how many days should certificates expire? export KEY_EXPIRE=3650 # These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. export KEY_COUNTRY="BR" export KEY_PROVINCE="MG" export KEY_CITY="JuizDeFora" export KEY_ORG="BemmelhorSI" export KEY_EMAIL="fabriciojf@gmail.com"
Agora execute os comandos abaixo:
$ cd /etc/openvpn $ source /etc/openvpn/vars $ /etc/openvpn/clean-all $ /etc/openvpn/build-ca $ /etc/openvpn/build-dh
Confirme os valores solicitados pelo build-ca, que serão os mesmos definidos no arquivo /etc/openvpn/vars.
A saída dos comandos será semelhante a abaixo:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys root@openvpn:/etc/openvpn# /etc/openvpn/clean-all root@openvpn:/etc/openvpn# /etc/openvpn/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) [São Paulo]: Organization Name (eg, company) [Bemmelhor SI]: Organizational Unit Name (eg, section) [Divisão de TI]: Common Name (eg, your name or your server's hostname) [openvpn]: Name [BemmelhorSI CA]: Email Address [suporte@bemmelhor.com.br]: root@openvpn:/etc/openvpn# /etc/openvpn/build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ...............+.........................+.................................. .................................+.......................................... .......+.................................................................... ....................+............................................+.......... +............+.............................................................. ................................+.................................+......... ..................+......................+...........+.....+................ ............................................................................ +....................................+................+.....+............... .............................+............................................+. ......................+.............+..+.................................... ................+...................................................+......+ .......+..............................+..................................... ..................................................+.++*++*++*
A pasta /etc/openvpn/keys será gerada e dentro dela, 5 arquivos referentes a nova CA criada:
- ca.crt - Certificado Público de sua CA.
- ca.key - Chave Privada de sua CA.
- dh1024.pem - Parâmetros do Diffie-Hellman.
- index.txt - Controle das chaves geradas pela nova CA.
- serial - Controle de número serial das chaves geradas pela nova CA.
2. Criação do Certificado do Servidor
É necessário a geração de um certificado para o servidor OpenVPN. Para fazer isso execute:
$ /etc/openvpn/build-key-server server
Você pode substituir a palavra server por outra que desejar, só que se fizer isso, lembre-se de fazer os devidos ajustes no arquivo /etc/openvpn/server.conf que será configurado no próximo passo. A saída do comando será semelhante a abaixo. Ajuste o parâmetro Name para o nome que julgar mais apropriado para seu servidor. Recomendo não atribuir um challenge password. Confirme a assinatura e a atualização do certificado com a tecla 'y'.
Saída
Generating a 1024 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) [BR]: State or Province Name (full name) [SP]: Locality Name (eg, city) [Juiz de Fora]: Organization Name (eg, company) [BemmelhorSI]: Organizational Unit Name (eg, section) [Divisão de TI]: Common Name (eg, your name or your server's hostname) [server]: Name [BemmelhorSI CA]:Bemmelhor SI - OpenVPN Server Email Address [suporte@bemmelhor.com.br]: 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/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName : PRINTABLE:'BR' stateOrProvinceName : PRINTABLE:'SP' localityName : T61STRING:'Sao Paulo' organizationName : PRINTABLE:' Bemmelhor SI' organizationalUnitName: T61STRING:'Divisao de TI' commonName : PRINTABLE:'server' name : PRINTABLE:'Bemmelhor SI - OpenVPN Server' emailAddress : IA5STRING:'suporte@bemmelhor.com.br' Certificate is to be certified until Jun 18 18:57:10 2022 GMT (3650 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@openvpn:/etc/openvpn#
Dois arquivos serão gerados na pasta /etc/openvpn/keys:
- server.crt - Certificado público do servidor OpenVPN.
- server.key - Chave privada do servidor OpenVPN.
3. Configuração do Servidor OpenVPN
Gere uma chave TLS (opcional) para aumentar ainda mais a segurança da conexão VPN, permitindo a verificação de integridade de cada pacote TLS, digitando o seguinte comando:
$ openvpn --genkey --secret /etc/openvpn/keys/ta.key
A configuração do OpenVPN é realizada em qualquer arquivo que termine em .conf, localizado na pasta /etc/openvpn/. Neste tutorial iremos usar o arquivo /etc/openvpn/server.conf. Você pode alterar este arquivo para o nome que desejar, desde que ele termine em .conf. Você pode inclusive ter mais de um serviço OpenVPN ouvindo em outras portas, basta configurar outro arquivo .conf.
Crie um /etc/openvpn/server.conf vazio e preencha-o conforme segue.
Se preferir, você pode iniciar usando o arquivo de configuração 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:
Ajuste o arquivo /etc/openvpn/server.conf conforme abaixo, tomando o cuidado de alterar as linhas destacadas para refletir a realidade de seu ambiente.
- A linha local 10.0.0.1 indica o IP local do servidor em que OpenVPN irá ouvir por novas conexões.
- A configuração server 10.15.0.0 255.255.255.0 informa ao servidor OpenVPN que a rede VPN será 10.15.0.0/24. Altere para a rede que definiu durante a fase de pré-requisitos. O primeiro IP dessa rede será o IP do servidor OpenVPN.
- Se desejar você pode ajustar a linha push "route 10.0.0.0 255.0.0.0" informando ao OpenVPN para adicionar uma rota na tabela de rotas dos clientes VPN no momento da conexão. Neste caso todo o tráfego para a rede 10.0.0.0/8 será redirecionado pela VPN. Você pode ser mais radical e direcionar todo o tráfego de rede pela VPN, incluindo o tráfego de Internet. Para fazer isso, substitua a linha push "route 10.0.0.0 255.0.0.0" por push "redirect-gateway def1".
- As configurações push "dhcp-option" são opcionais e relativas aos parâmetros de DNS a serem informados para o computador cliente. Você pode informar os servidores de DNS locais da rede da sede para que os clientes possam resolver nomes de domínio e acessar os serviços internos com maior facilidade.
Muitos dos parâmetros são opcionais e o OpenVPN é extremamente versátil e se adapta a praticamente qualquer ambiente. Você pode verificar o manual do OpenVPN para explorar outras configurações. O arquivo /etc/openvpn/server.conf sugerido é o seguinte:
$ nano /etc/openvpn/server.conf
Conteúdo sugerido
local 192.168.25.100 # ip do servidor de vpn port 2294 proto udp dev tun0 ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh1024.pem server 50.50.0.0 255.255.255.0 # range de ip que deseja utilizar ifconfig-pool-persist ipp.txt keepalive 10 120 tls-auth /etc/openvpn/keys/ta.key 0 cipher AES-128-CBC comp-lzo max-clients 100 user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 client-config-dir /var/openvpn/clients
Crie a pasta /var/log/openvpn para manter os logs do OpenVPN:
$ mkdir /var/log/openvpn
Se desejar crie o arquivo /etc/logrotate.d/openvpn com o conteúdo a seguir para fazer uma rotação automática dos logs do OpenVPN:
$ nano /etc/logrotate.d/openvpn
Conteúdo Sugerido
/var/log/openvpn/*.log { daily rotate 365 compress missingok create 0640 root adm missingok postrotate service openvpn reload endscript }
Inicie o OpenVPN executando:
$ service openvpn start
Verifique se o serviço está em execução com o comando:
$ service openvpn status
Se tudo ocorreu com sucesso, a saída será semelhante a seguinte:
$ service openvpn start * Starting virtual private network daemon(s)... * Autostarting VPN 'server' $ service openvpn status * VPN 'server' is running
Se ocorreu algum problema, verifique o arquivo /var/log/openvpn.log:
$ cat /var/log/openvpn/openvpn.log
Saída
Wed 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 Wed Jun 20 16:16:40 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables Wed Jun 20 16:16:40 2012 Diffie-Hellman initialized with 1024 bit key Wed Jun 20 16:16:40 2012 Control Channel Authentication: using '/etc/openvpn/keys/ta.key' as a OpenVPN static key file Wed Jun 20 16:16:40 2012 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication Wed Jun 20 16:16:40 2012 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication Wed Jun 20 16:16:40 2012 TLS-Auth MTU parms [ L:1558 D:166 EF:66 EB:0 ET:0 EL:0 ] Wed Jun 20 16:16:40 2012 Socket Buffers: R=[229376->131072] S=[229376->131072] Wed Jun 20 16:16:40 2012 ROUTE default_gateway=10.0.0.1 Wed Jun 20 16:16:40 2012 TUN/TAP device tun0 opened Wed Jun 20 16:16:40 2012 TUN/TAP TX queue length set to 100 Wed Jun 20 16:16:40 2012 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 Wed Jun 20 16:16:40 2012 /sbin/ifconfig tun0 10.15.0.1 pointopoint 10.15.0.2 mtu 1500 Wed Jun 20 16:16:40 2012 /sbin/route add -net 10.15.0.0 netmask 255.255.255.0 gw 10.15.0.2 Wed 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 ] Wed Jun 20 16:16:40 2012 GID set to nogroup Wed Jun 20 16:16:40 2012 UID set to nobody Wed Jun 20 16:16:40 2012 UDPv4 link local (bound): [AF_INET]10.9.0.172:1194 Wed Jun 20 16:16:40 2012 UDPv4 link remote: [undef] Wed Jun 20 16:16:40 2012 MULTI: multi_init called, r=256 v=256 Wed Jun 20 16:16:40 2012 IFCONFIG POOL: base=10.15.0.4 size=62, ipv6=0 Wed Jun 20 16:16:40 2012 IFCONFIG POOL LIST Wed Jun 20 16:16:40 2012 Initialization Sequence Completed
Uma nova interface de rede (tun0) será criada, conforme ilustra a execução do comando ifconfig abaixo.
$ ifconfig
Saída
eth0 Link encap:Ethernet HWaddr 00:50:56:be:46:45 inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:febe:4645/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:135820 errors:0 dropped:0 overruns:0 frame:0 TX packets:58093 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:149189479 (149.1 MB) TX bytes:5400632 (5.4 MB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:14 errors:0 dropped:0 overruns:0 frame:0 TX packets:14 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1176 (1.1 KB) TX bytes:1176 (1.1 KB) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.15.0.1 P-t-P:10.15.0.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)
O servidor já está no ar. Agora precisamos configurar regras de firewall, se necessário, criar as chaves para os clientes e configurá-los.
4. Criando Certificados para Clientes
Para cada novo cliente VPN de sua rede, é necessário criar um certificado exclusivo. Isto é feito através do comando /etc/openvpn/build-key ou /etc/openvpn/build-key-pass:
$ /etc/openvpn/build-key-pass nome-do-cliente
Troque nome-do-cliente por um nome único e exclusivo para cada cliente. Ele será o Common Name do certificado gerado. É importante que no nome-do-cliente não haja espaços em branco, nem caracteres especiais ou acentuados. Até é possível, mas se você não usá-los, terá menos problemas. Você pode usar números, a matricula dos funcionários, CPF, ou o Nome completo, lembrando de trocar o separador do nome por _ ou simplesmente suprimi-lo. Por exemplo, a Caixa Econômica Federal costuma emitir seus certificados usando o nome completo do solicitante, seguido do caracter : e dos números do CPF.
Antes de executar o build-key é importante executar source /etc/openvpn/vars para atribuir as informações de sua CA às variáveis de ambiente da sessão corrente.
Lembre-se de responder as perguntas adequadamente. Elas já virão pré-preenchidas pelos valores de /etc/openvpn/vars. Você pode colocar qualquer informação no campo name, inclusive espaços em branco e caracteres acentuados.
É recomendável usar o build-key-pass ao invés do build-key, visto que o primeiro irá solicitar uma senha secreta para cada cliente. Essa senha sera utilizada em cada conexão OpenVPN. Isso é importante pois caso um notebook que contenha as configurações e certificados de determinado usuário seja perdido ou furtado um meliante não seria capaz de fechar a conexão VPN sem ter a senha. É claro que nestes casos recomenda-se ainda revogar o certificado do cliente.
Para gerar um novo certificado para o usuário João da Silva você pode digitar o seguinte:
$ source /etc/openvpn/vars $ /etc/openvpn/build-key joao_da_silva
Saída:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys root@openvpn:/etc/openvpn# /etc/openvpn/build-key joao_da_silva Generating a 1024 bit RSA private key ..............++++++ .........................++++++ writing new private key to 'joao_da_silva.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) [São Paulo]: Organization Name (eg, company) [Bemmelhor SI]: Organizational Unit Name (eg, section) [Divisão de TI]: Common Name (eg, your name or your server's hostname) [joao_da_silva]: Name [Bemmelhor SI]:João da Silva Email Address [suporte@bemmelhor.com.br]:suporte@bemmelhor.com.br 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/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName : PRINTABLE:'BR' stateOrProvinceName : PRINTABLE:'SP' localityName : T61STRING:'Juiz de Fora' organizationName : PRINTABLE:'Bemmelhor SI' organizationalUnitName: T61STRING:'Divisao de TI' commonName : T61STRING:'joao_da_silva' name : T61STRING:'Joao da Silva' emailAddress : IA5STRING:'suporte@bemmelhor.com.br Certificate is to be certified until Jun 19 14:04:54 2022 GMT (3650 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
Três novos arquivos serão gerados na pasta /etc/openvpn/keys:
- joao_da_silva.csr - Solicitação do novo certificado
- joao_da_silva.crt - Certificado público
- joao_da_silva.key - Chave privada
Será necessário copiar estes arquivos para o computador do cliente no próximo passo.
5. Instalando o Izop
$ apt-get install lzop