Idioma
Categoria
Pesquisar

Configuração do OpenVPN Server e Easy-RSA 3 no Slackware

Criando certificados, configurando o servidor e iniciando os serviços. Instalação com e sem utilização de palavra chave.

Em Open Source Por Rudi Drusian Lange
Publicado em
Última atualização
  • Ambiente de instalação
  • OpenVPN 2.3.11 x86_64
  • Easy-RSA 3.0.0
  • Distribuição Slackware 14.2 64

Download Easy-rsa

PKI Infraestrutura de chave pública (Public Key Infracstruture)

A PKI pode ser criada em qualquer computador com a VPN instalada. Uma maneira fácil de criá-la é utilizando os scripts easy-rsa. Faça o download:

# Shell

cd /etc/openvpn/
git clone git://github.com/OpenVPN/easy-rsa

Variáveis

Antes de começar, é importante alterar algumas variáveis padrões utilizadas pelos scripts para manter os dados consistentes durante a execução dos próximos comandos. Para alterar as variáveis faça uma cópia do arquivo de exemplo vars.exemple dentro do diretório /etc/openvpn/easy-rsa/easyrsa3/ para somente vars.

# Shell

cd /etc/openvpn/easy-rsa/easyrsa3/
cp vars.example vars
vi vars

/etc/openvpn/easy-rsa/easyrsa3/vars

# Expiração dos certificados em dias. O valor padrão são 10 anos (3650), para aumentar para 100 anos por exemplo, altere o valor para 36500
set_var EASYRSA_CA_EXPIRE   36500
set_var EASYRSA_CERT_EXPIRE 36500

# Exemplo das outras variáveis alteradas
set_var EASYRSA_REQ_COUNTRY "BR" # Pais
set_var EASYRSA_REQ_PROVINCE    "Sao Paulo" # Estado
set_var EASYRSA_REQ_CITY    "Sao Paulo" # Cidade
set_var EASYRSA_REQ_ORG "Minha empresa LTDA" # Empresa
set_var EASYRSA_REQ_EMAIL   "emaildesuporte@minhaempresa.com.br" # E-mail
set_var EASYRSA_REQ_OU      "Matriz" # Unidade

As outras variáveis só devem ser alteradas com conhecimento prévio de suas funções.

Iniciando uma nova PKI

Inicie uma nova configuração com o comando easyrsa init-pki.

Cuidado! Este comando remove todos os certificados criados anteriormente. Só utilize quando estiver começando uma nova configuração ou se quiser reconfigurar todo o sistema.

# Shell

cd /etc/openvpn/easy-rsa/easyrsa3/
./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/easyrsa3/pki

Criando certificado CA

CA Autoridade de Certificação (Certificate Authority).

Será solicitada uma palavra-chave PEM, digite, confirme e depois digite um nome para o servidor. Neste artigo está sendo usado o nome server1, mas você pode escolher qualquer nome.

# Shell

./easyrsa build-ca

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
........+++
.................................................................+++
writing new private key to '/etc/openvpn/easy-rsa/easyrsa3/pki/private/ca.key.XXXXthIDrO'
Enter PEM pass phrase: # digite uma palavra-chave e memorize à
Verifying - Enter PEM pass phrase:  # repita a palavra-chave
-----
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.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: server1 # nome do servidor
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt

Gerando a keypair e a request

No servidor estes arquivos normalmente são criados sem criptografia utilizando o parâmetro nopass o que remove a necessidade de digitar uma senha para inicializar o serviço. Digitar a senha pode ser inconveniente em um servidor que precise ser reiniciado remotamente ou que não tenha um teclado de fácil acesso. Como a chave não será criptografada proteja cuidadosamente o acesso e as permissões.

Será necessário confirmar o nome do servidor durante o processo.

# Shell

