Configurando o OpenVPN no SuSE Linux Enterprise Server (SLES)

Olá pessoal, espero que este artigo ajude, nele vamos aprender a configurar um servidor de VPN com o OpenVPN, aprender a instalar os clientes VPN tanto Linux como no Windows.

[ Hits: 53.822 ]

Por: Robinson Czelusniak em 09/02/2009


Script para gerar certificados e enviar por email



Este script gera o certificado e envia por email para facilitar a vida. Quando você rodar este script terá um arquivo compactado contendo as configurações para Windows e Linux devidamente configurados, os certificados tanto para Windows como para Linux e o executável para Windows.

Crie um diretório no /home chamado certificados e um outro dentro com o nome "example":

# mkdir -p /home/certificados/example

Dentro do diretório /home/certificados/example, crie os arquivos de configuração dos clientes Windows e Linux.

Vamos criar o arquivo para Linux:

# vi /home/certificados/example/client.conf

Adicione as seguintes linhas nele:

client
dev tun
proto tcp-client
remote <IP SERVER> 1194
user nobody
group nogroup
persist-key
persist-tun
mute-replay-warnings
ca /etc/openvpn/ca.crt
cert /etc/openvpn/example-key.crt
key /etc/openvpn/example-key.key
ns-cert-type server
cipher DES-EDE3-CBC
keysize 192
comp-lzo
log /var/log/openvpn.log
status /var/log/openvpn.log
verb 3
tun-mtu 1500
tun-mtu-extra 32

Salve e saia.

<ESC> :wq <ENTER>

Agora crie o arquivo para Windows:

# vi /home/certificados/example/client.ovpn

Adicione as linhas:

client
dev tun
proto tcp-client
remote <IP SERVER> 1194
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert example-key.crt
key example-key.key
ns-cert-type server
cipher DES-EDE3-CBC
keysize 192
comp-lzo
verb 3
tun-mtu 1500
tun-mtu-extra 32

Salve e saia:

<ESC> :wq <ENTER>

Baixe o openvpn-X.X.X-install.exe e deixe no diretório /home/certificados/example.

Crie um arquivo no diretório /home/certificados/example/ com o nome message.txt.

Para finalizar, vamos configurar um "shellzinho" para criar o certificado, compactar, criar os arquivos de conf e enviar por email.

Crie um arquivo no /usr/local/bin/ com o nome:

# vi /usr/local/bin/criacertificado.sh

Neste arquivo adicione as linhas:

home=`pwd`
res_home=$home

echo "################################################"
echo "# GERADOR DE CERTIFICADOS #"
echo "# CRIADO POR ROBINSON CZELUSNIAK EM 04/02/09 #"
echo "################################################"


echo -n "DIGITE O NOME DO CERTIFICADO: ";
read cert;

cd /etc/easy-rsa
. ./vars
./build-key $cert


# copiando os certificados

