Hoje em dia, a tecnologia VPN se torna mais popular. Usuários comuns usam VPN para acessar a Internet com segurança. Ela também ajuda a contornar sites e serviços bloqueados localmente e proteger contra possível comportamento malicioso externo. Quando você está se conectando a um servidor VPN, há um túnel seguro entre seu computador e o servidor que não pode ser acessado de fora, então o servidor VPN se torna seu ponto de acesso à Internet. Existem muitos serviços VPN por aí, gratuitos e pagos, mas se eles não funcionarem para você por algum motivo, você sempre pode configurar seu próprio servidor VPN.
Para executar sua VPN, você deve alugar servidor VPS. Existem diferentes softwares que permitem criar uma conexão VPN. Eles diferem uns dos outros pelos sistemas operacionais suportados e algoritmos usados. Daremos uma olhada em duas abordagens independentes para configurar um servidor VPN. A primeira é baseada no protocolo PPTP que já é considerado obsoleto e não seguro, mas é realmente fácil de configurar. A outra emprega o software moderno e seguro OpenVPN, mas requer a instalação de um aplicativo cliente de terceiros e um processo de configuração mais completo.
Em nosso ambiente de teste, usaremos um servidor virtual com Ubuntu Server 18.04. Um firewall será desativado no servidor porque sua configuração merece um artigo separado. Descreveremos o processo de configuração no Windows 10.
PREPARAÇÃO
Não importa qual servidor VPN você escolher, o acesso à Internet será configurado por meios integrados do sistema operacional. Para abrir o acesso à Internet por meio de uma interface de serviço externa, você tem que permitir o encaminhamento de pacotes entre as interfaces e configurar a tradução de endereços de rede.
Para ativar o encaminhamento de pacotes, abra o arquivo “/etc/sysctl.conf” e mudar “net.ipv4.ip_forward” valor do parâmetro em 1.
Para aplicar as alterações sem reiniciar o computador, execute o comando
sudo sysctl -p /etc/sysctl.conf
A tradução de endereços de rede é configurada por meio de iptables. Primeiro, verifique o nome da sua interface de rede externa executando o comando “mostrar link ip” - você precisará dele na próxima etapa. Nosso nome é “ens3”.
Habilite a tradução de endereços de rede na sua interface externa para todos os nós da rede local.
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Observe que você precisa especificar o nome real da interface do seu servidor, ele pode ser diferente do nosso.
Por padrão, todas as regras criadas pelo iptables são redefinidas após a reinicialização do servidor. Para evitar isso, use “iptables-persistente” utilitário. Instale o seguinte pacote:
sudo apt install iptables-persistent
Em algum momento durante o processo de instalação, você verá uma janela de configuração que irá sugerir que você salve as regras atuais do iptables. Como as regras já estão definidas, basta confirmar e clicar em "Yes" duas vezes. Já que agora as regras serão aplicadas automaticamente após a reinicialização do servidor.
Servidor PPTP
Configuração do servidor
Instale o pacote:
sudo apt install pptpd
Após o término da instalação, abra o arquivo “/etc/pptpd.conf” em qualquer editor de texto e edite assim:
option /etc/ppp/pptpd-options #path to the settings file
logwtmp #client connections logging mechanism
connections 100 #number of simultaneous connections
localip 172.16.0.1 #the address that will serve as a client gateway
remoteip 172.16.0.2-200 #range of addresses
Depois disso, edite o arquivo “/etc/ppp/opções-pptpd”. A maioria dos parâmetros são configurados por padrão.
#name of the service for new client records
name pptpd
#restrict obsolete authentication methods
refuse-pap
refuse-chap
refuse-mschap
#allow a more secure authentication method
require-mschap-v2
#enable encryption
require-mppe-128
#specify dns servers for clients (use any available servers)
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
Na próxima etapa, você precisará criar um registro para conexões de clientes. Digamos que você queira adicionar um usuário “usuário vpn” com senha "1" e permitir endereçamento dinâmico para ele. Abra o arquivo “/etc/ppp/chap-secrets” e adicione a seguinte linha com os parâmetros do usuário no final do arquivo:
vpnuser pptpd 1 *
“pptpd” valor é o nome do serviço que especificamos no arquivo “opções-pptpd”. Ao invés de "*" você pode especificar um endereço IP fixo. No resultado, o arquivo “segredos do cap” deve ficar assim:
Para aplicar as configurações, redefina o pptpd serviço e adicione-o ao carregamento automático.
sudo systemctl restart pptpd
sudo systemctl enable pptpd
A configuração do servidor foi concluída.
Configuração do cliente
Abra "Começar" - "Configurações" - Rede e Internet - "VPN" e clique “Adicionar uma conexão VPN”
Insira os parâmetros de conexão na janela aberta e clique "Salvar"
- Provedor de VPN: “Windows (integrado)”
- Nome da conexão: “vpn_connect” (você pode escolher qualquer nome)
- Nome ou endereço do servidor: (especifique o endereço IP externo do servidor)
- Tipo de VPN: “Automático”
- Tipo de informação de login: “Nome de usuário e senha”
- Nome de usuário: usuário vpnus (nome especificado no arquivo “chap-secrets” no servidor)
- Senha: 1 (como no arquivo “chap-secrets”)
Após salvar os parâmetros, você verá a nova conexão VPN na janela. Clique com o botão esquerdo na conexão e selecione "Connect". No caso de uma conexão bem-sucedida, você verá "Conectado" estado.
Nas Opções, você encontrará endereços internos do cliente e do servidor. Campo “Endereço de destino” exibe o endereço do servidor externo.
Quando conectado, o endereço IP interno do servidor, 172.16.0.1 no nosso caso, torna-se o gateway padrão para todos os pacotes de saída.
Usando qualquer serviço online, você pode ter certeza de que o endereço IP externo do computador agora é o mesmo que o endereço IP do seu servidor VPN.
Servidor OpenVPN
Configuração do servidor
Vamos promover o nível de permissões do usuário atual porque para nossa configuração futura precisaremos de acesso root.
sudo -s
Instale todos os pacotes necessários. Precisaremos “Fácil-RSA” pacote para gerenciar chaves de criptografia.
apt install openvpn easy-rsa iptables-persistent
Permitir conexões de entrada na porta 1194 via protocolo UDP e aplicar regras do iptables.
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
Crie um diretório com os arquivos copiados do pacote “Easy-RSA” e navegue até ele.
make-cadir ~/openvpn
cd ~/openvpn
Gerar infraestrutura de chave pública (PKI).
./easyrsa init-pki
Gere o certificado raiz da Autoridade Certificadora (CA).
./easyrsa build-ca
Durante o processo de criação, você será solicitado a definir e memorizar uma senha. Você também precisará responder a perguntas e inserir informações sobre o proprietário da chave. Você pode deixar os valores padrão fornecidos entre colchetes. Pressione "Enter" para finalizar a entrada.
Gere uma chave privada e uma solicitação de certificado. Como argumento, especifique um nome arbitrário; no nosso caso, é "vpn-server".
./easyrsa gen-req vpn-server nopass
Deixe o valor Nome comum como padrão.
Assine a solicitação de certificado do servidor gerada.
./easyrsa sign-req server vpn-server
Nesta etapa, responda "sim" para confirmar a assinatura e digite a senha que foi criada durante a geração do certificado raiz.
Gere parâmetros Diffie-Hellman. Esses parâmetros são usados para a troca segura de chaves entre o servidor e o cliente.
./easyrsa gen-dh
Todos os arquivos necessários foram gerados. Vamos criar uma pasta "keys" no diretório de trabalho do OpenVPN para armazenar as chaves e copiar os arquivos criados para lá.
mkdir /etc/openvpn/keys
sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys
Configurar NAT usando iptables regras. Crie um arquivo chamado nat e abri-lo para edição no /etc/openvpn/ diretório.
#!/bin/sh
# Reset firewall settings
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow OpenVPN connections (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
# (eth0 in our case, may vary):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
# (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable masquerading for the local network (eth0 in our case, may vary)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# Deny incoming connections from outside
iptables -A INPUT -i eth0 -j DROP
# Deny transit traffic from outside (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -j DROP
sudo netfilter-persistent save
Salve o arquivo e torne-o executável.
sudo chmod 755 /etc/openvpn/nat
Copie o modelo de configuração do servidor.
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
Abra o arquivo “/etc/openvpn/server.conf” para edição, certifique-se de que contém as seguintes linhas e edite-as se necessário:
#Port, protocol, and interface
port 1194
proto udp
dev tun
#Path to the encryption keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh.pem
#SHA256 Hashing Algorithm
auth SHA256
#Switching off additional encryption
#tls-auth ta.key 0
#Network parameters
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Ping every 10 seconds to check the connection.
keepalive 10 120
#Set up AES-256 encryption for the tunnel.
cipher AES-256-GCM
#Demoting the service OpenVPN after launch
user nobody
group nogroup
#Switching on parameters saving after reboot
persist-key
persist-tun
#Set log verbosity
verb 3
#Redirecting logs
log-append /var/log/openvpn/openvpn.log
#Script the rule installation launch.
up /etc/openvpn/nat
Habilite o encaminhamento de tráfego no servidor.
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
Inicie o OpenVPN para aplicar a configuração.
systemctl restart openvpn@server
A configuração do servidor foi concluída!
Configuração do cliente
Acesse o site oficial do OpenVPN “https://openvpn.net”, vá para o “COMUNIDADE” seção.
Role para baixo e baixe o instalador correspondente à versão do seu sistema operacional. No nosso caso, é o Windows 11 ARM64.
Instale o aplicativo deixando todos os parâmetros padrão.
Na próxima etapa, você precisará preparar o seguinte arquivo no servidor e transferi-lo para o computador cliente:
- chaves públicas e privadas;
- cópia da chave do centro de certificação;
- modelo de arquivo de configuração.
Conecte-se ao servidor, eleve os privilégios e navegue até o diretório que criamos "~/openvpn".
sudo -s
cd ~/openvpn
Gere uma chave privada e uma solicitação de certificado para o cliente. Como argumento, especifique um nome arbitrário; no nosso caso, é "client1".
./easyrsa gen-req client1 nopass
Digite a senha que definimos ao criar o certificado raiz e deixe o valor Nome comum como padrão.
Assine a solicitação de certificado do cliente gerada.
./easyrsa sign-req client client1
Nesta etapa, responda "sim" para confirmar a assinatura e digite a senha que foi criada durante a geração do certificado raiz.
Para sua conveniência, vamos criar uma pasta chamada 'client1' no diretório inicial e copiar todos os arquivos que serão transferidos para o computador cliente para ela.
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
Copie o modelo do arquivo de configuração do cliente para o mesmo diretório. Altere a extensão do arquivo para “.ovpn” enquanto copia.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
Alterar o proprietário do diretório e de todos os arquivos “~/cliente1/” para poder distribuí-los ao cliente. Vamos fazer “Meu Deus” o proprietário no nosso caso.
chown -R mihail:mihail ~/client1
Vá até o computador cliente e copie o conteúdo do “~/cliente1/” pasta. Você pode fazer isso com a ajuda de “PSCP” utilitário, que acompanha o Putty.
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
Você pode armazenar arquivos de chave “ca.crt”, “cliente1.crt”, “cliente1.chave” onde você quiser. No nosso caso, eles estão nesta pasta “c:\Arquivos de Programas\OpenVPN\keys”, e modelamos o arquivo de configuração “cliente.ovpn” no “c:\Arquivos de Programas\OpenVPN\config” diretório.
Agora vamos configurar o cliente. Abra o arquivo “c:\Arquivos de programas\OpenVPN\config\client.ovpn” em um editor de texto e edite as seguintes linhas:
#announce that this is the client
client
#interface and protocol just like on the server
dev tun
proto udp
#IP address of the server and port
remote ip_address 1194
#saving parameters after reload
persist-key
persist-tun
#key paths
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#enable server verification
remote-cert-tls server
#disable extra encryption
#tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 3
Deixe o resto intocado.
Salve o arquivo e inicie o aplicativo cliente “GUI OpenVPN”.
Clique com o botão direito do mouse no ícone do aplicativo na barra de tarefas e escolha "Connect". Se a conexão for bem-sucedida, o ícone ficará verde.
Use qualquer serviço online para verificar se seu endereço IP público mudou e agora é o mesmo que o endereço IP do servidor.