./easyrsa gen-req server1 nopass

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
.................................+++
................................+++
writing new private key to '/etc/openvpn/easy-rsa/easyrsa3/pki/private/fattony.key.XXXXDSn1mu'
-----
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.
-----
Common Name (eg: your user, host, or server name) [server1]: # confirme o nome do servidor

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/server1.req # request
key: /etc/openvpn/easy-rsa/easyrsa3/pki/private/server1.key # keypair

Caso utilize a palavra-chave para criptografar o certificado será necessário digitá-la para iniciar o serviço. Mas a frente será demonstrado como ler esta chave a partir de um arquivo texto.

# Shell

# Para utilizar a palavra-chave execute o comando sem o "nopass"
./easyrsa gen-req server1

Assinando a request

# Shell

./easyrsa sign-req server server1

Note: using Easy-RSA configuration from: ./vars

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 36500 days:

subject=
    commonName                = server1


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes # Digite yes
Using configuration from /etc/openvpn/easy-rsa/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/easyrsa3/pki/private/ca.key: # digite a palavra-chave criada anteriormente no comando ./easyrsa build-ca
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'fattony'
Certificate is to be certified until Sep 18 20:06:10 2116 GMT (36500 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server1.crt

Gerando parâmetros Diffie-Hellman (DH)

DH Diffie-Hellman.

Gera o arquivo de parâmetros .pem necessário para o servidor.

# Shell

cd /etc/openvpn/certs/
openssl dhparam -out dh2048.pem 2048

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.............................+..................................
..+..................................+................+.........
................................................................
.............................................................+..
................................................................
................................................................
...........................................+........+...........

Gerando secret HMAC

HMAC Hash-based Message Authentication Code

# Shell

cd /etc/openvpn/keys/
/usr/sbin/openvpn --genkey --secret ta.key

Configurando o servidor

Copie os seguintes arquivos gerados pelos scripts easy-rsa para os respectivos diretórios dentro de /etc/openvpn/:

# Shell

cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/certs/
cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server1.crt /etc/openvpn/certs/
cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server1.key /etc/openvpn/keys/

Copie o arquivo de exemplo server.conf a partir do diretório de configuração do source do openvpn. O source do openvpn pode ser encontrado no DVD de instalação do Slackware ou em seu mirror favorito do Slackware ou ainda a partir de http://openvpn.net. No exemplo a seguir o download do source é efetuado a partir do ftp.slackware.com:

# Shell

cd /usr/local/src/
wget -c ftp://ftp.slackware.com/pub/slackware/slackware/source/n/openvpn/openvpn-*.tar.?z
tar xvf openvpn-*.tar.?z

# Copie o arquivo server.conf para o diretório dos arquivos configuração do openvpn
cp openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/

# Crie o diretório ccd em /etc/openvpn/ para armazenar as configurações específicas de cada cliente:
mkdir /etc/openvpn/ccd

Abaixo um exemplo comentado das configurações do servidor server.conf, as opções devem ser alteradas conforme a necessidade:

/etc/openvpn/server.conf

#######################################
# Exemplo de configuração OpenVPN 2.0 #
# para um servidor multi-client.      #
#######################################
local   x.x.x.x # IP do servidor
port    1194    # Porta
proto   tcp     # Protocolo
dev     tun     # tun(routed tunnet) ou tap (ethernet tunnel)

ca          /etc/openvpn/certs/ca.crt
cert        /etc/openvpn/certs/server1.crt
key         /etc/openvpn/keys/server1.key  # Este arquivo é secreto
dh          /etc/openvpn/certs/dh2048.pem
tls-auth    /etc/openvpn/keys/ta.key 0 # Este arquivo é secreto

# Subrede da VPN
server 10.8.0.0 255.255.255.0

# Sobe rotas no cliente para permitir que ele acesse outras redes atrás do servidor
push "route 10.128.248.0 255.255.255.0"

# Indica o diretório de configuração dos clientes, supondo que o certificado do cliente foi nomeado cliente1, criando um arquivo com este nome dentro do diretório ccd é possível definir configurações específicas como um ip fixo através da linha: ifconfig-push 10.8.0.10 10.128.255.1
client-config-dir /etc/openvpn/ccd

# Pinga a cada 10 segundos e define que o cliente esta offline depois de 120 segundos
keepalive 10 120

# Define a criptografia e a autenticação. Estas configurações também devem estar presentes no cliente
cipher          AES-256-CBC
auth            sha1

# Reduz os privilégios do daemon do openvpn depois da inicialização
user nobody
group nobody

# localização dos arquivos de log
status      /var/log/openvpn-status.log
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

# As opções persists tentam evitar acessar certos recursos no restart que podem não estar acessíveis devido a redução de privilégios
persist-key
persist-tun

comp-lzo # Habilita compressão, obrigatório configurar no cliente
verb 3	 # Nível de informação do log
mute 20	 # Interrompe exibição após a mesma mensagem repetir 20 vezes
max-clients 1000 # número máximo de clientes
daemon	# Executa o openvpn como daemon

Crie o arquivo rc.openvpn dentro do diretório /etc/rc.d/ com o conteúdo abaixo.

/etc/rc.d/rc.openvpn

#!/bin/sh
#
# /etc/rc.d/rc.openvpn
#
# Start/stop/restart the openvpn server.
#

ovpn_start() {
  if [ -x /usr/sbin/openvpn -a -r /etc/openvpn/server.conf ]; then
    echo "Starting OpenVPN:  /usr/sbin/openvpn server.conf"
    /usr/sbin/openvpn /etc/openvpn/server.conf
  fi
}

ovpn_stop() {
  killall openvpn
}

ovpn_restart() {
  ovpn_stop
  sleep 2
  ovpn_start
}

case "$1" in
'start')
  ovpn_start
  ;;
'stop')
  ovpn_stop
  ;;
'restart')
  ovpn_restart
  ;;
*)
  echo "Usage: $0 {start|stop|restart}"
esac

De permissão de execução ao script:

# Shell

chmod 755 /etc/rc.d/rc.openvpn

Inicie o serviço e verifique o log para saber se houve algum problema com a configuração

# Shell

/etc/rc.d/rc.openvpn start
cat /var/log/openvpn.log

Para iniciar o OpenVPN durante o boot é necessário adicionar uma entrada no arquivo /etc/rc.d/rc.local como a abaixo:

/etc/rc.d/rc.local

# Inicia o serviço OpenVPN
if [ -x /etc/rc.d/rc.openvpn ]; then
  /etc/rc.d/rc.openvpn start
fi

Caso você tenha gerado a requisição utilizando a palavra-chave PEM(comando: ./easyrsa gen-req server1), toda vez que você iniciar o serviço terá que digitar esta palavra-chave, o que não é desejável em um servidor que na maioria das vezes não irá possuir nem um teclado ou um monitor conectado a ele. A alternativa é armazená-la em um arquivo seguro e indicar no arquivo de configuração do servidor para ler este arquivo ao em vez de solicitar a palavra-chave. Vamos armazenar a palavra-chave em /root/password.ovpn, basta digitá-la dentro deste arquivo.

Depois restrinja o acesso ao arquivo:

# Shell

chmod 600 /root/password.ovpn

Edite o arquivo server.conf e adicione as seguintes linhas:

/etc/openvpn/server.conf

askpass /root/password.ovpn
auth-nocache

Esta configuração também pode ser feita no cliente.

Se tudo correu bem o serviço deve ter ficado ativo após o comando /etc/rc.d/rc.openvpn start. Caso o serviço não inicialize por algum motivo você poderá descobri-lo explorando o arquivo de log: /var/log/openvpn.log.

Para este artigo não ficar muito longo, a configuração do cliente foi descrita em outro artigo: Configuração do OpenVPN Cliente e Easy-RSA 3 no Slackware.