1. Pré-requisitos e Preparo do Ambiente

Antes de começar, garanta que a infraestrutura está pronta:

  • Debian 13: Atualizado (apt update && apt upgrade -y).
  • IP Fixo ou DDNS: O escritório precisa ter um IP público fixo ou um serviço de DDNS (ex: No-IP) configurado.
  • Redirecionamento de Porta (Port Forwarding): No roteador do escritório, redirecione a porta 1194 (UDP) para o IP local do servidor Debian.
  • Sincronização de Tempo (Crítico): O 2FA (TOTP) falha se o relógio do servidor estiver errado.

bash

 
1
2
    apt install systemd-timesyncd -y
    systemctl enable --now systemd-timesyncd
 

2. Instalação da Base do OpenVPN

Para evitar erros na criação manual de Autoridades Certificadoras (CA), usaremos o script open-source mais respeitado da comunidade (Angristan).

 
  1. Baixe e execute o instalador:
   curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
   chmod +x openvpn-install.sh
   ./openvpn-install.sh
  1. Responda ao assistente:
    • IPv4 address: Confirme o IP público ou digite seu DDNS.
    • Protocol: UDP (Mais rápido).
    • Port: 1194.
    • DNS: Escolha Cloudflare (1.1.1.1) ou Google (8.8.8.8).
    • Compression: No (Desativar por segurança contra ataques VORACLE).
    • Customize encryption: Pressione Enter para usar os padrões de alta segurança (AES-256-GCM).
 

No final, ele pedirá para criar o primeiro cliente. Crie um chamado notebook_casa. O arquivo notebook_casa.ovpn será gerado na pasta /root/.

Para gerar os clientes ( usuarios ) - ./openvpn-install.sh interactive

3. Implementação do 2FA (Google Authenticator)

Agora, vamos adicionar a camada de autenticação via PAM (Pluggable Authentication Modules). A nossa estratégia será Certificado (Algo que você tem) + TOTP (Algo que você tem no celular). Não exigiremos uma terceira senha de texto para manter a usabilidade ágil.

 
  1. Instale o módulo do Google Authenticator:
apt install libpam-google-authenticator -y
  1. Crie um usuário no Linux apenas para a VPN (sem permissão de shell):
useradd -s /usr/sbin/nologin vpn_jefferson
  1. Gere o QR Code do 2FA para este usuário:
su -s /bin/bash -c "google-authenticator -t -d -f -r 3 -R 30 -w 3" vpn_jefferson

A tela mostrará um QR Code gigante. Abra o Google Authenticator no celular e escaneie. Salve os códigos de emergência (scratch codes) em um local seguro. 4. Crie o arquivo de integração PAM para o OpenVPN:

nano /etc/pam.d/openvpn

Cole o seguinte conteúdo e salve (Ctrl+O, Enter, Ctrl+X):

markdown

 
   auth required pam_google_authenticator.so
   account required pam_permit.so
 

4. Configuração Avançada do Servidor (2FA + Idle Timeout)

Vamos amarrar o 2FA e a regra de desconexão por ociosidade no servidor.

 
  1. Edite o arquivo do servidor:
nano /etc/openvpn/server.conf
  1. Adicione as seguintes linhas no final do arquivo:

markdown

 
   # Ativa o plugin de autenticação PAM
   plugin /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

   # Exige que o cliente envie usuário/senha (neste caso, o TOTP)
   verify-client-cert require

   # Desconecta o cliente após 15 minutos (900 segundos) sem tráfego de dados
   inactive 900
  1. Reinicie o serviço para aplicar:
systemctl restart openvpn@server
 

5. Isolamento da Rede do Escritório (Firewall)

Este é o passo que protege a rede caso seu notebook seja invadido. Vamos limitar a VPN para acessar apenas o RDP da sua máquina de trabalho.

 

Supondo que a interface da VPN seja tun0, o IP do seu desktop no escritório seja 192.168.1.50 e a interface de rede local do Debian seja eth0:

 

 

# 1. Permite que a VPN (tun0) acesse APENAS a porta 3389 do seu PC na rede local (eth1)
iptables -I FORWARD 1 -i tun0 -o eth1 -p tcp -d 192.168.1.50 --dport 3389 -m state --state NEW,ESTABLISHED -j ACCEPT

 

# 2. Permite o tráfego de volta do seu PC para a VPN
iptables -I FORWARD 2 -i eth1 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT

 

# 3. BLOQUEIA qualquer outro acesso da VPN para a rede local (Pivoting mitigado)
iptables -I FORWARD 3 -i tun0 -o eth1 -j DROP

 

(Nota: Para tornar essas regras persistentes após reiniciar, use o pacote iptables-persistent).

 

6. Configuração do Cliente (Windows 11)

  1. Baixe e instale o OpenVPN Connect v3 oficial no Windows 11.
  2. Transfira o arquivo notebook_casa.ovpn do servidor para o seu Windows (via WinSCP, SFTP ou pendrive).
  3. Abra o arquivo .ovpn no Bloco de Notas do Windows e adicione estas duas linhas no final:
   auth-user-pass
   inactive 900
  1. Salve o arquivo e importe-o no OpenVPN Connect.
 

7. Testes de Conexão e Validação do 2FA

  1. No OpenVPN Connect, clique para conectar.
  2. Ele pedirá Username e Password.
    • Username: vpn_jefferson (o usuário que criamos).
    • Password: Digite os 6 dígitos que estão aparecendo no seu Google Authenticator agora.
  3. A conexão deve ser estabelecida.
  4. Teste de Isolamento: Tente pingar o roteador do escritório ou acessar uma pasta de rede. Deve falhar. Tente abrir o RDP para 192.168.1.50. Deve funcionar.
  5. Teste de Inatividade: Conecte o RDP, minimize a tela e vá tomar um café (aguarde mais de 15 minutos). Ao voltar, a VPN deve ter caído e exigirá um novo código do Authenticator para reconectar.
 

8. Solução de Problemas Comuns

  • Erro de Autenticação (AUTH_FAILED): 99% das vezes é o relógio do servidor Debian dessincronizado. Verifique com o comando date.
  • Cliente não conecta (Timeout): Verifique se o roteador do escritório está realmente fazendo o Port Forwarding da porta 1194 UDP para o IP do Debian.
  • Conecta, mas não acessa o RDP: Verifique se o IP local do seu desktop mudou ou se o Firewall do Windows no desktop está bloqueando RDP de sub-redes diferentes (a VPN usa a faixa 10.8.0.x).
  • Onde ver os erros: No Debian, use journalctl -u openvpn@server -f para ver os logs em tempo real enquanto tenta conectar.
 

9. Boas Práticas de Segurança Adicionais

  • Split Tunneling: No arquivo server.conf, o script geralmente coloca push "redirect-gateway def1 bypass-dhcp". Comente essa linha (coloque um # na frente) se quiser que a internet do seu notebook continue saindo pela sua casa, e não pelo escritório.
  • Revogação: Se o notebook for roubado, revogue o certificado imediatamente usando o script ./openvpn-install.sh (opção "Revoke an existing client").
  • Fail2Ban: Instale o Fail2Ban no Debian para bloquear IPs que tentarem errar o 2FA múltiplas vezes.
 

 

📋 Resumo Executivo

Você construiu uma arquitetura Zero Trust simplificada:

  1. Acesso: Exige um certificado físico (no notebook) + Código dinâmico (no celular).
  2. Contenção: O firewall do Debian garante que o notebook só enxerga a porta do RDP e absolutamente nada mais na rede.
  3. Timeout: O parâmetro inactive 900 garante que a sessão morre se você sair da frente do PC por 15 minutos.
 

Se a sua máquina for invadida enquanto você almoça, o invasor terá, no máximo, 15 minutos de uma janela que só dá acesso à tela de login do seu RDP (que também deve ter senha forte). Passado esse tempo, o túnel desaba e ele precisará do seu celular para reabrir.

qui está o passo a passo completo para criar um novo usuário na VPN com 2FA. Substitua novousuario pelo nome do funcionário.

 

Passo 1: Criar o usuário no sistema (sem shell de login)

bash

 
1
2
3
useradd -s /usr/sbin/nologin novousuario
mkdir -p /home/novousuario
chown novousuario:novousuario /home/novousuario
 

Passo 2: Gerar o QR Code do Google Authenticator

Execute o gerador rodando como o usuário recém-criado:

su -s /bin/bash -c "google-authenticator -t -d -f -r 3 -R 30 -w 3" novousuario
 

O terminal vai exibir:

  • Um QR Code (peça para o funcionário escanear com o app Google Authenticator no celular).
  • As 5 chaves de emergência (guarde em local seguro).
  • O secret key (caso precise digitar manualmente).
 

Passo 3: Mover o arquivo de segredo para o diretório centralizado do OpenVPN

bash

 
1
2
3
mv /home/novousuario/.google_authenticator /etc/openvpn/google-auth/novousuario
chown root:root /etc/openvpn/google-auth/novousuario
chmod 600 /etc/openvpn/google-auth/novousuario
 

Passo 4: Gerar o certificado e o perfil do cliente (.ovpn)

Agora vamos gerar o arquivo que o funcionário vai importar no OpenVPN Connect. O comando depende de como você instalou o OpenVPN:

Se usou o script openvpn-install.sh:

geralmente na pasta /root/openvpn/

./openvpn-install.sh interactive

Ele vai abrir um menu. Escolha a opção 1) Add a new client, digite o nome novousuario e ele vai gerar o arquivo novousuario.ovpn em /root/ ou no diretório atual.

 
 
 
 
 

Passo 5: Entregar para o funcionário

  1. Envie o arquivo novousuario.ovpn para o computador do funcionário.
  2. Peça para ele instalar o app Google Authenticator no celular e escanear o QR Code (ou digitar o secret key).
  3. No OpenVPN Connect, ele importa o .ovpn, digita o código de 6 dígitos que aparece no celular e conecta.
 

Passo 6: Testar

Peça para o funcionário conectar. Se ele digitar o código errado, a conexão é recusada na hora. Se ele não tiver o celular, ele usa uma das 5 chaves de emergência.

 

 

Dica: Como remover um usuário no futuro

Se um funcionário sair da empresa, basta 3 comandos:

 
 
# Remove o segredo do 2FA
rm -f /etc/openvpn/google-auth/novousuario

# Revoga o certificado (se usar openvpn-install.sh)
./openvpn-install.sh
# Escolha a opção "Revoke existing client" e selecione o nome

# Remove o usuário do sistema
userdel -r novousuario

O acesso é cortado imediatamente, mesmo que ele ainda tenha o arquivo .ovpn no computador.