cd /etc/easy-rsa/keys
#tar -c $cert.* > $cert.tar
mkdir /home/certificados/$cert
mkdir /home/certificados/$cert/tmp
mkdir /home/certificados/$cert/Conf-Windows
mkdir /home/certificados/$cert/Conf-Linux
cp $cert.* /home/certificados/$cert/tmp
cp /etc/easy-rsa/keys/ca.crt /home/certificados/$cert/tmp
sed s/example-key/$cert/ /home/certificados/example/client.conf > /home/certificados/$cert/Conf-Linux/client.conf
sed s/example-key/$cert/ /home/certificados/example/client.ovpn > /home/certificados/$cert/Conf-Windows/client.ovpn
cp /home/certificados/$cert/tmp/* /home/certificados/$cert/Conf-Linux/
cp /home/certificados/$cert/tmp/* /home/certificados/$cert/Conf-Windows/
cp /home/certificados/example/README.rtf /home/certificados/$cert/
cp /home/certificados/example/openvpn-X.X.X-install.exe /home/certificados/$cert/
rm -rf /home/certificados/$cert/tmp
cd /home/certificados/
tar -cz $cert/ >/home/certificados/$cert.tar.gz
chmod 777 /home/certificados/$cert.tar.gz
rm -rf /home/certificados/$cert/*
mv /home/certificados/$cert.tar.gz /home/certificados/$cert/

cd $res_home

echo " FORAM COPIADOS OS CERTIFICADOS PARA A PASTA /home/certificados/$cert ";

cd /home/certificados

LS=`ls ca.crt > /dev/null 2>&1`
res=$?

if [ "$res" == "0" ]
then
   echo "OK"
   #exit 1;
fi

if [ "$res" == "2" ] | [ "$res" == "1" ]
then
   echo "O ARQUIVO ca.crt NÃO EXISTE NA PASTA /home/certificados, foi copiado para la"
fi

echo -n "Você deseja receber o certificado por email:[y/N] ";
read y;

if [ y = y ]
then
   echo -n "Digite o endereço de email:  ";
   read email;
   mailx $email -r postmaster@seudominio.com.br -s "Certificado OpenVPN" -a /home/certificados/$cert/$cert.tar.gz < /home/certificados/example/message.txt  
else
   echo "OS CERTIFICADOS ESTÃO EM /home/certificados/$cert ";  
fi

cd $res_home

Salve e saia.

<ESC> :wq <ENTER>

Obs.: É necessário ter o mailx instalado na máquina, caso contrário instale ou utilize outra ferramenta para envio (será necessário rever os parâmetros).

E pronto, agora para criar um certificado basta logar e digitar "criacertificado.sh" para criar e enviá-lo por email.

Página anterior    

Páginas do artigo
   1. Instalação do OpenVPN
   2. Configurando o servidor
   3. Configurando o cliente (Linux/Windows)
   4. Gerando novos certificados
   5. Script para gerar certificados e enviar por email
Outros artigos deste autor

Squid com autenticação

Squid autenticando no Windows utilizando grupos do AD

CBQ (Controlador de banda) no Conectiva 10

Openfire no SLES 10 autenticando no Active Directory

Instalando Postfix e Dovecot no SLES 11 e autenticando em um diretório da Novell (Edir)

Leitura recomendada

Jails em SSH: Montando sistema de Shell Seguro

Metasploit Exploitation

Servidor SSH (Secure Shell Hosting)

Transferindo arquivos de modo seguro entre Windows e Linux

Segurança em seu Linux

  
Comentários
[1] Comentário enviado por czelusniak em 09/02/2009 - 18:00h

Pessoal peço desculpas mas faltou um detalhe, o script /usr/local/bin/criacertificado.sh deve ter os atributos para execução, chmod +x /usr/local/bin/criacertificado.sh

[2] Comentário enviado por fernandoborges em 09/02/2009 - 20:36h

Muito bom o artigo. Porém...
Não é recomendado o envio de certificados de acesso à VPN por um meio inseguro como o e-mail.
Saudações!

[3] Comentário enviado por czelusniak em 09/02/2009 - 22:18h

Obrigado Fernando,

A idéia de receber por email é para que você receba em sua conta e repasse para a pessoa que vai utilizar eliminando o acesso por scp oou ftp para baixar os certificados, mas muito boa observação.

[4] Comentário enviado por nariz em 10/02/2009 - 12:45h

opa.. belo artigo.
parabéns !!!
alguém pode me ajudar numa estrutura onde tenho matriz e filiais
tenho maquinas com linux na matriz e nas filias.. todas rodando OpenVPN
fazendo as regras do roteamento eu consigo das filiais pingar maquinas da rede da matriz... porém da matriz eu nao consigo ir até as maquinas das filiais... isso só acontece se eu implementar a VPN usando certificados...se eu uso chaves estáticas isso não acontece.
alguém sabe o que pode seR ?

[5] Comentário enviado por fernandoborges em 10/02/2009 - 21:00h

Nariz,
Observe as configuracoes do ccd (client-config-dir), configure esta opcao corretamente no servidor, indicando o arquivo correspondente do certificado do cliente e neste as suas configuracoes de rede. Asssim o proprio OpenVPN fara o roteamento nos kerneis tanto do cliente quanto do servidor. Da uma pesquisada que vc vai conseguir, valew!

[6] Comentário enviado por rudielle em 14/04/2010 - 10:21h

Bom dia amigo, estou com dúvida no seguinte. Na empresa em que trabalho, estou implementando vpn na matriz e nas filiais. a dúvida fica por conta desse arquivo de configuração. Tenho o seguinte cenário:

Matriz: a internet chega no roteador com ip fixo (201.26.75.xx), do roteador sai um cabo de rede pro meu servidor, que tem uma placa de rede apenas. Meu servidor tem o ip 192.168.1.100, mascara de rede 255.255.255.0, gateway 192.168.1.1 (que é o ip do meu roteador) e os dns 201.138.10.xx e 201.138.10.xx). Instalei o Suse Server 11.2.

Filial: a internet chega no roteador com ip dinamico, e de la sai cabo de rede pro terminal, a única coisa que muda é o ip da máquina que é 192.168.1.10. Nessa máquina é XP.

A dúvida é, nesse arquivo de configuração: o que eu preenche na linha server, nalinha push "route" e por ser xp os terminais, essa linha client-dir-conf nao terá que ser diferente?

port 1194
proto tcp-server
dev tun
ca /etc/easy-rsa/keys/ca.crt
cert /etc/easy-rsa/keys/<certificado server>.crt
key /etc/easy-rsa/keys/<certificado server>.key # This file should be kept secret
dh /etc/easy-rsa/keys/dh1024.pem
server <rede para a VPN> <Mascara de rede> # Aqui é definido a rede para a conexão VPN
ifconfig-pool-persist ipp.txt
push "route <rota da sua rede> <Mascara de rede>" # Aqui Adicione a rede da sua empresa ou a rede que sera acessada pela VPN
client-config-dir /etc/openvpn/clientconf
keepalive 10 120
cipher DES-EDE3-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3

[7] Comentário enviado por czelusniak em 15/04/2010 - 00:12h

Boa noite Fernando,

Na linha push route você deve colocar "192.168.1.0 255.255.255.0" mas não vai funcionar neste modelo que você passou você tem que ter uma rede diferente na sua filial, Ex.: 192.168.0.0/24 , porque da forma que esta você vai conseguir acessar sua matriz pois toda vez que as máquinas da filial(192.168.1.xxx) tentarem acessar a matriz (192.168.1.xxx) o roteador da filial vai procurar nas tabelas de roteamento e vai tentar procurar o ip localmente pois a rede é a mesma.


[8] Comentário enviado por rondinellepqd em 15/08/2012 - 16:32h

Amigo me tire uma duvida, tenho q criar todos os certificados caso coloque mais um cliente, ou somente a criacao do certificado do cliente já basta enviando para ele o ca.crt, cliente.crt e cliente.key?
é isso mesmo, ou vou ter que criar todos os certificados novamente e enviar para os clientes?

[9] Comentário enviado por rondinellepqd em 15/08/2012 - 16:51h

eu fui criar os certificados ta dando esse erro:

pkitool: Need a readable ca.crt and ca.key in /etc/easy-rsa/keys
Try pkitool --initca to build a root certificate/key.

pode me dizer o q fiz errado, digitei os comandos:
. ./vars
./clean-all
./build-key cliente000

???


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts