Como construir sua própria VPN se você estiver (com razão) desconfiado de opções comerciais

Embora não perfeito, quer, nuvem provedores de hospedagem têm um melhor registro de dados do cliente.

Na esteira do regulamento do Senado desta primavera que nixing regulamentos da privacidade de FCC impostos em ISPs, você pode (ainda mais) preocupar-se sobre como seus dados são usados, abusados, e abusados. Tem havido um monte de opiniões sobre este tema desde, desde "o céu está caindo" para " mover-se, cidadão, nada para ver aqui ." O fato é que os ISPs tendem a ser bastante inescrupulosos, às vezes até cruéis, sobre como eles coletam e usam os dados de seus clientes. Você pode não ter certeza de como é um problema se o seu ISP dá aos anunciantes mais informações para veicular anúncios que você gostaria de ver, mas que tal quando seu ISP literalmente edita seu tráfego HTTP, inserindo mais anúnciospossivelmente , quebrando páginas da web?





Com um Congresso que demonstrou a sua falta de interesse em protegê-lo de seu ISP e ISPs que têm demonstrado repetidamente uma atitude "qualquer-nós-pode-get-away-com" para a privacidade dos dados dos clientes e integridade, pode ser tempo Para analisar como obter os seus dados sob os olhos indiscretos do ISP e dedos sujos intactos. Para fazer isso, você precisará de uma VPN.

O escopo do problema (e da solução)

Antes que você possa corrigir esse problema, você precisa entendê-lo. Isso significa saber o que seu ISP pode (e não pode) detectar (e modificar) no seu tráfego. HTTPS tráfego já é relativamente seguro ou, pelo menos, seuconteúdo é. Seu ISP não pode realmente ler o tráfego criptografado que vai entre você e um site HTTPS (pelo menos, eles não podem, a menos que convencê-lo a instalar um certificado MITM, como Lenovo fez para os usuários inocentes de seus laptops de consumo em 2015). No entanto, ISPs que saber que você visitou o site, quando você visitou, quanto tempo você ficou lá, ea quantidade de dados ia e voltava.
Eles sabem disso algumas maneiras. Primeiro, se o seu site usa a Indicação do Nome do Servidor (SNI) para permitir que vários sites HTTPS sejam atendidos a partir de um único endereço IP, o nome do host é enviado para que o servidor saiba qual certificado usar para a conexão. Em segundo lugar, e mais importante, seu tráfego de DNS dá-lhe afastado. Se você está indo para Amazon.com ou BobsEmporiumOfDiscountFurryMemorabilia.com, seu computador precisa resolver esse nome de domínio para um endereço IP. Isso é feito de forma clara, o que significa que é facilmente interceptado (e até mesmo mutável em vôo!) Pelo seu ISP (ou qualquer outro MITM ) se você está usando os servidores DNS do seu ISP ou não.
Isso já é suficiente para construir um perfil valioso em você para fins de publicidade. Dependendo do seu nível de paranóia, também é suficiente para construir um perfil em você para fins de chantagem ou para comprometer completamente o seu tráfego da Web, se você não é incrivelmente cuidadoso e observador. Imagine que um invasor tenha o uso de uma Autoridade de Certificação para gerar seus próprios certificados (válidos!) ; Com isso e o DNS, eles podem facilmente redirecioná-lo para um servidor de sua própria escolha, que usa um certificado em que seu navegador confia para configurar um proxy invisível entre você e o site que você está tentando acessar com segurança. Mesmo sem o uso de uma CA desonestos, o controle de seu DNS torna mais fácil para um invasor usar nomes de domínio punycode e truques semelhantes para deslizar sob seu radar.
Além disso, qualquer tráfego não criptografado, incluindo, mas não limitado a, HTTP (tráfego antigo simples da porta 80), muito tráfego peer-to-peer e muito mais, pode ser simplesmente editado on-the-fly diretamente. Que, devo lembrá-lo, ISPs repetidamente demonstraram-se como perfeitamente dispostos a fazer.
Você não pode se proteger de todos os atacantes em potencial. Infelizmente, uma grande quantidade da infra-estrutura crítica do seu acesso à Web está sem criptografia e realmente não pode ser protegida Como uma pessoa com recursos limitados que não podem dar ao luxo de considerar a segurança pessoal mais do que um trabalho a tempo parcial, você (e eu) estão infelizmente mais perto do esquilo secreto do que a James Bond. No entanto, você pode mover suas transmissões vulneráveis ​​e não criptografadas para fora do alcance de seu ISP . Então é isso que vamos tentar fazer aqui.
Se você acha que isso será seguro, por favor, continue a ler.
Ampliar / Se você acha que isso será seguro, por favor, continue a ler.

Um problema de confiança

Já estabelecemos - na verdade, seu ISP já estabeleceu - que seu ISP não pode ser confiável. A solução óbvia, então, é uma VPN, uma rede privada virtual, que encapsula todos os seus dados vulneráveis ​​e não criptografados fora do alcance do ISP. O problema é que os dados serão tão vulneráveis ​​quando sai do nó de extremidade. Essencialmente, você trocou um conjunto de vulnerabilidades por outro conjunto, espero que seja menos problemático.
Imagine que você tem um gênio maléfico particularmente pesky de um irmãozinho que aprendeu a bater o tráfego de rede saindo de seu quarto e que se delicia em envergonhá-lo na escola com as fofocas que você compartilhou privadamente (ou assim você pensou) com o seu amigos. Um desses amigos diz: "Ei, que tal você configurar uma VPN entre sua casa e a minha? Então tudo que sai do seu quarto será criptografado, e seu irmãozinho não pode mexer com ele." Até agora, tão bom, mas depois se revela que o amigo tem um malvado gênio maléfico de uma irmãzinha , e agora ela está lendo seus mensagens instantâneas e passando os bits suculentos para o seu irmãozinho. No final, você não é melhor do que você começou.
Esta é a situação que você está em hoje quando você começar a olhar para os provedores de VPN : talvez eles são confiáveis, talvez eles não são. Infelizmente, as mesmas características que os tornam atraentes (reivindicações para não registrar seu tráfego, nenhumas boas relações com autoridades, presença em muitos países, plantas baratas) fazem-nos ... duvidosos. Como você sabe que a empresa com os escritórios na Moldávia que está cobrando $ 2 / mo para toda a largura de banda que você pode comer não é realmente monetizar seus dados apenas como o seu ISP fez, ou talvez ainda pior? Alguém auditou suas instalações para verificar independentemente quaisquer reivindicações de zero log? Provavelmente não.
Agora, uma VPN chamada Acesso Privado à Internet recentemente fez algumas ondas ao se levantar a uma intimação do FBI até certo ponto. Em um caso em torno de uma possível ameaça de bomba hoax ( PDF ), Private Internet Access parece ter feito bem em suas reivindicações não log . De acordo com a queixa criminal , "uma intimação foi enviada para a London Trust Media ea única informação que eles poderiam fornecer é que o cluster de endereços IP sendo usado era da costa leste dos Estados Unidos".
Isso significa que todos podem confiar em VPNs em geral? Claro que não. E como para acesso privado à Internet especificamente, um sucesso público não necessariamente remover todas as dúvidas-promotores no caso não empurrar mais, dado que tinham abundância de outras evidências para apoiar o seu argumento. Então, se você não pode confiar em seu ISP e você não pode confiar em um provedor de VPN, qual é o plano, então? Bem, você é deixado com uma opção possivelmente não é adequado para o seu usuário médio de Internet: rolar sua própria VPN em um provedor de hospedagem de nuvem barato como Linode ou Digital Ocean.
Não há nenhuma garantia absoluta com esta avenida, tampouco, mas quando você provavelmente não puder evitar seu ISP local (poucos de nós têm mais de duas escolhas, se aquele), o Internet é cheio de fornecedores hospedando. É um negócio muito maior se um deles gera muita raiva do cliente por brincar com os dados dos clientes. Essas empresas também são menos propensas a rolar mais rapidamente para os pedidos indevidamente apresentadas aplicação da lei do que um ISP típico (embora, novamente, não há garantias). Obtendo seus dados com segurança longe de um predador ISP é uma coisa; Obtê-lo longe de um adversário do Estado-nação ou APT que realmente quer é algo mais inteiramente e, provavelmente , além do nosso alcance.
Slide real dos vazamentos de Snowden: dramatização do que os estados-nação fazem quando se deparam com usuários que nem mesmo tentam.
Ampliar / Deslizar real dos vazamentos de Snowden: dramatização do que os estados-nação fazem quando se deparam com usuários nem mesmo tentando.

