Como configuro o OpenVPN para poder usar a Internet com segurança de um ponto de acesso não seguro?

31

Objetivo: desejo poder usar a Internet com segurança através do meu PC doméstico enquanto meu notebook está conectado a um ponto de acesso / ponto de acesso aberto.

Eu não sei que eu posso usar um túnel SSH / proxy SOCKS, mas eu não quero mexer com aplicações (tornando-os usá-lo, se mesmo possível). Acho que o que preciso é de uma configuração do OpenVPN, por isso estou procurando um guia detalhado sobre como:

  1. Instale e configure o servidor OpenVPN
  2. Configure o cliente OpenVPN (NetworkManager)

As versões do Ubuntu em que isso deve funcionar são 10.10 e 11.04.

htorque
fonte
Esta é mais uma questão de falha no servidor do que uma questão do ubuntu, eu acho.
Luis Alvarado
11
@Cyrex: 1) é, 2) provavelmente não
Lekensteyn

Respostas:

40

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.

  1. 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
    
  2. Edite os padrões varsconforme necessário, por exemplo, configuração KEY_SIZE=2048porque você é paranóico.
  3. Carregue as variáveis ​​e crie o diretório de chaves executando:

    . vars
    
  4. 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 . varsnovamente.

  5. 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
    
  6. 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.keye ca.crtna subpasta keys. Mantenha o ca.keyarquivo em segredo em todas as circunstâncias . Não fazer isso permitirá que qualquer pessoa com a chave se conecte ao seu servidor.
  7. 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.
  8. 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.keye 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:

  1. Digite o diretório em que você criou sua CA e certificado de servidor:

    cd ~/openvpn-admin/easy-rsa
    
  2. Se você pulou a etapa de criação da CA porque já possui uma, precisará carregar as variáveis ​​primeiro:

    . vars
    
  3. 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.
  4. Crie o certificado de clientes you.keye seu certificado correspondente you.crt:

    ./build-key you
    

    O CommonNamedeve 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.

  1. Crie um usuário dedicado para o OpenVPN, diga openvpn:

    sudo useradd openvpn
    
  2. Copie os arquivos server.key, server.crt, ca.crte dh1024.pem(ou dh2048.pemse 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}
    
  3. Copie o arquivo ta.keytambém:

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. Crie o arquivo /etc/openvpn/server.confe 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
    
  5. 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.keye 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.keye 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/openvpne crie o /etc/openvpn/client.confarquivo:

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/openvpne descomente a próxima linha removendo #:

#AUTOSTART="none"

Para iniciar esta conexão, execute:

sudo /etc/init.d/openvpn start client

clientdeve 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
Lekensteyn
fonte
11
Qual é a configuração do servidor para login baseado em nome de usuário / senha, onde meu cliente não tem conhecimento para configurar o cliente VPN tudo que eu quero que ele use ip do servidor, nome de usuário, senha.
@YumYumYum Não tem idéia de como usar nome de usuário / senha, consulte a página de manual do openvpn ( man openvpn). As versões recentes do openvpn têm a capacidade de incorporar certificados e arquivos de chaves, então talvez seja ainda mais fácil fornecer esse único arquivo de configuração com instruções para o usuário.
Lekensteyn
Observe que as versões mais recentes do Ubuntu são fornecidas com o OpenSSL 1.0.1 e a execução do . varscomando acima pode gerar um erro que "o arquivo openssl.cnf pode ser encontrado. Mais invocações falharão". Você precisa sudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, em seguida, executar . varse os outros comandos.
Dan Dascalescu
@DanDascalescu O roteiro whichopenssllocaliza o openssl-1.0.0.cnfarquivo corretamente para mim (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Lekensteyn
Resposta muito informativa e completa. Você poderia responder a esta pergunta ?
JB0x2D1
8

Você realmente não precisa mexer em nenhum aplicativo. Isso funciona "como a VPN".

  1. Primeiro instale o tsockspacote (meias temporárias):

    sudo apt-get install tsocks
    
  2. Em seguida, edite /etc/tsocks.confe insira

    server = 127.0.0.1
    server_port = 3333
    
  3. Agora, abra um terminal e digite (isso conecta você):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. Execute (através de outro terminal ou ALT-F2):

    tsocks firefox
    

Agora, o Firefox transmite toda a comunicação através do servidor SOCKS no seu computador que o SSH criou. Isso fica ainda mais direcionado para a sua máquina doméstica, para onde vai para a web. Tudo que você precisa na sua máquina doméstica é um servidor SSH. Após a primeira vez, basta repetir as etapas 3 e 4.

Ele funciona como um encanto! Infelizmente, o cromo não gosta de tsocks, mas ei, o Firefox funciona.

MarkovCh1
fonte
3
Bem, veja sua última frase - não quero verificar todos os meus programas primeiro se eles realmente funcionarem bem com tsocks, quando pode ser apenas um clique no miniaplicativo NetworkManager com OpenVPN.
htorque
ESTÁ BEM. Minha resposta provavelmente será útil para pessoas que desejam uma solução rápida para acessar sites.
precisa saber é o seguinte
1

A solução de túnel SSH é mais fácil do que você pensa. Um programa como o gSTM iniciará / interromperá os túneis para você com uma GUI. Em seguida, basta abrir o Network Proxy e alterá-lo de Conexão direta à Internet para Configuração manual do proxy, clicar em "Aplicar em todo o sistema" e todos os seus aplicativos devem enviar seus dados pelo túnel - não é necessário mexer com cada um individualmente.

Felix
fonte