Eu tenho a pergunta exata há alguns meses, mas, além disso, eu queria ter uma conexão IPv6, se possível. Você pode estar interessado em minhas perguntas sobre Serverfault:
Eu tinha apenas uma NIC ("interface de rede") no meu servidor para uso. Na minha configuração, o NetworkManager não foi suficiente porque eu preciso executar um script personalizado para oferecer suporte ao IPv6. Para simplificar, no entanto, usarei o NetworkManager aqui e omitirei o suporte ao IPv6.
Primeiro, apenas tome uma decisão sobre o método de autenticação. Vou usar o método de certificado mais seguro, que funciona como SSL: durante o aperto de mão, é escolhido um segredo comum que será usado para a sessão. Os outros métodos são uma chave compartilhada; um nome de usuário e senha.
Servidor
1. Prepare
Primeiro, instale o servidor openvpn. Isto é tão fácil quanto sudo apt-get install openvpn
. A parte difícil é configurá-lo. A configuração está presente em /etc/openvpn
.
2. Configure a autenticação
O servidor precisa de certificados para se identificar e seus clientes. Esses certificados são recuperados de uma CA (Autoridade Comum). A criação dos certificados e chaves privadas relacionadas pode ser feita em qualquer máquina, não precisa ser feita no servidor. Se você é realmente paranóico, deve fazê-lo em uma máquina que não esteja conectada a uma rede e usar um cartão de memória para transferir os certificados.
Crie uma autoridade de certificação e certificados para o servidor
Esta etapa deve ser executada uma vez, a menos que a chave privada da sua CA tenha sido comprometida. Nesse caso, podem ser criados certificados válidos que serão aceitos pelo servidor, resultando em uma violação de segurança.
A documentação oficial sugere fazer a administração em /etc/openvpn
. Eu não sou um grande fã de executar tudo como root, por isso vou colocá-lo em um diretório diferente.
Crie o diretório de administração e copie os arquivos nele, executando:
mkdir ~/openvpn-admin
cd ~/openvpn-admin
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
cd easy-rsa
- Edite os padrões
vars
conforme necessário, por exemplo, configuração KEY_SIZE=2048
porque você é paranóico.
Carregue as variáveis e crie o diretório de chaves executando:
. vars
Se você receber um erro No ... openssl.cnf file could be found
Further invocations will fail
, execute ln -s openssl-1.0.0.cnf openssl.cnf
-o . vars
novamente.
Se for a primeira vez que você usa esta CA, prepare o ambiente das chaves. Você não executar este comando se você quiser manter o seu CA. criado anteriormente Isso exigirá a implantação de um novo ca.crt
.
./clean-all
- Crie a CA executando
./build-ca
. Você pode preencher todos os detalhes que desejar, mas observe que essas informações estarão visíveis nos arquivos de log quando os clientes se conectarem ao servidor. Isso criará os arquivos ca.key
e ca.crt
na subpasta keys
. Mantenha o ca.key
arquivo em segredo em todas as circunstâncias . Não fazer isso permitirá que qualquer pessoa com a chave se conecte ao seu servidor.
- Se você tiver um certificado anterior que tenha sido perdido ou expirado, primeiro precisará revogar o antigo
./revoke-full server
. Caso contrário, você receberá um erro no banco de dados.
Crie o certificado para o servidor executando:
./build-key-server server
Ao ser solicitada uma senha, deixe-a em branco, a menos que você queira digitar a senha sempre que o servidor iniciar (não recomendado). Confirme a assinatura e a confirmação do certificado. Dois novos arquivos aparecerão no diretório keys
: server.key
e server.crt
.
DH e use prepare para tls-auth
Gere parâmetros Diffie-Hellman usando:
./build-dh
Por dicas de proteção , use tls-auth
. Para isso, gere a chave secreta compartilhada usando:
openvpn --genkey --secret ta.key
O arquivo resultante ( ta.key
) também deve ser distribuído aos clientes, mas você não deve publicá-lo.
Criar certificados para clientes
Para cada cliente, estas etapas devem ser repetidas:
Digite o diretório em que você criou sua CA e certificado de servidor:
cd ~/openvpn-admin/easy-rsa
Se você pulou a etapa de criação da CA porque já possui uma, precisará carregar as variáveis primeiro:
. vars
- Se você estiver criando novos certificados porque os antigos estão perdidos ou expirados , é necessário revogar o antigo primeiro
./revoke-full you
. Caso contrário, você receberá um erro no banco de dados.
Crie o certificado de clientes you.key
e seu certificado correspondente you.crt
:
./build-key you
O CommonName
deve ser único. Deixe a senha em branco se você estiver usando o KDE, pois ele ainda não é suportado a partir da 10.10. Como na geração do certificado do servidor, confirme a assinatura do certificado e a confirmação das alterações.
3. Configure o serviço OpenVPN
Por padrão, o OpenVPN é executado como root ao aceitar conexões. Não é uma boa ideia se o serviço está acessível a partir da Internet ruim.
Crie um usuário dedicado para o OpenVPN, diga openvpn
:
sudo useradd openvpn
Copie os arquivos server.key
, server.crt
, ca.crt
e dh1024.pem
(ou dh2048.pem
se tiver alterado o tamanho da chave) do diretório chaves no /etc/openvpn
. Uma permissão de 400 (somente leitura para o proprietário) é válida.
sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
Copie o arquivo ta.key
também:
sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
sudo chmod 400 /etc/openvpn/ta.key
Crie o arquivo /etc/openvpn/server.conf
e coloque as próximas linhas nele:
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
# Compress data to save bandwidth
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
# Logs are useful for debugging
log-append openvpn-log
verb 3
mute 10
Defina as permissões apropriadas, ele não precisa ser secreto, mas eu prefiro não vazar detalhes da configuração, portanto:
sudo chmod 640 /etc/openvpn/server.conf
4. Finalizando o servidor
Se você criou os certificados no servidor, é uma boa ideia criptografá-lo ou movê-lo para fora do servidor. De qualquer forma, não perca o ca.key
e server.key
. No primeiro caso, outras pessoas poderão se conectar ao seu servidor. Neste último, é possível um MITM .
Cliente
Além do endereço IP do servidor, o administrador do servidor deve entregar os seguintes arquivos:
ca.crt
: para verificar os certificados
server.crt
: para verificar o servidor e se comunicar com ele
ta.key
: para reforçar a segurança
you.crt
: para se identificar com o servidor
you.key
: é como sua senha, as permissões de arquivo devem ser 400 (somente leitura para o proprietário)
1. Instalação
Instale o OpenVPN e o plugin NetworkManager (adequado para KDE e Gnome):
sudo apt-get install openvpn network-manager-openvpn
network-manager-openvpn
está no repositório do universo.
2. Configuração
No painel de controle, use os seguintes detalhes:
- Gateway: o endereço IP do servidor
- Tipo: "Certificados (TLS)" (Gnome) ou "Certificado X.509" (KDE)
- Certificado da CA: caminho para
ca.crt
- Certificado de usuário: caminho para
you.crt
- Chave privada: caminho para
you.key
No Avançado :
- Porta do gateway: Automática (1194) (não precisa ser alterada)
- Usar compactação de dados LZO: ativado
- Usar conexão TCP: desativado
- Usar dispositivo TAP: ativado
- Cifra: padrão
- Autenticação HMAC: padrão
- Usar autenticação TLS: ativado
Especifique o caminho do arquivo de chaves ta.key
e defina "Direção da chave" como 1
.
- ( fazendo o check-out ), o servidor envia o gateway padrão para que todo o tráfego passe pela conexão VPN. A última vez que verifiquei, o plug-in network-manager-openvpn não o fez.
Se você não conseguir fazer o NetworkManager funcionar ou não quiser usá-lo, coloque os arquivos ( ca.crt
, ...) /etc/openvpn
e crie o /etc/openvpn/client.conf
arquivo:
client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20
Se você não deseja habilitar esta VPN no momento da inicialização, edite /etc/default/openvpn
e descomente a próxima linha removendo #
:
#AUTOSTART="none"
Para iniciar esta conexão, execute:
sudo /etc/init.d/openvpn start client
client
deve ser renomeado se o seu arquivo de configuração não for nomeado client.conf
. Exemplo: se você tiver nomeado seu arquivo de configuração safe.conf
, precisará executar sudo /etc/init.d/openvpn start safe
.
Para parar o OpenVPN, você deve executar:
sudo /etc/init.d/openvpn stop