Pegue uma chave SSH e comece

Quando se trata de hospedagem, há uma abundância de grandes fornecedores lá fora, e em especial eu usei tanto Digital Ocean e Linode extensivamente. Ambos oferecem instâncias a partir de US $ 5 / mo com vários data centers e excelentes recursos de gerenciamento. Para este projeto, eu escolhi o Oceano Digital, mas qualquer um (ou qualquer um de vários outros) fará.
Antes de começar a configurar uma VM, vamos garantir que podemos acessá-la de forma segura. Se você já tem uma chave SSH e sabe como usá-lo, ótimo. Se não, você precisará fazer um. No Linux ou um Mac, acesse o shell e digite ssh-keygen -t rsa . Isso criará um par de chaves SSH e lhe dará a opção de adicionar uma frase de desafio, que eu recomendo. Sem a frase de desafio, qualquer pessoa que tenha os arquivos que compõem o par de chaves pode efetuar login como você imediatamente; Com a frase desafio, mesmo um atacante com a posse da chave não pode entrar, a menos que eles já sabem o seu desafio também (que nunca é armazenado em qualquer lugar).
No Windows, é um pouco mais complicado. Baixe o PuTTY se você ainda não o tiver, então siga o guia do DigitalOcean para gerar chaves SSH com puttygen . (O guia é preciso se você está escolhendo o DigitalOcean como um provedor ou não.)
Agora que você tem uma chave, faça backup e coloque a frase de desafio em seu gerenciador de senhas. Depois de ter feito isso, estamos finalmente prontos para girar uma VM.

Girando uma máquina virtual

Vamos brevemente percorrer os passos exatos para configurar uma VM no DigitalOcean, porque esta parte realmente não é difícil. E se você decidiu usar Linode ou algum outro provedor em vez disso, você não deve ter muito de um desafio descobrir isso.
Uma vez que você navegou para DigitalOcean e logado (criando uma conta de usuário em primeiro lugar, se necessário), clique no botão verde grande "Create Droplet" no canto superior direito. Isso fornece uma variedade de opções de sistema operacional, tamanho de gotículas e data center. Vamos usar o Ubuntu 16.04 e uma gota de US $ 5 (oferecendo 1 CPU, 512 MB de RAM, 20 GB de armazenamento e 1 TB / mo de largura de banda). Você provavelmente deve selecionar o centro de dados fisicamente mais próximo de você, a menos que você esteja especificamente preocupado com o seu governo, caso em que você pode escolher um no exterior. Sob "opções adicionais", eu recomendo monitoramento (que não custa extra). Em "Adicionar suas chaves SSH", se você ainda não adicionou o seu a sua conta, clique em "Nova chave SSH", cole na sua chave pública (id_rsa. Pub) do par que você gerou anteriormente, dar-lhe um útil, humanos-legível nome amigável e clique em "Adicionar chave SSH." Agora, certifique-se de que a caixa de seleção das teclas está assinalada no formulário Criar Dropleta (afinal, é o caminho para a VM).
Em seguida, escolha um nome de host para o seu droplet (algo memorável e fácil de identificar, de preferência) e clique em "Criar". Cerca de 15 segundos mais tarde, a sua VPN estará pronta para iniciar sessão e o respectivo endereço IP será visível na página Droplets principal. De Linux ou Mac, ssh root@your.new.ip.address. No Windows, digite e salve root@your.new.ip.address como um destino e, em seguida, conecte-se a ele e você estará pronto. Uma vez que você entrou em sua frase desafio (se você usou um), você estará olhando para algo ao longo das linhas de root @ ars-vpn-test: ~ # .

Atualizações automáticas de segurança

