OpenVPN

De LinuxPédia
Ir para: navegação, pesquisa

O objetivo desse arquivo é servir de apoio para a criação de VPNs utilizando o openvpn disponível para windows e linux. Para utilizar esse tutorial é altamente recomendado conhecimento intermediário de linux e de redes.

Instalação

apt-get install openvpn

Parâmetros dos arquivos .conf do openvpn

  • tls-server → Openvpn vai trabalhar em modo TLS-server (no cliente o comando é TLS-client)
  • dh keys/dh2048.pem → usa a chave Diffie-Hellman armazenada em keys/dh2048.pem
  • ca keys/ca.crt → Utiliza o certificado CA em keys/ca.crt
  • cert keys/VPN-server.crt → Usar certificado keys/VPN-server,crt
  • remote X.X.x.x → IP público do servidor ou parte remota da VPN.
  • port 1194 → Porta que ficará aberta para conexões de openvpn
  • "dev tap" ou "dev tun" → Driver que será usado para fazer a VPN o TAP é camada 2 e o TUN é camada 3.
  • ifconfig 10.1.1.1 → determina o seu IP na VPN
  • ifconfig 10.1.1.1 10.1.1.2 → determina o seu IP e o IP da parte remota da VPN
  • cipher AES-128-CBC → cipher determina a criptografia utilizada. Nesse caso usei AES-128-CBC, mas poderia ser qualquer criptografia do openvpn.exemplos:
-cipher BF-CBC =blowfish 
-cipher DES-EDE3-CBC = Triple DES 
  • secret key.txt → Comando usado para colocar a senha secreta de um túnel que usa chave simétrica. Nesse caso a chave está no arquivo key.txt.
  • ca keys/ca.crt → Aponta para o certificado da autoridade certificadora, nesse caso o arquivo está em keys/ca.crt
  • cert /etc/openvpn/keys/VPN-server.crt → Aponta onde está o certificado da máquina local. Nesse caso como essa máquina é o servidor o certificado está em /etc/.../VPN-server.crt
  • key /etc/openvpn/keys/VPN-server.key → Indica onde está a chave privada da máquina local. Nesse caso /etc/../VPN-server.key
  • dh /etc/openvpn/keys/dh2048.pem → Indica onde está o arquivo de chave diffie-Hellman utilizado para negociar chaves.
  • "proto udp" ou "proto tcp" → determina qual protocolo de transporte será usado na VPN.UDP normalmente usado.
  • keepalive 10 60 → Parametro que monitora a conexão com ping a cada 10s e considera a conexão down após 60s.
  • "tls-server" ou "tls-client" → determina quem é cliente e quem é servidor da conexão TLS. Isso é umportante para determinar algumas questões de chaves.
  • tls-auth /etc/openvpn/keys/fhmac.key 0 → O comando tls-auth prove maior segurança contra ataques DDoS, usa uma chave fhmac para assinar os pacotes. a sintaxe é:
-tls-auth fhmac.key 0 (para servidor tls) 
-tls-auth fhmac.key 1 (para cliente tls) 
  • comp-lzo → Habilitando esse parametro comprime os dados da conexão VPN. Isso melhora a performance do link.
  • status openvpn-status.log → o comando status armazena o status da VPN e dos clientes em um arquivo. Nesse caso o arquivo é openvpn-status.log.
  • verb 3 → Essa opção determina um nível de log que vai de 0-9, onde 0 é pouco log e 9 loga TUDO.
  • max-clients 63 → Esse parametro determina o máximo de clientes conectados. Nesse caso são 63 clientes no máximo.
  • "persist-key" e "persist-tun" → guarda alguns recursos já utilizados pelo usuário da VPN tornando eles disponíveis da próxima vez que conectar a VPN.
  • "user nobody" e "group nobody" → Esse parametro é relevante somente quando usado por sistemas operacionais não-windows. Ao conectar os privilégios dos usuários caem para nobody (ninguém) o que aumenta a segurança.
  • mute 20 → Essa opção determina quantas mensagens duplicadas serão enviadas para o log.
  • log-append /var/log/openvpn.log → Manda o log de eventos da VPN para o arquivo especificado. Nesse caso o arquivo /var/.../openvpn.log.
  • server 10.1.1.0 255.255.255.0 → Determina a rede e a máscara da VPN. Configura também o servidor como o primeiro IP, nesse caso 10.1.1.1.
  • ifconfig-pool-persist clientes.txt → cria um arquivo de texto chamado clientes.txt, onde guarda os usuários e IPs que conectaram a VPN, dessa forma quando um cliente conectar novamente receberá sempre o mesmo IP.
  • push "route 10.1.1.0 255.255.255.0" → Manda uma rota para o cliente VPN.
  • push "dhcp-option DNS 10.1.1.1" → Manda uma opção DHCP para o cliente.

