SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
OpenVPN
18 de abril de 2007
Sumário
I Sobre essa Apostila 2
II Informações Básicas 4
III OpenVPN 9
1 O que é o OpenVPN 10
2 Plano de ensino 11
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 Introdução 14
3.1 O que é VPN? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Informações e situações de práticas de uso . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Características do OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4 OpenVPN x Outros pacotes VPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 Instalação 17
4.1 Download do OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Instalação no Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3 Pacotes RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.4 Instalação do Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5 Configuração 19
5.1 Configurando o driver TUN/TAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2 Configurando certificados (CA) e chaves . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.3 Configuração do OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.4 Gerando certificados e chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.5 Framework de teste do OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.6 Considerações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.7 Criando arquivos de configuração para servidores e clientes . . . . . . . . . . . . . 30
6 Teste 33
6.1 Servidor x Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.2 Testando o OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2.1 Iniciando o VPN e testando-o para conectividade inicial . . . . . . . . . . . . 42
7 Inicializando com o Sistema 44
7.1 Inicializando com o sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.2 Inciando a VPN automaticamente no reboot . . . . . . . . . . . . . . . . . . . . . . . 44
8 Como adicionar novas máquinas à VPN 51
8.1 Adicionando máquinas à VPN tanto para servidor e cliente . . . . . . . . . . . . . . 51
9 Publicando opções de DHCP 54
9.1 Fazendo o OpenVPN compatível com DHCP . . . . . . . . . . . . . . . . . . . . . . 54
9.2 Publicando opções de DHCP para clientes . . . . . . . . . . . . . . . . . . . . . . . 54
2
Parte I
Sobre essa Apostila
3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas são bem-vindas a qualquer tempo.
Autores
A autoria deste é de responsabilidade de André Marra G. Araujo (andremarra@cdtc.org.br) .
O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento, que
vem sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com
outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras
que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software
junto a outras entidades no país.
Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da
home page da entidade, através da URL http://www.cdtc.org.br.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
4
Parte II
Informações Básicas
5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-
ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.
Objetivo Específico
Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e
de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores de produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e de seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Licenças para cópia de material disponível
• Os 10 mandamentos do aluno de Educação a Distância
• Como participar dos foruns e da wikipédia
• Primeiros passos
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br).
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
Os 10 mandamentos do aluno de educação online
• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é
pré-requisito para a participação nos cursos a distância.
• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-
tica é necessário para poder executar as tarefas.
• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-
cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores.
• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo.
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais.
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real.
• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre.
• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens
e descobertas.
• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é
ponto - chave na comunicação pela Internet.
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
Como participar dos fóruns e Wikipédia
Você tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Forum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
A segunda forma se dá pelas Wikis:
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
• Página principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;
• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá
utilizar;
• gosta que lhe façam perguntas adicionais;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
• dá uma ajuda complementar para encorajar um estudante em dificuldade;
• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;
• ajuda o estudante a alcançar os seus objetivos;
• é flexível quando necessário;
• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
• escreve todas as correções de forma legível e com um nível de pormenorização adequado;
• acima de tudo, devolve os trabalhos rapidamente;
9
Parte III
OpenVPN
10
Capítulo 1
O que é o OpenVPN
OpenVPN é uma solução completa de SSL VPN que pode acomodar uma larga escala de con-
figurações incluindo acesso remoto, site-to-site VPNs, segurança de WiFi, e soluções em escala
de empresa de acesso remoto com load balancing, failover, e controles de acesso refinados.
11
Capítulo 2
Plano de ensino
2.1 Objetivo
Qualificar técnicos e administradores de redesa fazer uso adequado do OpenVPN
2.2 Público Alvo
Técnicos e administradores de redes que desejam trabalhar com OpenVPN
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, funcionários públicos e ter conhecimentos bási-
cos para operar um computador e ter conhecimento básico acerca de administração de rede,
configuração do Linux e criptografia e chaves digitais.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. O curso tem duração de uma semana e possui um conjunto
de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de
acordo com as instruções fornecidas. O material didático está disponível on-line de acordo com
as datas pré-estabelecidas em cada tópico. A versão adotada do OpenVPN é a 2.0.6-1, caso
possua outra versão, podem ocorrer diferenças com relação a este material.
2.5 Metodologia
O curso está dividido da seguinte maneira:
2.6 Cronograma
• Introdução
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Instalação
• Configuração
• Teste
• Administrando uma VPN
As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem neces-
sárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,
pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor
do que 6.0, sugerimos que você faça novamente esta lição.
Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições
quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis
para que possam ser consultados durante a avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-
sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser
enviada no fórum. Diariamente os monitores darão respostas e esclarecimentos.
2.7 Programa
O curso do OpenVPN oferecerá o seguinte conteúdo:
• Introdução
• Conceitos Básicos
• Conceitos Avançados
2.8 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:
• Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;
• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.
Instrumentos de avaliação:
• Participação ativa nas atividades programadas.
• Avaliação ao final do curso.
• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e
obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições
• AF = Avaliações
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2.9 Bibliografia
• Site oficial: http://openvpn.net
• Guia em Português: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2602#
14
Capítulo 3
Introdução
Comece por aqui. Nesta lição, você verá informações importantes sobre o OpenVPN como: o
que é VPN, situações práticas de uso e etc.
3.1 O que é VPN?
A idéia de utilizar uma rede pública como a Internet em vez de linhas privativas para
implementar redes corporativas é denominada de Virtual Private Network (VPN) ou Rede Privada
Virtual. As VPNs são túneis de criptografia entre pontos autorizados, criados através da Internet
ou outras redes públicas e/ou privadas para transferência de informações, de modo seguro, entre
redes corporativas ou usuários remotos.
A segurança é a primeira e mais importante função da VPN. Uma vez que dados privados se-
rão transmitidos pela Internet, que é um meio de transmissão inseguro, eles devem ser protegidos
de forma a não permitir que sejam modificados ou interceptados.
Outro serviço oferecido pelas VPNs é a conexão entre corporações (Extranets) através da
Internet, além de possibilitar conexões dial-up criptografadas que podem ser muito úteis para
usuários móveis ou remotos, bem como filiais distantes de uma empresa.
Uma das grandes vantagens decorrentes do uso das VPNs é a redução de custos com co-
municações corporativas, pois elimina a necessidade de links dedicados de longa distância que
podem ser substituídos pela Internet. As LANs podem, através de links dedicados ou discados,
conectar-se a algum provedor de acesso local e interligar-se a outras LANs, possibilitando o fluxo
de dados através da Internet. Esta solução pode ser bastante interessante sob o ponto de vista
econômico, sobretudo nos casos em que enlaces internacionais ou nacionais de longa distân-
cia estão envolvidos. Outro fator que simplifica a operacionalização da WAN é que a conexão
LAN-Internet-LAN fica parcialmente a cargo dos provedores de acesso.
3.2 Informações e situações de práticas de uso
O openVPN roda em:
Linux, Windows 2000/XP e mais novos, OpenBSD, FreeBSD, NetBSD, Mac OS X e Solaris. Uma
versão para PocketPC do OpenVPN está sendo desenvolvida.
Aplicações para redes privadas virtuais
Abaixo, são apresentadas as três aplicações ditas mais importantes para as VPNs.
15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
ACESSO REMOTO VIA INTERNET O acesso remoto a redes corporativas através da Internet
pode ser viabilizado com a VPN através da ligação local a algum provedor de acesso (Inter-
net Service Provider - ISP). A estação remota disca para o provedor de acesso, conectando-
se à Internet e o software de VPN cria uma rede virtual privada entre o usuário remoto e o
servidor de VPN corporativo através da Internet.
CONEXÃO DE LANS VIA INTERNET Uma solução que substitui as conexões entre LANs atra-
vés de circuitos dedicados de longa distância é a utilização de circuitos dedicados locais
interligando-as à Internet. O software de VPN assegura esta interconexão formando a WAN
corporativa.
A depender das aplicações também, pode-se optar pela utilização de circuitos discados em
uma das pontas, devendo a LAN corporativa estar, preferencialmente, conectada à Inter-
net via circuito dedicado local ficando disponível 24 horas por dia para eventuais tráfegos
provenientes da VPN.
CONEXÃO DE COMPUTADORES NUMA INTRANET Em algumas organizações, existem da-
dos confidenciais cujo acesso é restrito a um pequeno grupo de usuários. Nestas situações,
redes locais departamentais são implementadas fisicamente separadas da LAN corporativa.
Esta solução, apesar de garantir a "confidencialidade"das informações, cria dificuldades de
acesso a dados da rede corporativa por parte dos departamentos isolados.
As VPNs possibilitam a conexão física entre redes locais, restringindo acessos indesejados
através da inserção de um servidor VPN entre elas. Observe que o servidor VPN não irá
atuar como um roteador entre a rede departamental e o resto da rede corporativa uma vez
que o roteador possibilitaria a conexão entre as duas redes permitindo o acesso de qual-
quer usuário à rede departamental sensitiva. Com o uso da VPN o administrador da rede
pode definir quais usuários estarão credenciados a atravessar o servidor VPN e acessar os
recursos da rede departamental restrita. Adicionalmente, toda comunicação ao longo da
VPN pode ser criptografada assegurando a "confidencialidade"das informações. Os demais
usuários não credenciados sequer enxergarão a rede departamental.
3.3 Características do OpenVPN
O OpenVPN é um software livre, ou seja, você pode olhar o código dele, modificar o código
para usá-lo do jeito que você deseja, você pode distribuir e etc. Enfim, são muitas as caracterís-
ticas que o OpenVPN tem, além de ser software livre. Vejamos algumas.
Com o OpenVPN, você pode:
• construir um túnel em qualquer subrede ou adaptador ethernet virtual em cima de uma única
porta UDP ou TCP;
• usar toda a encriptação, autenticação e características de certificação da biblioteca OpenSSL
para proteger o tráfico da sua internet privada enquanto ele transita pela internet;
• usar qualquer cipher, chave, ou compilador HMAC suportado pela biblioteca OpenSSL;
• escolher entre chave-estática baseada em encriptação convencional ou chave-pública ba-
seada em certificação;
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• usar chaves estáticas pré-compartilhadas ou baseadas em troca dinâmica de chaves TLS;
• construir um túnel em rede na qual o ponto final seja dinâmico como DHCP ou clientes
discados,
• criar pontes de ethernet seguras usando virtual tap devices, e
• controlar o OpenVPN usando uma GUI no Windows ou Mac OS X.
3.4 OpenVPN x Outros pacotes VPN
Qual a diferença entre o OpenVPN e outros pacotes VPN?
• A principal força do OpenVPN inclui a portabilidade através das muitas plataformas do co-
nhecido universo computacional, excelente estabilidade, suporta centenas ou milhares de
clientes, instalação relativamente fácil e suporte a IP dinâmico e NAT.
• OpenVPN oferece uma interface de administração que pode ser usada para controlar remo-
tamente ou administrar centralmente um processo OpenVPN. A interface de administração
pode ser usada, também, para desenvolver uma GUI ou uma aplicação na web para o
OpenVPN.
• No Windows, o OpenVPN pode ler certificados e chaves privadas de pequens cartões que
suportem o Windows Crypto API.
• OpenVPN tem sido construído com um forte design modular. Toda a encriptação é provida
pela biblioteca OpenSSL, e todas as funcionalidades de tunelamento de IP são providas
pelo driver de rede virtual TUN/TAP.
• Enquanto o OpenVPN provê muitas opções para controlar parâmetros de segurança de um
túnel VPN, ele também provê opções de proteção à segurança do próprio servidor, como
–chroot para restringir uma parte do sistema de arquivo que o daemon do OpenVPN tem
acesso, –user e –group para minimizar privilégios do daemon depois da inicialização, e –
mlock para ter certeza que o material chave e dados do túnel nunca são gravados no disco
onde, depois, esses dados poderiam ser recuperados.
Mais informações podem ser obtidas em inglês na página oficial do OpenVPN.
http://openvpn.net
17
Capítulo 4
Instalação
4.1 Download do OpenVPN
O download do OpenVPN pode ser feito pelo site
http://openvpn.net/download.html
Este é o site oficial do OpenVPN e você pode baixar a versão que quiser.
4.2 Instalação no Debian
Instalação do OpenVPN no debian
1. Abra o terminal
2. Entre como root ou superusuário
3. Digite #apt-get update
4. Digite #apt-get install openvpn
5. O apt vai baixar o pacote do openvpn e instalá-lo em seguida.
A versão que usaremos neste curso é a 2.0.6. Esse pacote está na versão testing do debian.
4.3 Pacotes RPM
Primeiramente crie o arquivo RPM. Isso exige que as bibliotecas OpenSSL, pthread, e LZO
estejam presentes. Normalmente apenas a biblioteca LZO não está presente nas distruibuições
de linux atuais.
rpmbuild -tb openvpn-2.0.6.tar.gz
O processo de criação do arquivo RPM, irá gerar muitas linhas de saida. Se o processo for
bem sucedido, deverá existir uma linha próxima ao final da saida, iniciando com o nome do ar-
quivo RPM criado. Agora você pode instalar o arquivo RPM binario com o comando:
18
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
rpm -Uvh binary-RPM-file
4.4 Instalação do Source
Instalação do tarball
Descompacte a distribuição:
tar -zxvf openvpn-2.0.6.tar.gz
Compile o OpenVPN:
cd openvpn-2.0.6
./configure
make
make install
Se você não deseja as funcionalidades da biblioteca LZO, adicione o parametro - -disable-lzo
ao comando ./configure. Outras opções podem ser ativadas, como o suporte a pthread (./confi-
gure - -enable-pthread) para diminuir a latencia usando trocas de chaves SSL/TLS dinamicas. O
comando
./configure - -help
irá exibir todas as opções de configuração.
19
Capítulo 5
Configuração
5.1 Configurando o driver TUN/TAP
Configurações a serem feitas uma unica vez.
Se você está usando o kernel 2.4.7 ou superior, as chances são muito boas que seu kernel já
tenha o driver TUN/TAP. Você pode confirmar isso com o comando
locate if_tun.h
que deve reportar um arquivo como /usr/include/linux/if_tun.h.
Para o kernel 2.4.7 ou superior, se você o instalou pelo tarball, entre com o seguinte comando
para configurar o device TUN/TAP. (você pode omitir isso se você fez a instalação via RPM. Ele já
o fez automaticamente para você.):
mknod /dev/net/tun c 10 200
Se você está usando o kernel 2.2, você deve obter a Versão 1.1 do modulo TUN/TAP para o
kernel e seguir as instruções da instalação.
Configurações a serem feitas a cada reboot
No linux, antes de usar o OpenVPN ou qualquer outro programa que use o driver TUN/TAP,
você deve carregar o driver TUN/TAP
modprobe tun
e ativar o roteamento de pacotes IP:
echo 1 > /proc/sys/net/ipv4/ip_forward
5.2 Configurando certificados (CA) e chaves
OpenSSL
O OpenSSL é primeiramente uma biblioteca de funções criptográficas que proporciona uma
extensiva API (Application Programming Interface - Aplicação de interface de programação) para
programadores. No entanto, ela também inclui uma ferramenta shell que expõe essa API para
20
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
usuários e scripts. Inicie o shell escrevendo openssl na linha de comando (em um terminal). Daí,
você pode escrever comandos no prompt OpenSSL>.
[user@computador user]$ openssl
OpenSSL> version
OpenSSL 0.9.8a 11 Oct 2005
OpenSSL>
Você pode executar comando do OpenSSL em batch mode (conjunto de programas poces-
sados consecutivamente pelo sistema operacional de um microcomputador). Em batch mode,
cada comando do OpenSSL é executado separadamente. Shell scripts usualmente usam esta
característica; nós faremos o mesmo neste curso:
[user@computador user]$ openssl version
OpenSSL 0.9.8a 11 Oct 2005
[user@computador user]$
Dos muitos comandos que podem ser executados no shell do OpenSSL, este curso só vai co-
brir 5 (cinco):
• ca: administração de Autoridades Certificadoras
• req: administração de solicitação de Certificado
• verify: verificação de Certificado
• s_server: Modo de teste seguro de servidor
• s_client: Modo de teste seguro de cliente
Arquivo de configuração do OpenSSL
Quando é instalado a Autoridade Certificadora (OpenSSL), nós precisamos determinar o ar-
quivo de configuração mestre. Este arquivo contém parâmetros padrões para todos os comandos
do OpenSSL. O nome deste arquivo é openssl.cnf. Para encontrar a localização deste arquivo,
use o comando version com a opção -d:
[user@computador user]$ openssl version -d
OPENSSLDIR: "/usr/lib/ssl"
[user@computador user]$
5.3 Configuração do OpenSSL
Uma vez que você sabe onde procurar, edite este arquivo com um editor de texto. Aqui está o
arquivo de configuração que usaremos:
# openssl.cnf
#
# OpenSSL example configuration file.
#
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# This configuration file has been derived from the original
# example file included with the OpenSSL distribution. It
# has been edited mostly to eliminate extensions in order to
# simplify it for the purpose of an online tutorial. It has
# also been reformatted to limit the maximum line length to
# 60 characters for online publication.
###########################################################
# This section will configure the ca (Certificate Authority)
# command. We will use the ca command to sign user
# certificates and periodically generate CRLs.
###########################################################
[ca]
default_ca = CA_default # The default ca section
[CA_default]
dir = /root/CA-DB # Top
crl_dir = $dir/crl # The crl location
database = $dir/index.txt # Database index file
new_certs_dir = $dir/newcerts # Location for new certs
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The next serial number
crl = $dir/crl.pem # The current CRL
# All DNs need to be unique. This is the default behavior
# but due to an OpenSSL library bug in the 0.9.7d release,
# if we don’t supply this redundant definition here we will
# see a cryptic message when signing certificates.
unique_subject = yes
# The CA private key
private_key = $dir/private/cakey.pem
# Private random number file
RANDFILE = $dir/private/.rand
# Issued certificates will be valid for 1 year
default_days = 365
default_crl_days= 30
# Hashing function
default_md = md5
# This assignment causes the extensions defined in the
# ’user_extensions’ section to be included in any
# certificates that are signed using the ca command.
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
x509_extensions = user_extensions
# This sections describes the policy that will be enforced
# on a request to be signed, the subject organization name
# must match that in the CA certificate. The request may
# contain an optional organizational unit name. The common
# name is assigned the policy format ’supplied’ which means
# it must be present in the certificate request.
policy = policy_any
[policy_any]
organizationName = match
organizationalUnitName = optional
commonName = supplied
###########################################################
# This section configures the req (certificate request)
# command.
###########################################################
[req]
# The default key length and the filename that will contain
# a private key. The public key will be contained in the
# certificate request.
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
# The makeup of our subject name
[req_distinguished_name]
organizationName = Organization Name (eg, company)
organizationName_default = Inyo Technical Services
organizationalUnitName = Organizational Unit (eg, west)
commonName = Common Name (eg, YOUR name)
commonName_max = 64
# This assignment mimics that in the ca section but causes
# the following extensions to be included in a certificate
# request. In our case these extensions will only be
# included when we self-sign a certificate using ’req
# -new -x509’.
x509_extensions = CA_extensions
23
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
###########################################################
# Extensions that will be added to certificates that are
# issued. The ’user_extensions’ sections contains
# definitions that will be included in certificates that are
# signed by this CA. The CA_extensions section contains
# extensions that will be included when we create a
# self-signed certificate using the req command.
###########################################################
[user_extensions]
# CA:FALSE will not permit this certificate to sign other
# certificates.
basicConstraints = CA:FALSE
[CA_extensions]
# CA:TRUE will allow this certificate to sign others.
basicConstraints = CA:TRUE
#Fim de arquivo
Você precisa fazer apenas uma modificação:
• Na seção [CA_default] modifique o parâmetro "dir"para um diretório que você tenha poder
de escrita.
• default_md = md5
Algumas dicas sobre o arquivo de configuração serão dadas ao final da lição.
5.4 Gerando certificados e chaves
Gerando os certificados e chaves
Com o arquivo de configuração arrumado, agora nós podemos fazer a estrutura do diretório
para guardar nosso CA. Nós escolhemos o diretório que foi configurado acima ([CA_default]/"dir")
criamos nossos diretórios e inicializamos os arquivos serial e crlnumber.
[user@computadoruser]$ mkdir CA-DB
[user@computadoruser]$ cd CA-DB
[user@computadorCA − DB]$ mkdir crl
[user@computadorCA − DB]$ mkdir newcerts
[user@computadorCA − DB]$ mkdir private
[user@computadorCA − DB]$ mkdir CA-DB
[user@computaodrCA − DB]$ echo "01» serial
[user@computadorCA − DB]$ echo "01» crlnumber
[user@computadorCA − DB]$ touch index.txt
[user@computadorCA − DB]$
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Note que nós inicializamos os arquivos serial e crlnumber com o primeiro serial number. Quando
autenticamos certificados, o número guardado nesses arquivos vão incrementando automatica-
mente sendo que cada certificado vai receber um serial number único. O arquivo index.txt vai
gravar todos os certificados autenticados.
Com a estrutura do diretório no lugar, nós podemos criar nosso root certificate com nossa
própria assinatura. Este certificado vai se sentar no topo da nossa hierarquia de confiança. Nós
vamos usá-lo para assinar todo o resto.
[user@computadorCA − DB]$ openssl req -new -x509 -keyout
> private/cakey.pem -out cacert.pem
Generating a 1024 bit RSA private key
......................................................
writing new private key to ’private/cakey.pem’
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
- - - - -
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]:
State or Province Name (full name) [Some − State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [InternetWidgitsPtyLtd]:
Organizational Unit Name(eg, section) []:
Common Name (eg, YOUR name) []:Root CA
Email Address []:
[user@computadorCA − DB]$
Para esclarescer alguma pontecial confusão, a opção -x509 vai pedir ao comando req para gerar
um certificado de assinatura própria em vez de um certificado de pedido. Nós só vamos usar esta
opção com o comando req uma vez criado nosso root certificate. Certificados dos usuários
Agora, nós vamos criar um certificado de pedido para o servidor OpenVPN instalado na nossa
network. Note que usamos o argumento -nodes. Ele previne que a chave privada gerada com o
pedido seja encriptada e protegida por senha. Nós vamos precisar guardar a chave com cuidado
por causa disto. Nós não vamos proteger essa chave com senha porque depois nós vamos iniciar
o servidor OpenVPN automaticamente no boot quando não há interação com usuário para prover
a senha.
[user@computadorCA − DB]$ openssl req -new -nodes -keyout
> vpnkey.pem -out vpncert-req.pem
Generating a 1024 bit RSA private key
........................................................
writing new private key to ’vpnkey.pem’
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
- - - - -
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]:
State or Province Name (full name) [Some − State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [InternetWidgitsPtyLtd]:
Organizational Unit Name(eg, section) []:
Common Name (eg, YOUR name) []:vpn.curso.com
Email Address []:
Please enter the following ’extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []
[user@computadorCA − DB]$
Agora nós assinamos digitalmente o certificado do servidor usando o root certificate que nós
criamos inicialmente. O OpenSSL vai restaurar a localização do root certificate do arquivo de
configuração, que é o porque de não aparecer como argumento na linha de comando. Este co-
mando vai atualizar os arquivos serial e index.txt quando for completado.
[user@computadoruser]$ openssl ca -out vpncert.pem
> -in vpncert-req.pem
Using configuration from /home/admin/install/openssl.cnf
Enter pass phrase for /home/admin/CA-DB/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: May 16 20:46:43 2006 GMT
Not After : May 16 20:46:43 2007 GMT
Subject:
countryName = AU
stateOrProvinceName = Some-State
organizationName = Internet Widgits Pty Ltd
commonName = vpn.curso.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
01:C9:91:6B:99:53:E6:6E:D7:56:5D:26:95:22:32:05:E3:7A:BE:9C
X509v3 Authority Key Identifier:
keyid:87:AB:B8:52:AF:74:EB:69:55:A1:C2:17:7E:A7:64:11:77:25:88:E8
Certificate is to be certified until May 16 20:46:43 2007 GMT (365 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
[user@computadorCA − DB]$
Depois de criado o certificado do servidor, nós podemos criar certificados para todos os clientes
para quem queremos dar acesso à VPN. O processo é o mesmo, exceto que nós não especifi-
camos a opção -nodes com o comando req. Isso vai encriptar a chave privada e o OpenSSL vai
pedir uma senha quando semeado o código.
5.5 Framework de teste do OpenSSL
Agora, depois de termos criado os certificados de usuários, nós podemos comprovar que
nosso procedimento está todo correto em detrimento de dois comandos de teste fornecido pelo
pacote OpenSSL. Os programas s_server (secure server) e s_client (secure client) podem exer-
citar praticamente toda a biblioteca e suas operações são claras.
Inicie um s_server do OpenSSL em um terminal. Inicie um s_client do OpenSSL em outro. O
cliente vai contactar o servidor usando o protocolo SSL/TLS no localhost usando a porta 4433.
Você será capaz de digitar mensagens dentro do console do cliente e vê-las aparecer do console
do servidor. Vai ser óbvio se seus certificados não estiverem corretos ou têm algum problema
com sua instalação da biblioteca OpenSSL.
Aqui nós iniciamos o s_server do OpenSSL na linha de comando. Como argumentos, nós
incluimos o certificado do servidor e a chave privada do servidor. O argumento -verify 1 faz o
servidor perguntar por qualquer cliente conectando a mandar um certificado para autenticação.
[user@computadorCA − DB]$ openssl s_server -cert vpncert.pem
> -key vpnkey.pem -verify 1
verify depth is 1
Using default temp DH parameters
Using default temp ECDH parameters
ACCEPT
Agora, em outro terminal, nós iniciamos o s_client do OpenSSL usando o argumento -cert para
fornecer um certificador para o servidor para autenticação. O argumento -key usa a chave privada
para encriptar as mensagens e o argumento -CAfile aponta para o root certificate.
[user@computadorCA − DB] $ cp cacert.pem CA-DB/
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
[user@computadorCA − DB]$ openssl s_client -CAfile
> CA-DB/cacert.pem -cert client1cert.pem -key client1key.pem
Enter PEM pass phrase:
CONNECTED(00000003)
depth=1 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=Root CA
verify return:1
depth=0 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=vpn.curso.com
verify return:1
- - -
Certificate chain
0 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=vpn.curso.com
i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=Root CA
- - -
Server certificate
- - - - -BEGIN CERTIFICATE- - - - -
MIICpTCCAg6gAwIBAgIBATANBgkqhkiG9w0BAQQFADBXMQswCQYDVQQGEwJBVTET
MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ
dHkgTHRkMRAwDgYDVQQDEwdSb290IENBMB4XDTA2MDUxNjIwNDY0M1oXDTA3MDUx
NjIwNDY0M1owXTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAf
BgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEWMBQGA1UEAxMNdnBuLmN1
cnNvLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7BB3eDULA2HYMBwo
bXis0csx/TNHhWz5JUQMD89qYdudp8QLTc3eOIef50M2nJex6MOdetjdxv1EzPYH
Hq8I8BoJ8w3HTbdIHw2O+Mk00HGihyiSNdMLxUf0nUoWL2Abqpfk69WA4L7k/qgY
mM9mtiu5Y8n9jceQCLhQ7RQQr0MCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB
hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE
FAHJkWuZU+Zu11ZdJpUiMgXjer6cMB8GA1UdIwQYMBaAFIeruFKvdOtpVaHCF36n
ZBF3JYjoMA0GCSqGSIb3DQEBBAUAA4GBANEEnzesDqdIeiWlNruQmeRXV93Elr22
EYaKOhJo9pNs4YaN2HvbQclQKLKD+GLYsc3uQ8x2MbZcBoD6OxHNtkdYh72qVOzc
sngJ6PNxTMnVCXmqEy3X4mVbKkAxS3iJhlge3TVVj4eZ+GKYSk/4UhA6/GiqRWRW
aq0Qv6DKiCdC
- - - - -END CERTIFICATE- - - - -
subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=vpn.curso.com
issuer=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=Root CA
- - -
No client certificate CA names sent
- - -
SSL handshake has read 1129 bytes and written 1856 bytes
- - -
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: FBBBE1F495D03337D17A91DB2F69814F8D1638976EEB633CD1B688164144DFC1
Session-ID-ctx:
Master-Key: 6109E6EF23FFE25844779B96B6BF2D3C553A3D4EBFA77A381B50B07F0C8D3F30
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4C99AC7AF68E5373820C460C85823A46
Key-Arg : None
Start Time: 1147813810
Timeout : 300 (sec)
Verify return code: 0 (ok)
- - -
Agora você pode escrever mensagens! Tudo o que você escrever neste terminal vai aparecer
no outro e vice-versa. Para sair desta sessão, escreva Q e dê ENTER.
Agora nós sabemos que nossos certificados podem encriptar mensagens passadas entre as
duas aplicações OpenSSL. No entanto, nós não sabemos se podemos usar nossos certificados
com qualquer aplicação de certificado seguro X.509. Adicionando a opção -WWW ao comando
s_server irá efetivamente criar um web server seguro que pode servir qualquer arquivo local para
um navegador cliente conectando usando SSL/TLS. Vamos testar isso a seguir.
No mesmo diretório, crie um pequeno arquivo HTML contendo o seguinte texto:
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>
Dê o nome ao arquivo como hello.html e inicie um servidor no mesmo diretório do arquivo usando
a opção -WWW.
[user@computadorCA−DB]$ openssl s_server -cert vpncert.pem -key vpnkey.pem -WWW
Using default temp DH parameters
Using default temp ECDH parameters
ACCEPT
Inicie qualquer browser moderno como o Mozilla Firefox. Entre com a URL na barra de ende-
reço. Note que o protocolo é https e não http:
https://localhost:4433/hello.html
O navegador vai alertá-lo do fato de não reconhecer o assunto no certificado oferecido pelo ser-
vidor. A maioria dos browsers vai deixar você aceitar a autenticidade do certificado do servidor
temporariamente para a sessão. Depois de clicar as mensagens de aviso, você deve ver uma
página aparecer no navegador.
O s_server é uma ferramenta muito útil. Estes testes do OpenSSL permitem ao administrador
isolar problemas mais facilmente para uma aplicação em network ou seu suporte a uma infra-
estrutura de certificado.
Um último passo é criar os parâmetros Diffie Hellman com o comando
[user@computadorCA − DB]$ openssl dhparam -out dh1024.pem 1024
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
...........+.........................+.............................................
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
....................................+.........++*++*++*
[user@computadorCA − DB]$
O OpenVPN tem 2 tipos de operação segura, uma baseada em SSL/TLS, usando certificados
e chaves RSA, e outro usando uma chave estática pré-compartilhada. Enquanto que as cha-
ves SSL/TLS + RSA são seguramente a opção mais segura, as chaves estaticas tem a vanta-
gem de serem muito mais simples. Se você deseja usar chaves RSA, leia a seguir. Se você
deseja usar chaves estáticas pré-compartilhadas, entre nesta página Gerando a chave estática
Pré-Compartilhada.
Os certificados RSA são chaves publicas que contém vários campos de segurança, como os
campos Common Name ou Email Address. O OpenVPN tem a habilidade de fazer alguns testes
para melhorar a segurança. Para mais informações, veja a opção –tls-verify na man page do
Openvpn. (em inglês)
Os arquivos de chaves privadas devem sempre serem mantidas seguras, já os arquivos de
chaves privadas, podem ser livremente publicadas e distribuidas.
5.6 Considerações
Modificações no arquivo de configuração do openssl:
• Considere aumentar o valor do parametro default_days ou sua VPN irá parar de funcionar
misteriosamente após exatamente um ano.
• Aponte as opções certificate e private_key para o seu certificado mestre da sua autoridade
certificadora e as chaves privadas que iremos gerar. Nos exemplos abaixo, nós iremos
assumir que certificado mestre da sua autoridade certificadora se chama cacert.pem e que
a chave privada se chama cakey.pem.
• Crie os arquivos index.txt e serial. Crie o arquivo index.txt em branco e serial para conter
um numero inicial serial, como 01.
• Se você for paranóico sobre o tamanho de suas chaves, aumente a opção default_bits para
2048. O OpenVPN não irá ter nenhum problema em trabalhar com uma chave RSA de 2048
bits se você compilou o OpenVPN com suporte a biblioteca pthread, para ativar o suporte
do processamento das chaves RSA em background. Você ainda pode usar chaves maiores
mesmo sem o suporte a biblioteca pthread, mas você irá ver alguma degradação de per-
formace no tunel durante as negociações das chaves SSL/TLS. Para um bom artigo sobre
escolher um tamanho de chave RSA, veja a Edição de Abril de 2002 da Bruce Schneier’s
Crypto-Gram Newsletter.
Crie os parametros Diffie Hellman na máquina do escritório com o comando.
openssl dhparam -out dh1024.pem 1024
Aumente o numero de bits de 1024 para 2048 se você também o aumentou no arquivo openssl.cnf.
Para os paranoicos, considere omitir a opção -nodes nos comandos openssl acima. Isso irá
fazer com que cada chave privada seja criptografada com uma senha, fazendo com que suas
chaves fiquem seguras se alguem acessar seu servidor e roube suas chaves. O problema dessa
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
opção, é que você irá ter que digitar uma senha toda vez que você rodar o OpenVPN. Para mais
informações, veja a opção –askpass na man page do openvpn. (em inglês)
Se você achar o gerenciamento manual de chaves RSA, note que o OpenVPN irá traba-
lhar com qualquer certificado X509 ou serviço incluindo as Autoridades Certificadoras comerciais
como Thawte ou Verisign. Veja também o projeto OpenCA como um exemplo do que está sendo
feito no mundo do Código Aberto para mudar essa realidade.
O OpenVPN também tem um pequeno conjunto de scripts que podem ser usadados para
simplificar O gerenciamento de chaves e certificados RSA (em inglês). Nota importante sobre o
uso de Autoridades Certificadoras comerciais (CAs) com o OpenVPN
Você deve ter percebido que o modelo de seguraça do OpenVPN em modo SSL/TLS é orien-
tado para os usuarios que irão gerar seu proprio certificado raiz e virar seu próprio CA. No modo
SSL/TLS, o OpenVPN autentica a outra ponta checando se o certificado fornecido pela outra
ponta é assinado pelo certificado da Autoridade Certificadora, que é expecificado com a opção
–ca. Como no modelo de seguraça SSL da web, a segurança do OpenVPN em modo SSL/TLS
está baseada na dificuldade de se forjar um certificado raiz.
Esse tipo de autenticação funciona muito bem se você gerou seu próprio certificado raiz, mas
é um problema se você usa o certificado raiz de uma Autoridade Certificadora comercial como
a Thawte. Se você por exemplo, colocou o certificado raiz da Thawte na opção –ca, qualquer
certificado assinado pela Thawte será capaz de se autenticar com a sua ponta OpenVPN – uma
coisa que você certamente não quer.
Felizmente existe uma solução para este problema na opção –tls-verify. Essa opção irá per-
mitir a execução de um comando para checar o conteudo do certificado, para selecionar qual
certificado é permitido ou não. Veja o script verify-cn do diretorio sample-scripts para um exemplo
de como fazer isso. Também consulte a man page na opção –tls-verify.
5.7 Criando arquivos de configuração para servidores e clientes
Adquirindo os arquivos de configuração
A melhor maneira de adquirir os arquivos é no site do OpenVPN em sample configuration files
como um ponto de começo para sua própria configuração. Esses arquivos também podem ser
econtrados em
• diretório sample-config-files da districuição source do OpenVPN
• diretório sample-config-files em /usr/share/doc/openvpn/examples/ ou /usr/share/doc/openvpn-
2.0 se você instalou de um pacote RPM
• Menu Iniciar -> Todos os programas -> OpenVPN -> OpenVPN Sample Configuration Files
no Windows
Note que no Linux, BSD, ou unix-like OSes, os arquivos de configuração são nomeados como
server.conf e client.conf. No Windows eles são nomeados como server.ovpn e client.ovpn. Edi-
tando o arquivo de configuração do servidor
O arquivo de configuração do servidor é o ponto inicial para uma configuração de servidor do
OpenVPN. Ele vai criar uma VPN usando uma interface de network(para roteamento) TUN virtual,
vai escutar conexões de clientes na porta UDP 1194 (número de porta oficial do OpenVPN), e
distribuir endereços virtuais para clientes conectados da subrede 10.8.0.0/24.
Antes de usar esse arquivo de configuração, primeiro você deve editar os parâmetros ca, cert,
key, e dh para apontar para os arquivos que você gerou na seção PKI acima.
31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Neste ponto, o arquivo de configuração do servidor é usável, no entanto, você pode customizá-
lo ainda mais:
• Se você está usando Ethernet bridging, você deve usar server-bridge, dev tapserver e dev
tun
• Se você quiser que o seu OpenVPN escute na porta TCP em vez da porta UDP, use proto
tcp em vez de proto udp (Se você quiser que o OpenVPN escute nas duas portas, TCP e
UDP, você deve rodar duas instâncias separadas do OpenVPN).
• Se você quiser usar um esquema de IP virtual diferente que o 10.8.0.0/24, você deve mo-
dificar a diretiva server. Lembre-se que esse esquema de IP virtual deve ser um esquema
privado que não é usado na sua network.
• Descomente a diretiva client-to-client se você quiser que clientes conectados possam al-
cançar outros através da sua VPN. Por padrão, os clientes só serão capazes de alcançar o
servidor.
• Se você está usando Linux, BSD, ou um OS Unix-like, você pode melhorar a segurança
descomentando as diretivas user nobody e group nobody.
Se você quer rodar múltiplas instâncias do OpenVPN na mesma máquina, cada uma usando
um arquivo de configuração diferente, só é possível se você:
• Usar um número de porta diferente para cada instância (os protocolos UDP and TCP usam
diferentes espaços de portas. Então, você pode rodar um daemon escutando a UDP-1194
e outro na TCP-1194).
• Se você estiver usando Windows, cada configuração do OpenVPN precisa ter sua própria
TAP-Win32 adapter. Você pode adicionar adaptadores indo em Menu Iniciar -> Todos os
programas -> OpenVPN -> Add a new TAP-Win32 virtual ethernet adapter.
• Se você está rodando múltiplas instâncias do OpenVPN no mesmo diretório, tenha certeza
de editar as diretivas que criam output files para que as múltiplas instâncias não sobres-
crevam cada output file da outra. Estas diretivas incluem log, log-append, status e ifconfig-
pool-persist.
Editando o arquivo de configuração do cliente
O arquivo de configuração do cliente (client.conf no Linux/BSD/Unix ou client.ovpn no Win-
dows) espelha as diretivas padrões setadas no arquivo de configuração do servidor.
• Como no arquivo de configuração do servidor, primeiro edite os parâmetros ca, cert, e key
para apontar para os arquivos que você gerou na seção PKI acima. Note que cada cliente
deve ter seu próprio par certificado/chave. Somente o arquivo ca é universal através do
servidor OpenVPN e todos os clientes.
• Depois edite a diretiva remote para apontar para o hostname/endereço IP e a porta do
servidor OpenVPN (Se o seu servidor OpenVPN estiver rodando em uma máquina single-
NIC atrás de um firewall/NAT-gateway, use o endereço de IP público do gateway, e a porta
que você configurou o gateway para direcionar para o servidor OpenVPN).
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Finalmente, tenha certeza de que o arquivo de configuração do cliente está consistente
com as diretivas usadas na configuração do servidor. Os pontos mais a checar se estão
consistentes são as diretivas dev (tun ou tap) e proto (udp ou tcp). Também tenha certeza
que comp-lzo e fragment, se usados, estão presentes em ambos, cliente e servidor, arquivos
de configuração.
33
Capítulo 6
Teste
6.1 Servidor x Cliente
Configuração de servidor e cliente
Um arquivo de configuração diz ao OpenVPN como operar. Existem muitas variações possí-
veis. Aqui, nós vamos configurar os arquivos do servidor e cliente em separado. Nós queremos
que a VPN funcione em um modo de servidor com operação de instância única. Isto permite que
todas as conexões de clientes passem pela mesma porta do servidor, e isto deixa a configuração
mais simples.
O arquivo de configuração do servidor está aqui:
#################################################
# Sample OpenVPN 2.0 config file for #
# multi-client server. #
# #
# This file is for the server side #
# of a many-clients <-> one-server #
# OpenVPN configuration. #
# #
# OpenVPN also supports #
# single-machine <-> single-machine #
# configurations (See the Examples page #
# on the web site for more info). #
# #
# This config should work on Windows #
# or Linux/BSD systems. Remember on #
# Windows to quote pathnames and use #
# double backslashes, e.g.: #
# "C:Program FilesOpenVPNconfigfoo.key" #
# #
# Comments are preceded with ’#’ or ’;’ #
#################################################
# Which local IP address should OpenVPN
34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# listen on? (optional)
;local a.b.c.d
# Which TCP/UDP port should OpenVPN listen on?
# If you want to run multiple OpenVPN instances
# on the same machine, use a different port
# number for each one. You will need to
# open up this port on your firewall.
port 1194
# TCP or UDP server?
;proto tcp
proto udp
# "dev tun"will create a routed IP tunnel,
# "dev tap"will create an ethernet tunnel.
# Use "dev tap0"if you are ethernet bridging
# and have precreated a tap0 virtual interface
# and bridged it with your ethernet interface.
# If you want to control access policies
# over the VPN, you must create firewall
# rules for the the TUN/TAP interface.
# On non-Windows systems, you can give
# an explicit unit number, such as tun0.
# On Windows, use "dev-node"for this.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun
# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel if you
# have more than one. On XP SP2 or higher,
# you may need to selectively disable the
# Windows firewall for the TAP adapter.
# Non-Windows systems usually don’t need this.
;dev-node MyTap
# Specify tls-server for certificate exchange
tls-server
# SSL/TLS root certificate (ca), certificate
# (cert), and private key (key). Each client
# and the server must have their own cert and
# key file. The server and all clients will
# use the same ca file.
#
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# See the "easy-rsa"directory for a series
# of scripts for generating RSA certificates
# and private keys. Remember to use
# a unique Common Name for the server
# and each of the client certificates.
#
# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see "pkcs12"directive in man page).
ca CA-DB/cacert.pem
cert vpncert.pem
key vpnkey.pem # This file should be kept secret
# Check for revoked client certificates.
crl-verify CA-DB/crl/crl.pem# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem
# Configure server mode and supply a VPN subnet
# for OpenVPN to draw client addresses from.
# The server will take 10.8.0.1 for itself,
# the rest will be made available to clients.
# Each client will be able to reach the server
# on 10.8.0.1. Comment this line out if you are
# ethernet bridging. See the man page for more info.
server 10.8.0.0 255.255.255.0
# Maintain a record of client <-> virtual IP address
# associations in this file. If OpenVPN goes down or
# is restarted, reconnecting clients can be assigned
# the same virtual IP address from the pool that was
# previously assigned.
ifconfig-pool-persist ipp.txt
# Configure server mode for ethernet bridging.
# You must first use your OS’s bridging capability
# to bridge the TAP interface with the ethernet
# NIC interface. Then you must manually set the
# IP/netmask on the bridge interface, here we
# assume 10.8.0.4/255.255.255.0. Finally we
# must set aside an IP range in this subnet
# (start=10.8.0.50 end=10.8.0.100) to allocate
# to connecting clients. Leave this line commented
# out unless you are ethernet bridging.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# Push routes to the client to allow it
# to reach other private subnets behind
# the server. Remember that these
# private subnets will also need
# to know to route the OpenVPN client
# address pool (10.8.0.0/255.255.255.0)
# back to the OpenVPN server.
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
# To assign specific IP addresses to specific
# clients or if a connecting client has a private
# subnet behind it that should also have VPN access,
# use the subdirectory "ccd"for client-specific
# configuration files (see man page for more info).
# EXAMPLE: Suppose the client
# having the certificate common name "Thelonious"
# also has a small subnet behind his connecting
# machine, such as 192.168.40.128/255.255.255.248.
# First, uncomment out these lines:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
# Then create a file ccd/Thelonious with this line:
# iroute 192.168.40.128 255.255.255.248
# This will allow Thelonious’ private subnet to
# access the VPN. This example will only work
# if you are routing, not bridging, i.e. you are
# using "dev tun"and "server"directives.
# EXAMPLE: Suppose you want to give
# Thelonious a fixed VPN IP address of 10.9.0.1.
# First uncomment out these lines:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# Then add this line to ccd/Thelonious:
# ifconfig-push 10.9.0.1 10.9.0.2
# Suppose that you want to enable different
# firewall access policies for different groups
# of clients. There are two methods:
# (1) Run multiple OpenVPN daemons, one for each
# group, and firewall the TUN/TAP interface
# for each group/daemon appropriately.
# (2) (Advanced) Create a script to dynamically
# modify the firewall in response to access
# from different clients. See man
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# page for more info on learn-address script.
;learn-address ./script
# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# the TUN/TAP interface to the internet in
# order for this to work properly).
# CAVEAT: May break client’s network config if
# client’s local DHCP server packets get routed
# through the tunnel. Solution: make sure
# client’s local DHCP server is reachable via
# a more specific route than the default route
# of 0.0.0.0/0.0.0.0.
;push "redirect-gateway"
# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"
# Uncomment this directive to allow different
# clients to be able to "see"each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server’s TUN/TAP interface.
;client-to-client
# Uncomment this directive if multiple clients
# might connect with the same certificate/key
# files or common names. This is recommended
# only for testing purposes. For production use,
# each client should have its own certificate/key
# pair.
#
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE "COMMON NAME",
# UNCOMMENT THIS LINE OUT.
;duplicate-cn
# The keepalive directive causes ping-like
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# messages to be sent back and forth over
# the link so that each side knows when
# the other side has gone down.
# Ping every 10 seconds, assume that remote
# peer is down if no ping received during
# a 120 second time period.
keepalive 10 120
# For extra security beyond that provided
# by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
#
# Generate with:
# openvpn –genkey –secret ta.key
#
# The server and each client must have
# a copy of this key.
# The second parameter should be ’0’
# on the server and ’1’ on the clients.
;tls-auth ta.key 0 # This file is secret
# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
# Enable compression on the VPN link.
# If you enable it here, you must also
# enable it in the client config file.
comp-lzo
# The maximum number of concurrently connected
# clients we want to allow.
;max-clients 100
# It’s a good idea to reduce the OpenVPN
# daemon’s privileges after initialization.
#
# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nobody
# The persist options will try to avoid
# accessing certain resources on restart
# that may no longer be accessible because
# of the privilege downgrade.
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
persist-key
persist-tun
# Output a short status file showing
# current connections, truncated
# and rewritten every minute.
status openvpn-status.log
# By default, log messages will go to the syslog (or
# on Windows, if running as a service, they will go to
# the "Program FilesOpenVPNlog"directory).
# Use log or log-append to override this default.
# "log"will truncate the log file on OpenVPN startup,
# while "log-append"will append to it. Use one
# or the other (but not both).
;log openvpn.log
;log-append openvpn.log
# Set the appropriate level of log
# file verbosity.
#
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
verb 3
# Silence repeating messages. At most 20
# sequential messages of the same message
# category will be output to the log.
;mute 20
Note que nós usamos a opção dh para especificar o arquivo contendo os parâmetros Diffie-
Hellman que nós criamos antes. A opção dh só precisa aparecer no arquivo de configuração do
servidor e não no arquivo do cliente. Agora, nós listamos os arquivos contendo os certificados que
iremos usar, começando com o root. Finalmente, nós indicamos que queremos que o OpenVPN
cheque nossa lista de pedidos de certificado antes de autorizar a conexão a um cliente na nossa
rede privada especificando a opção crl-verify e dizendo a lozalização de uma CRL. Nós iremos
demonstrar a verificação CRL depois.
O arquivo de configuração do cliente é um pouco mais simples. O único item de configuração
que não vimos antes é o pull, que complemente o comandopush "route ..."que nós incluímos no
arquivo de configuração do servidor.
# openvpn-client.conf
#
# Set tunnel mode
dev tun
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# Hostname for the VPN server
remote [ip_do_servidor] 1194
# This end takes the client role for
# certificate exchange
tls-client
# Certificate Authority file
ca cacert.pem
# Our certificate/public key
cert client1cert.pem
# Our private key
key client1key.pem
# Get the rest of our configuration
# from the server.
pull
O próximo passo é instalar o OpenVPN no cliente. Neste passo, só direi que a instalação do
OpenVPN é idêntica à instalação no servidor. Depois de instalado, complete o processo distri-
buindo os seguintes arquivos para o cliente:
• A chave privada do cliente.
• O certificado do cliente.
• Uma cópia do root certificate (cacert.pem, no nosso exemplo).
• O arquivo de configuração do cliente.
Antes de iniciar o servidor, nós temos um último passo a realizar. Nós precisamos inicializar a
CRL. A CRL vai ter uma lista de certificados que o nosso CA revogou. Embora nós não tenhamos
revogado nenhum certificado ainda, nossa configuração ainda pede ao servidor OpenVPN para
checar a CRL usando a opção crl-verify na configuração do servidor. Se a nossa VPN não achar
uma CRL, ela vai terminar de forma prematura.
Por enquanto, nós vamos iniciar uma CRL vazia. Depois, nós vamos revogar um certificado
de usuário e atualizar a CRL. Para iniciar a CRL simplesmente peça ao CA para gerar uma. (A
mensagem oculta começando com DEBUG[load_index] vem de um bug inofensivo nesse release
particular do OpenSSL; ignore-o.)
[admin@tamarackadmin]$ openssl ca -gencrl -out
> CA-DB/crl/crl.pem
Using configuration from /home/admin/install/openssl.cnf
Enter pass phrase for /home/admin/CA-DB/private/cakey.pem:
DEBUG[load_index]: unique_subject = "yes"
[admin@tamarackadmin]$ cat CA-DB/crl/crl.pem
Agora nós estamos prontos para usar o comando a seguir para iniciar um servidor VPN na nossa
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
rede local. Depois que esse comando for executado, clientes poderão se conectar.
[root@tamarackadmin]# openvpn –config openvpn-server.conf
Depois que o servidor iniciar, tente conectá-lo de um cliente. A linha de comando no cliente é
bem similar, mas lembre-se de usar o nome apropriado para o arquivo de configuração.
Você deve imdediatamente ser capaz de comunicar através da VPN. Se ocorrer um problema,
é hora de descobrir defeitos. Neste caso, você será feliz porque testamos a infra-estrutura dos
certificados usando o s_server e s_client , assim, você pode isolar o que estiver errado. Verifi-
cando o acesso de cliente contra uma CRL
A tarefa final aqui é desligar de forma confiante o acesso à VPN de usuários quando nós não
queremos que eles conectem à nossa rede. Para fazer isso, nós vamos revogar certificados e atu-
alizar nossa CRL. Para descobrir qual certificado pertence a cada cliente, use o arquivo index.txt,
localizado no diretório árvore de certificado. Olhe no arquivo e procure o registro contendo o atri-
buto commonName assinado ao certificado a ser revogado (lembre-se que nós estabelecemos
uma política de assinar o ID único de cada usuário ao atributo commonName). Esse registro
também vai conter o serial number que o CA assinou para este certificado.
Tendo identificado o serial number, nós podemos localizar o certificado do cliente dentro de
newcerts no nosso diretório CA. Este diretório vai conter uma cópia de cada certificado emitido
pelo nosso CA. Os nomes dos arquivos contém os serial numbers assinados a estes certificados.
Neste exemplo, nós decidimos revogar o certificado do user3. Depois de ter olhado o index.txt,
nós achamos que o serial number assinado ao certificado com o atributo commonName que bate
com o user3 é 04. Nós agora sabemos que o certificado correto a revogar é newcerts/04.pem.
[admin@tamarackadmin]$ openssl ca -revoke
> CA-DB/newcerts/04.pem
Using configuration from /home/admin/install/openssl.cnf
Enter pass phrase for /home/admin/CA-DB/private/cakey.pem:
DEBUG[load_index]: unique_subject = "yes"
Revoking Certificate 04.
Data Base Updated
[admin@tamarackadmin]$
O comando revogou o certificado e atualizou o index.txt appropriadamente. Agora nós preci-
samos gerar uma nova CRL que vai ter este novo certificado revogado. Até nós fazermos isso, o
OpenVPN não vai saber que nós revogamos este certificado.
[admin@tamarackadmin]$ openssl ca -gencrl -out CA-DB/crl/crl.pem
Using configuration from /home/admin/install/openssl.cnf
Enter pass phrase for /home/admin/CA-DB/private/cakey.pem:
DEBUG[load_index]: unique_subject = "yes"
[admin@tamarackadmin]$
A partir de agora, o user3 não vai ter acesso à VPN, enquanto o OpenVPN checa a CRL. Lembre-
se, sempre que você for revogar um certificado, tenha certeza de gerar uma nova CRL.
O OpenSSL também inclui o comando verify, que aceita a opção -crl_check que vai permitir
que você tenha certeza que a sua lista de certificados revogados funciona. O comando verify
requer que o root certificate e a CRL estejam no mesmo arquivo. Antes de você fazer este co-
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
mando, crie um diretório CRL temporário concatenando com o certificado CA.
[admin@tamarackadmin]$ cat
> CA-DB/cacert.pem CA-DB/crl/crl.pem > tempcrl.pem
Use o comando verify com a opção -crl_check para esecificar a CRL a ser usada. Aqui está
como verificar a rejeição do certificado do user3.
[admin@tamarackadmin]$ openssl verify -CAfile tempcrl.pem
> -crl_check user3cert.pem
user3cert.pem: /O=Inyo Technical Services/CN=user3
error 23 at 0 depth lookup:certificate revoked
[admin@tamarackadmin]$
A fim de tentar isso com sua própria instalação, revogue o certificado que você criou para o
cliente da sua VPN e gere uma nova CRL. Você vai ver que não é possível conectar ao servidor
OpenVPN daquele cliente.
6.2 Testando o OpenVPN
6.2.1 Iniciando o VPN e testando-o para conectividade inicial
Iniciando o servidor
Primeiro, tenha certeza que o servidor OpenVPN estará acessível pela Internet. Isso significa:
• abrindo a porta UDP 1194 no firewall (ou qualquer porta TCP/UDP que você configurou),
ou
• setting up a port forward rule to forward UDP port 1194 from the firewall/gateway to the
machine running the OpenVPN server.
Depois, tenha certeza de que a interface TUN/TAP não está com o firewall sobre ela.
Para simplificar a resolução de problemas, é melhor iniciar o servidor OpenVPN na linha de
comando (ou clicar com o botão direito sobre o arquivo .ovpn no Windows), ao invés de iniciar
como um daemon ou serviço:
openvpn "arquivo de configuração do servidor"
Um levantamento de um servidor deveria se parecer com isto(esta saída pode variar entre as
plataformas):
Sun Feb 6 20:46:38 2005 OpenVPN 2.0_rc12 i686-suse-linux [SSL][LZO][EPOLL] built on
Feb 5 2005
Sun Feb 6 20:46:38 2005 Diffie-Hellman initialized with 1024 bit key
Sun Feb 6 20:46:38 2005 TLS-Auth MTU parms [L : 1542D : 138EF : 38EB : 0ET : 0EL : 0]
Sun Feb 6 20:46:38 2005 TUN/TAP device tun1 opened
Sun Feb 6 20:46:38 2005 /sbin/ifconfig tun1 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
Sun Feb 6 20:46:38 2005 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
Sun Feb 6 20:46:38 2005 Data Channel MTU parms [L : 1542D : 1450EF : 42EB : 23ET :
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
0EL : 0AF : 3/1]
Sun Feb 6 20:46:38 2005 UDPv4 link local (bound): [undef]:1194
Sun Feb 6 20:46:38 2005 UDPv4 link remote: [undef]
Sun Feb 6 20:46:38 2005 MULTI: multi_init called, r=256 v=256
Sun Feb 6 20:46:38 2005 IFCONFIG POOL: base=10.8.0.4 size=62
Sun Feb 6 20:46:38 2005 IFCONFIG POOL LIST
Sun Feb 6 20:46:38 2005 Initialization Sequence Completed
Iniciando um cliente
Assim como no servidor, é melhor iniciar o OpenVPN pela linha de comando(ou clicar com o
botão direito sobre o arquivo .ovpn no Windows), ao invés de iniciar como um daemon ou serviço:
openvpn "arquivo de configuração do cliente"
Agora, tente executar o comando ping pela VPN no cliente. Se você estiver usando roteamento
(dev tun no arquivo de configuração do servidor, por exemplo), tente:
ping 10.8.0.1
Se você estiver usando ponteamento (dev tap no arquivo de configuração do servidor, por exem-
plo), tentar executar o ping no endereço IP de uma máquina na subnet do servidor.
Se o ping obtiver sucesso, parabéns! Agora você tem uma VPN funcional.
44
Capítulo 7
Inicializando com o Sistema
7.1 Inicializando com o sistema
Configurando o OpenVPN para rodar automaticamente na inicialização do sistema
A falta de padrões nesta área significa que a maioria dos sistemas operacionais tem uma ma-
neira diferente de configurar daemons/services para auto iniciar no boot. A melhor maneira de ter
isso funcionalmente configurado por padrão é instalar o OpenVPN como um pacote, como RPM
no Linux ou usando o instalador do Windows. Linux
Se você instalar o OpenVPN via pacote RPM no Linux, o instalador vai configurar um initscript.
Quando executado, o initscript irá escanear por arquivos de configuração .conf em /etc/openvpn,
e se encontrado, vai iniciar um daemon separado para cada arquivo .conf do OpenVPN.
7.2 Inciando a VPN automaticamente no reboot
Primeiro crie um diretório para armazenar as chaves e arquivos de coniguração do OpenVPN,
como /etc/openvpn.
Decida se você vai usar o OpenVPN no modo TLS ou chave estática, e copie os arquivos
.conf, .up, .key, .pem, e .crt apropriados para o diretório /etc/openvpn.
Proteja seus arquivos .key:
chmod go-rwx /etc/openvpn/*.key
Se você está usando Linux com iptables, edite o arquivo de configuração do firewall, firewall.sh,
fazendo as alterações apropriadas para seu sistema e o copie para o diretório /etc/openvpn.
Crie um script de inicialização que se pareça com isso:
sample-config-files/openvpn-startup.sh
#!/bin/bash
# Um exemplo de script de inicialição
# do OpenVPN para Linux.
45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# Diretorio de configurações do OpenVPN
dir=/etc/openvpn
# Carrega o firewall
$dir/firewall.sh
# Carrega o modulo TUN/TAP
modprobe tun
# ativa o roteamento de pacotes
echo 1 > /proc/sys/net/ipv4/ip_forward
# Chama o openvpn para cada tunel VPN
# em modo daemon. Você também pode remover
# a opção --daemon"da linha de comando
# e adicionar a opção "daemon"ao arquivo
# de configuração.
#
# Cada tunel deve rodar em uma porta UDP
# separada. Use a opção "port"para controlar
# isso. Como todas as opções do OpenVPN, você
# pode especificar --port 8000"na linha de
# comando, ou "port 8000"no arquivo de configuração.
openvpn –cd $dir –daemon –config vpn1.conf
openvpn –cd $dir –daemon –config vpn2.conf
openvpn –cd $dir –daemon –config vpn2.conf
E crie um script de desligamento como esse:
sample-config-files/openvpn-shutdown.sh
#!/bin/bash
# para com todos os processos do OpenVPN
killall -TERM openvpn
Finalmente, adicione chamadas para openvpn-startup.sh e openvpn-shutdown.sh para os
scripts de inicio e desligamento de seu sistema, ou no diretório /etc/init.d. Gerenciando o ini-
cio e desligamento de varios túneis OpenVPN
Aqui está um examplo de um script do /etc/init.d que irá automaticamente iniciar um processo
do OpenVPN para cada arquivo .conf que for encontrado no diretório /etc/openvpn. Esse script
é instalado por padrão quando você instala o OpenVPN via um pacote RPM. (N.T: Devido a
problemas com quebra de linha, é recomendavel que você copie esse script da distribuição do
OpenVPN) sample-scripts/openvpn.init
#!/bin/sh
46
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
#
# openvpn Este shell script cuida do inicio e finalização
# do openvpn no RedHat ou em outro sistema baseado
# no chkconfig.
#
# chkconfig: 345 80 30
#
# description: OpenVPN é um programa robusto e flexivel para tunelamento que
# usa toda as funcionalidades de encriptação, autenticação e certificação
# que a biblioteca OpenSSL fornece, para tunelar seguramente redes IP atraves
# de uma simples porta UDP.
#
# Contribuido para o projeto OpenVPN por
# Douglas Keller <doug@voidstar.dyndns.org>
# 2002.05.15
# Para instalar:
# copie este arquivo para /etc/rc.d/init.d/openvpn
# shell> chkconfig –add openvpn
# shell> mkdir /etc/openvpn
# crie .conf ou .sh files em /etc/openvpn (veja abaixo)
# Para desinstalar:
# execute: chkconfig –del openvpn
# Notas do autor:
#
# Eu criei um init script em /etc/init.d e alterei o openvpn.spec para automaticamente
# registrar o script. Uma vez que o RPM está instalado você pode iniciar e parar
# o OpenVPN com "service openvpn start"e "service openvpn stop".
#
# Esse init script faz o seguinte:
#
# - Inicia um processo OpenVPN para cada arquivo .conf que ele encontra em /etc/openvpn
#
# - Se /etc/openvpn/xxx.sh existe para um arquivo xxx.conf então ele o executa
# antes de iniciar o OpenVPN (util para fazer openvpn –mktun...).
#
# - Alem de start/stop você também pode:
#
# service openvpn reload - SIGHUP
# service openvpn reopen - SIGUSR1
# service openvpn status - SIGUSR2
# Modificações 2003.05.02
# * Alterado ’==’ para ’=’ para compatibilidade com sh (Bishop Clark).
# * Se condrestart|reload|reopen|status, checa se já não está iniciado (James Yonan).
47
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
# * Adicionado lock, piddir, e work variaveis (James Yonan).
# * Se o start é tentado 2 vezes, sem a intervenção de um stop, ou
# se start é tentado quando o start anterior não foi bem sucessedido
# ele mata qualquer outro processo antes de começar uma nova operação (James Yonan).
# * Faz um trabalho melhor de detecção de erros no start, retornando sucesso ou falha (James
Yonan).
# Localização do binário do OpenVPN
openvpn="/usr/sbin/openvpn"
# Arquivo de trava
lock="/var/lock/subsys/openvpn"
# Diretorio de PID
piddir="/var/run/openvpn"
# Diretório de trabalho
work=/etc/openvpn
# Código da biblioteca de função.
. /etc/rc.d/init.d/functions
# Código da configuração de rede.
. /etc/sysconfig/network
# Checa se a rede está ativa.
[$NETWORKING = ”no”] && exit 0
[−f$openvpn] || exit 0
# Ve como nós fomos chamados.
case "$1"in
start)
echo -n $"Starting openvpn: "
/sbin/modprobe tun >/dev/null 2>&1
# A partir de uma perspectiva segura, eu acho que faz
# sentido remover isso, e forçar os usuarios que precisam disso
# a ativar explicitamente em seus scripts –up ou nas configurações
# de firewall.
#echo 1 > /proc/sys/net/ipv4/ip_forward
if [ ! -d $piddir ]; then
mkdir $piddir
fi
48
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
if [ -f $lock ]; then
# nós não fomos desligados corretamente
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill at $pidf >/dev/null 2>&1
fi
rm -f $pidf
done
rm -f $lock
sleep 2
fi
rm -f $piddir/*.pid
cd $work
# Inicia cada .conf em $work e executa .sh se existe
errors=0
successes=0
for c in /bin/ls *.conf 2>/dev/null; do
bn=$c%%.conf
if [ -f "$bn.sh"]; then
. $bn.sh
fi
rm -f $piddir/$bn.pid
$openvpn –daemon –writepid $piddir/$bn.pid –config $c –cd $work
if [ $? = 0 ]; then
successes=1
else
errors=1
fi
done
if [ $errors = 1 ]; then
failure; echo
else
success; echo
fi
if [ $successes = 1 ]; then
touch $lock
fi
;;
stop)
echo -n $"Shutting down openvpn: "
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill at $pidf >/dev/null 2>&1
fi
49
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
rm -f $pidf
done
success; echo
rm -f $lock
;;
restart)
$0 stop
sleep 2
$0 start
;;
reload)
if [ -f $lock ]; then
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill -HUP at $pidf >/dev/null 2>&1
fi
done
else
echo "openvpn: service not started"
exit 1
fi
;;
reopen)
if [ -f $lock ]; then
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill -USR1 at $pidf >/dev/null 2>&1
fi
done
else
echo "openvpn: service not started"
exit 1
fi
;;
condrestart)
if [ -f $lock ]; then
$0 stop
# avoid race
sleep 2
$0 start
fi
;;
status)
if [ -f $lock ]; then
for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do
if [ -s $pidf ]; then
kill -USR2 at $pidf >/dev/null 2>&1
fi
50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
done
echo "Status written to /var/log/messages"
else
echo "openvpn: service not started"
exit 1
fi
;;
*)
echo "Usage: openvpn
start|stop|restart|condrestart|reload|reopen|status"
exit 1
esac
exit 0
51
Capítulo 8
Como adicionar novas máquinas à VPN
8.1 Adicionando máquinas à VPN tanto para servidor e cliente
Incluindo múltiplas máquinas no servidor usando uma VPN roteada (dev tun)
Uma vez que você tenha uma VPN operacional de ponta a ponta entre cliente e servidor, você
deve desejar expandir o escopo da VPN para que clientes atinjam múltiplas máquinas na rede do
servidor, em vez de atingir apenas o servidor.
Para o propósito deste exemplo, nós vamos assumir que a LAN do servidor usa uma subrede
10.66.0.0/24 e que o endereço de IP da VPN use 10.8.0.0/24 como citado na diretiva no arquivo
de configuração do servidor OpenVPN.
Primeiramente, você deve mandar a subrede 10.66.0.0/24 ser acessível a clientes atraves da
VPN. Isto pode ser facilmente realizado com a seguinte diretiva no arquivo de configuração do
servidor:
push "route 10.66.0.0 255.255.255.0"
Depois, você deve setar um roteamento na gateway da LAN para rotear a subrede do cliente
VPN (10.8.0.0/24) ao servidor OpenVPN (isto só é necessário se o servidor OpenVPN e o ga-
teway da LAN estão em máquinas diferentes). Incluindo múltiplas máquinas usando uma VPN
ponteada (dev tap)
Um dos benefícios de se usar ponteamento em ethernet é que você tenha isto de graça sem
precisar de configuração adicional. Incluindo múltiplas máquinas no cliente usando uma VPN
roteada (dev tun)
Num ambiente típico de acesso remoto, a máquina cliente conecta à VPN como uma única
máquina. Mas suponha que a máquinha cliente seja um gateway para uma LAN local, e que você
queira que cada máquina na LAN cliente seja capaz de rotear através da VPN.
Para este exemplo, nós iremos assumir que a LAN cliente esteja usando uma subrede 192.168.4.0/24,
e que o cliente VPN esteja usando um certificado com um common name de client2. Nosso ob-
jetivo é configurar a VPN para que qualquer máquinha na LAN cliente possa comunicar com
qualquer máquina na LAN do servidor através da VPN.
Antes de configurar, há alguns pré-requisitos básicos que devem ser seguidos:
• A subrede da LAN cliente (192.168.4.0/24 no nosso exemplo) deve ser exportada à VPN
pelo servidor ou qualquer outro cliente que esteja usando a mesma subrede. Toda subrede
que seja usada na VPN deve ser única.
52
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• O cliente deve ter um único Common Name em seu certificado (client2"no nosso exemplo),
e a flag duplicate-cn não deve ser usada no arquivo de onfiguração do servidor OpenVPN.
Depois, nós vamos lidar com mudanças necessárias na configuração do servidor. Se o ar-
quivo de configuração do servidor não referencia um diretório para clientes, adicione uma refe-
rência agora:
client-config-dir ccd
Na diretiva acima, ccd deve ser o nome para o diretório que tenha sido pré-criado no diretó-
rio padrão onde o daemon do servidor OpenVPN roda. No Linux esse diretório tende a ser
/etc/openvpn e no Windows é usualmente Program FilesOpenVPNconfig. Quando um novo cli-
ente se conecta ao servidor OpenVPN, o daemon vai checar este diretório por um arquivo que
associe o common name do cliente. Se este arquivo for achado, ele vai ser lido e processado
para configurações de diretivas de arquivo adicionais a serem aplicadas ao cliente nomeado.
O próximo passo é criar um arquivo chamado client2 no diretório ccd. Este arquivo deve con-
ter a linha:
iroute 192.168.4.0 255.255.255.0
Ela vai dizer ao servidor OpenVPN que a subrede 192.168.4.0/24 deve ser roteada para o cli-
ent2.
Depois, adicione a seguinte linha ao arquivo mestre de configuração do servidor (não o
ccd/client2):
route 192.168.4.0 255.255.255.0
Você deve se perguntar: Por que os estamentos redundantes de route e iroute? A razão é que
route controla o roteamento do kernel ao servidor OpenVPN (via interface TUN) enquanto o iroute
controla o roteamento do servidor OpenVPN a clientes remotos. Ambos são necessários.
Próximo, pergunte a você mesmo se você quer permitir tráfico de rede entre a subrede do
client2 (192.168.4.0/24) e outros clientes do servidor OpenVPN. Se sim, adicione a seguinte linha
ao arquivo de configuração do servidor.
client-to-client
push "route 192.168.4.0 255.255.255.0"
Isto vai fazer o servidor OpenVPN conectar a subrede do client2 a outros clientes conectados
à VPN.
O último passo, e um que é freqüentemente esquecido, é adicionar um roteador para o ga-
teway da LAN do servidor que direcione 192.168.4.0/24 à máquina do servidor OpenVPN (você
não precisa disto se a máquina do servidor OpenVPN é o gateway para a LAN do servidor). Su-
ponha que você se esqueceu deste passo e você tenha tentado pingar uma máquina (sem ser
o servidor OpenVPN) na LAN do servidor com endereço 192.168.4.8. O ping vai sair e prova-
velmente atingir a máquina, mas essa máquina não vai saber como rotear a resposta do ping,
porque ela não tem idéia de como atingir 192.168.4.0/24.
Similarmente, se a máquina do cliente rodando o OpenVPN não seja o gateway para a LAN
do cliente, então o gateway para a LAN do cliente deve ter um roteamento que direcione todas as
subredes que deveriam ser atingidas através da VPN para a máquina cliente OpenVPN.
53
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Incluindo múltiplas máquinas ao cliente usando uma VPN ponteada (dev tap)
Isto exige uma configuração mais complexa (talvez não tão complicada em prática, mas com-
plicada de ser explicada com detalhes).
54
Capítulo 9
Publicando opções de DHCP
9.1 Fazendo o OpenVPN compatível com DHCP
Em nosso exemplo acima, o gateway de casa tem um endereço IP dinamico que pode mudar
sem qualquer aviso. Se você usa o dhcpcd como seu cliente dhcp, é facil contruir um script que
pode ser executado qualquer hora que o endereço IP mudar. O script ficaria em algum lugar
como /etc/dhcpc/dhcpcd-eth0.exe.
Basicamente, você deve adicionar uma linha neste script que iria mandar um sinal SIGUSR1
ou SIGHUP para o daemon OpenVPN. Seria algo como:
killall -HUP openvpn
Quando o OpenVPN recebe este sinal, ele irá fechar e re-abrir a conecxão de rede com a outra
ponta, usando o novo endereço IP designado pelo servidor DHCP.
Você também deve usar a opção –float se você está conectando a uma ponta que está suce-
tivel a mudanças de IP pelo servidor DHCP.
Também é possivel trabalhar com trocas de IP com o sinal SIGUSR1 que é como o sinal
SIGHUP exceto que ele oferece um controle melhor dos sub-sistemas do OpenVPN que ele re-
seta. O sinal SIGUSR1 também pode ser gerado internamente baseado nas opções - -ping e -
-ping-restart. A opção –persist-tun permite um reset sem fechar e abrir o device TUN (que permite
que conexões via vpn não se percam, mesmo durante uma troca de IP). A opção –persist-remote-
ip permite a preservação do endereço IP remoto, mesmo durante uma troca de IP. Isso permite
que ambas as pontas da VPN sejam clientes DHCP. A opção - -persist-key não re-lê as chaves
durante o restart (o que permite ao daemon OpenVPN ser reiniciado mesmo se seus privilégios
forem diminuidos com - -user ou - -group).
Para mais informações sobre como usar o OpenVPN em um endereço dinâmico, veja o FAQ.
9.2 Publicando opções de DHCP para clientes
O servidor OpenVPN pode publicar opções de DHCP como servidor de endereço DNS e
WINS para clientes. Clientes no Windows podem aceitar DHCP publicado nativamente, enquanto
clientes não-Windows podem aceitá-las usando um script up que analisa a lista de variáveis
ambiente. Veja a man page ou openvpn-users mailing list archive mais informações e exemplos
de scripts.
55
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Por exemplo, suponha que você queira que clientes conectados usem um servidor DNS in-
terno em 10.66.0.4 ou 10.66.0.5 e um servidor WINS em 10.66.0.8. Adicione esta linha ao arquivo
de configuração do servidor OpenVPN:
push "dhcp-option DNS 10.66.0.4"
push "dhcp-option DNS 10.66.0.5"
push "dhcp-option WINS 10.66.0.8"
Para testar isto no Windows, roda a seguinte linha de comando no prompt depois que a má-
quina esteja conectada a um servidor OpenVPN:
ipconfig /all
Este comando deve dar de saída as opções DHCP oferecidas pelo servidor.
56

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Http
HttpHttp
Http
 
Java awt
Java awtJava awt
Java awt
 
Drupal
DrupalDrupal
Drupal
 
Qemu
QemuQemu
Qemu
 
Screen
ScreenScreen
Screen
 
Java applet
Java appletJava applet
Java applet
 
Jspservlets
JspservletsJspservlets
Jspservlets
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
 
F fmpeg2 theora_oggfwd
F fmpeg2 theora_oggfwdF fmpeg2 theora_oggfwd
F fmpeg2 theora_oggfwd
 
Ftp
FtpFtp
Ftp
 
J2me
J2meJ2me
J2me
 
Lvm
LvmLvm
Lvm
 
Java swing
Java swingJava swing
Java swing
 
Jdbc
JdbcJdbc
Jdbc
 
Java Basico
Java BasicoJava Basico
Java Basico
 
Selinux
SelinuxSelinux
Selinux
 
Xdmcp
XdmcpXdmcp
Xdmcp
 
Linguagem Ruby
Linguagem RubyLinguagem Ruby
Linguagem Ruby
 
Samba
SambaSamba
Samba
 
X dialog
X dialogX dialog
X dialog
 

Destaque

Innovation is The New Constant Final ENG
Innovation is The New Constant Final ENGInnovation is The New Constant Final ENG
Innovation is The New Constant Final ENGYasser Mahmud
 
Derecho Colectivo del Trabajo
Derecho Colectivo del TrabajoDerecho Colectivo del Trabajo
Derecho Colectivo del Trabajogenesisquerales19
 
UNIVERSIDAD YACAMBU " INVESTIGACIÓN APLICADA AL DERECHO"
UNIVERSIDAD YACAMBU " INVESTIGACIÓN APLICADA AL DERECHO"UNIVERSIDAD YACAMBU " INVESTIGACIÓN APLICADA AL DERECHO"
UNIVERSIDAD YACAMBU " INVESTIGACIÓN APLICADA AL DERECHO"maiza121
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascalTiago
 
частина 2
частина 2частина 2
частина 2Alusya
 
Go camp 2017
Go camp  2017Go camp  2017
Go camp 2017Alusya
 
Los sujetos procesales penal
Los sujetos procesales penalLos sujetos procesales penal
Los sujetos procesales penaljoseoropeza2015
 
fujairah_oil_terminal
fujairah_oil_terminalfujairah_oil_terminal
fujairah_oil_terminalIrfan ahamed
 
QICL Large Storage Tank Site Erection Capabilities
QICL Large Storage Tank Site Erection CapabilitiesQICL Large Storage Tank Site Erection Capabilities
QICL Large Storage Tank Site Erection CapabilitiesYAMCO-LUBRICANT.COM.
 
Pembagian SHU Koperasi
Pembagian SHU KoperasiPembagian SHU Koperasi
Pembagian SHU KoperasiEko Mardianto
 
La potestad tributaria
La potestad tributariaLa potestad tributaria
La potestad tributariaCésar Suárez
 

Destaque (17)

Documentación urbana automatizada
Documentación urbana automatizadaDocumentación urbana automatizada
Documentación urbana automatizada
 
ansyood_P
ansyood_P ansyood_P
ansyood_P
 
Títulos Valores
Títulos ValoresTítulos Valores
Títulos Valores
 
MagicBlock
MagicBlockMagicBlock
MagicBlock
 
Innovation is The New Constant Final ENG
Innovation is The New Constant Final ENGInnovation is The New Constant Final ENG
Innovation is The New Constant Final ENG
 
Derecho Colectivo del Trabajo
Derecho Colectivo del TrabajoDerecho Colectivo del Trabajo
Derecho Colectivo del Trabajo
 
UNIVERSIDAD YACAMBU " INVESTIGACIÓN APLICADA AL DERECHO"
UNIVERSIDAD YACAMBU " INVESTIGACIÓN APLICADA AL DERECHO"UNIVERSIDAD YACAMBU " INVESTIGACIÓN APLICADA AL DERECHO"
UNIVERSIDAD YACAMBU " INVESTIGACIÓN APLICADA AL DERECHO"
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
частина 2
частина 2частина 2
частина 2
 
Go camp 2017
Go camp  2017Go camp  2017
Go camp 2017
 
ORDENANZA DE ZONIFICACION (REIMPRESION -1997)
ORDENANZA  DE  ZONIFICACION  (REIMPRESION -1997) ORDENANZA  DE  ZONIFICACION  (REIMPRESION -1997)
ORDENANZA DE ZONIFICACION (REIMPRESION -1997)
 
Los sujetos procesales penal
Los sujetos procesales penalLos sujetos procesales penal
Los sujetos procesales penal
 
fujairah_oil_terminal
fujairah_oil_terminalfujairah_oil_terminal
fujairah_oil_terminal
 
QICL Large Storage Tank Site Erection Capabilities
QICL Large Storage Tank Site Erection CapabilitiesQICL Large Storage Tank Site Erection Capabilities
QICL Large Storage Tank Site Erection Capabilities
 
Pembagian SHU Koperasi
Pembagian SHU KoperasiPembagian SHU Koperasi
Pembagian SHU Koperasi
 
Pmp risk chapter 11
Pmp risk chapter 11Pmp risk chapter 11
Pmp risk chapter 11
 
La potestad tributaria
La potestad tributariaLa potestad tributaria
La potestad tributaria
 

Semelhante a Guia OpenVPN

Dovecot
DovecotDovecot
DovecotTiago
 
Postfix
PostfixPostfix
PostfixTiago
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linuxTiago
 
Monitoramento
MonitoramentoMonitoramento
MonitoramentoTiago
 
Open solaris
Open solarisOpen solaris
Open solarisTiago
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on railsTiago
 
Fw builder
Fw builderFw builder
Fw builderTiago
 
De javaparapython
De javaparapythonDe javaparapython
De javaparapythonTiago
 
Squid guard
Squid guardSquid guard
Squid guardTiago
 
Inst configdebian
Inst configdebianInst configdebian
Inst configdebianTiago
 
Iptables
IptablesIptables
IptablesTiago
 
Pen linux
Pen linuxPen linux
Pen linuxTiago
 
Jspservlets
JspservletsJspservlets
JspservletsTiago
 
Introducao a acessibilidade_web
Introducao a acessibilidade_webIntroducao a acessibilidade_web
Introducao a acessibilidade_webTiago
 
Quanta
QuantaQuanta
QuantaTiago
 

Semelhante a Guia OpenVPN (20)

Squid
SquidSquid
Squid
 
Dovecot
DovecotDovecot
Dovecot
 
Ltsp
LtspLtsp
Ltsp
 
Postfix
PostfixPostfix
Postfix
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linux
 
Plone
PlonePlone
Plone
 
Monitoramento
MonitoramentoMonitoramento
Monitoramento
 
Open solaris
Open solarisOpen solaris
Open solaris
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Mrtg
MrtgMrtg
Mrtg
 
Fw builder
Fw builderFw builder
Fw builder
 
De javaparapython
De javaparapythonDe javaparapython
De javaparapython
 
Squid guard
Squid guardSquid guard
Squid guard
 
Inst configdebian
Inst configdebianInst configdebian
Inst configdebian
 
Iptables
IptablesIptables
Iptables
 
Ferm
FermFerm
Ferm
 
Pen linux
Pen linuxPen linux
Pen linux
 
Jspservlets
JspservletsJspservlets
Jspservlets
 
Introducao a acessibilidade_web
Introducao a acessibilidade_webIntroducao a acessibilidade_web
Introducao a acessibilidade_web
 
Quanta
QuantaQuanta
Quanta
 

Mais de Tiago

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodleTiago
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotprojectTiago
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascalTiago
 
Python bge
Python bgePython bge
Python bgeTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharpTiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpTiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpTiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpTiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharpTiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantesTiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharpTiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafaelTiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharpTiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
C# o basico
C#   o basicoC#   o basico
C# o basicoTiago
 

Mais de Tiago (20)

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 

Último

Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memorialgrecchi
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxDianaSheila2
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?AnabelaGuerreiro7
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESEduardaReis50
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOAulasgravadas3
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 

Último (20)

Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memoria
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptx
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 

Guia OpenVPN

  • 2. Sumário I Sobre essa Apostila 2 II Informações Básicas 4 III OpenVPN 9 1 O que é o OpenVPN 10 2 Plano de ensino 11 2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3 Introdução 14 3.1 O que é VPN? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2 Informações e situações de práticas de uso . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 Características do OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.4 OpenVPN x Outros pacotes VPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4 Instalação 17 4.1 Download do OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2 Instalação no Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.3 Pacotes RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.4 Instalação do Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5 Configuração 19 5.1 Configurando o driver TUN/TAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.2 Configurando certificados (CA) e chaves . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.3 Configuração do OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5.4 Gerando certificados e chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.5 Framework de teste do OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1
  • 3. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 5.6 Considerações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.7 Criando arquivos de configuração para servidores e clientes . . . . . . . . . . . . . 30 6 Teste 33 6.1 Servidor x Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.2 Testando o OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.2.1 Iniciando o VPN e testando-o para conectividade inicial . . . . . . . . . . . . 42 7 Inicializando com o Sistema 44 7.1 Inicializando com o sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 7.2 Inciando a VPN automaticamente no reboot . . . . . . . . . . . . . . . . . . . . . . . 44 8 Como adicionar novas máquinas à VPN 51 8.1 Adicionando máquinas à VPN tanto para servidor e cliente . . . . . . . . . . . . . . 51 9 Publicando opções de DHCP 54 9.1 Fazendo o OpenVPN compatível com DHCP . . . . . . . . . . . . . . . . . . . . . . 54 9.2 Publicando opções de DHCP para clientes . . . . . . . . . . . . . . . . . . . . . . . 54 2
  • 4. Parte I Sobre essa Apostila 3
  • 5. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Conteúdo O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in- ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br. O formato original deste material bem como sua atualização está disponível dentro da licença GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de mesmo nome, tendo inclusive uma versão traduzida (não oficial). A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Críticas e sugestões construtivas são bem-vindas a qualquer tempo. Autores A autoria deste é de responsabilidade de André Marra G. Araujo (andremarra@cdtc.org.br) . O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento, que vem sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software junto a outras entidades no país. Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da home page da entidade, através da URL http://www.cdtc.org.br. Garantias O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi- lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS- TILA. A copy of the license is included in the section entitled GNU Free Documentation License. 4
  • 7. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Sobre o CDTC Objetivo Geral O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina- ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira. Objetivo Específico Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários, criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como incentivadores e defensores de produtos de software não proprietários e código fonte aberto, ofe- recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de produtos de software não proprietários e de seu código fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro- dutos de software livre. Guia do aluno Neste guia, você terá reunidas uma série de informações importantes para que você comece seu curso. São elas: • Licenças para cópia de material disponível • Os 10 mandamentos do aluno de Educação a Distância • Como participar dos foruns e da wikipédia • Primeiros passos É muito importante que você entre em contato com TODAS estas informações, seguindo o roteiro acima. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br). 6
  • 8. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu- mentação Livre GNU". Os 10 mandamentos do aluno de educação online • 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é pré-requisito para a participação nos cursos a distância. • 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá- tica é necessário para poder executar as tarefas. • 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân- cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores. • 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo. • 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão e a sua recuperação de materiais. • 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e realizá-las em tempo real. • 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre. • 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens e descobertas. • 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é ponto - chave na comunicação pela Internet. • 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração. Como participar dos fóruns e Wikipédia Você tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso: . O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a 7
  • 9. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que interesse ao grupo, favor postá-la aqui. Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do curso. É recomendado que você faça uso do Forum de dúvidas gerais que lhe dá recursos mais efetivos para esta prática. . O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem ajudar. Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico é recomendável ver se a sua pergunta já foi feita por outro participante. A segunda forma se dá pelas Wikis: . Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par- ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé- dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em português pelos links: • Página principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo! Primeiros Passos Para uma melhor aprendizagem é recomendável que você siga os seguintes passos: • Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar; • Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas básicas do mesmo; • Entrar nas lições seguindo a seqüência descrita no Plano de Ensino; • Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais. Perfil do Tutor Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 8
  • 10. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor ou instrutor: • fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá utilizar; • gosta que lhe façam perguntas adicionais; • identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por- que motivo a classificação foi ou não foi atribuída’; • tece comentários completos e construtivos, mas de forma agradável (em contraste com um reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de ameaça e de nervossismo’) • dá uma ajuda complementar para encorajar um estudante em dificuldade; • esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente; • ajuda o estudante a alcançar os seus objetivos; • é flexível quando necessário; • mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); • escreve todas as correções de forma legível e com um nível de pormenorização adequado; • acima de tudo, devolve os trabalhos rapidamente; 9
  • 12. Capítulo 1 O que é o OpenVPN OpenVPN é uma solução completa de SSL VPN que pode acomodar uma larga escala de con- figurações incluindo acesso remoto, site-to-site VPNs, segurança de WiFi, e soluções em escala de empresa de acesso remoto com load balancing, failover, e controles de acesso refinados. 11
  • 13. Capítulo 2 Plano de ensino 2.1 Objetivo Qualificar técnicos e administradores de redesa fazer uso adequado do OpenVPN 2.2 Público Alvo Técnicos e administradores de redes que desejam trabalhar com OpenVPN 2.3 Pré-requisitos Os usuários deverão ser, necessariamente, funcionários públicos e ter conhecimentos bási- cos para operar um computador e ter conhecimento básico acerca de administração de rede, configuração do Linux e criptografia e chaves digitais. 2.4 Descrição O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle como ferramenta de aprendizagem. O curso tem duração de uma semana e possui um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de acordo com as instruções fornecidas. O material didático está disponível on-line de acordo com as datas pré-estabelecidas em cada tópico. A versão adotada do OpenVPN é a 2.0.6-1, caso possua outra versão, podem ocorrer diferenças com relação a este material. 2.5 Metodologia O curso está dividido da seguinte maneira: 2.6 Cronograma • Introdução 12
  • 14. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • Instalação • Configuração • Teste • Administrando uma VPN As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem neces- sárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor do que 6.0, sugerimos que você faça novamente esta lição. Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis para que possam ser consultados durante a avaliação final. Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En- sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma. Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser enviada no fórum. Diariamente os monitores darão respostas e esclarecimentos. 2.7 Programa O curso do OpenVPN oferecerá o seguinte conteúdo: • Introdução • Conceitos Básicos • Conceitos Avançados 2.8 Avaliação Toda a avaliação será feita on-line. Aspectos a serem considerados na avaliação: • Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento; • Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados. Instrumentos de avaliação: • Participação ativa nas atividades programadas. • Avaliação ao final do curso. • O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo com a fórmula abaixo: • Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições • AF = Avaliações 13
  • 15. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 2.9 Bibliografia • Site oficial: http://openvpn.net • Guia em Português: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2602# 14
  • 16. Capítulo 3 Introdução Comece por aqui. Nesta lição, você verá informações importantes sobre o OpenVPN como: o que é VPN, situações práticas de uso e etc. 3.1 O que é VPN? A idéia de utilizar uma rede pública como a Internet em vez de linhas privativas para implementar redes corporativas é denominada de Virtual Private Network (VPN) ou Rede Privada Virtual. As VPNs são túneis de criptografia entre pontos autorizados, criados através da Internet ou outras redes públicas e/ou privadas para transferência de informações, de modo seguro, entre redes corporativas ou usuários remotos. A segurança é a primeira e mais importante função da VPN. Uma vez que dados privados se- rão transmitidos pela Internet, que é um meio de transmissão inseguro, eles devem ser protegidos de forma a não permitir que sejam modificados ou interceptados. Outro serviço oferecido pelas VPNs é a conexão entre corporações (Extranets) através da Internet, além de possibilitar conexões dial-up criptografadas que podem ser muito úteis para usuários móveis ou remotos, bem como filiais distantes de uma empresa. Uma das grandes vantagens decorrentes do uso das VPNs é a redução de custos com co- municações corporativas, pois elimina a necessidade de links dedicados de longa distância que podem ser substituídos pela Internet. As LANs podem, através de links dedicados ou discados, conectar-se a algum provedor de acesso local e interligar-se a outras LANs, possibilitando o fluxo de dados através da Internet. Esta solução pode ser bastante interessante sob o ponto de vista econômico, sobretudo nos casos em que enlaces internacionais ou nacionais de longa distân- cia estão envolvidos. Outro fator que simplifica a operacionalização da WAN é que a conexão LAN-Internet-LAN fica parcialmente a cargo dos provedores de acesso. 3.2 Informações e situações de práticas de uso O openVPN roda em: Linux, Windows 2000/XP e mais novos, OpenBSD, FreeBSD, NetBSD, Mac OS X e Solaris. Uma versão para PocketPC do OpenVPN está sendo desenvolvida. Aplicações para redes privadas virtuais Abaixo, são apresentadas as três aplicações ditas mais importantes para as VPNs. 15
  • 17. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF ACESSO REMOTO VIA INTERNET O acesso remoto a redes corporativas através da Internet pode ser viabilizado com a VPN através da ligação local a algum provedor de acesso (Inter- net Service Provider - ISP). A estação remota disca para o provedor de acesso, conectando- se à Internet e o software de VPN cria uma rede virtual privada entre o usuário remoto e o servidor de VPN corporativo através da Internet. CONEXÃO DE LANS VIA INTERNET Uma solução que substitui as conexões entre LANs atra- vés de circuitos dedicados de longa distância é a utilização de circuitos dedicados locais interligando-as à Internet. O software de VPN assegura esta interconexão formando a WAN corporativa. A depender das aplicações também, pode-se optar pela utilização de circuitos discados em uma das pontas, devendo a LAN corporativa estar, preferencialmente, conectada à Inter- net via circuito dedicado local ficando disponível 24 horas por dia para eventuais tráfegos provenientes da VPN. CONEXÃO DE COMPUTADORES NUMA INTRANET Em algumas organizações, existem da- dos confidenciais cujo acesso é restrito a um pequeno grupo de usuários. Nestas situações, redes locais departamentais são implementadas fisicamente separadas da LAN corporativa. Esta solução, apesar de garantir a "confidencialidade"das informações, cria dificuldades de acesso a dados da rede corporativa por parte dos departamentos isolados. As VPNs possibilitam a conexão física entre redes locais, restringindo acessos indesejados através da inserção de um servidor VPN entre elas. Observe que o servidor VPN não irá atuar como um roteador entre a rede departamental e o resto da rede corporativa uma vez que o roteador possibilitaria a conexão entre as duas redes permitindo o acesso de qual- quer usuário à rede departamental sensitiva. Com o uso da VPN o administrador da rede pode definir quais usuários estarão credenciados a atravessar o servidor VPN e acessar os recursos da rede departamental restrita. Adicionalmente, toda comunicação ao longo da VPN pode ser criptografada assegurando a "confidencialidade"das informações. Os demais usuários não credenciados sequer enxergarão a rede departamental. 3.3 Características do OpenVPN O OpenVPN é um software livre, ou seja, você pode olhar o código dele, modificar o código para usá-lo do jeito que você deseja, você pode distribuir e etc. Enfim, são muitas as caracterís- ticas que o OpenVPN tem, além de ser software livre. Vejamos algumas. Com o OpenVPN, você pode: • construir um túnel em qualquer subrede ou adaptador ethernet virtual em cima de uma única porta UDP ou TCP; • usar toda a encriptação, autenticação e características de certificação da biblioteca OpenSSL para proteger o tráfico da sua internet privada enquanto ele transita pela internet; • usar qualquer cipher, chave, ou compilador HMAC suportado pela biblioteca OpenSSL; • escolher entre chave-estática baseada em encriptação convencional ou chave-pública ba- seada em certificação; 16
  • 18. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • usar chaves estáticas pré-compartilhadas ou baseadas em troca dinâmica de chaves TLS; • construir um túnel em rede na qual o ponto final seja dinâmico como DHCP ou clientes discados, • criar pontes de ethernet seguras usando virtual tap devices, e • controlar o OpenVPN usando uma GUI no Windows ou Mac OS X. 3.4 OpenVPN x Outros pacotes VPN Qual a diferença entre o OpenVPN e outros pacotes VPN? • A principal força do OpenVPN inclui a portabilidade através das muitas plataformas do co- nhecido universo computacional, excelente estabilidade, suporta centenas ou milhares de clientes, instalação relativamente fácil e suporte a IP dinâmico e NAT. • OpenVPN oferece uma interface de administração que pode ser usada para controlar remo- tamente ou administrar centralmente um processo OpenVPN. A interface de administração pode ser usada, também, para desenvolver uma GUI ou uma aplicação na web para o OpenVPN. • No Windows, o OpenVPN pode ler certificados e chaves privadas de pequens cartões que suportem o Windows Crypto API. • OpenVPN tem sido construído com um forte design modular. Toda a encriptação é provida pela biblioteca OpenSSL, e todas as funcionalidades de tunelamento de IP são providas pelo driver de rede virtual TUN/TAP. • Enquanto o OpenVPN provê muitas opções para controlar parâmetros de segurança de um túnel VPN, ele também provê opções de proteção à segurança do próprio servidor, como –chroot para restringir uma parte do sistema de arquivo que o daemon do OpenVPN tem acesso, –user e –group para minimizar privilégios do daemon depois da inicialização, e – mlock para ter certeza que o material chave e dados do túnel nunca são gravados no disco onde, depois, esses dados poderiam ser recuperados. Mais informações podem ser obtidas em inglês na página oficial do OpenVPN. http://openvpn.net 17
  • 19. Capítulo 4 Instalação 4.1 Download do OpenVPN O download do OpenVPN pode ser feito pelo site http://openvpn.net/download.html Este é o site oficial do OpenVPN e você pode baixar a versão que quiser. 4.2 Instalação no Debian Instalação do OpenVPN no debian 1. Abra o terminal 2. Entre como root ou superusuário 3. Digite #apt-get update 4. Digite #apt-get install openvpn 5. O apt vai baixar o pacote do openvpn e instalá-lo em seguida. A versão que usaremos neste curso é a 2.0.6. Esse pacote está na versão testing do debian. 4.3 Pacotes RPM Primeiramente crie o arquivo RPM. Isso exige que as bibliotecas OpenSSL, pthread, e LZO estejam presentes. Normalmente apenas a biblioteca LZO não está presente nas distruibuições de linux atuais. rpmbuild -tb openvpn-2.0.6.tar.gz O processo de criação do arquivo RPM, irá gerar muitas linhas de saida. Se o processo for bem sucedido, deverá existir uma linha próxima ao final da saida, iniciando com o nome do ar- quivo RPM criado. Agora você pode instalar o arquivo RPM binario com o comando: 18
  • 20. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF rpm -Uvh binary-RPM-file 4.4 Instalação do Source Instalação do tarball Descompacte a distribuição: tar -zxvf openvpn-2.0.6.tar.gz Compile o OpenVPN: cd openvpn-2.0.6 ./configure make make install Se você não deseja as funcionalidades da biblioteca LZO, adicione o parametro - -disable-lzo ao comando ./configure. Outras opções podem ser ativadas, como o suporte a pthread (./confi- gure - -enable-pthread) para diminuir a latencia usando trocas de chaves SSL/TLS dinamicas. O comando ./configure - -help irá exibir todas as opções de configuração. 19
  • 21. Capítulo 5 Configuração 5.1 Configurando o driver TUN/TAP Configurações a serem feitas uma unica vez. Se você está usando o kernel 2.4.7 ou superior, as chances são muito boas que seu kernel já tenha o driver TUN/TAP. Você pode confirmar isso com o comando locate if_tun.h que deve reportar um arquivo como /usr/include/linux/if_tun.h. Para o kernel 2.4.7 ou superior, se você o instalou pelo tarball, entre com o seguinte comando para configurar o device TUN/TAP. (você pode omitir isso se você fez a instalação via RPM. Ele já o fez automaticamente para você.): mknod /dev/net/tun c 10 200 Se você está usando o kernel 2.2, você deve obter a Versão 1.1 do modulo TUN/TAP para o kernel e seguir as instruções da instalação. Configurações a serem feitas a cada reboot No linux, antes de usar o OpenVPN ou qualquer outro programa que use o driver TUN/TAP, você deve carregar o driver TUN/TAP modprobe tun e ativar o roteamento de pacotes IP: echo 1 > /proc/sys/net/ipv4/ip_forward 5.2 Configurando certificados (CA) e chaves OpenSSL O OpenSSL é primeiramente uma biblioteca de funções criptográficas que proporciona uma extensiva API (Application Programming Interface - Aplicação de interface de programação) para programadores. No entanto, ela também inclui uma ferramenta shell que expõe essa API para 20
  • 22. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF usuários e scripts. Inicie o shell escrevendo openssl na linha de comando (em um terminal). Daí, você pode escrever comandos no prompt OpenSSL>. [user@computador user]$ openssl OpenSSL> version OpenSSL 0.9.8a 11 Oct 2005 OpenSSL> Você pode executar comando do OpenSSL em batch mode (conjunto de programas poces- sados consecutivamente pelo sistema operacional de um microcomputador). Em batch mode, cada comando do OpenSSL é executado separadamente. Shell scripts usualmente usam esta característica; nós faremos o mesmo neste curso: [user@computador user]$ openssl version OpenSSL 0.9.8a 11 Oct 2005 [user@computador user]$ Dos muitos comandos que podem ser executados no shell do OpenSSL, este curso só vai co- brir 5 (cinco): • ca: administração de Autoridades Certificadoras • req: administração de solicitação de Certificado • verify: verificação de Certificado • s_server: Modo de teste seguro de servidor • s_client: Modo de teste seguro de cliente Arquivo de configuração do OpenSSL Quando é instalado a Autoridade Certificadora (OpenSSL), nós precisamos determinar o ar- quivo de configuração mestre. Este arquivo contém parâmetros padrões para todos os comandos do OpenSSL. O nome deste arquivo é openssl.cnf. Para encontrar a localização deste arquivo, use o comando version com a opção -d: [user@computador user]$ openssl version -d OPENSSLDIR: "/usr/lib/ssl" [user@computador user]$ 5.3 Configuração do OpenSSL Uma vez que você sabe onde procurar, edite este arquivo com um editor de texto. Aqui está o arquivo de configuração que usaremos: # openssl.cnf # # OpenSSL example configuration file. # 21
  • 23. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # This configuration file has been derived from the original # example file included with the OpenSSL distribution. It # has been edited mostly to eliminate extensions in order to # simplify it for the purpose of an online tutorial. It has # also been reformatted to limit the maximum line length to # 60 characters for online publication. ########################################################### # This section will configure the ca (Certificate Authority) # command. We will use the ca command to sign user # certificates and periodically generate CRLs. ########################################################### [ca] default_ca = CA_default # The default ca section [CA_default] dir = /root/CA-DB # Top crl_dir = $dir/crl # The crl location database = $dir/index.txt # Database index file new_certs_dir = $dir/newcerts # Location for new certs certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The next serial number crl = $dir/crl.pem # The current CRL # All DNs need to be unique. This is the default behavior # but due to an OpenSSL library bug in the 0.9.7d release, # if we don’t supply this redundant definition here we will # see a cryptic message when signing certificates. unique_subject = yes # The CA private key private_key = $dir/private/cakey.pem # Private random number file RANDFILE = $dir/private/.rand # Issued certificates will be valid for 1 year default_days = 365 default_crl_days= 30 # Hashing function default_md = md5 # This assignment causes the extensions defined in the # ’user_extensions’ section to be included in any # certificates that are signed using the ca command. 22
  • 24. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF x509_extensions = user_extensions # This sections describes the policy that will be enforced # on a request to be signed, the subject organization name # must match that in the CA certificate. The request may # contain an optional organizational unit name. The common # name is assigned the policy format ’supplied’ which means # it must be present in the certificate request. policy = policy_any [policy_any] organizationName = match organizationalUnitName = optional commonName = supplied ########################################################### # This section configures the req (certificate request) # command. ########################################################### [req] # The default key length and the filename that will contain # a private key. The public key will be contained in the # certificate request. default_bits = 1024 default_keyfile = privkey.pem distinguished_name = req_distinguished_name # The makeup of our subject name [req_distinguished_name] organizationName = Organization Name (eg, company) organizationName_default = Inyo Technical Services organizationalUnitName = Organizational Unit (eg, west) commonName = Common Name (eg, YOUR name) commonName_max = 64 # This assignment mimics that in the ca section but causes # the following extensions to be included in a certificate # request. In our case these extensions will only be # included when we self-sign a certificate using ’req # -new -x509’. x509_extensions = CA_extensions 23
  • 25. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF ########################################################### # Extensions that will be added to certificates that are # issued. The ’user_extensions’ sections contains # definitions that will be included in certificates that are # signed by this CA. The CA_extensions section contains # extensions that will be included when we create a # self-signed certificate using the req command. ########################################################### [user_extensions] # CA:FALSE will not permit this certificate to sign other # certificates. basicConstraints = CA:FALSE [CA_extensions] # CA:TRUE will allow this certificate to sign others. basicConstraints = CA:TRUE #Fim de arquivo Você precisa fazer apenas uma modificação: • Na seção [CA_default] modifique o parâmetro "dir"para um diretório que você tenha poder de escrita. • default_md = md5 Algumas dicas sobre o arquivo de configuração serão dadas ao final da lição. 5.4 Gerando certificados e chaves Gerando os certificados e chaves Com o arquivo de configuração arrumado, agora nós podemos fazer a estrutura do diretório para guardar nosso CA. Nós escolhemos o diretório que foi configurado acima ([CA_default]/"dir") criamos nossos diretórios e inicializamos os arquivos serial e crlnumber. [user@computadoruser]$ mkdir CA-DB [user@computadoruser]$ cd CA-DB [user@computadorCA − DB]$ mkdir crl [user@computadorCA − DB]$ mkdir newcerts [user@computadorCA − DB]$ mkdir private [user@computadorCA − DB]$ mkdir CA-DB [user@computaodrCA − DB]$ echo "01» serial [user@computadorCA − DB]$ echo "01» crlnumber [user@computadorCA − DB]$ touch index.txt [user@computadorCA − DB]$ 24
  • 26. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Note que nós inicializamos os arquivos serial e crlnumber com o primeiro serial number. Quando autenticamos certificados, o número guardado nesses arquivos vão incrementando automatica- mente sendo que cada certificado vai receber um serial number único. O arquivo index.txt vai gravar todos os certificados autenticados. Com a estrutura do diretório no lugar, nós podemos criar nosso root certificate com nossa própria assinatura. Este certificado vai se sentar no topo da nossa hierarquia de confiança. Nós vamos usá-lo para assinar todo o resto. [user@computadorCA − DB]$ openssl req -new -x509 -keyout > private/cakey.pem -out cacert.pem Generating a 1024 bit RSA private key ...................................................... writing new private key to ’private/cakey.pem’ Enter PEM pass phrase: Verifying - Enter PEM pass phrase: - - - - - 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]: State or Province Name (full name) [Some − State]: Locality Name (eg, city) []: Organization Name (eg, company) [InternetWidgitsPtyLtd]: Organizational Unit Name(eg, section) []: Common Name (eg, YOUR name) []:Root CA Email Address []: [user@computadorCA − DB]$ Para esclarescer alguma pontecial confusão, a opção -x509 vai pedir ao comando req para gerar um certificado de assinatura própria em vez de um certificado de pedido. Nós só vamos usar esta opção com o comando req uma vez criado nosso root certificate. Certificados dos usuários Agora, nós vamos criar um certificado de pedido para o servidor OpenVPN instalado na nossa network. Note que usamos o argumento -nodes. Ele previne que a chave privada gerada com o pedido seja encriptada e protegida por senha. Nós vamos precisar guardar a chave com cuidado por causa disto. Nós não vamos proteger essa chave com senha porque depois nós vamos iniciar o servidor OpenVPN automaticamente no boot quando não há interação com usuário para prover a senha. [user@computadorCA − DB]$ openssl req -new -nodes -keyout > vpnkey.pem -out vpncert-req.pem Generating a 1024 bit RSA private key ........................................................ writing new private key to ’vpnkey.pem’ 25
  • 27. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF - - - - - 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]: State or Province Name (full name) [Some − State]: Locality Name (eg, city) []: Organization Name (eg, company) [InternetWidgitsPtyLtd]: Organizational Unit Name(eg, section) []: Common Name (eg, YOUR name) []:vpn.curso.com Email Address []: Please enter the following ’extra’ attributes to be sent with your certificate request A challenge password []: An optional company name [] [user@computadorCA − DB]$ Agora nós assinamos digitalmente o certificado do servidor usando o root certificate que nós criamos inicialmente. O OpenSSL vai restaurar a localização do root certificate do arquivo de configuração, que é o porque de não aparecer como argumento na linha de comando. Este co- mando vai atualizar os arquivos serial e index.txt quando for completado. [user@computadoruser]$ openssl ca -out vpncert.pem > -in vpncert-req.pem Using configuration from /home/admin/install/openssl.cnf Enter pass phrase for /home/admin/CA-DB/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: May 16 20:46:43 2006 GMT Not After : May 16 20:46:43 2007 GMT Subject: countryName = AU stateOrProvinceName = Some-State organizationName = Internet Widgits Pty Ltd commonName = vpn.curso.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE 26
  • 28. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 01:C9:91:6B:99:53:E6:6E:D7:56:5D:26:95:22:32:05:E3:7A:BE:9C X509v3 Authority Key Identifier: keyid:87:AB:B8:52:AF:74:EB:69:55:A1:C2:17:7E:A7:64:11:77:25:88:E8 Certificate is to be certified until May 16 20:46:43 2007 GMT (365 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 [user@computadorCA − DB]$ Depois de criado o certificado do servidor, nós podemos criar certificados para todos os clientes para quem queremos dar acesso à VPN. O processo é o mesmo, exceto que nós não especifi- camos a opção -nodes com o comando req. Isso vai encriptar a chave privada e o OpenSSL vai pedir uma senha quando semeado o código. 5.5 Framework de teste do OpenSSL Agora, depois de termos criado os certificados de usuários, nós podemos comprovar que nosso procedimento está todo correto em detrimento de dois comandos de teste fornecido pelo pacote OpenSSL. Os programas s_server (secure server) e s_client (secure client) podem exer- citar praticamente toda a biblioteca e suas operações são claras. Inicie um s_server do OpenSSL em um terminal. Inicie um s_client do OpenSSL em outro. O cliente vai contactar o servidor usando o protocolo SSL/TLS no localhost usando a porta 4433. Você será capaz de digitar mensagens dentro do console do cliente e vê-las aparecer do console do servidor. Vai ser óbvio se seus certificados não estiverem corretos ou têm algum problema com sua instalação da biblioteca OpenSSL. Aqui nós iniciamos o s_server do OpenSSL na linha de comando. Como argumentos, nós incluimos o certificado do servidor e a chave privada do servidor. O argumento -verify 1 faz o servidor perguntar por qualquer cliente conectando a mandar um certificado para autenticação. [user@computadorCA − DB]$ openssl s_server -cert vpncert.pem > -key vpnkey.pem -verify 1 verify depth is 1 Using default temp DH parameters Using default temp ECDH parameters ACCEPT Agora, em outro terminal, nós iniciamos o s_client do OpenSSL usando o argumento -cert para fornecer um certificador para o servidor para autenticação. O argumento -key usa a chave privada para encriptar as mensagens e o argumento -CAfile aponta para o root certificate. [user@computadorCA − DB] $ cp cacert.pem CA-DB/ 27
  • 29. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF [user@computadorCA − DB]$ openssl s_client -CAfile > CA-DB/cacert.pem -cert client1cert.pem -key client1key.pem Enter PEM pass phrase: CONNECTED(00000003) depth=1 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=Root CA verify return:1 depth=0 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=vpn.curso.com verify return:1 - - - Certificate chain 0 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=vpn.curso.com i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=Root CA - - - Server certificate - - - - -BEGIN CERTIFICATE- - - - - MIICpTCCAg6gAwIBAgIBATANBgkqhkiG9w0BAQQFADBXMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRAwDgYDVQQDEwdSb290IENBMB4XDTA2MDUxNjIwNDY0M1oXDTA3MDUx NjIwNDY0M1owXTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAf BgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEWMBQGA1UEAxMNdnBuLmN1 cnNvLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7BB3eDULA2HYMBwo bXis0csx/TNHhWz5JUQMD89qYdudp8QLTc3eOIef50M2nJex6MOdetjdxv1EzPYH Hq8I8BoJ8w3HTbdIHw2O+Mk00HGihyiSNdMLxUf0nUoWL2Abqpfk69WA4L7k/qgY mM9mtiu5Y8n9jceQCLhQ7RQQr0MCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE FAHJkWuZU+Zu11ZdJpUiMgXjer6cMB8GA1UdIwQYMBaAFIeruFKvdOtpVaHCF36n ZBF3JYjoMA0GCSqGSIb3DQEBBAUAA4GBANEEnzesDqdIeiWlNruQmeRXV93Elr22 EYaKOhJo9pNs4YaN2HvbQclQKLKD+GLYsc3uQ8x2MbZcBoD6OxHNtkdYh72qVOzc sngJ6PNxTMnVCXmqEy3X4mVbKkAxS3iJhlge3TVVj4eZ+GKYSk/4UhA6/GiqRWRW aq0Qv6DKiCdC - - - - -END CERTIFICATE- - - - - subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=vpn.curso.com issuer=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=Root CA - - - No client certificate CA names sent - - - SSL handshake has read 1129 bytes and written 1856 bytes - - - New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA Server public key is 1024 bit Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : DHE-RSA-AES256-SHA Session-ID: FBBBE1F495D03337D17A91DB2F69814F8D1638976EEB633CD1B688164144DFC1 Session-ID-ctx: Master-Key: 6109E6EF23FFE25844779B96B6BF2D3C553A3D4EBFA77A381B50B07F0C8D3F30 28
  • 30. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4C99AC7AF68E5373820C460C85823A46 Key-Arg : None Start Time: 1147813810 Timeout : 300 (sec) Verify return code: 0 (ok) - - - Agora você pode escrever mensagens! Tudo o que você escrever neste terminal vai aparecer no outro e vice-versa. Para sair desta sessão, escreva Q e dê ENTER. Agora nós sabemos que nossos certificados podem encriptar mensagens passadas entre as duas aplicações OpenSSL. No entanto, nós não sabemos se podemos usar nossos certificados com qualquer aplicação de certificado seguro X.509. Adicionando a opção -WWW ao comando s_server irá efetivamente criar um web server seguro que pode servir qualquer arquivo local para um navegador cliente conectando usando SSL/TLS. Vamos testar isso a seguir. No mesmo diretório, crie um pequeno arquivo HTML contendo o seguinte texto: <html> <body> <h1>Hello World!</h1> </body> </html> Dê o nome ao arquivo como hello.html e inicie um servidor no mesmo diretório do arquivo usando a opção -WWW. [user@computadorCA−DB]$ openssl s_server -cert vpncert.pem -key vpnkey.pem -WWW Using default temp DH parameters Using default temp ECDH parameters ACCEPT Inicie qualquer browser moderno como o Mozilla Firefox. Entre com a URL na barra de ende- reço. Note que o protocolo é https e não http: https://localhost:4433/hello.html O navegador vai alertá-lo do fato de não reconhecer o assunto no certificado oferecido pelo ser- vidor. A maioria dos browsers vai deixar você aceitar a autenticidade do certificado do servidor temporariamente para a sessão. Depois de clicar as mensagens de aviso, você deve ver uma página aparecer no navegador. O s_server é uma ferramenta muito útil. Estes testes do OpenSSL permitem ao administrador isolar problemas mais facilmente para uma aplicação em network ou seu suporte a uma infra- estrutura de certificado. Um último passo é criar os parâmetros Diffie Hellman com o comando [user@computadorCA − DB]$ openssl dhparam -out dh1024.pem 1024 Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ...........+.........................+............................................. 29
  • 31. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF ....................................+.........++*++*++* [user@computadorCA − DB]$ O OpenVPN tem 2 tipos de operação segura, uma baseada em SSL/TLS, usando certificados e chaves RSA, e outro usando uma chave estática pré-compartilhada. Enquanto que as cha- ves SSL/TLS + RSA são seguramente a opção mais segura, as chaves estaticas tem a vanta- gem de serem muito mais simples. Se você deseja usar chaves RSA, leia a seguir. Se você deseja usar chaves estáticas pré-compartilhadas, entre nesta página Gerando a chave estática Pré-Compartilhada. Os certificados RSA são chaves publicas que contém vários campos de segurança, como os campos Common Name ou Email Address. O OpenVPN tem a habilidade de fazer alguns testes para melhorar a segurança. Para mais informações, veja a opção –tls-verify na man page do Openvpn. (em inglês) Os arquivos de chaves privadas devem sempre serem mantidas seguras, já os arquivos de chaves privadas, podem ser livremente publicadas e distribuidas. 5.6 Considerações Modificações no arquivo de configuração do openssl: • Considere aumentar o valor do parametro default_days ou sua VPN irá parar de funcionar misteriosamente após exatamente um ano. • Aponte as opções certificate e private_key para o seu certificado mestre da sua autoridade certificadora e as chaves privadas que iremos gerar. Nos exemplos abaixo, nós iremos assumir que certificado mestre da sua autoridade certificadora se chama cacert.pem e que a chave privada se chama cakey.pem. • Crie os arquivos index.txt e serial. Crie o arquivo index.txt em branco e serial para conter um numero inicial serial, como 01. • Se você for paranóico sobre o tamanho de suas chaves, aumente a opção default_bits para 2048. O OpenVPN não irá ter nenhum problema em trabalhar com uma chave RSA de 2048 bits se você compilou o OpenVPN com suporte a biblioteca pthread, para ativar o suporte do processamento das chaves RSA em background. Você ainda pode usar chaves maiores mesmo sem o suporte a biblioteca pthread, mas você irá ver alguma degradação de per- formace no tunel durante as negociações das chaves SSL/TLS. Para um bom artigo sobre escolher um tamanho de chave RSA, veja a Edição de Abril de 2002 da Bruce Schneier’s Crypto-Gram Newsletter. Crie os parametros Diffie Hellman na máquina do escritório com o comando. openssl dhparam -out dh1024.pem 1024 Aumente o numero de bits de 1024 para 2048 se você também o aumentou no arquivo openssl.cnf. Para os paranoicos, considere omitir a opção -nodes nos comandos openssl acima. Isso irá fazer com que cada chave privada seja criptografada com uma senha, fazendo com que suas chaves fiquem seguras se alguem acessar seu servidor e roube suas chaves. O problema dessa 30
  • 32. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF opção, é que você irá ter que digitar uma senha toda vez que você rodar o OpenVPN. Para mais informações, veja a opção –askpass na man page do openvpn. (em inglês) Se você achar o gerenciamento manual de chaves RSA, note que o OpenVPN irá traba- lhar com qualquer certificado X509 ou serviço incluindo as Autoridades Certificadoras comerciais como Thawte ou Verisign. Veja também o projeto OpenCA como um exemplo do que está sendo feito no mundo do Código Aberto para mudar essa realidade. O OpenVPN também tem um pequeno conjunto de scripts que podem ser usadados para simplificar O gerenciamento de chaves e certificados RSA (em inglês). Nota importante sobre o uso de Autoridades Certificadoras comerciais (CAs) com o OpenVPN Você deve ter percebido que o modelo de seguraça do OpenVPN em modo SSL/TLS é orien- tado para os usuarios que irão gerar seu proprio certificado raiz e virar seu próprio CA. No modo SSL/TLS, o OpenVPN autentica a outra ponta checando se o certificado fornecido pela outra ponta é assinado pelo certificado da Autoridade Certificadora, que é expecificado com a opção –ca. Como no modelo de seguraça SSL da web, a segurança do OpenVPN em modo SSL/TLS está baseada na dificuldade de se forjar um certificado raiz. Esse tipo de autenticação funciona muito bem se você gerou seu próprio certificado raiz, mas é um problema se você usa o certificado raiz de uma Autoridade Certificadora comercial como a Thawte. Se você por exemplo, colocou o certificado raiz da Thawte na opção –ca, qualquer certificado assinado pela Thawte será capaz de se autenticar com a sua ponta OpenVPN – uma coisa que você certamente não quer. Felizmente existe uma solução para este problema na opção –tls-verify. Essa opção irá per- mitir a execução de um comando para checar o conteudo do certificado, para selecionar qual certificado é permitido ou não. Veja o script verify-cn do diretorio sample-scripts para um exemplo de como fazer isso. Também consulte a man page na opção –tls-verify. 5.7 Criando arquivos de configuração para servidores e clientes Adquirindo os arquivos de configuração A melhor maneira de adquirir os arquivos é no site do OpenVPN em sample configuration files como um ponto de começo para sua própria configuração. Esses arquivos também podem ser econtrados em • diretório sample-config-files da districuição source do OpenVPN • diretório sample-config-files em /usr/share/doc/openvpn/examples/ ou /usr/share/doc/openvpn- 2.0 se você instalou de um pacote RPM • Menu Iniciar -> Todos os programas -> OpenVPN -> OpenVPN Sample Configuration Files no Windows Note que no Linux, BSD, ou unix-like OSes, os arquivos de configuração são nomeados como server.conf e client.conf. No Windows eles são nomeados como server.ovpn e client.ovpn. Edi- tando o arquivo de configuração do servidor O arquivo de configuração do servidor é o ponto inicial para uma configuração de servidor do OpenVPN. Ele vai criar uma VPN usando uma interface de network(para roteamento) TUN virtual, vai escutar conexões de clientes na porta UDP 1194 (número de porta oficial do OpenVPN), e distribuir endereços virtuais para clientes conectados da subrede 10.8.0.0/24. Antes de usar esse arquivo de configuração, primeiro você deve editar os parâmetros ca, cert, key, e dh para apontar para os arquivos que você gerou na seção PKI acima. 31
  • 33. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Neste ponto, o arquivo de configuração do servidor é usável, no entanto, você pode customizá- lo ainda mais: • Se você está usando Ethernet bridging, você deve usar server-bridge, dev tapserver e dev tun • Se você quiser que o seu OpenVPN escute na porta TCP em vez da porta UDP, use proto tcp em vez de proto udp (Se você quiser que o OpenVPN escute nas duas portas, TCP e UDP, você deve rodar duas instâncias separadas do OpenVPN). • Se você quiser usar um esquema de IP virtual diferente que o 10.8.0.0/24, você deve mo- dificar a diretiva server. Lembre-se que esse esquema de IP virtual deve ser um esquema privado que não é usado na sua network. • Descomente a diretiva client-to-client se você quiser que clientes conectados possam al- cançar outros através da sua VPN. Por padrão, os clientes só serão capazes de alcançar o servidor. • Se você está usando Linux, BSD, ou um OS Unix-like, você pode melhorar a segurança descomentando as diretivas user nobody e group nobody. Se você quer rodar múltiplas instâncias do OpenVPN na mesma máquina, cada uma usando um arquivo de configuração diferente, só é possível se você: • Usar um número de porta diferente para cada instância (os protocolos UDP and TCP usam diferentes espaços de portas. Então, você pode rodar um daemon escutando a UDP-1194 e outro na TCP-1194). • Se você estiver usando Windows, cada configuração do OpenVPN precisa ter sua própria TAP-Win32 adapter. Você pode adicionar adaptadores indo em Menu Iniciar -> Todos os programas -> OpenVPN -> Add a new TAP-Win32 virtual ethernet adapter. • Se você está rodando múltiplas instâncias do OpenVPN no mesmo diretório, tenha certeza de editar as diretivas que criam output files para que as múltiplas instâncias não sobres- crevam cada output file da outra. Estas diretivas incluem log, log-append, status e ifconfig- pool-persist. Editando o arquivo de configuração do cliente O arquivo de configuração do cliente (client.conf no Linux/BSD/Unix ou client.ovpn no Win- dows) espelha as diretivas padrões setadas no arquivo de configuração do servidor. • Como no arquivo de configuração do servidor, primeiro edite os parâmetros ca, cert, e key para apontar para os arquivos que você gerou na seção PKI acima. Note que cada cliente deve ter seu próprio par certificado/chave. Somente o arquivo ca é universal através do servidor OpenVPN e todos os clientes. • Depois edite a diretiva remote para apontar para o hostname/endereço IP e a porta do servidor OpenVPN (Se o seu servidor OpenVPN estiver rodando em uma máquina single- NIC atrás de um firewall/NAT-gateway, use o endereço de IP público do gateway, e a porta que você configurou o gateway para direcionar para o servidor OpenVPN). 32
  • 34. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • Finalmente, tenha certeza de que o arquivo de configuração do cliente está consistente com as diretivas usadas na configuração do servidor. Os pontos mais a checar se estão consistentes são as diretivas dev (tun ou tap) e proto (udp ou tcp). Também tenha certeza que comp-lzo e fragment, se usados, estão presentes em ambos, cliente e servidor, arquivos de configuração. 33
  • 35. Capítulo 6 Teste 6.1 Servidor x Cliente Configuração de servidor e cliente Um arquivo de configuração diz ao OpenVPN como operar. Existem muitas variações possí- veis. Aqui, nós vamos configurar os arquivos do servidor e cliente em separado. Nós queremos que a VPN funcione em um modo de servidor com operação de instância única. Isto permite que todas as conexões de clientes passem pela mesma porta do servidor, e isto deixa a configuração mais simples. O arquivo de configuração do servidor está aqui: ################################################# # Sample OpenVPN 2.0 config file for # # multi-client server. # # # # This file is for the server side # # of a many-clients <-> one-server # # OpenVPN configuration. # # # # OpenVPN also supports # # single-machine <-> single-machine # # configurations (See the Examples page # # on the web site for more info). # # # # This config should work on Windows # # or Linux/BSD systems. Remember on # # Windows to quote pathnames and use # # double backslashes, e.g.: # # "C:Program FilesOpenVPNconfigfoo.key" # # # # Comments are preceded with ’#’ or ’;’ # ################################################# # Which local IP address should OpenVPN 34
  • 36. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # listen on? (optional) ;local a.b.c.d # Which TCP/UDP port should OpenVPN listen on? # If you want to run multiple OpenVPN instances # on the same machine, use a different port # number for each one. You will need to # open up this port on your firewall. port 1194 # TCP or UDP server? ;proto tcp proto udp # "dev tun"will create a routed IP tunnel, # "dev tap"will create an ethernet tunnel. # Use "dev tap0"if you are ethernet bridging # and have precreated a tap0 virtual interface # and bridged it with your ethernet interface. # If you want to control access policies # over the VPN, you must create firewall # rules for the the TUN/TAP interface. # On non-Windows systems, you can give # an explicit unit number, such as tun0. # On Windows, use "dev-node"for this. # On most systems, the VPN will not function # unless you partially or fully disable # the firewall for the TUN/TAP interface. ;dev tap dev tun # Windows needs the TAP-Win32 adapter name # from the Network Connections panel if you # have more than one. On XP SP2 or higher, # you may need to selectively disable the # Windows firewall for the TAP adapter. # Non-Windows systems usually don’t need this. ;dev-node MyTap # Specify tls-server for certificate exchange tls-server # SSL/TLS root certificate (ca), certificate # (cert), and private key (key). Each client # and the server must have their own cert and # key file. The server and all clients will # use the same ca file. # 35
  • 37. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # See the "easy-rsa"directory for a series # of scripts for generating RSA certificates # and private keys. Remember to use # a unique Common Name for the server # and each of the client certificates. # # Any X509 key management system can be used. # OpenVPN can also use a PKCS #12 formatted key file # (see "pkcs12"directive in man page). ca CA-DB/cacert.pem cert vpncert.pem key vpnkey.pem # This file should be kept secret # Check for revoked client certificates. crl-verify CA-DB/crl/crl.pem# Diffie hellman parameters. # Generate your own with: # openssl dhparam -out dh1024.pem 1024 # Substitute 2048 for 1024 if you are using # 2048 bit keys. dh dh1024.pem # Configure server mode and supply a VPN subnet # for OpenVPN to draw client addresses from. # The server will take 10.8.0.1 for itself, # the rest will be made available to clients. # Each client will be able to reach the server # on 10.8.0.1. Comment this line out if you are # ethernet bridging. See the man page for more info. server 10.8.0.0 255.255.255.0 # Maintain a record of client <-> virtual IP address # associations in this file. If OpenVPN goes down or # is restarted, reconnecting clients can be assigned # the same virtual IP address from the pool that was # previously assigned. ifconfig-pool-persist ipp.txt # Configure server mode for ethernet bridging. # You must first use your OS’s bridging capability # to bridge the TAP interface with the ethernet # NIC interface. Then you must manually set the # IP/netmask on the bridge interface, here we # assume 10.8.0.4/255.255.255.0. Finally we # must set aside an IP range in this subnet # (start=10.8.0.50 end=10.8.0.100) to allocate # to connecting clients. Leave this line commented # out unless you are ethernet bridging. ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 36
  • 38. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # Push routes to the client to allow it # to reach other private subnets behind # the server. Remember that these # private subnets will also need # to know to route the OpenVPN client # address pool (10.8.0.0/255.255.255.0) # back to the OpenVPN server. ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" # To assign specific IP addresses to specific # clients or if a connecting client has a private # subnet behind it that should also have VPN access, # use the subdirectory "ccd"for client-specific # configuration files (see man page for more info). # EXAMPLE: Suppose the client # having the certificate common name "Thelonious" # also has a small subnet behind his connecting # machine, such as 192.168.40.128/255.255.255.248. # First, uncomment out these lines: ;client-config-dir ccd ;route 192.168.40.128 255.255.255.248 # Then create a file ccd/Thelonious with this line: # iroute 192.168.40.128 255.255.255.248 # This will allow Thelonious’ private subnet to # access the VPN. This example will only work # if you are routing, not bridging, i.e. you are # using "dev tun"and "server"directives. # EXAMPLE: Suppose you want to give # Thelonious a fixed VPN IP address of 10.9.0.1. # First uncomment out these lines: ;client-config-dir ccd ;route 10.9.0.0 255.255.255.252 # Then add this line to ccd/Thelonious: # ifconfig-push 10.9.0.1 10.9.0.2 # Suppose that you want to enable different # firewall access policies for different groups # of clients. There are two methods: # (1) Run multiple OpenVPN daemons, one for each # group, and firewall the TUN/TAP interface # for each group/daemon appropriately. # (2) (Advanced) Create a script to dynamically # modify the firewall in response to access # from different clients. See man 37
  • 39. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # page for more info on learn-address script. ;learn-address ./script # If enabled, this directive will configure # all clients to redirect their default # network gateway through the VPN, causing # all IP traffic such as web browsing and # and DNS lookups to go through the VPN # (The OpenVPN server machine may need to NAT # the TUN/TAP interface to the internet in # order for this to work properly). # CAVEAT: May break client’s network config if # client’s local DHCP server packets get routed # through the tunnel. Solution: make sure # client’s local DHCP server is reachable via # a more specific route than the default route # of 0.0.0.0/0.0.0.0. ;push "redirect-gateway" # Certain Windows-specific network settings # can be pushed to clients, such as DNS # or WINS server addresses. CAVEAT: # http://openvpn.net/faq.html#dhcpcaveats ;push "dhcp-option DNS 10.8.0.1" ;push "dhcp-option WINS 10.8.0.1" # Uncomment this directive to allow different # clients to be able to "see"each other. # By default, clients will only see the server. # To force clients to only see the server, you # will also need to appropriately firewall the # server’s TUN/TAP interface. ;client-to-client # Uncomment this directive if multiple clients # might connect with the same certificate/key # files or common names. This is recommended # only for testing purposes. For production use, # each client should have its own certificate/key # pair. # # IF YOU HAVE NOT GENERATED INDIVIDUAL # CERTIFICATE/KEY PAIRS FOR EACH CLIENT, # EACH HAVING ITS OWN UNIQUE "COMMON NAME", # UNCOMMENT THIS LINE OUT. ;duplicate-cn # The keepalive directive causes ping-like 38
  • 40. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # messages to be sent back and forth over # the link so that each side knows when # the other side has gone down. # Ping every 10 seconds, assume that remote # peer is down if no ping received during # a 120 second time period. keepalive 10 120 # For extra security beyond that provided # by SSL/TLS, create an "HMAC firewall" # to help block DoS attacks and UDP port flooding. # # Generate with: # openvpn –genkey –secret ta.key # # The server and each client must have # a copy of this key. # The second parameter should be ’0’ # on the server and ’1’ on the clients. ;tls-auth ta.key 0 # This file is secret # Select a cryptographic cipher. # This config item must be copied to # the client config file as well. ;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES # Enable compression on the VPN link. # If you enable it here, you must also # enable it in the client config file. comp-lzo # The maximum number of concurrently connected # clients we want to allow. ;max-clients 100 # It’s a good idea to reduce the OpenVPN # daemon’s privileges after initialization. # # You can uncomment this out on # non-Windows systems. ;user nobody ;group nobody # The persist options will try to avoid # accessing certain resources on restart # that may no longer be accessible because # of the privilege downgrade. 39
  • 41. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF persist-key persist-tun # Output a short status file showing # current connections, truncated # and rewritten every minute. status openvpn-status.log # By default, log messages will go to the syslog (or # on Windows, if running as a service, they will go to # the "Program FilesOpenVPNlog"directory). # Use log or log-append to override this default. # "log"will truncate the log file on OpenVPN startup, # while "log-append"will append to it. Use one # or the other (but not both). ;log openvpn.log ;log-append openvpn.log # Set the appropriate level of log # file verbosity. # # 0 is silent, except for fatal errors # 4 is reasonable for general usage # 5 and 6 can help to debug connection problems # 9 is extremely verbose verb 3 # Silence repeating messages. At most 20 # sequential messages of the same message # category will be output to the log. ;mute 20 Note que nós usamos a opção dh para especificar o arquivo contendo os parâmetros Diffie- Hellman que nós criamos antes. A opção dh só precisa aparecer no arquivo de configuração do servidor e não no arquivo do cliente. Agora, nós listamos os arquivos contendo os certificados que iremos usar, começando com o root. Finalmente, nós indicamos que queremos que o OpenVPN cheque nossa lista de pedidos de certificado antes de autorizar a conexão a um cliente na nossa rede privada especificando a opção crl-verify e dizendo a lozalização de uma CRL. Nós iremos demonstrar a verificação CRL depois. O arquivo de configuração do cliente é um pouco mais simples. O único item de configuração que não vimos antes é o pull, que complemente o comandopush "route ..."que nós incluímos no arquivo de configuração do servidor. # openvpn-client.conf # # Set tunnel mode dev tun 40
  • 42. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # Hostname for the VPN server remote [ip_do_servidor] 1194 # This end takes the client role for # certificate exchange tls-client # Certificate Authority file ca cacert.pem # Our certificate/public key cert client1cert.pem # Our private key key client1key.pem # Get the rest of our configuration # from the server. pull O próximo passo é instalar o OpenVPN no cliente. Neste passo, só direi que a instalação do OpenVPN é idêntica à instalação no servidor. Depois de instalado, complete o processo distri- buindo os seguintes arquivos para o cliente: • A chave privada do cliente. • O certificado do cliente. • Uma cópia do root certificate (cacert.pem, no nosso exemplo). • O arquivo de configuração do cliente. Antes de iniciar o servidor, nós temos um último passo a realizar. Nós precisamos inicializar a CRL. A CRL vai ter uma lista de certificados que o nosso CA revogou. Embora nós não tenhamos revogado nenhum certificado ainda, nossa configuração ainda pede ao servidor OpenVPN para checar a CRL usando a opção crl-verify na configuração do servidor. Se a nossa VPN não achar uma CRL, ela vai terminar de forma prematura. Por enquanto, nós vamos iniciar uma CRL vazia. Depois, nós vamos revogar um certificado de usuário e atualizar a CRL. Para iniciar a CRL simplesmente peça ao CA para gerar uma. (A mensagem oculta começando com DEBUG[load_index] vem de um bug inofensivo nesse release particular do OpenSSL; ignore-o.) [admin@tamarackadmin]$ openssl ca -gencrl -out > CA-DB/crl/crl.pem Using configuration from /home/admin/install/openssl.cnf Enter pass phrase for /home/admin/CA-DB/private/cakey.pem: DEBUG[load_index]: unique_subject = "yes" [admin@tamarackadmin]$ cat CA-DB/crl/crl.pem Agora nós estamos prontos para usar o comando a seguir para iniciar um servidor VPN na nossa 41
  • 43. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF rede local. Depois que esse comando for executado, clientes poderão se conectar. [root@tamarackadmin]# openvpn –config openvpn-server.conf Depois que o servidor iniciar, tente conectá-lo de um cliente. A linha de comando no cliente é bem similar, mas lembre-se de usar o nome apropriado para o arquivo de configuração. Você deve imdediatamente ser capaz de comunicar através da VPN. Se ocorrer um problema, é hora de descobrir defeitos. Neste caso, você será feliz porque testamos a infra-estrutura dos certificados usando o s_server e s_client , assim, você pode isolar o que estiver errado. Verifi- cando o acesso de cliente contra uma CRL A tarefa final aqui é desligar de forma confiante o acesso à VPN de usuários quando nós não queremos que eles conectem à nossa rede. Para fazer isso, nós vamos revogar certificados e atu- alizar nossa CRL. Para descobrir qual certificado pertence a cada cliente, use o arquivo index.txt, localizado no diretório árvore de certificado. Olhe no arquivo e procure o registro contendo o atri- buto commonName assinado ao certificado a ser revogado (lembre-se que nós estabelecemos uma política de assinar o ID único de cada usuário ao atributo commonName). Esse registro também vai conter o serial number que o CA assinou para este certificado. Tendo identificado o serial number, nós podemos localizar o certificado do cliente dentro de newcerts no nosso diretório CA. Este diretório vai conter uma cópia de cada certificado emitido pelo nosso CA. Os nomes dos arquivos contém os serial numbers assinados a estes certificados. Neste exemplo, nós decidimos revogar o certificado do user3. Depois de ter olhado o index.txt, nós achamos que o serial number assinado ao certificado com o atributo commonName que bate com o user3 é 04. Nós agora sabemos que o certificado correto a revogar é newcerts/04.pem. [admin@tamarackadmin]$ openssl ca -revoke > CA-DB/newcerts/04.pem Using configuration from /home/admin/install/openssl.cnf Enter pass phrase for /home/admin/CA-DB/private/cakey.pem: DEBUG[load_index]: unique_subject = "yes" Revoking Certificate 04. Data Base Updated [admin@tamarackadmin]$ O comando revogou o certificado e atualizou o index.txt appropriadamente. Agora nós preci- samos gerar uma nova CRL que vai ter este novo certificado revogado. Até nós fazermos isso, o OpenVPN não vai saber que nós revogamos este certificado. [admin@tamarackadmin]$ openssl ca -gencrl -out CA-DB/crl/crl.pem Using configuration from /home/admin/install/openssl.cnf Enter pass phrase for /home/admin/CA-DB/private/cakey.pem: DEBUG[load_index]: unique_subject = "yes" [admin@tamarackadmin]$ A partir de agora, o user3 não vai ter acesso à VPN, enquanto o OpenVPN checa a CRL. Lembre- se, sempre que você for revogar um certificado, tenha certeza de gerar uma nova CRL. O OpenSSL também inclui o comando verify, que aceita a opção -crl_check que vai permitir que você tenha certeza que a sua lista de certificados revogados funciona. O comando verify requer que o root certificate e a CRL estejam no mesmo arquivo. Antes de você fazer este co- 42
  • 44. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF mando, crie um diretório CRL temporário concatenando com o certificado CA. [admin@tamarackadmin]$ cat > CA-DB/cacert.pem CA-DB/crl/crl.pem > tempcrl.pem Use o comando verify com a opção -crl_check para esecificar a CRL a ser usada. Aqui está como verificar a rejeição do certificado do user3. [admin@tamarackadmin]$ openssl verify -CAfile tempcrl.pem > -crl_check user3cert.pem user3cert.pem: /O=Inyo Technical Services/CN=user3 error 23 at 0 depth lookup:certificate revoked [admin@tamarackadmin]$ A fim de tentar isso com sua própria instalação, revogue o certificado que você criou para o cliente da sua VPN e gere uma nova CRL. Você vai ver que não é possível conectar ao servidor OpenVPN daquele cliente. 6.2 Testando o OpenVPN 6.2.1 Iniciando o VPN e testando-o para conectividade inicial Iniciando o servidor Primeiro, tenha certeza que o servidor OpenVPN estará acessível pela Internet. Isso significa: • abrindo a porta UDP 1194 no firewall (ou qualquer porta TCP/UDP que você configurou), ou • setting up a port forward rule to forward UDP port 1194 from the firewall/gateway to the machine running the OpenVPN server. Depois, tenha certeza de que a interface TUN/TAP não está com o firewall sobre ela. Para simplificar a resolução de problemas, é melhor iniciar o servidor OpenVPN na linha de comando (ou clicar com o botão direito sobre o arquivo .ovpn no Windows), ao invés de iniciar como um daemon ou serviço: openvpn "arquivo de configuração do servidor" Um levantamento de um servidor deveria se parecer com isto(esta saída pode variar entre as plataformas): Sun Feb 6 20:46:38 2005 OpenVPN 2.0_rc12 i686-suse-linux [SSL][LZO][EPOLL] built on Feb 5 2005 Sun Feb 6 20:46:38 2005 Diffie-Hellman initialized with 1024 bit key Sun Feb 6 20:46:38 2005 TLS-Auth MTU parms [L : 1542D : 138EF : 38EB : 0ET : 0EL : 0] Sun Feb 6 20:46:38 2005 TUN/TAP device tun1 opened Sun Feb 6 20:46:38 2005 /sbin/ifconfig tun1 10.8.0.1 pointopoint 10.8.0.2 mtu 1500 Sun Feb 6 20:46:38 2005 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2 Sun Feb 6 20:46:38 2005 Data Channel MTU parms [L : 1542D : 1450EF : 42EB : 23ET : 43
  • 45. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 0EL : 0AF : 3/1] Sun Feb 6 20:46:38 2005 UDPv4 link local (bound): [undef]:1194 Sun Feb 6 20:46:38 2005 UDPv4 link remote: [undef] Sun Feb 6 20:46:38 2005 MULTI: multi_init called, r=256 v=256 Sun Feb 6 20:46:38 2005 IFCONFIG POOL: base=10.8.0.4 size=62 Sun Feb 6 20:46:38 2005 IFCONFIG POOL LIST Sun Feb 6 20:46:38 2005 Initialization Sequence Completed Iniciando um cliente Assim como no servidor, é melhor iniciar o OpenVPN pela linha de comando(ou clicar com o botão direito sobre o arquivo .ovpn no Windows), ao invés de iniciar como um daemon ou serviço: openvpn "arquivo de configuração do cliente" Agora, tente executar o comando ping pela VPN no cliente. Se você estiver usando roteamento (dev tun no arquivo de configuração do servidor, por exemplo), tente: ping 10.8.0.1 Se você estiver usando ponteamento (dev tap no arquivo de configuração do servidor, por exem- plo), tentar executar o ping no endereço IP de uma máquina na subnet do servidor. Se o ping obtiver sucesso, parabéns! Agora você tem uma VPN funcional. 44
  • 46. Capítulo 7 Inicializando com o Sistema 7.1 Inicializando com o sistema Configurando o OpenVPN para rodar automaticamente na inicialização do sistema A falta de padrões nesta área significa que a maioria dos sistemas operacionais tem uma ma- neira diferente de configurar daemons/services para auto iniciar no boot. A melhor maneira de ter isso funcionalmente configurado por padrão é instalar o OpenVPN como um pacote, como RPM no Linux ou usando o instalador do Windows. Linux Se você instalar o OpenVPN via pacote RPM no Linux, o instalador vai configurar um initscript. Quando executado, o initscript irá escanear por arquivos de configuração .conf em /etc/openvpn, e se encontrado, vai iniciar um daemon separado para cada arquivo .conf do OpenVPN. 7.2 Inciando a VPN automaticamente no reboot Primeiro crie um diretório para armazenar as chaves e arquivos de coniguração do OpenVPN, como /etc/openvpn. Decida se você vai usar o OpenVPN no modo TLS ou chave estática, e copie os arquivos .conf, .up, .key, .pem, e .crt apropriados para o diretório /etc/openvpn. Proteja seus arquivos .key: chmod go-rwx /etc/openvpn/*.key Se você está usando Linux com iptables, edite o arquivo de configuração do firewall, firewall.sh, fazendo as alterações apropriadas para seu sistema e o copie para o diretório /etc/openvpn. Crie um script de inicialização que se pareça com isso: sample-config-files/openvpn-startup.sh #!/bin/bash # Um exemplo de script de inicialição # do OpenVPN para Linux. 45
  • 47. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # Diretorio de configurações do OpenVPN dir=/etc/openvpn # Carrega o firewall $dir/firewall.sh # Carrega o modulo TUN/TAP modprobe tun # ativa o roteamento de pacotes echo 1 > /proc/sys/net/ipv4/ip_forward # Chama o openvpn para cada tunel VPN # em modo daemon. Você também pode remover # a opção --daemon"da linha de comando # e adicionar a opção "daemon"ao arquivo # de configuração. # # Cada tunel deve rodar em uma porta UDP # separada. Use a opção "port"para controlar # isso. Como todas as opções do OpenVPN, você # pode especificar --port 8000"na linha de # comando, ou "port 8000"no arquivo de configuração. openvpn –cd $dir –daemon –config vpn1.conf openvpn –cd $dir –daemon –config vpn2.conf openvpn –cd $dir –daemon –config vpn2.conf E crie um script de desligamento como esse: sample-config-files/openvpn-shutdown.sh #!/bin/bash # para com todos os processos do OpenVPN killall -TERM openvpn Finalmente, adicione chamadas para openvpn-startup.sh e openvpn-shutdown.sh para os scripts de inicio e desligamento de seu sistema, ou no diretório /etc/init.d. Gerenciando o ini- cio e desligamento de varios túneis OpenVPN Aqui está um examplo de um script do /etc/init.d que irá automaticamente iniciar um processo do OpenVPN para cada arquivo .conf que for encontrado no diretório /etc/openvpn. Esse script é instalado por padrão quando você instala o OpenVPN via um pacote RPM. (N.T: Devido a problemas com quebra de linha, é recomendavel que você copie esse script da distribuição do OpenVPN) sample-scripts/openvpn.init #!/bin/sh 46
  • 48. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # # openvpn Este shell script cuida do inicio e finalização # do openvpn no RedHat ou em outro sistema baseado # no chkconfig. # # chkconfig: 345 80 30 # # description: OpenVPN é um programa robusto e flexivel para tunelamento que # usa toda as funcionalidades de encriptação, autenticação e certificação # que a biblioteca OpenSSL fornece, para tunelar seguramente redes IP atraves # de uma simples porta UDP. # # Contribuido para o projeto OpenVPN por # Douglas Keller <doug@voidstar.dyndns.org> # 2002.05.15 # Para instalar: # copie este arquivo para /etc/rc.d/init.d/openvpn # shell> chkconfig –add openvpn # shell> mkdir /etc/openvpn # crie .conf ou .sh files em /etc/openvpn (veja abaixo) # Para desinstalar: # execute: chkconfig –del openvpn # Notas do autor: # # Eu criei um init script em /etc/init.d e alterei o openvpn.spec para automaticamente # registrar o script. Uma vez que o RPM está instalado você pode iniciar e parar # o OpenVPN com "service openvpn start"e "service openvpn stop". # # Esse init script faz o seguinte: # # - Inicia um processo OpenVPN para cada arquivo .conf que ele encontra em /etc/openvpn # # - Se /etc/openvpn/xxx.sh existe para um arquivo xxx.conf então ele o executa # antes de iniciar o OpenVPN (util para fazer openvpn –mktun...). # # - Alem de start/stop você também pode: # # service openvpn reload - SIGHUP # service openvpn reopen - SIGUSR1 # service openvpn status - SIGUSR2 # Modificações 2003.05.02 # * Alterado ’==’ para ’=’ para compatibilidade com sh (Bishop Clark). # * Se condrestart|reload|reopen|status, checa se já não está iniciado (James Yonan). 47
  • 49. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF # * Adicionado lock, piddir, e work variaveis (James Yonan). # * Se o start é tentado 2 vezes, sem a intervenção de um stop, ou # se start é tentado quando o start anterior não foi bem sucessedido # ele mata qualquer outro processo antes de começar uma nova operação (James Yonan). # * Faz um trabalho melhor de detecção de erros no start, retornando sucesso ou falha (James Yonan). # Localização do binário do OpenVPN openvpn="/usr/sbin/openvpn" # Arquivo de trava lock="/var/lock/subsys/openvpn" # Diretorio de PID piddir="/var/run/openvpn" # Diretório de trabalho work=/etc/openvpn # Código da biblioteca de função. . /etc/rc.d/init.d/functions # Código da configuração de rede. . /etc/sysconfig/network # Checa se a rede está ativa. [$NETWORKING = ”no”] && exit 0 [−f$openvpn] || exit 0 # Ve como nós fomos chamados. case "$1"in start) echo -n $"Starting openvpn: " /sbin/modprobe tun >/dev/null 2>&1 # A partir de uma perspectiva segura, eu acho que faz # sentido remover isso, e forçar os usuarios que precisam disso # a ativar explicitamente em seus scripts –up ou nas configurações # de firewall. #echo 1 > /proc/sys/net/ipv4/ip_forward if [ ! -d $piddir ]; then mkdir $piddir fi 48
  • 50. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF if [ -f $lock ]; then # nós não fomos desligados corretamente for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do if [ -s $pidf ]; then kill at $pidf >/dev/null 2>&1 fi rm -f $pidf done rm -f $lock sleep 2 fi rm -f $piddir/*.pid cd $work # Inicia cada .conf em $work e executa .sh se existe errors=0 successes=0 for c in /bin/ls *.conf 2>/dev/null; do bn=$c%%.conf if [ -f "$bn.sh"]; then . $bn.sh fi rm -f $piddir/$bn.pid $openvpn –daemon –writepid $piddir/$bn.pid –config $c –cd $work if [ $? = 0 ]; then successes=1 else errors=1 fi done if [ $errors = 1 ]; then failure; echo else success; echo fi if [ $successes = 1 ]; then touch $lock fi ;; stop) echo -n $"Shutting down openvpn: " for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do if [ -s $pidf ]; then kill at $pidf >/dev/null 2>&1 fi 49
  • 51. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF rm -f $pidf done success; echo rm -f $lock ;; restart) $0 stop sleep 2 $0 start ;; reload) if [ -f $lock ]; then for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do if [ -s $pidf ]; then kill -HUP at $pidf >/dev/null 2>&1 fi done else echo "openvpn: service not started" exit 1 fi ;; reopen) if [ -f $lock ]; then for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do if [ -s $pidf ]; then kill -USR1 at $pidf >/dev/null 2>&1 fi done else echo "openvpn: service not started" exit 1 fi ;; condrestart) if [ -f $lock ]; then $0 stop # avoid race sleep 2 $0 start fi ;; status) if [ -f $lock ]; then for pidf in /bin/ls $piddir/*.pid 2>/dev/null; do if [ -s $pidf ]; then kill -USR2 at $pidf >/dev/null 2>&1 fi 50
  • 52. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF done echo "Status written to /var/log/messages" else echo "openvpn: service not started" exit 1 fi ;; *) echo "Usage: openvpn start|stop|restart|condrestart|reload|reopen|status" exit 1 esac exit 0 51
  • 53. Capítulo 8 Como adicionar novas máquinas à VPN 8.1 Adicionando máquinas à VPN tanto para servidor e cliente Incluindo múltiplas máquinas no servidor usando uma VPN roteada (dev tun) Uma vez que você tenha uma VPN operacional de ponta a ponta entre cliente e servidor, você deve desejar expandir o escopo da VPN para que clientes atinjam múltiplas máquinas na rede do servidor, em vez de atingir apenas o servidor. Para o propósito deste exemplo, nós vamos assumir que a LAN do servidor usa uma subrede 10.66.0.0/24 e que o endereço de IP da VPN use 10.8.0.0/24 como citado na diretiva no arquivo de configuração do servidor OpenVPN. Primeiramente, você deve mandar a subrede 10.66.0.0/24 ser acessível a clientes atraves da VPN. Isto pode ser facilmente realizado com a seguinte diretiva no arquivo de configuração do servidor: push "route 10.66.0.0 255.255.255.0" Depois, você deve setar um roteamento na gateway da LAN para rotear a subrede do cliente VPN (10.8.0.0/24) ao servidor OpenVPN (isto só é necessário se o servidor OpenVPN e o ga- teway da LAN estão em máquinas diferentes). Incluindo múltiplas máquinas usando uma VPN ponteada (dev tap) Um dos benefícios de se usar ponteamento em ethernet é que você tenha isto de graça sem precisar de configuração adicional. Incluindo múltiplas máquinas no cliente usando uma VPN roteada (dev tun) Num ambiente típico de acesso remoto, a máquina cliente conecta à VPN como uma única máquina. Mas suponha que a máquinha cliente seja um gateway para uma LAN local, e que você queira que cada máquina na LAN cliente seja capaz de rotear através da VPN. Para este exemplo, nós iremos assumir que a LAN cliente esteja usando uma subrede 192.168.4.0/24, e que o cliente VPN esteja usando um certificado com um common name de client2. Nosso ob- jetivo é configurar a VPN para que qualquer máquinha na LAN cliente possa comunicar com qualquer máquina na LAN do servidor através da VPN. Antes de configurar, há alguns pré-requisitos básicos que devem ser seguidos: • A subrede da LAN cliente (192.168.4.0/24 no nosso exemplo) deve ser exportada à VPN pelo servidor ou qualquer outro cliente que esteja usando a mesma subrede. Toda subrede que seja usada na VPN deve ser única. 52
  • 54. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • O cliente deve ter um único Common Name em seu certificado (client2"no nosso exemplo), e a flag duplicate-cn não deve ser usada no arquivo de onfiguração do servidor OpenVPN. Depois, nós vamos lidar com mudanças necessárias na configuração do servidor. Se o ar- quivo de configuração do servidor não referencia um diretório para clientes, adicione uma refe- rência agora: client-config-dir ccd Na diretiva acima, ccd deve ser o nome para o diretório que tenha sido pré-criado no diretó- rio padrão onde o daemon do servidor OpenVPN roda. No Linux esse diretório tende a ser /etc/openvpn e no Windows é usualmente Program FilesOpenVPNconfig. Quando um novo cli- ente se conecta ao servidor OpenVPN, o daemon vai checar este diretório por um arquivo que associe o common name do cliente. Se este arquivo for achado, ele vai ser lido e processado para configurações de diretivas de arquivo adicionais a serem aplicadas ao cliente nomeado. O próximo passo é criar um arquivo chamado client2 no diretório ccd. Este arquivo deve con- ter a linha: iroute 192.168.4.0 255.255.255.0 Ela vai dizer ao servidor OpenVPN que a subrede 192.168.4.0/24 deve ser roteada para o cli- ent2. Depois, adicione a seguinte linha ao arquivo mestre de configuração do servidor (não o ccd/client2): route 192.168.4.0 255.255.255.0 Você deve se perguntar: Por que os estamentos redundantes de route e iroute? A razão é que route controla o roteamento do kernel ao servidor OpenVPN (via interface TUN) enquanto o iroute controla o roteamento do servidor OpenVPN a clientes remotos. Ambos são necessários. Próximo, pergunte a você mesmo se você quer permitir tráfico de rede entre a subrede do client2 (192.168.4.0/24) e outros clientes do servidor OpenVPN. Se sim, adicione a seguinte linha ao arquivo de configuração do servidor. client-to-client push "route 192.168.4.0 255.255.255.0" Isto vai fazer o servidor OpenVPN conectar a subrede do client2 a outros clientes conectados à VPN. O último passo, e um que é freqüentemente esquecido, é adicionar um roteador para o ga- teway da LAN do servidor que direcione 192.168.4.0/24 à máquina do servidor OpenVPN (você não precisa disto se a máquina do servidor OpenVPN é o gateway para a LAN do servidor). Su- ponha que você se esqueceu deste passo e você tenha tentado pingar uma máquina (sem ser o servidor OpenVPN) na LAN do servidor com endereço 192.168.4.8. O ping vai sair e prova- velmente atingir a máquina, mas essa máquina não vai saber como rotear a resposta do ping, porque ela não tem idéia de como atingir 192.168.4.0/24. Similarmente, se a máquina do cliente rodando o OpenVPN não seja o gateway para a LAN do cliente, então o gateway para a LAN do cliente deve ter um roteamento que direcione todas as subredes que deveriam ser atingidas através da VPN para a máquina cliente OpenVPN. 53
  • 55. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Incluindo múltiplas máquinas ao cliente usando uma VPN ponteada (dev tap) Isto exige uma configuração mais complexa (talvez não tão complicada em prática, mas com- plicada de ser explicada com detalhes). 54
  • 56. Capítulo 9 Publicando opções de DHCP 9.1 Fazendo o OpenVPN compatível com DHCP Em nosso exemplo acima, o gateway de casa tem um endereço IP dinamico que pode mudar sem qualquer aviso. Se você usa o dhcpcd como seu cliente dhcp, é facil contruir um script que pode ser executado qualquer hora que o endereço IP mudar. O script ficaria em algum lugar como /etc/dhcpc/dhcpcd-eth0.exe. Basicamente, você deve adicionar uma linha neste script que iria mandar um sinal SIGUSR1 ou SIGHUP para o daemon OpenVPN. Seria algo como: killall -HUP openvpn Quando o OpenVPN recebe este sinal, ele irá fechar e re-abrir a conecxão de rede com a outra ponta, usando o novo endereço IP designado pelo servidor DHCP. Você também deve usar a opção –float se você está conectando a uma ponta que está suce- tivel a mudanças de IP pelo servidor DHCP. Também é possivel trabalhar com trocas de IP com o sinal SIGUSR1 que é como o sinal SIGHUP exceto que ele oferece um controle melhor dos sub-sistemas do OpenVPN que ele re- seta. O sinal SIGUSR1 também pode ser gerado internamente baseado nas opções - -ping e - -ping-restart. A opção –persist-tun permite um reset sem fechar e abrir o device TUN (que permite que conexões via vpn não se percam, mesmo durante uma troca de IP). A opção –persist-remote- ip permite a preservação do endereço IP remoto, mesmo durante uma troca de IP. Isso permite que ambas as pontas da VPN sejam clientes DHCP. A opção - -persist-key não re-lê as chaves durante o restart (o que permite ao daemon OpenVPN ser reiniciado mesmo se seus privilégios forem diminuidos com - -user ou - -group). Para mais informações sobre como usar o OpenVPN em um endereço dinâmico, veja o FAQ. 9.2 Publicando opções de DHCP para clientes O servidor OpenVPN pode publicar opções de DHCP como servidor de endereço DNS e WINS para clientes. Clientes no Windows podem aceitar DHCP publicado nativamente, enquanto clientes não-Windows podem aceitá-las usando um script up que analisa a lista de variáveis ambiente. Veja a man page ou openvpn-users mailing list archive mais informações e exemplos de scripts. 55
  • 57. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Por exemplo, suponha que você queira que clientes conectados usem um servidor DNS in- terno em 10.66.0.4 ou 10.66.0.5 e um servidor WINS em 10.66.0.8. Adicione esta linha ao arquivo de configuração do servidor OpenVPN: push "dhcp-option DNS 10.66.0.4" push "dhcp-option DNS 10.66.0.5" push "dhcp-option WINS 10.66.0.8" Para testar isto no Windows, roda a seguinte linha de comando no prompt depois que a má- quina esteja conectada a um servidor OpenVPN: ipconfig /all Este comando deve dar de saída as opções DHCP oferecidas pelo servidor. 56