Dado que o ponto inteiro deste exercício é aumentar a sua segurança, não para estragar tudo. Queremos ter certeza de que sua nova VM recebe atualizações automáticas de segurança à medida que elas se tornam disponíveis.
Root @ ars-vpn-test: ~ $ apt update; Apt dist-upgrade -y
 Root @ ars-vpn-test: ~ $ apt install unattended-upgrades
 Root @ ars-vpn-test: ~ $ dpkg-reconfigure unattended-upgrades
O que fizemos aqui, por ordem, foi atualizar-nos com uma nova lista do que está disponível em repositórios de pacotes, então atualizar tudo  instalado para a versão mais recente, então instalar o pacote de atualizações desacompanhadas e, finalmente, reconfigurar esse pacote. Falando nisso, você estará olhando para um diálogo de texto em modo ncurses agora pedindo que você faça exatamente isso; Tudo que você precisa fazer é certificar -se de que <Yes> é realçado em vermelho (deve ser por padrão), então pressione enter duas vezes (uma vez para aceitar que você quer ativar upgrades automáticos ea segunda para aceitar o padrão padrão para automaticamente instalado Upgrades, que se resume a "coisas relacionadas com a segurança apenas, não novos recursos brilhantes").
O primeiro passo para melhorar a segurança é garantir que <em> permanece </ em> melhorado.

Instalando e configurando o servidor OpenVPN

OK, agora é hora para a parte mastigável. Os pacotes que você precisa são openvpn e easy-rsa .
 Root @ ars-vpn-test: ~ $ apt instalar o openvpn easy-rsa
Sério, isso foi tudo o que houve para a instalação, mas agora é hora de começar a configurar. Em primeiro lugar, precisamos ativar o encaminhamento de pacotes ipv4:
 Root @ ars-vpn-teste: ~ $ nano /etc/sysctl.conf
Tudo que você precisa fazer aqui é encontrar a linha que diz # net.ipv4.ip_forward = 1  e remover o sinal de libra principal ("hashtag", para você young'uns). Isso descomenta a linha, permitindo que ela tenha efeito. Pressione ctrl-X para sair e Y para dizer Sim, você gostaria de salvá-lo, e você está de volta no prompt de comando novamente.
 Root @ ars-vpn-test: ~ $ sysctl -p
O sistema informará que definiu o valor net.ipv4.ip_forward = 1 . Parabéns, você está pronto para rota. O próximo passo é obter os scripts úteis do pacote easy-rsa no local e usá-los para gerar sua própria autoridade de certificação privada.
 Root @ ars-vpn-test: ~ $ cp -a / usr / share / easy-rsa / * / etc / openvpn /
 Root @ ars-vpn-test: ~ $ cd / etc / openvpn
 Root @ ars-vpn-test: / etc / openvpn $ nano vars
arquivo / etc / openvpn / vars contém três configurações realmente importantes - KEY_SIZE , que controla apenas o que parece e deve ser configurado para um mínimo de 2048 (eu uso 4096); CA_EXPIRE e KEY_EXPIRE , que controlam quanto tempo suas chaves são boas, com uma data de validade padrão de 10 anos. Chaves expiradas não funcionam mais, por isso esta é basicamente uma data drop-dead para a sua configuração VPN. Após essas datas ir e vir, você terá que regenerar e re-distribuir as chaves novamente.
Em geral, você deve alterar o restante dos valores - KEY_COUNTRY , KEY_PROVINCE e assim por diante - para corresponder ao que faz sentido para você, mas estes são basicamente fluff legível para humanos, e o computador não se importa particularmente com o que está lá dentro. Qualquer coisa, incluindo os valores padrão, funcionará.
Depois de ter CTRL-X'ed e Y'ed o seu caminho para fora de vars e salvou-o, é hora de voltar a trabalhar no shell.
 Root @ ars-vpn-test: / etc / openvpn $ fonte ./vars
 Root @ ars-vpn-test: / etc / openvpn $ ./clean-all