scripts inicio/término openvpn

/etc/init.d/openvpn restart

/etc/init.d/openvpn reload

/etc/init.d/openvpn start

/etc/init.d/openvpn stop

Colocar script em execução ao iniciar o linux (Ver update-rc.d)

vpnserver@/etc/rc3.d# update-rc.d -f openvpn start 16 3

Nesse exemplo ao usar o Openvpn

VPN-server.crt → Certificado assinado do servidor VPN, deve estar no VPN-SERVER

VPN-server.key → Chaver RSA privada do VPN-server, deve estar no VPN-server

VPN-server.csr → Solicitação de assinatura do VPN-server, já serviu e pode ser deletado

VPN-client.crt → Certificado assinado do VPN-Client, deve estar no VPN-client

VPN-client,key → Chave RSA privada do VPN-client, deve estar no VPN-vlient

VPN-client.csr → Solicitação de assinatura do VPN-client, pode ser deletado

ca.crt → Certificado da CA, deve estar diponível em todas máquinas

ca.key → A chave privada sa CA, deve ser guardado somente na CA. Deve ser protegida porque garante acesso a gerar novos certificado válidos e utilizar os seus serviços e redes.

dh1021.pem → Deve estar em todas as máquinas.

Primeiro Túnel (Chave compartilhada sem certificados)

  • Abrir o Openvpn com a configuração desejada:
# openvpn --config sample.ovpn
  • gerar chave aleatória:
# openvpn --genkey --secret /etc/.../key.txt
  • Arquivo de configuração do Host A host-a.conf:
remote 146.164.x.x 
port 1194 
dev tun0 
ifconfig 10.3.0.1 10.3.0.2 
cipher-AES-128-CBC 
secret key.txt
  • Arquivo de configuração do Host B host-b.conf:
dev tun 
remote 146.164.x.x 
port 1194 
ifconfig 10.3.0.2 10.3.0.1 
cipher-AES-128-CBC 
secret key.txt

procedimento para criação de VPN via CLI com certificados

1 → Gerar os certificados

2 → copiar os arquivos do cliente e do servidor

3 → criar os arquivos de configuração

4 → Rodar as configurações prontas


1.1 → Ao instalar o openvpn instalamos também alguns scripts chamados easy-rsa que nos ajudará a criar os certificados e as chaves.

1.2 → Entrar na pasta do easy-rsa:

cd /usr/share/easy-rsa


  • A pasta varia um pouco de distribuição para distribuição para distribuição quando damos o comando ls na pasta temos os script:
build-ca 
build-sh 
build-key 
        e etc... 
  • No ubuntu essa pasta ficou em: /usr/share/doc/openvpn/examples/easy-rsa/2.0


É comum no linux rodarmos um script que utilizará valores presentes em arquivos para realizar determinada tarefa, é isso que o easy-rsa faz baseando-se no arquivo vars.

1.3 → Editar o arquivo vars (esse arquivo servirá de referência para criação das chaves e certificados) (ver nano)

# nano vars

dentro desse arquivos observamos a seguinte variável:

  • export OPENSSL="openssl" --> essa linha mostra o script openssl que esse arquivo vai chamar para fazer os certificados.


1.3.1 → renomear o arquivo openssl-1.0.0.cnf para openssl.cnf com o objetivo de fazer com que o arquivo vars aponte corretamente para o script ssl de maior versão. Fiz isso da seguinte forma:

1.3.2 -> Abrir o arquivo de texto:

# nano openssl-1.0.0.cnf


1.3.3 → salvar o arquivo como openssl.cnf

( Ctrl + O no nano)

1.3.4 → Voltando ao arquivo vars

# nano vars

agora vamos ver a variável

export KEY_SIZE=1024 → Aqui mudamos o tamanho da chave se desejarmos, uma chave de 2048 por exemplo oferece maior proteção.


1.3.5 → mudar as configurações padrão para gerar um certificado. As variáveis que normalmente mudamos são:

export KEY_COUNTRY="CA" → podemos mudar o valor entre aspas

