Anda di halaman 1dari 17

OpenVPN avanado: Certificados e bridges

Criando certificados X509


Para criar os certificados, utilizaremos o easy-rsa, um conjunto de scripts includos no pacote do
OpenVPN. Na maioria das distribuies, os scripts esto disponeis dentro da pasta
!/usr/share/doc/openvpn/exap!es/eas"#rsa!. "e a pasta no e#istir na sua instalao, use os
comandos abai#o para localiz$-la%
& updatedb
& locate easy-rsa
'uas localizaes comuns so as pastas !(usr(s)are(doc(pac*a+es(openpn(easy-rsa! e
!(usr(s)are(doc(openpn-,.-(easy-rsa!. No .edora, especificamente, / usada a pasta
!(usr(s)are(openpn(easyrsa! e, no 0entO", / usada a pasta !(usr(s)are(doc(openpn-,.-.1(easy-
rsa(! 2onde o ,.-.1 / a erso do pacote, 3ue muda de acordo com a erso do 0entO" usada4.
O primeiro passo / copiar todo o diret5rio para dentro da pasta !(etc(openpn! 2oc6 pode usar
outro diret5rio se preferir4. 7sso eita 3ue nossa confi+urao seja apa+ada ao atualizar o pacote do
OpenVPN no futuro. No 'ebian, o comando seria%
& cp -a (usr(s)are(doc(openpn(e#amples(easy-rsa (etc(openpn(
No .edora, onde a localizao da pasta / diferente, o comando muda para%
& cp -a (usr(s)are(openpn(easyrsa (etc(openpn(
7sso criar$ o diret5rio !(etc(openpn(easy-rsa!, contendo os se+uintes ar3uios%
,.- build-*ey build-re3 ma*e-crl reo*e-full
build-ca build-*ey-pass build-re3-pass openssl.cnf si+n-re3
build-d) build-*ey-p*cs8, clean-all 9:;'<:.+z ars
build-inter build-*ey-serer list-crl reo*e-crt
:m outras distribuies, basta erificar 3ual / a pasta onde esto os e#emplos e ajustar o comando
de acordo.
; partir da, toda a confi+urao ser$ feita dentro do noo diret5rio%
& cd (etc(openpn(easy-rsa
0omece editando o ar3uio !vars!, usando seu editor de te#tos preferido%
& joe ars
No final do ar3uio, oc6 encontra um conjunto de par=metros usados para +erar as c)aes 2pas,
estado, cidade, empresa, etc.4, 3ue deem ser editados, como em%
e#port >:?@0OANB9?CD9
e#port >:?@P9OV7N0:C"P
e#port >:?@07B?C!Euarul)os!
e#port >:?@O9EC!E'F!
e#port >:?@:<;7GC!morimotoH+uiado)ardIare.net!
:m se+uida, usamos o comando !source! para carre+ar as ari$eis contidas dentro do ar3uio
!ars! e, em se+uida, e#ecutamos os scripts !clean-all! e !build-ca!. O primeiro script limpa
3ual3uer sobra de confi+urao anterior, en3uanto o se+undo +era o certificado raiz, usando o
openssl. 0omo os scripts esto dentro do diret5rio atual, usamos o !.(! ao e#ecut$-los%
& source ars
& .(clean-all
& .(build-ca
Eeneratin+ a 8-,J bit 9"; priate *ey
...................KKKKKK
.....................KKKKKK
Iritin+ neI priate *ey to Lca.*eyL
-----
?ou are about to be as*ed to enter information t)at Iill be incorporated into your certificate re3uest.
M)at you are about to enter is I)at is called a 'istin+uis)ed Name or a 'N.
B)ere are 3uite a feI fields but you can leae some blan*
.or some fields t)ere Iill be a default alue,
7f you enter L.L, t)e field Iill be left blan*.
-----
0ountry Name 2, letter code4 ND9O%
"tate or Proince Name 2full name4 N"PO%
Gocality Name 2e+, city4 NEuarul)osO%
Or+anization Name 2e+, company4 NE'FO%
Or+anizational Anit Name 2e+, section4 NO%
0ommon Name 2e+, your name or your sererLs )ostname4 NO%
:mail ;ddress NmorimotoH+uiado)ardIare.netO%
7sso criar$ a pasta !(etc(openpn(easy-rsa(*eys(!, contendo os se+uintes ar3uios%
ca.crt ca.*ey inde#.t#t serial
O ar3uio !ca$crt! cont/m o certificado raiz. :le jamais dee sair do seridor, j$ 3ue 3ual3uer um
3ue ten)a acesso a ele poder$ +erar certificados adicionais 3ue, essencialmente, permitiro 3ue
3ual3uer um se conecte P VPN. ; necessidade de manter esse ar3uio secreto faz com 3ue al+uns
administradores prefiram +erar as c)aes em uma m$3uina desconectada da rede 2apenas com
acesso local4 e copiar manualmente os certificados +erados para o seridor e as demais m$3uinas.
'epois de criar o certificado raiz, podemos passar para o passo se+uinte, 3ue / +erar os certificados
para o seridor e para os clientes.
Para +erar o certificado do seridor, usamos o script !build-*ey-serer!, especificando como
par=metro o nome do ar3uio 3ue ser$ +erado 2!seridor! no e#emplo4. O nome / apenas para
identificao dos )osts, oc6 pode usar os nomes 3ue preferir%
& cd (etc(openpn(easy-rsa(
& .(build-*ey-serer seridor
:le comea confirmando as informaes 3ue sero includas no certificado 2pas, cidade, empresa,
etc.4, da mesma forma 3ue ao rodar o build-ca. :m um certo ponto, ele per+untar$ pelo atributo
!0ommon Name!, onde oc6 dee fornecer o nome do seridor, como em%
0ommon Name 2e+, your name or your sererLs )ostname4 NO%%tch
:m se+uida, ele oferece a opo de incluir um !c)allen+e passIord!, uma sen)a 3ue ser$ solicitada
cada ez 3ue o certificado for usado. :la aumenta a se+urana, mas, em compensao, reduz
bastante a praticidade, j$ 3ue oc6 precisar$ di+itar a sen)a cada ez 3ue o certificado for utilizado,
o 3ue pode se tornar incrielmente inconeniente em um seridor administrado remotamente. "e
3uiser manter as coisas simples, dei#e o campo em branco%
; c)allen+e passIord NO%
;ntes de terminar, ele confirma se oc6 deseja assinar o certificado e pede mais uma confirmao
antes de aplicar a alterao. 9esponda !y! em ambas, caso contr$rio a +erao do certificado /
abortada%
"i+n t)e certificateQ Ny(nO%"
8 out of 8 certificate re3uests certified, commitQ Ny(nO"
:m se+uida, +eramos as c)aes 3ue sero usadas pelos clientes, usando o script !build-*ey!. Voc6
pode +erar c)aes para $rios clientes em se3R6ncia, especificando nomes diferentes, como em%
& .(build-*ey cliente8
& .(build-*ey cliente,
0ada ez 3ue o comando / e#ecutado, o script mostra a sada do comando do openssl usado para
+erar a c)ae e confirma os par=metros do certificado, como ao rodar o !build-*ey-serer!%
Eeneratin+ a 8-,J bit 9"; priate *ey
.KKKKKK
.......................KKKKKK
Iritin+ neI priate *ey to Lcliente8.*eyL
"e ao e#ecutar o comando !.(build-*ey nome! ele simplesmente for e#ecutado instantaneamente,
sem e#ibir o indicador ou 3ual3uer mensa+em de erro, / sinal de 3ue al+uma coisa est$ errada,
proaelmente com a atribuio das ari$eis usada pelo script. Nesse caso, e#perimente rodar
noamente o comando !source ars! e e#ecutar o script noamente, como em%
& source ars
& .(build-*ey cliente8
No se es3uea de preenc)er a opo !commonName! com o nome da m$3uina 2ou outro nome
definido por oc6, diferente em cada c)ae4. 'ei#ando o campo em branco a c)ae no / +erada.
No final do processo, no es3uea de responder as per+untas !"i+n t)e certificateQ! e !8 out of 8
certificate re3uests certified, commitQ! com o alor !y!.
0ommon Name 2e+, your name or your sererLs )ostname4 NO%cliente8
...
"i+n t)e certificateQ Ny(nO%y
8 out of 8 certificate re3uests certified, commitQ Ny(nO"
'iferente do !build-*ey-serer!, ele no oferece a opo de prote+er a c)ae usando uma sen)a. "e
oc6 3uiser 3ue os usu$rios precisem di+itar uma sen)a antes de poderem efetuar a cone#o usando
o certificado, +ere as c)aes usando o script !bui!d#&e"#pass! em ez do !build-*ey!. :le confirma
todos os par=metros 2assim como o build-*ey-serer4 e oferece a opo incluir a sen)a%
& .(build-*ey-pass cliente,
:m se+uida, usamos o script !build-d)! 2sem par=metros4. :le +era os par=metros 'iffie Fellman,
3ue reforam a se+urana, permitindo 3ue o seridor e os clientes tro3uem as c)aes 2de forma
se+ura4 no momento da cone#o, confirmando suas identidades%
& .(build-d)
Eeneratin+ 'F parameters, 8-,J bit lon+ safe prime, +enerator ,
B)is is +oin+ to ta*e a lon+ time
....................................K...........K...............
O comando demora 3uase um minuto para +erar os par=metros, mostrando um indicador de
pro+resso durante o processo. :m caso de problemas, certifi3ue-se de 3ue est$ rodando os
comandos a partir do diret5rio !(etc(openpn(easy-rsa!, rode o comando !source ars! para carre+ar
as ari$eis e tente noamente.
O processo de +erao das c)aes +era um conjunto de ar3uios !.csr!. :stes ar3uios
correspondem Ps re3uisies para a assinatura das c)aes, 3ue so feitas durante o processo de
criao. :les podem ser remoidos no final do processo%
& rm S.csr
Voc6 ficar$, ento, com um conjunto de ar3uios similar a esse dentro do diret5rio
!(etc(openpn(easy-rsa(*eys!%
ca.crt cliente8.*ey cliente,.*ey inde#.t#t seridor.crt
ca.*ey cliente,.crt clienteT.crt inde#.t#t.attr seridor.*ey
cliente8.crt cliente,.csr clienteT.*ey serial
0aso esteja curioso, estes scripts nada mais fazem do 3ue e#ecutar os comandos correspondentes do
Open""G, usando os par=metros definidos no ar3uio !ars!. O script !build-*ey!, por e#emplo,
e#ecuta os comandos%
cd U>:?@'79 VV
openssl re3 -days TWX- -nodes -neI -*eyout U8.*ey -out U8.csr -confi+ U>:?@0ON.7E VV
openssl ca -days TWX- -out U8.crt -in U8.csr -confi+ U>:?@0ON.7E VV
c)mod -W-- U8.*ey
Note 3ue / usado o par=metro !-days TWX-!, 3ue faz com 3ue as c)aes ten)am alidade de 8-
anos. "e a sua VPN ainda estier em uso at/ l$, no se es3uea de trocar as c)aes antes do TWX-Y
dia, caso contr$rio sua VPN parar$ de funcionar ap5s completar o d/cimo aniers$rio. %4
'nsta!ando os certificados
.alta a+ora fazer a instalao das c)aes, tanto no seridor 3uanto nos clientes. Para o seridor, crie
o diret5rio !(etc(openpn(*eys! e copie para ele os ar3uios !ca.crt!, !seridor.crt! e !seridor.*ey!,
como em%
& cd (etc(openpn(easy-rsa(*eys
& m*dir (etc(openpn(*eys
& cp -a ca.crt seridor.crt seridor.*ey (etc(openpn(*eys(
0opie tamb/m o ar3uio !d)8-,J.pem! 2o nZmero 8-,J corresponde ao comprimento da c)ae e
pode mudar de acordo com a confi+urao4. :le / +erado ao rodar o script !build-d)! e /
importante, pois cont6m os par=metros 'iffie Fellman%
& cp -a d)8-,J.pem (etc(openpn(*eys(
O passo final / fazer a c5pia dos certificados para os clientes, usando o ".BP ou outra ferramenta
de transfer6ncia de ar3uios.
Bodos os clientes deem possuir o ar3uio !ca$crt!, o ar3uio !dh(0)*$pe! e os ar3uios .crt e
.*ey correspondentes a ele. O cliente8 receberia os ar3uios !ca.crt!, !d)8-,J.pem!, !cliente8.crt! e
!cliente8.*ey![ o cliente, receberia os ar3uios !ca.crt!, !d)8-,J.pem!, !cliente,.crt! e
!cliente,.*ey!, e assim por diante. :m resumo, temos%
;r3uios na pasta !(etc(openpn(*eys! do seridor%
ca.crt, d)8-,J.pem, seridor.crt, seridor.*ey
;r3uios na pasta !(etc(openpn(*eys! do cliente%
ca.crt, d)8-,J.pem, cliente.crt, cliente.*ey
Nos clientes Ginu#, crie o diret5rio !/etc/openvpn/&e"s! e copie os 3uatro ar3uios para ele. "e eles
estierem com o seridor ""F atio 2e oc6 tier a sen)a de root4, pode fazer a c5pia a partir do
pr5prio seridor, usando o ".BP, como em%
& sftp rootH81,.8W\.8.,8
PassIord%
sftp] m*dir (etc(openpn(*eys
sftp] cd (etc(openpn(*eys
sftp] put ca.crt
sftp] put d)8-,J.pem
sftp] put cliente8.crt
sftp] put cliente8.*ey
No caso dos clientes MindoIs, os 3uatro ar3uios deem ser copiados para o diret5rio !*eys!,
dentro do diret5rio de instalao do OpenVPN, como em !0%^;r3uios de
pro+ramas^OpenVPN^confi+*eys!. ;ssim como no caso dos clientes Ginu#, / necess$rio criar o
diret5rio manualmente%

O uso de c)aes torna necess$rio 3ue os rel5+ios das m$3uinas estejam sincronizados. No Ginu#,
oc6 pode acertar o rel5+io da m$3uina ia Ieb usando o comando%
& ntpdate -u pool.ntp.or+
No MindoIs, mar3ue a opo !"incronizar automaticamente com um seridor de )or$rio na
7nternet!, disponel no Painel de 0ontrole ] 'ata e )ora ] For$rio na 7nternet!.
+,ustando a configura-o e roteando pacotes
; parte mais complicada em usar certificados / a confi+urao inicial, 3ue acabamos de fazer. Ama
ez 3ue os certificados j$ esto criados e instalados nos clientes, tudo fica mais simples.
Vamos comear com uma confi+urao b$sica, similar P VPN 3ue criamos inicialmente utilizando
c)aes est$ticas. Nesse e#emplo, estou utilizando o sistema tap 2em ez do tun, como no e#emplo
anterior4 e estou utilizando os certificados anteriormente criados. ; diferena entre o tun e o tap /
3ue no tun o tr$fe+o da rede / roteado 2o 3ue elimina os pacotes de broadcast4, en3uanto no tap tudo
/ transmitido, incluindo pacotes de broadcast e pacotes de outros protocolos de rede 2como o
7P_("P_4.
O ar3uio !/etc/openvpn/server$conf! no seridor ficaria%
de tap
ifconfi+ 8-.-.-.8 ,XX.,XX.,XX.-
tls-serer
d) (etc(openpn(*eys(d)8-,J.pem
ca (etc(openpn(*eys(ca.crt
cert (etc(openpn(*eys(seridor.crt
*ey (etc(openpn(*eys(seridor.*ey
Veja 3ue a+ora usamos a lin)a !tls-serer! e especificamos a localizao dos J ar3uios com os
certificados 3ue instalamos nos passos anteriores. ; lin)a !ifconfi+! especifica o endereo 7P 3ue
ser$ usado pelo seridor, juntamente com a m$scara de subrede.
; confi+urao no ar3uio !/etc/openvpn/c!ient$conf! nos clientes ficaria%
remote +uiado)ardIare.no-ip.or+
de tap
tls-client
ifconfi+ 8-.-.-., ,XX.,XX.,XX.-
d) (etc(openpn(*eys(d)8-,J.pem
ca (etc(openpn(*eys(ca.crt
cert (etc(openpn(*eys(cliente8.crt
*ey (etc(openpn(*eys(cliente8.*ey
Note 3ue o !ifconfi+ 8-.-.-.8 ,XX.,XX.,XX.-! na confi+urao do seridor e o !ifconfi+ 8-.-.-.,
,XX.,XX.,XX.-! na confi+urao do cliente indicam os endereos 3ue sero usados pelas interfaces
de rede irtual. :les no tem relao nen)uma com os endereos reais das m$3uinas. O Znico local
onde o endereo !real! do seridor / especificado, / na opo !remote!, includa na confi+urao do
cliente.
0riados os ar3uios de confi+urao no seridor e no cliente, reinicie o serio em ambas as
m$3uinas, para 3ue o daemon leia a noa confi+urao e estabelea a cone#o%
& (etc(init.d(openpn restart
"e a VPN no funcionar, ou se oc6 receber um !"tartin+ irtual priate netIor* daemon%
client2.;7G:'4! ao reiniciar o serio, e#perimente atiar o OpenVPN manualmente 2no cliente4,
usando o comando%
& openpn --confi+ client.conf
7sso faz com 3ue ele e#iba as mensa+ens +eradas pelo pro+rama durante a inicializao, o 3ue pode
ajud$-lo a identificar o problema. Pode ser 3ue ele no esteja conse+uindo contactar o seridor no
endereo especificado 2ou o fireIall pode estar blo3ueando a porta especificada na confi+urao4,
pode e#istir al+um erro na confi+urao, ou pode ter )aido al+um problema durante a +erao ou a
c5pia das c)aes, por e#emplo.
Nos clientes MindoIs, a confi+urao / 3uase id6ntica, mudando apenas as lin)as com a
localizao das c)aes. "e oc6 as colocou dentro da pasta !*eys!, no diret5rio de confi+urao, o
ar3uio !client.opn! ficaria como no screens)ot a se+uir%

Para permitir 3ue $rios clientes se conectem simultaneamente P VPN, / necess$rio fazer al+umas
mudanas na confi+urao. ; principal delas / 3ue, em ez de especificar manualmente o endereo
7P usado pelo seridor e pelo cliente usando o comando !ifconfi+! como em !ifconfi+ 8-.-.-.,
8-.-.-.8! 23ue usamos nos e#emplos onde foi utilizada a interface tun4 ou !ifconfi+ 8-.-.-.8
,XX.,XX.,XX.-! 2usado no e#emplo com o tap4, passamos a especificar uma fai#a de endereos 7P
para a VPN e dei#amos 3ue o seridor atribua endereos para os clientes conforme eles se
conectam.
7sso / mais simples do 3ue parece. Na confi+urao do seridor utilizaremos a lin)a !serer!
2dei#ando de usar a lin)a do ifconfi+4, especificando a fai#a de endereos e a m$scara, como em%
serer 8-.-.-.- ,XX.,XX.,XX.-
` importante enfatizar 3ue a fai#a de endereos utilizada na VPN dee ser diferente da fai#a de
endereos utilizada na rede local P 3ual o seridor est$ li+ado, 3ue, por sua ez, tamb/m dee ser
diferente da fai#a de endereos de rede local utilizada pelo cliente.
Ori+inalmente, o cliente tem acesso apenas ao pr5prio seridor. Para permitir 3ue ele possa acessar
os demais )osts da rede local, adicionamos uma lin)a adicional, 3ue faz com 3ue o seridor inclua
uma re+ra de roteamento na confi+urao do cliente, no momento da cone#o. :la especifica a fai#a
de endereos e a m$scara usada na rede local%
pus) !route 81,.8W\.8.- ,XX.,XX.,XX.-!
0om a re+ra, o cliente passar$ a usar o endereo 7P do seridor na VPN como rota padro para os
pacotes destinados P fai#a de endereos especificada. :ssa lin)a substitui o comando !route add -net
81,.8W\.8.- netmas* ,XX.,XX.,XX.- +I 8-.-.-.8 de tun-! 2e#ecutado no cliente4 3ue usamos no
t5pico sobre VPNs com c)aes est$ticas.
Na confi+urao do cliente, adicionamos a lin)a !pull! 2pus) C empurrar, pull C pu#ar4, para 3ue ele
aceite as confi+uraes fornecidas pelo seridor. 0om isso, o cliente recebe automaticamente um
endereo aleat5rio dentro da fai#a !8-.-.-.#!, sem 3ue oc6 precise especificar a confi+urao de
cada um manualmente%
pull
Bemos a3ui um e#emplo de confi+urao completa do seridor, utilizando a interface tun,
especificando uma porta A'P alternatia e utilizando as noas opes%
proto udp
port ,,,,,
de tun
server (0$0$0$0 )55$)55$)55$0
push .route (9)$(/0$($0 )55$)55$)55$0.
tls-serer
d) (etc(openpn(*eys(d)8-,J.pem
ca (etc(openpn(*eys(ca.crt
cert (etc(openpn(*eys(seridor.crt
*ey (etc(openpn(*eys(seridor.*ey
; confi+urao correspondente para o cliente seria%
remote +uiado)ardIare.no-ip.or+
proto udp
port ,,,,,
c!ient
pu!!
de tun
tls-client
d) (etc(openpn(*eys(d)8-,J.pem
ca (etc(openpn(*eys(ca.crt
cert (etc(openpn(*eys(cliente8.crt
*ey (etc(openpn(*eys(cliente8.*ey
0om essa confi+urao, o seridor passa a ser capaz de receber cone#es a partir de $rios clientes
simultaneamente. O OpenVPN / capaz de +erenciar todas as cone#es utilizando a mesma porta.
Para adicionar um noo cliente P VPN, oc6 precisaria apenas +erar um noo certificado, usando o
comando !.(build-*ey! e copiar os 3uatro ar3uios para dentro da pasta !(etc(openpn(*eys! 2al/m
de instalar o OpenVPN, naturalmente4. :m resumo, os comandos para +erar um noo certificado
so%
& cd (etc(openpn(easy-rsa(
& source ars
& .(build-*ey noocliente
; confi+urao / a mesma 3ue foi usada para o primeiro cliente, mudando apenas os ar3uios dos
certificados. 0om isso, cada cliente recebe um endereo diferente dentro da fai#a !8-.-.-.#! e pode
acessar o seridor atra/s do endereo !8-.-.-.8!.
` necess$rio tamb/m atiar, no seridor, a re+ra de fireIall 3ue roteia os pacotes proenientes dos
clientes da VPN para a interface de rede local. 0omo a+ora estamos utilizando endereos atribudos
automaticamente, e no mais endereos est$ticos, especificamos a fai#a de endereos, em ez de
especificar diretamente o endereo usado pelo cliente%
& ec)o 8 ] (proc(sys(net(ipJ(ip@forIard
& iptables -t nat -s 8-.-.-.-(,J -; PO"B9OAB7NE -o et)- -j <;"aA:9;':
:stes dois comandos precisam ser e#ecutados pelo seridor a cada boot. Voc6 pode inclu-los no seu
script de fireIall, ou em al+um dos scripts de inicializao do sistema.
Ama opo Ztil ao usar $rios clientes / a opo !ifconfig#poo!#persist!. :la faz com 3ue o
OpenVPN passe a armazenar uma lista com os endereos 7P usados por cada cliente da VPN e faa
o possel para atribuir sempre os mesmos endereos em futuras cone#es. 7sso no impede 3ue os
endereos mudem, mas torna as mudanas muito menos fre3Rentes. :sta opo / includa apenas na
confi+urao do seridor, especificando um ar3uio de te#to onde a lista ser$ sala, como em%
ifconfi+-pool-persist (etc(openpn(ipp.t#t
O ar3uio / criado e atualizado automaticamente pelo OpenVPN. ; Znica e#i+6ncia / 3ue ele dee
ser criado dentro do diret5rio !(etc(openpn!, ou outra pasta P 3ual o usu$rio !openpn! 2usado pelo
daemon4 ten)a acesso.
Ama opo 3ue aumenta a se+urana dos clientes / a !reote#cert#t!s server!, 3ue faz com 3ue os
clientes erifi3uem o certificado do seridor no momento da cone#o. :la / mais uma opo
destinada a prote+er os clientes contra ata3ues man-in-t)e-middle. :sta opo / adicionada apenas
na confi+urao dos clientes%
remote-cert-tls serer
Ama obserao importante / 3ue esta opo / suportada apenas pelo OpenVPN erso ,.8 2final4
em diante. "e o cliente usar uma erso anterior 2como o OpenVPN ,.8@rcJ, usado no 'ebian
:tc)4, a opo muda para !ns#cert#t"pe server!%
ns-cert-type serer
Voc6 pode erificar 3ual / a erso do OpenVPN usada, e assim descobrir 3ual das duas opes
dee ser utilizada, usando o comando%
& openpn --ersion
Asar a opo !remote-cert-tls serer! em um cliente com uma erso anti+a do OpenVPN faz com
3ue o serio simplesmente dei#e de funcionar, at/ 3ue oc6 a substitua pela !ns-cert-type serer!.
Outro problema comum / com relao ao uso da banda pelos usu$rios da VPN. "e uma Znica
cone#o Ieb / diidida entre o uso da VPN e o acesso P Ieb, oc6 ai proaelmente 3uerer
restrin+ir o uso de banda da VPN, para eitar 3ue c5pias de +randes ar3uios e outras atiidades
3ue enolam +rande uso de banda saturem a cone#o.
7sso / feito usando a opo !s)aper!, 3ue limita a banda total de sada usada pela VPN a um
determinado olume de tr$fe+o. "e oc6 usa um lin* ;'"G com X8, *bits 2ou seja, WJ *bytes4 de
upload, oc6 poderia restrin+ir o uso de banda pela VPN a X- *bytes, por e#emplo, de forma a
dei#ar pelo menos uma pe3uena poro da banda reserada para outros usos.
; opo !s)aper! pode ser includa na confi+urao do seridor 2para 3ue seja aplicada ao tr$fe+o
de sada somado de todos os clientes conectados a ele4, na confi+urao dos clientes 2limitando
assim o tr$fe+o de sada permitido por cada um4 ou em ambos. Dasta especificar o limite desejado,
em bytes, como em%
s)aper X8,--
Voc6 pode tamb/m limitar o nZmero de clientes simult=neos 3ue sero aceitos pelo seridor usando
a opo !ax#c!ients!, especificando o nZmero de clientes desejados, como em%
ma#-clients 8-
Ama Zltima opo, 3ue pode ser usada para prote+er sua VPN contra ata3ues 'o" e oferecer uma
camada adicional de se+urana / a opo !t!s#auth!.
0om ela, uma c)ae compartil)ada / usada para criar uma se+unda camada de encriptao sobre os
pacotes j$ encriptados usando os certificados. O seridor s5 aceita pedidos de cone#o encriptados
com a c)ae compartil)ada, o 3ue faz com 3ue pedidos de cone#o de pessoas no autorizadas 23ue
no tero a c)ae4 se3uer sejam processados.
Para utilizar a opo, / necess$rio criar uma c)ae est$tica, usando o comando !openpn --+en*ey
--secret!, o mesmo 3ue utilizamos no inicio para +erar a c)ae est$tica usada na nossa VPN inicial.
:ste ar3uio pode ser armazenado no diret5rio !(etc(openpn(*eys!, junto com os ar3uios dos
certificados%
& cd (etc(openpn(*eys
& openpn --+en*ey --secret c)ae.*ey
O ar3uio +erado dee ser ento copiado para todos os clientes. O pr5#imo passo / adicionar a
opo, tanto na confi+urao do seridor 3uanto na dos clientes, especificando a localizao do
ar3uio, como em%
tls-aut) (etc(openpn(*eys(c)ae.*ey
Note 3ue, nesse caso, a c)ae no permite acessar a VPN. :la / apenas um pr/-re3uisito para poder
eniar re3uisies de cone#o para o seridor, ou seja, apenas uma acamada adicional de proteo.
;l/m dela, / necess$rio ter os J ar3uios com o certificado e as c)aes, como nos e#emplos
anteriores.
Bemos a3ui um e#emplo final de confi+urao para o seridor, utilizando todas as opes 3ue imos
at/ a3ui%
& (etc(openpn(serer.conf
proto udp
port ,,,,,
de tun
serer 8-.-.-.- ,XX.,XX.,XX.-
pus) !route 81,.8W\.8.- ,XX.,XX.,XX.-!
comp-lzo
*eepalie 8- 8,-
persist-*ey
persist-tun
float
ifconfi+-pool-persist (etc(openpn(ipp.t#t
ma#-clients 8-
s)aper X8,--
tls-serer
d) (etc(openpn(*eys(d)8-,J.pem
ca (etc(openpn(*eys(ca.crt
cert (etc(openpn(*eys(seridor.crt
*ey (etc(openpn(*eys(seridor.*ey
tls-aut) (etc(openpn(static.*ey
;3ui ai o ar3uio de confi+urao correspondente para os clientes%
& (etc(openpn(client.conf
remote +uiado)ardIare.no-ip.or+
proto udp
port ,,,,,
client
pull
de tun
comp-lzo
*eepalie 8- 8,-
persist*ey
persisttun
float
tls-client
d) (etc(openpn(*eys(d)8-,J.pem
ca (etc(openpn(*eys(ca.crt
cert (etc(openpn(*eys(cliente8.crt
*ey (etc(openpn(*eys(cliente8.*ey
tls-aut) (etc(openpn(static.*ey
"e oc6 j$ est$ com o seridor OpenVPN atio, precisa apenas reiniciar o serio para 3ue a noa
confi+urao entre em i+or, como em%
& (etc(init.d(openpn restart
ou%
& serice openpn restart
"e oc6 receber um !"tartin+ irtual priate netIor* daemon% serer2.;7G:'4.!, erifi3ue todas as
opes e c)e3ue se os ar3uios dos certificados foram +erados e copiados corretamente.
0omo comentei anteriormente, o conteZdo do ar3uio de confi+urao nos clientes MindoIs /
e#atamente o mesmo, mudando apenas as lin)as com as localizaes dos ar3uios com os
certificados.
No MindoIs, so usadas barras inertidas ao indicar a localizao de ar3uios e isso se aplica
tamb/m P confi+urao do OpenVPN. :ntretanto, as barras inertidas so tamb/m usadas como
caracteres de escape no s)ell, por isso 2por estran)o 3ue possa parecer4, ao indicar localizaes de
ar3uios na confi+urao do OpenVPN no MindoIs oc6 dee duplicar todas as barras inertidas e
colocar a localizao entre aspas, como em%
static !0%^;r3uios de pro+ramas^OpenVPN^*eys^static.*ey!
Am Zltimo tru3ue / 3ue, em um seridor com $rias cone#es, ou no caso de uma rede com $rios
seridores de VPN 2onde os clientes podem se conectar a 3ual3uer um dos seridores para obter
acesso P rede4, oc6 pode criar um sistema simples de redund=ncia e de balanceamento de car+a
especificando os endereos de todos os seridores na confi+urao dos clientes 2criando $rias
lin)as !remote!4 e adicionando a opo !reote#rando!, como em%
remote +uiado)ardIare.no-ip.or+
remote +d)n.com.br
remote +d)press.com.br
remote-random
7sso faz com 3ue o cliente escol)a aleatoriamente entre os tr6s endereos especificados a cada
cone#o, tentando os outros dois caso o primeiro esteja inacessel. 0omo cada cliente escol)er$
um seridor diferente a cada cone#o, a car+a acabar$ sendo diidida i+ualmente entre os
seridores.
1evogando certificados e b!o2ueando c!ientes
Ama parte importante do +erenciamento dos certificados no OpenVPN / a reo+ao dos
certificados 3ue no deem mais ser utilizados. 7ma+ine o caso de um noteboo* 3ue foi roubado,
por e#emplo. "e os certificados no forem reo+ados, 3ual3uer um em posse deles poder$ 2a menos
3ue oc6 inclua uma sen)a ao +erar os certificados4 se conectar P VPN e, a partir da, ter acesso P
rede interna da empresa.
O processo de reo+ao dos certificados consiste em criar um ar3uio contendo a lista dos
certificados reo+ados e confi+urar o seridor para utiliz$-lo. ; partir da, no importa mais se os
ar3uios do certificado reo+ados sejam distribudos, j$ 3ue eles no tero mais serentia al+uma.
Para criar a lista, acesse o diret5rio !(etc(openpn(easy-rsa! no seridor 2ou na m$3uina 3ue estier
usando para +erar os certificados4 e carre+ue as ari$eis do ar3uio !ars!%
& cd (etc(openpn(easy-rsa
& source ars
:#ecute o comando !reo*e-full!, especificando o certificado 3ue ser$ reo+ado, como em%
& .(reo*e-full cliente8
Asin+ confi+uration from (etc(openpn(easy-rsa(openssl.cnf
9eo*in+ 0ertificate -\.
'ata Dase Apdated
Asin+ confi+uration from (etc(openpn(easy-rsa(openssl.cnf
cliente8.crt% (0CD9("BC"P(OCE'F(0NCcliente8(email;ddressCfooHbar.com
error ,T at - dept) loo*up%certificate reo*ed
; mensa+em !error ,T! indica 3ue o certificado foi reo+ado com sucesso, ou seja, ela no /
e#atamente uma mensa+em de erro e sim uma confirmao.
O comando +era o ar3uio !cr!$pe!, dentro do diret5rio !(etc(openpn(easy-rsa(*eys!. O pr5#imo
passo / copiar o ar3uio para o diret5rio !/etc/openvpn/&e"s! do seridor, a mesma pasta utilizada
pelos ar3uios com os certificados.
Para 3ue ele passe a ser utilizado pelo OpenVPN, adicione o par=metro !crl-erify! na confi+urao
do seridor, especificando a localizao do ar3uio, como em%
crl-erify (etc(openpn(*eys(crl.pem
Para 3ue a alterao entre em i+or, reinicie o OpenVPN%
& (etc(init.d(openpn restart
0om isso, o cliente perde imediatamente o acesso P VPN e passa a receber um erro !BG" :rror%
BG" )ands)a*e failed! ao tentar se conectar noamente.
Para reo+ar mais c)aes, repita o processo, no se es3uecendo de copiar o ar3uio atualizado para
a pasta !(etc(openpn(*eys! do seridor a cada alterao. "e oc6 est$ +erando as c)aes usando o
pr5prio seridor, pode tamb/m especificar diretamente o ar3uio na pasta !(etc(openpn(easy-
rsa(*eys! na opo[ assim oc6 elimina a necessidade de copiar manualmente o ar3uio a cada
alterao. Am e#emplo de confi+urao seria%
crl-erify (etc(openpn(easy-rsa(*eys(crl.pem
Para 3ue o OpenVPN leia o ar3uio atualizado, use o par=metro !reload! do serio. 7sso atualiza a
confi+urao sem derrubar os clientes conectados%
& (etc(init.d(openpn reload
Criando bridges no OpenVPN
; confi+urao 3ue imos at/ a+ora faz com 3ue o tr$fe+o seja roteado atra/s da VPN. 7sso
mel)ora o desempen)o, pois elimina a transmisso do tr$fe+o de broadcast e de 3ual3uer outro
protocolo de rede 3ue no seja o B0P(7P. ; desanta+em / 3ue, sem a transmisso do tr$fe+o de
broadcast, recursos como a nae+ao no ambiente de redes 2nos clientes MindoIs4 ou a instalao
autom$tica de impressoras compartil)adas atra/s do 0ups 2nos clientes Ginu#4 dei#em de
funcionar.
"e oc6 est$ disposto a sacrificar parte do lin* para 3ue a VPN se comporte como uma rede local,
como se todos os micros estiessem conectados ao mesmo sIitc), e#iste a opo de criar um
brid+e, unindo a interface irtual da VPN e a interface da rede local. 0om isso, o seridor passa a
usar o mesmo endereo, tanto na rede local 3uanto na VPN e os clientes conectados P VPN podem
receber um endereo dentro da fai#a usada na rede local. 0om isso, eles passam a no apenas
acessar, mas tamb/m a serem acessados pelos demais micros.
Para isso, precisaremos de um pacote adicional, o !bridge#uti!s!, 3ue dee ser instalado no
seridor. :ste / um pacote padro, 3ue est$ disponel em todas as principais distribuies e pode
ser instalado usando o +erenciador de pacotes, como em%
& apt-+et install brid+e-utils
ou%
& yum install brid+e-utils
:m se+uida, precisamos fazer al+umas alteraes na confi+urao do seridor. ; primeira delas / a
criao de dois scripts, um para atiar e o outro para desatiar o brid+e. :stes scripts sero
e#ecutados juntamente com o OpenVPN, na atiao e desatiao do serio.
O primeiro deles / o script !/etc/openvpn/bridge#start!, 3ue cont/m os comandos 3ue atiam o
brid+e. Veja 3ue este script cont/m uma s/rie de par=metros 23ue colo3uei em ne+rito4, 3ue
precisam ser alterados de acordo com a confi+urao do seridor%
&b(bin(bas)
& (etc(openpn(brid+e-start
brC!br-!
tapC!tap-!
eth3.eth0.
eth4ip3.(9)$(/0$($(0(.
eth4g53.(9)$(/0$($(.
eth4netas&3.)55$)55$)55$0.
eth4broadcast3.(9)$(/0$($)55.
for t in Utap[ do
openpn --m*tun --de Ut
done
brctl addbr Ubr
brctl addif Ubr Uet)
for t in Utap[ do
brctl addif Ubr Ut
done
for t in Utap[ do
ifconfi+ Ut -.-.-.- promisc up
done
ifconfi+ Uet) -.-.-.- promisc up
ifconfi+ Ubr Uet)@ip netmas* Uet)@netmas* broadcast Uet)@broadcast
route add default +I Uet)@+I de Ubr
iptables -; 7NPAB -i tap- -j ;00:PB
iptables -; 7NPAB -i br- -j ;00:PB
iptables -; .O9M;9' -i br- -j ;00:PB
; ari$el !et)! inclui o deice da placa de rede e a !et)@ip! cont/m o endereo utilizado pelo
seridor 2nesse e#emplo, o seridor utiliza um endereo de rede interna, pois acessa atra/s de uma
cone#o compartil)ada, onde apenas a porta do OpenVPN / roteada para ele4. ; ari$el !et)@+I!
inclui o +ateIay da rede 2utilizado pelo seridor4, en3uanto a !et)@netmas*! e !et)@broadcast!
incluem a m$scara e o endereo de broadcast da rede. Os tr6s comandos finais incluem re+ras no
fireIall para permitir o tr$fe+o nas interfaces.
:m se+uida, temos o script !/etc/openvpn/bridge#stop!, respons$el por desatiar o brid+e.
'iferente do primeiro, os par=metros so fi#os, mudando apenas em confi+uraes especiais%
&b(bin(bas)
& (etc(openpn(brid+e-stop
brC!br-!
tapC!tap-!
ifconfi+ Ubr doIn
brctl delbr Ubr
for t in Utap[ do
openpn --rmtun --de Ut
done
'epois de criar os dois scripts, transforme-os em e#ecut$eis usando o comando !c)mod K#!, como
em%
& c)mod K# (etc(openpn(brid+e-start
& c)mod K# (etc(openpn(brid+e-stop
:m se+uida, temos as mudanas na confi+urao do seridor. ; primeira mudana / 3ue o brid+e
utiliza a interface !tap! em ez da !tun! 2o tap transmite pacotes de broadcast e o tun no4, por isso,
substitumos a lin)a !de tun! por !de tap-!.
; lin)a !serer 8-.-.-.- ,XX.,XX.,XX.-! dos e#emplos anteriores dei#a de ser usada, dando lu+ar ao
par=metro !serer-brid+e!, 3ue cont/m um conjunto mais e#tenso de par=metros%
serer-brid+e 81,.8W\.8.8-8 ,XX.,XX.,XX.- 81,.8W\.8.,8- 81,.8W\.8.,,-
O primeiro par=metro 281,.8W\.8.8-84 inclui o endereo 7P do seridor, se+uido pela m$scara. Os
dois endereos se+uintes 281,.8W\.8.,8- 81,.8W\.8.,,-4 especificam uma fai#a de endereos 3ue
ser$ fornecida aos clientes remotos. 'iferente dos e#emplos anteriores, usamos uma fai#a de
endereos dentro da fai#a usada na rede local, por isso / importante 3ue oc6 resere uma fai#a de
endereos 3ue no seja usada por outros micros da rede e 3ue esteja fora da fai#a de endereos
fornecidos pelo seridor 'F0P.
; lin)a Lpus) !route 81,.8W\.8.- ,XX.,XX.,XX.-!L 23ue define a re+ra de roteamento respons$el por
permitir o acesso P rede local por parte dos clientes remotos4 tamb/m dei#a de ser usada, j$ 3ue
com o brid+e eles passam a ter acesso direto P rede, sem necessidade de usar roteamento.
Bemos a3ui um e#emplo de ar3uio de confi+urao completo para o seridor%
proto udp
port ,,,,T
de tap-
serer-brid+e 81,.8W\.8.,XJ ,XX.,XX.,XX.- 81,.8W\.8.,8- 81,.8W\.8.,,-
comp-lzo
*eepalie 8- 8,-
ifconfi+-pool-persist (etc(openpn(ipp.t#t
tls-serer
d) (etc(openpn(*eys(d)8-,J.pem
ca (etc(openpn(*eys(ca.crt
cert (etc(openpn(*eys(seridor.crt
Na confi+urao dos clientes, a Znica mudana em relao aos e#emplos anteriores / a substituio
da lin)a !de tun! por !de tap! 2note 3ue, diferente do seridor, usamos !de tap! e no !de
tap-!4. Bemos a3ui um e#emplo de confi+urao completo. Veja 3ue continuamos usando a lin)a
!pull!, 3ue faz com 3ue o cliente obten)a a confi+urao de rede a partir do seridor%
remote +uiado)ardIare.no-ip.or+
proto udp
port ,,,,T
client
pull
de tap
comp-lzo
*eepalie 8- 8,-
tls-client
d) (etc(openpn(*eys(d)8-,J.pem
ca (etc(openpn(*eys(ca.crt
cert (etc(openpn(*eys(cliente,.crt
*ey (etc(openpn(*eys(cliente,.*ey
ns-cert-type serer
'epois de ajustada a confi+urao, falta apenas atiar o brid+e. Para isso, desatiamos o serio do
OpenVPN, e#ecutamos o script 3ue atia o brid+e e, por Zltimo, atiamos noamente o serio do
OpenVPN%
& (etc(init.d(openpn stop
& c)mod K# (etc(openpn(brid+e-start
& (etc(init.d(openpn start
"e oc6 estier acessando o seridor remotamente, ai perceber 3ue ele ficar$ al+uns se+undos sem
responder. 7sso acontece por3ue o sistema precisa !aprender! os endereos dos )osts li+ados a cada
uma das interfaces 3ue compe o brid+e. :ntretanto, se ele no oltar depois de uns T- se+undos, /
pro$el 3ue oc6 dei#ou al+um par=metro incorreto na confi+urao, 3ue acabou desconectando o
seridor da rede. Nesse caso, oc6 ai precisar reiniciar o seridor, ou se lo+ar localmente nele para
er o 3ue deu errado.
'epois de atiado o brid+e, o seridor ficar$ com tr6s interfaces de rede. ; interface !et)-! ficar$
sem endereo definido, assim como a interface !tap-!, usada pela VPN. Ama terceira interface, a
!br-! ficar$ com a confi+urao da rede, substituindo ambas. 7sso acontece por3ue a !br-! /
justamente a interface irtual do brid+e, 3ue combina o tr$fe+o da rede local e da VPN, fazendo
com 3ue todo o tr$fe+o 3ue c)e+a em uma, seja retransmitido na outra.
;o usar o brid+e, no / usado o roteamento de pacotes, por isso no / necess$rio rodar o comando
!ec)o 8 ] (proc(sys(net(ipJ(ip@forIard! no seridor, nem nen)um comando adicional no cliente. O
sistema simplesmente passa a escutar as duas interfaces e encamin)ar todo o tr$fe+o de uma
interface para a outra, tratando as duas interfaces como se fossem uma s5.
No cliente, a confi+urao / ainda mais simples. Voc6 precisa apenas reiniciar o serio do
OpenVPN para 3ue a alterao na confi+urao entre em i+or e a VPN seja restabelecida%
& (etc(init.d(openpn restart
Ama ez 3ue o cliente remoto se conecta P brid+e, ser$ criada a interface !tap-!, utilizando um dos
endereos da fai#a definida na confi+urao do seridor, como em !81,.8W\.8.,,-!. 9odando o
comando !route! 2no cliente4, oc6 er$ 3ue o sistema automaticamente incluiu uma rota,
associando a interface tap P rede !81,.8W\.8.-!.
; partir da, o cliente pode acessar normalmente todos os demais micros da rede local, incluindo
outros clientes remotos, e tamb/m ser acessado por eles. ; Znica +rande limitao / a elocidade do
lin*, j$ 3ue em ez de 8-- me+abits com lat6ncia inferior a 8- milisse+undos, como em uma
cone#o de rede local, oc6 passar$ a ter uma lin)a ;'"G com apenas ,XW ou X8, *bits de upload e
uma lat6ncia muito mais alta. 0om isso, o acesso a compartil)amentos de ar3uios e outros recursos
pode ficar realmente muito lento, utiliz$el apenas para a transfer6ncia de pe3uenos ar3uios.
Outra dica / 3ue pode demorar al+uns minutos at/ 3ue outros micros da rede ten)am acesso ao
cliente, pois o sistema precisa receber cone#es dos endereos antes de coloc$-los na tabela. `
normal 3ue oc6 no consi+a acessar um cliente 3ue acabou de se conectar P rede 2o brid+e ainda
no aprendeu sobre ele4 e consi+a se conectar normalmente al+uns minutos depois. Veja s5%
U ss) 81,.8W\.8.,8-
ss)% connect to )ost 81,.8W\.8.,8- port ,,% No route to )ost
U ss) 81,.8W\.8.,8- & 2dois minutos depois4
B)e aut)enticity of )ost L81,.8W\.8.,8- 281,.8W\.8.,8-4L canLt be establis)ed.
9"; *ey fin+erprint is ba%cT%88%cd%eX%cX%c,%-\%JW%We%d\%cJ%-,%f\%W,%1-.
;re you sure you Iant to continue connectin+ 2yes(no4Q
"e oc6 tier muitos micros com o MindoIs 1X(1\(<: na rede, o desempen)o da VPN tamb/m
ser$ bastante penalizado pelo tr$fe+o do protocolo NetD7O" 2o compartil)amento de ar3uios e
impressoras4. ; mel)or soluo para minimizar o problema / confi+urar o seridor de ar3uios da
rede como seridor M7N" e confi+urar todos os clientes para utiliz$-lo. O uso do seridor M7N" /
tamb/m a soluo se oc6 3uiser 3ue os clientes remotos ten)am acesso aos compartil)amentos
com a VPN utilizando interfaces tun, onde o tr$fe+o / roteado.
'epois de testar a cone#o, oc6 pode automatizar a e#ecuo dos scripts para atiar e desatiar o
brid+e adicionando as duas lin)as abai#o ao ar3uio de confi+urao do seridor%
up (etc(openpn(brid+e-start
doIn (etc(openpn(brid+e-stop
Asando esta confi+urao, o brid+e dee ser atiado automaticamente durante a inicializao do
seridor e 2se oc6 est$ mantendo o serio do OpenVPN atio nos clientes, em ez de conectar
manualmente4 eles deem se conectar P VPN automaticamente assim 3ue al+uma cone#o estier
disponel.
0omo todo o tr$fe+o da VPN / encriptado e os certificados priados no so transmitidos durante o
estabelecimento da cone#o, oc6 pode usar a VPN sem medo, mesmo ao acessar atra/s de redes
inse+uras, como redes Iireless pZblicas ou redes de terceiros. ;final, esta / justamente a +rande
anta+em de utilizar uma VPN. %4

Anda mungkin juga menyukai