Você receberá alguns avisos terríveis sobre excluir todas as suas chaves aqui - ignorá-lo. Executar um ./clean-all preparatório é uma etapa obrigatória em instalações OpenVPN modernas. Apenas não o execute outra vez a menos que você quiser perder todas suas chaves e certificados.
 Root @ ars-vpn-test: / etc / openvpn $ ./build-ca
 Root @ ars-vpn-test: / etc / openvpn $ ./build-key-server server
Haverá um monte de pressionar [enter] através destas etapas para confirmar os valores padrão que você definiu no vars mais cedo. Você pode apenas entrar no seu caminho, mas não se esqueça de realmente pressionar Y duas vezes no final para assinar primeiro o certificado, em seguida, confirmá-lo. Nosso próximo passo será a construção da chave Diffie-Hellman, com o comando ./build-dh . Você precisa especificar um argumento keysize na linha de comando para este. Mais geralmente é melhor, então eu fui com uma chave de 4096 bits ... que levou bastante tempo para gerar; 26 minutos e 35 segundos, para ser exato. Uma vez que você começar este processo iniciado, você pode querer ir assistir a um programa de TV ou algo assim. Vai demorar um pouco.
 Root @ ars-vpn-test: / etc / openvpn $ ./build-dh 4096
Agora você está pronto para criar seus certificados e chaves reais. Lembre-se de quantas vezes você teve que pressionar [enter] quando você criou seu certificado de CA e sua chave de servidor um par de etapas acima? Se você encontrou aquele irritante, você pôde querer fazer algum trabalho de preparação puramente opcional aqui. As ferramentas build-key e build-key-pass são scripts legíveis por humanos que invocam pkitool. Ambos podem ser editados para remover o argumento --interact que eles passam por padrão, o que resulta em que obnóxio dez-in-a-row [enter] seqüência. Em vez de editar essa linha diretamente (e talvez enroscá-la e não saber como obtê-la de volta ao original), copie a linha, colá-la em uma nova e, em seguida, comente a primeira linha com um sinal de libra. Uma vez feito isso,
 #! / Bin / sh
 
 # Fazer um par certificado / chave privada usando um gerado localmente
 # Certificado raiz.
 
 Exportação EASY_RSA = "$ {EASY_RSA: -.}"
 # "$ EASY_RSA / pkitool" --interact $ *
 "$ EASY_RSA / pkitool" $ *
... e para construir-key-pass , você vai acabar com isso:
 #! / Bin / sh
 
 # Similar ao build-key, mas proteger a chave privada
 # Com uma senha.
 
 Exportação EASY_RSA = "$ {EASY_RSA: -.}"
 # "$ EASY_RSA / pkitool" --interact --pass $ *
 "$ EASY_RSA / pkitool" --pass $ *
Uma vez que você editou e salvou ambos (ou ignorou esta etapa, se você não se importa de usar a tinta fora de sua tecla Enter), você está pronto para realmente gerar algumas chaves e certificados para autenticar com. Eu gerou três keypairs -client-no-pass , cliente-com-passe , e R8000- este último destina-se a ser utilizado com o meu router Netgear handy-dandy com firmware DD-WRT.
 Root @ ars-vpn-test: / etc / openvpn $ ./build-key R8000
 Root @ ars-vpn-teste: / etc / openvpn $ ./build-key client-no-pass
 Root @ ars-vpn-test: /etc/abrevpn $ ./build-key-pass client-with-pass
