Instalador OpenVPN para Debian, Ubuntu, Fedora, CentOS, Arch Linux, Oracle Linux, Rocky Linux e AlmaLinux.
Este script permitirá que você configure seu próprio servidor VPN seguro em apenas alguns segundos.
Você também pode conferir o wireguard-install, um instalador simples para um protocolo VPN mais simples, seguro, rápido e moderno.
Primeiro, pegue o script e torne-o executável:
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
Em seguida, execute-o:
./openvpn-install.sh
Você precisa executar o script como root e ter o módulo TUN habilitado.
Na primeira vez que você executá-lo, você terá que seguir o assistente e responder algumas perguntas para configurar seu servidor VPN.
Quando o OpenVPN estiver instalado, você poderá executar o script novamente e terá a opção de:
Em seu diretório inicial, você terá arquivos .ovpn
. Estes são os arquivos de configuração do cliente. Baixe-os do seu servidor e conecte-se usando seu cliente OpenVPN favorito.
Se você tiver alguma dúvida, acesse primeiro o FAQ. Por favor, leia tudo antes de abrir uma edição.
POR FAVOR, não me envie e-mails ou mensagens privadas pedindo ajuda. O único lugar para obter ajuda são os problemas. Outras pessoas poderão ajudar e, no futuro, outros usuários também poderão enfrentar o mesmo problema que você. Meu tempo não está disponível de graça só para você, você não é especial.
Também é possível executar o script sem comando, por exemplo, sem esperar pela entrada do usuário, de maneira automatizada.
Exemplo de uso:
AUTO_INSTALL=y ./openvpn-install.sh
# or
export AUTO_INSTALL=y
./openvpn-install.sh
Um conjunto padrão de variáveis será então definido, passando a necessidade de entrada do usuário.
Se quiser personalizar sua instalação, você pode exportá-los ou especificá-los na mesma linha, conforme mostrado acima.
APPROVE_INSTALL=y
APPROVE_IP=y
IPV6_SUPPORT=n
PORT_CHOICE=1
PROTOCOL_CHOICE=1
DNS=1
COMPRESSION_ENABLED=n
CUSTOMIZE_ENC=n
CLIENT=clientname
PASS=1
Se o servidor estiver atrás de NAT, você poderá especificar seu endpoint com a variável ENDPOINT
. Se o endpoint for o endereço IP público que está por trás dele, você pode usar ENDPOINT=$(curl -4 ifconfig.co)
(o script será o padrão). O endpoint pode ser um IPv4 ou um domínio.
Outras variáveis podem ser definidas dependendo da sua escolha (criptografia, compactação). Você pode procurá-los na função installQuestions()
do script.
Clientes protegidos por senha não são suportados pelo método de instalação headless, pois a entrada do usuário é esperada pelo Easy-RSA.
A instalação headless é mais ou menos idempotente, pois foi tornada segura para ser executada várias vezes com os mesmos parâmetros, por exemplo, por um provisionador de estado como Ansible/Terraform/Salt/Chef/Puppet. Ele só instalará e regenerará o Easy-RSA PKI se ele ainda não existir, e só instalará o OpenVPN e outras dependências upstream se o OpenVPN ainda não estiver instalado. Ele recriará todas as configurações locais e gerará novamente o arquivo do cliente em cada execução sem comando.
Também é possível automatizar a adição de um novo usuário. Aqui, a chave é fornecer o valor (string) da variável MENU_OPTION
junto com as variáveis obrigatórias restantes antes de invocar o script.
O script Bash a seguir adiciona um novo usuário foo
a uma configuração OpenVPN existente
#! /bin/bash
export MENU_OPTION= " 1 "
export CLIENT= " foo "
export PASS= " 1 "
./openvpn-install.sh
nobody
/ nogroup
O script oferece suporte a estas distribuições Linux:
Apoiar | |
---|---|
AlmaLinux 8 | ✅ |
Amazon Linux 2 | ✅ |
Arco Linux | ✅ |
CentOS 7 | ✅ |
Fluxo CentOS >= 8 | ✅ ? |
Debian >= 10 | ✅ ? |
Fedora >= 35 | ✅ ? |
OracleLinux 8 | ✅ |
Rochoso Linux 8 | ✅ |
Ubuntu >= 18.04 | ✅ ? |
A ser observado:
amd64
.systemd
. Este roteiro é baseado no excelente trabalho de Nyr e seus colaboradores.
Desde 2016, os dois roteiros divergiram e não são mais iguais, principalmente nos bastidores. O principal objetivo do script era aumentar a segurança. Mas desde então, o roteiro foi completamente reescrito e muitos recursos foram adicionados. O script só é compatível com distribuições recentes, então se você precisar usar um servidor ou cliente muito antigo, aconselho usar o script do Nyr.
Mais perguntas e respostas em FAQ.md.
P: Qual provedor você recomenda?
R: Eu recomendo estes:
P: Qual cliente OpenVPN você recomenda?
R: Se possível, um cliente oficial OpenVPN 2.4.
openvpn
da sua distribuição. Existe um repositório APT oficial para distribuições baseadas em Debian/Ubuntu.P: Estou protegido da NSA usando seu script?
R: Revise seus modelos de ameaças. Mesmo que este script tenha a segurança em mente e use criptografia de última geração, você não deveria usar uma VPN se quiser se esconder da NSA.
P: Existe uma documentação do OpenVPN?
R: Sim, consulte o Manual OpenVPN, que faz referência a todas as opções.
Mais perguntas e respostas em FAQ.md.
Soluções que fornecem um servidor OpenVPN pronto para uso com base neste script de uma só vez estão disponíveis para:
openvpn-terraform-install
openvpn-ephemeral
Abra um problema antes de enviar um PR se quiser discutir uma mudança, especialmente se for grande.
Usamos shellcheck e shfmt para aplicar diretrizes e boas práticas de estilo do bash. Eles são executados para cada commit/PR com GitHub Actions, então você pode conferir a configuração aqui.
Aviso Isto não foi atualizado para OpenVPN 2.5 e posterior.
As configurações padrão do OpenVPN são bastante fracas em relação à criptografia. Este script visa melhorar isso.
OpenVPN 2.4 foi uma ótima atualização em relação à criptografia. Adicionou suporte para ECDSA, ECDH, AES GCM, NCP e tls-crypt.
Se você quiser mais informações sobre uma opção mencionada abaixo, consulte o manual do OpenVPN. É muito completo.
A maior parte do material relacionado à criptografia do OpenVPN é gerenciado pelo Easy-RSA. Os parâmetros padrão estão no arquivo vars.example.
Por padrão, o OpenVPN não permite a compactação. Este script fornece suporte para algoritmos LZ0 e LZ4 (v1/v2), sendo este último mais eficiente.
No entanto, é desencorajado o uso de compactação, pois o ataque VORACLE faz uso dela.
O OpenVPN aceita TLS 1.0 por padrão, que tem quase 20 anos.
Com tls-version-min 1.2
aplicamos o TLS 1.2, que é o melhor protocolo disponível atualmente para OpenVPN.
TLS 1.2 é compatível desde OpenVPN 2.3.3.
OpenVPN usa um certificado RSA com uma chave de 2048 bits por padrão.
OpenVPN 2.4 adicionou suporte para ECDSA. A criptografia de curva elíptica é mais rápida, leve e segura.
Este script fornece:
prime256v1
/ secp384r1
/ secp521r1
3072
2048
4096
O padrão é ECDSA com prime256v1
.
O OpenVPN usa SHA-256
como hash de assinatura por padrão, assim como o script. Ele não oferece outra escolha a partir de agora.
Por padrão, o OpenVPN usa BF-CBC
como cifra do canal de dados. Blowfish é um algoritmo antigo (1993) e fraco. Até a documentação oficial do OpenVPN admite isso.
O padrão é BF-CBC, uma abreviatura de Blowfish no modo Cipher Block Chaining.
O uso de BF-CBC não é mais recomendado devido ao seu tamanho de bloco de 64 bits. Este pequeno tamanho de bloco permite ataques baseados em colisões, conforme demonstrado pelo SWEET32. Consulte https://community.openvpn.net/openvpn/wiki/SWEET32 para obter detalhes. Pesquisadores de segurança do INRIA publicaram um ataque a cifras de bloco de 64 bits, como 3DES e Blowfish. Eles mostram que são capazes de recuperar texto simples quando os mesmos dados são enviados com frequência suficiente e mostram como podem usar vulnerabilidades de script entre sites para enviar dados de interesse com frequência suficiente. Isso funciona em HTTPS, mas também funciona para HTTP sobre OpenVPN. Consulte https://sweet32.info/ para uma explicação muito melhor e mais elaborada.
A cifra padrão do OpenVPN, BF-CBC, é afetada por este ataque.
Na verdade, AES é o padrão atual. É a cifra mais rápida e segura disponível atualmente. SEED e Camellia não são vulneráveis até o momento, mas são mais lentos que o AES e relativamente menos confiáveis.
Das cifras atualmente suportadas, o OpenVPN recomenda atualmente o uso de AES-256-CBC ou AES-128-CBC. OpenVPN 2.4 e mais recente também suportarão GCM. Para 2.4+, recomendamos usar AES-256-GCM ou AES-128-GCM.
O AES-256 é 40% mais lento que o AES-128 e não há nenhum motivo real para usar uma chave de 256 bits em vez de uma chave de 128 bits com AES. (Fonte: 1,2). Além disso, o AES-256 é mais vulnerável a ataques de temporização.
AES-GCM é uma cifra AEAD, o que significa que fornece simultaneamente garantias de confidencialidade, integridade e autenticidade dos dados.
O script suporta as seguintes cifras:
AES-128-GCM
AES-192-GCM
AES-256-GCM
AES-128-CBC
AES-192-CBC
AES-256-CBC
E o padrão é AES-128-GCM
.
OpenVPN 2.4 adicionou um recurso chamado "NCP": Parâmetros criptográficos negociáveis . Isso significa que você pode fornecer um conjunto de criptografia como o HTTPS. Ele é definido como AES-256-GCM:AES-128-GCM
por padrão e substitui o parâmetro --cipher
quando usado com um cliente OpenVPN 2.4. Por uma questão de simplicidade, o script definiu --cipher
e --ncp-cipher
para a cifra escolhida acima.
OpenVPN 2.4 negociará a melhor cifra disponível por padrão (por exemplo, ECDHE+AES-256-GCM)
O script propõe as seguintes opções, dependendo do certificado:
TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
O padrão é TLS-ECDHE-*-WITH-AES-128-GCM-SHA256
.
OpenVPN usa uma chave DH de 2.048 bits por padrão.
OpenVPN 2.4 adicionou suporte para chaves ECDH. A criptografia de curva elíptica é mais rápida, leve e segura.
Além disso, gerar chaves DH clássicas pode levar muito tempo. As chaves ECDH são efêmeras: são geradas dinamicamente.
O script fornece as seguintes opções:
prime256v1
/ secp384r1
/ secp521r1
3072
2048
4096
O padrão é prime256v1
.
No wiki do OpenVPN, sobre --auth
:
Autentique pacotes de canais de dados e (se habilitado) pacotes de canais de controle tls-auth com HMAC usando algoritmo de resumo de mensagem alg. (O padrão é SHA1 ). HMAC é um algoritmo de autenticação de mensagem (MAC) comumente usado que usa uma sequência de dados, um algoritmo de hash seguro e uma chave para produzir uma assinatura digital.
Se um modo de cifra AEAD (por exemplo, GCM) for escolhido, o algoritmo --auth especificado será ignorado para o canal de dados e o método de autenticação da cifra AEAD será usado em seu lugar. Observe que alg ainda especifica o resumo usado para tls-auth.
O script fornece as seguintes opções:
SHA256
SHA384
SHA512
O padrão é SHA256
.
tls-auth
e tls-crypt
No wiki do OpenVPN, sobre tls-auth
:
Adicione uma camada adicional de autenticação HMAC ao canal de controle TLS para mitigar ataques DoS e ataques à pilha TLS.
Resumindo, --tls-auth habilita uma espécie de “firewall HMAC” na porta TCP/UDP do OpenVPN, onde pacotes do canal de controle TLS com uma assinatura HMAC incorreta podem ser descartados imediatamente sem resposta.
Sobre tls-crypt
:
Criptografe e autentique todos os pacotes do canal de controle com a chave do arquivo-chave. (Veja --tls-auth para mais informações.)
Criptografando (e autenticando) pacotes do canal de controle:
- fornece mais privacidade, ocultando o certificado usado para a conexão TLS,
- torna mais difícil identificar o tráfego OpenVPN como tal,
- fornece segurança pós-quântica para "pobres", contra invasores que nunca conhecerão a chave pré-compartilhada (ou seja, sem sigilo de encaminhamento).
Portanto, ambos fornecem uma camada adicional de segurança e mitigam ataques DoS. Eles não são usados por padrão pelo OpenVPN.
tls-crypt
é um recurso do OpenVPN 2.4 que fornece criptografia além de autenticação (ao contrário de tls-auth
). É mais favorável à privacidade.
O script oferece suporte a ambos e usa tls-crypt
por padrão.
Você pode agradecer se quiser!
Muito obrigado aos colaboradores e ao trabalho original de Nyr.
Este projeto está sob a licença MIT