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 no Serverfault:
- Como configuro o OpenVPN para acessar a Internet com uma NIC?
- Como posso configurar o OpenVPN com IPv4 e IPv6 usando um dispositivo de toque?
Eu tinha apenas uma NIC ("interface de rede") no meu servidor para uso. Na minha configuração, o NetworkManager não foi suficiente porque preciso executar um script personalizado para suportar o IPv6. Por simplicidade, no entanto, vou usar o NetworkManager aqui e omitir o suporte ao IPv6.
Primeiro, basta tomar uma decisão sobre o método de autenticação. Estarei usando o método de certificado mais seguro, que funciona como o SSL: durante o handshake, um segredo comum é escolhido e 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. Isso é 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. Configurar autenticação
O servidor precisa de certificados para identificar a si mesmo 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 use um cartão de memória para transferir os certificados.
Crie uma CA e certificados para o servidor
Esta etapa deve ser feita uma vez, a menos que a chave privada da sua CA seja 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 que você faça a administração em /etc/openvpn
. Eu não sou um grande fã de rodar tudo como root, então 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
- Editar padrões em
vars
conforme necessário, por exemplo, configurandoKEY_SIZE=2048
porque você é paranóico. -
Carregue as variáveis e crie o diretório de chaves executando:
. vars
-
Se você receber um erro que
No ... openssl.cnf file could be found Further invocations will fail
, executeln -s openssl-1.0.0.cnf openssl.cnf
e, em seguida,. vars
novamente. -
Se esta é a primeira vez que você usa essa CA, prepare o ambiente de chaves. Não não executa este comando se você deseja manter sua CA criada anteriormente. Isso exigirá que você implemente um novo
ca.crt
../clean-all
- Crie o CA executando
./build-ca
. Você pode preencher os detalhes desejados, mas observe que essas informações ficarão visíveis nos arquivos de log quando os clientes se conectarem ao servidor. Isso criará os arquivosca.key
eca.crt
na subpastakeys
. Mantenha oca.key
do arquivo 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 perdido ou expirado, precisará revogar o antigo primeiro com
./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
Quando for solicitada uma senha, deixe-a vazia, a menos que esteja disposto a digitar a senha sempre que o servidor for iniciado (não recomendado). Confirme ao assinar o certificado e confirmá-lo. Dois novos arquivos aparecerão no diretório
keys
:server.key
eserver.crt
.
DH e use prepare para tls-auth
Gere os 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
) deve ser distribuído aos clientes também, mas você não deve colocá-lo em público.
Crie certificados para clientes
Para cada cliente, essas etapas devem ser repetidas:
-
Digite o diretório no qual você criou seu certificado de CA e servidor:
cd ~/openvpn-admin/easy-rsa
-
Se você ignorou a etapa de criação da CA porque você já possui um, será necessário primeiro carregar as variáveis:
. vars
- Se você estiver criando novos certificados porque os antigos estão perdidos ou vencidos , é necessário revogar o antigo primeiro com
./revoke-full you
. Caso contrário, você receberá um erro no banco de dados. -
Crie o certificado de clientes
you.key
e seu certificado correspondenteyou.crt
:./build-key you
O
CommonName
deve ser exclusivo. Deixe a senha vazia se você estiver usando o KDE, pois ainda não é suportado a partir de 10.10.Assim como na geração de certificados do servidor, confirme assinando o certificado e confirmando as 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 é acessível da Internet do mal.
-
Crie um usuário dedicado para o OpenVPN, digamos
openvpn
:sudo useradd openvpn
-
Copie os arquivos
server.key
,server.crt
,ca.crt
edh1024.pem
(oudh2048.pem
se você alterou o tamanho da chave) do diretório keys para/etc/openvpn
. Uma permissão de 400 (somente leitura para o proprietário) está bem.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 também o arquivo
ta.key
: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, não é necessário ser secreto, mas prefiro não vazar detalhes de configuração:
sudo chmod 640 /etc/openvpn/server.conf
4. Terminando o servidor
Se você criou os certificados no servidor, é uma boa ideia criptografá-lo ou movê-lo para fora do servidor. Em qualquer caso, não perca o ca.key
e server.key
. No primeiro caso, outros poderão se conectar ao seu servidor. Neste último, um MITM é possível.
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 endurecer 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 do NetworkManager (adequado para o KDE e o 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
- Digite: "Certificados (TLS)" (Gnome) ou "Certificado X.509" (KDE)
- Certificado de CA: caminho para
ca.crt
- Certificado de usuário: caminho para
you.crt
- Chave privada: caminho para
you.key
Em Avançado :
- Porta do gateway: Automático (1194) (não precisa ser alterado)
- Use a compactação de dados LZO: ativada
- Use a conexão TCP: desativada
- Use o dispositivo TAP: ativado
- Cifra: padrão
- Autenticação do HMAC: padrão
- Usar autenticação TLS: ativado
Especifique o caminho do arquivo de chave parata.key
e defina "Direção de chave" para1
. - ( todo - verificando ) o servidor envia o gateway padrão para que todo o tráfego passe pela conexão VPN. A última vez que verifiquei, o plugin network-manager-openvpn não fez isso.
Se você não conseguir usar o NetworkManager ou não quiser usá-lo, coloque os arquivos ( ca.crt
, ...) em /etc/openvpn
e crie o arquivo /etc/openvpn/client.conf
file:
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 quiser ativar essa VPN no momento da inicialização, edite o /etc/default/openvpn
e descomente a próxima linha, removendo a #
:
#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 denominado client.conf
. Exemplo: se você nomeou seu arquivo de configuração safe.conf
, você precisa executar sudo /etc/init.d/openvpn start safe
.
Para parar o OpenVPN, você precisa executar:
sudo /etc/init.d/openvpn stop