export KEY_PROVINCE="RJ" → mudamos o valor entre aspas

export KEY_CITY="Rio-Janeiro" → mudamos o valor entre aspas

export KEY_ORIG="Nimai-offices" → mudamos o valor entre aspas

export KEY_EMAIL="joao@gmail.com" → mudamos o valor entre aspas

export KEY_EMAIL="joao@hotmail.com" → mudamos o valor entre aspas

export KEY_CN=VPN-server → Mudamos o valor Essa parte é fundamental. Cada elemento da VPN DEVE ter um CN diferente.

export KEY_NAME=Servidor-de-VPN → mudamos o valor

export KEY_OU=VPN-de-servidor → mudamos o valor.

1.3.5 → salvamos então o arquivo vars e voltamos a pasta do easy-rsa("ctrl + X" no nano):

1.4 → Geramos o certificado com as variáveis especificadas

# source ./vars

Quando fazemos isso indicamos que vamos usar essas variáveis para fazer as chaves e certificados de ca e etc.

Para limpar essa configuração e também a configuração das CAs utilizamos o comando ./clean-all. CUIDADO pois zera as autoridades certificadoras. De qualquer forma não vamos usar esse comando e há poucas situações onde desejaríamos usá-lo.

1.5 → Criar uma CA

# ./build-ca

O script vai criar um certificado e chave para a CA. Importante mudarmos o Comon Name (CN) na hora de responder as perguntas do script.

1.6 → criar o certificado do servidor:

# ./build-key-server VPN-servidor

Serão solicitados as informações de novo e mudamos o Common Name.

1.7 → criar a chave do cliente ou clientes:

# ./build-key Cliente-1

1.8 → criar o arquivo de chave para o diffie-hellman (serve para trocar e estabelecer chaves no inicio da comunicação. Nessa hora se modificamos o vars de 1024 para 2048 estaremos mudando o tamanho desse arquivo).


# .*build-dh

1.9 → Para finalizar criamos uma chave estática que será utilizada pelo HMAC como proteção a ataques DoS e DDoS.

# openvpn --genkey --secret fhmac.key

2.0 → Copiar os arquivos para uma pasta a sua escolha no servidor, e repassar as chaves que devem ficar com o cliente para o cliente.

#cp ca.crt VPN-server.crt /etc/openvpn/keys/ 
#cp VPN-server.key fhmac.key /etc/openvpn/keys/ 
#cp dh2048.pem /etc/openvpn/keys

para copiar para os cliente podemos usar o comando scp:

#scp Cliente-1.crt root@200.100.50.50:/etc/openvpn/keys/ 
#scp Cliente.key 
#scp dh2048.pem 
#scp ca.crt 
#scp fhmac.key

3.1 Criar o arquivo de conf no servidor e no cliente

  • Servidor:
dev tun 
ca keys/ca.crt 
cert /etc/openvpn/keys/VPN-server.crt 
key /etc/openvpn/keys/VPN-server.key 
dh /etc/openvpn/keys/dh2048.pem 
port 1194 
proto udp 
keepalive 10 60 
tls-server 
tls-auth /etc/openvpn/keys/fhmac.key 0 
comp-lzo 
status openvpn-status.log 
verb 3 
max-clients 63 
persist-key 
persist-tun 
user nobody 
group nobody 
mute 20 
log-append /var/log/openvpn.log 
cipher AES-128-CBC 
client-to-client
server 10.1.1.0 255.255.255.0 
ifconfig-pool-persist clientes.txt 
push "route 10.1.1.0 255.255.255.0" 
push "dhcp-option DNS 10.1.1.1" 

3.2 → executar o arquivo de configuração do servidor:

# openvpn --config Server.conf

3.3 → Criar arquivo cliente:

Client
dev tun
ca keys/ca.crt 
cert keys/Cliente-1.crt 
key keys/Cliente-1.key 
dh keys/dh2048.pem 
nobind 
mute-replay-warnings 
ns-cert-type server 
resolv-retry 20 
keepalive 10 60 
comp-lzo 
persist-key 
persist-tun 
proto udp 
remote 200.20.150.27 
port 1194 
tls-client 
tls-auth keys/fhmac.key 1 
verb 3 
cipher AES-128-CBC

3.4 → Executar arquivo de configuração no cliente:

# openvpn --config Server.conf

Fonte

Livro: Begining Openvpn 2.0.9 - Editora: PACKT - Autores: Markus Feilner e Norbert Graf