Assim como quando geramos um par de chaves SSH anteriormente, a diferença entre chaves geradas com build-key e build-key-pass é que o primeiro trabalho "naked", mas o segundo exigirá uma frase de desafio a ser inserido quando o OpenVPN túnel É iniciado sempre. Em geral, os keypairs com um desafio são mais apropriados para credenciais que você usará diretamente em seu computador ou telefone e iniciar e parar manualmente , enquanto keypairs sem uma frase de desafio são mais apropriados para uso autônomo em que dispositivos podem iniciar e parar automaticamente túneis sem Intervenção do usuário. (DD-WRT pode realmente usar keypairs com frases de desafio, mas ao fazê-lo subverte a maior parte do ponto: você tem que salvar a frase de desafio nas configs;
Agora que você tem suas credenciais geradas, é hora de configurar o próprio servidor. Primeiro, vamos pegar uma cópia de referência de uma configuração de servidor OpenVPN típico de onde os pacotes o deixaram:
 Root @ ars-vpn-test: / etc / openvpn $ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz / etc / openvpn /
 Root @ ars-vpn-test: / etc / openvpn $ gunzip ./server.conf.gz
 Root @ ars-vpn-test: / etc / openvpn $ mv server.conf server.conf.dist
Pode ser bastante esmagadora vadear através da massa de comentários nesse arquivo de configuração padrão, então vamos mudar o nome de algo safe- server.conf. Dist , para que o sistema não tente executá-lo - e apenas comece de novo com um arquivo limpo. Isso ficará assim:
 # /etc/openvpn/server.conf - Ars Technica Edition
 Port 1194
 Proto udp
 Dev tun
 
 Ca /etc/openvpn/keys/ca.crt
 Cert /etc/openvpn/keys/server.crt
 Key /etc/openvpn/keys/server.key # Este arquivo deve ser mantido em segredo
 Dh /etc/openvpn/keys/dh4096.pem
 
 Cifra AES-256-CBC
 Auth SHA512
 
 Server 10.8.0.0 255.255.255.0
 Push "redirecionamento-gateway def1 bypass-dhcp"
 Push "dhcp-option DNS 8.8.8.8"
 Push "dhcp-option DNS 8.8.4.4"
 
 Ifconfig-pool-persist ipp.txt
 Keepalive 10 120
 
 Comp-lzo
 
 Tecla de persistência
 Persist-tun
 
 Status openvpn-status.log
 Verbo 3
porta de configuração 1194 , proto udp e dev tun nos definem na porta IANA reservada para OpenVPN, usando o protocolo UDP (altamente recomendado, o OpenVPN pode usar o TCP, mas o seu desempenho sofrerá significativamente se o fizer) eo estilo tun Do adaptador de rede virtual em vez de toque . As diferenças entre tun e toque são bastante misteriosa, mas ao final do dia tun tanto proporciona mais segurança para dispositivos de clientes individuais de outros dispositivos clientes e, na minha experiência, é também menos provável que falhar por nenhuma razão aparente, então tun -lo é.
O próximo bloco de quatro configurações deve ser bastante auto-explicativo, apontando OpenVPN para o local das credenciais que ele precisa para executar. Ele fica mais interessante com cifra e autenticação Estas são a cifra usada para criptografar seus dados eo digest usado para lidar com a autenticação, respectivamente. As opções que eu escolhi aqui são err no lado paranóico, que não vai prejudicar o seu desempenho qualquer no seu próprio computador ou na VM você está executando o servidor em (mesmo o meu Celeron J1900 Homebrew pode empurrar> 200 Mbps com estes Configurações), mas pode ser um pouco muito para um roteador de consumidor se você estiver configurando um túnel VPN baseado em roteador em toda a rede como estaremos.
Se você estiver interessado em rodar o controle deslizante performance-vs-security, eu tenho a sua volta: meu Netgear R8000 testar roteador gerenciado cerca de 25 Mbps throughput configurado com AES-256-CBC / SHA512 como mostrado aqui. AES-256-CBC / SHA1, que ainda é razoavelmente segura, obteve um mais respeitável 37,24 Mbps. Isso é quase tão baixo quanto você pode ir e ainda chamar o resultado "uma VPN" com uma cara reta, no entanto. Se você quer um desempenho melhor do que aquele, você deve provavelmente considerar funcionar o cliente de VPN diretamente em seu computador próprio ou em um router mais poderoso.sso é bastante representativo do débio do Netgear R8000 nas minhas configurações mais paranóicas OpenVPN. Tecnicamente, isto é * duplo * VPN'ed - o Nighthawk construiu seu túnel * através * do túnel que o Homebrew já está correndo a montante dele. No entanto, a restrição real aqui (no lado do download, pelo menos) é o próprio desempenho do R8000 - ele não pode bater em qualquer lugar perto dos 100 Mbps nominais fornecidos pelo Spectrum ou mesmo o que resta do que depois do streaming Netflix e tudo o que minha esposa , Miúdos, e meus outros computadores estavam fazendo quando os testes funcionaram.

Um comentário: