Como configuro o OpenVPN para que eu possa usar a Internet com segurança de um ponto de acesso desprotegido?

31

Objetivo: desejo usar a Internet com segurança em meu PC doméstico enquanto meu notebook estiver conectado a um ponto de acesso / ponto de acesso aberto.

Eu faço sei que posso usar um proxy SSH tunnel / SOCKS, mas não quero mexer nas aplicações (fazê-las usá-las, se possível). Eu acho que o que eu preciso é de uma configuração OpenVPN, então eu estou procurando um guia detalhado sobre como:

  1. Instalar e configurar 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.

    
por htorque 17.04.2011 / 22:06

3 respostas

38

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:

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.

  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. Editar padrões em vars conforme necessário, por exemplo, configurando KEY_SIZE=2048 porque você é paranóico.
  3. Carregue as variáveis ​​e crie o diretório de chaves executando:

    . vars
    
  4. Se você receber um erro que No ... openssl.cnf file could be found Further invocations will fail , execute ln -s openssl-1.0.0.cnf openssl.cnf e, em seguida, . vars novamente.

  5. 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
    
  6. 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 arquivos ca.key e ca.crt na subpasta keys . Mantenha o ca.key do arquivo 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 perdido ou expirado, precisará revogar o antigo primeiro com ./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
    

    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 e server.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:

  1. Digite o diretório no qual você criou seu certificado de CA e servidor:

    cd ~/openvpn-admin/easy-rsa
    
  2. Se você ignorou a etapa de criação da CA porque você já possui um, será necessário primeiro carregar as variáveis:

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

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

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

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. 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
    
  5. 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 para ta.key e defina "Direção de chave" para 1 .
  • ( 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
    
por Lekensteyn 17.04.2011 / 23:53
7

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

  1. Primeiro, instale o pacote tsocks (meias temporárias):

    sudo apt-get install tsocks
    
  2. Em seguida, edite /etc/tsocks.conf e digite

    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. Executar (via outro terminal ou ALT-F2):

    tsocks firefox
    

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

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

    
por MarkovCh1 18.04.2011 / 01:16
1

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

    
por Felix 18.04.2011 / 00:37