---
# System prepended metadata

title: Autenticação de 2 fatores utilizando o WireGuard VPN
tags: [Documentation]

---

---
title: 'Autenticação de 2 fatores utilizando o WireGuard VPN'
disqus: hackmd
---

Autenticação de 2 fatores utilizando o WireGuard VPN
===


## Sumario

[TOC]

## Sobre o projeto

Utilizar o WireGuarden VPN para estabalacer um Servidor e Clientes, esse Clientes poderam enviar um tipo de sinal, fazendo o VPN emitir um codigo HASH, o mesmo sera usado para validar a segurança, cobrida pelo Modelo PAM

Atualização semanal
===

Semana 01: Dia 16/02/2023 - 22/02/2023
--
```
    Começo das aulas e apresentação dos temas
```

Semana 02: Dia 23/02/2023 - 01/03/2023
--
```gherkin
    Crianção dos grupos e definindo qual tema trbalhar.
    Criação do HackMD para criar o relato semanal sobre o projeto.
```

Semana 03: Dia 02/03/2023 - 08/02/2023
--
```gherkin
  Hugo:
  #Estudando o módudo PAM
    > É um sistema de autenticação de usuários 
    em sistemas Linux e Unix, que permite a criação
    de módulos adicionais para autenticação, como 
    senhas, tokens ou impressões digitais.
    Que controlar o acesso de usuários ao sistema e 
    é altamente configurável. (Verificando modelos de autenticação).

  Rafael C:
  #Estudando sobre o WireGuard VPN
    > Estudando o que é WireGuard VPN, como 
    implementá-lo e como fazer a autenticação dupla.

  Rafael R:
  # Estudando sobre o Módulo Pam.
    > Vi o conceito e o que exatamente ele é.
    uma "Autenticação personalizada" e que 
    os módulos PAM podem ser configurados 
    para serem usados por aplicativos ou 
    serviços específicos do sistema, estou 
    checando essas possibilidades. (Vendo também na
    Linguágem C.)
  
  Rogerio:
  # Estudando sobre o Módulo Pam.
    > Estudando o funcinameto do módelo PAM utilixando 
    o hash como o segundo autenticador, ao utilizar o 
    WireGarden VPN, devemos definir um servidor e um 
    cliente, e quando esse cliente exclusivo mandar
    uma mensagem para o servidor, faria o VPN gerar o 
    codigo hash que seria utilizado pelo PAM.
  
  
  Thomas:
  #Estudando sobre o WireGuard VPN
    > Estudando sobre o funcionamento do 
    WireGuard VPN e sua interação com o kernel Linux. 
```

Semana 04: Dia 09/03/2023 - 15/03/2023
--
```gherkin
  Hugo:
  #Estudando sobre o WireGuard VPN
    > Ele usa uma arquitetura simplificada que facilita a implementação,
    a configuração e a manutenção do servidor VPN e dos clientes.
    Além disso, ele é projetado para ser mais eficiente em termos de
    recursos, o que significa que ele pode fornecer um desempenho mais 
    rápido e mais confiável do que outros protocolos VPN.
    (Procurando forma de que os usuários se autentiquem antes de 
    estabelecerem uma conexão com a rede VPN.)
 
  Rafael C:
  #Estudando sobre o WireGuard VPN
    > Resumidamente o WireGuard é uma solução de VPN moderna e 
    segura que oferece alta velocidade e eficiência, além de ser 
    fácil de configurar e usar. Atualmente estou estudando como 
    posso implementar o pacote Pam no WireGuard VPN dentro do 
    Arch Linux.
  
  Rafael R:
  #Módulo Pam no Arch Linux.
    > Como estou com dificuldade para ver como fazer com a linguagem 
    C, Resolvi voltar para a "Base" e ver como se faz o módulo Pam no 
    arch linux, por enquanto apenas tentando entender melhor, estudando 
    ele.

  Rogerio:
  #Estudando sobre o WireGuard VPN Junto com Arch Linux.
    > Para melhorar o entendimento da criação de servidores e clientes
    no WireGuard VPN, a implementação e testes no Arch Linux se tornou
    esencial, algumas conplicações com o Arch Linux apareceram, porem 
    o estudo para contornar a situação segue procedendo.

  Thomas:
  #Estudando Wireguard VPN
    > Estou estudando o funcionamento do Wireguard VPN e a 
    possibilidade de integração do mesmo no módulo PAM como um dos
    fatores. Descobri que o VPN foi escrito em linguagem C, agora
    estudarei o funcionamento do código e como implementa-lo no PAM.
```

Semana 05: Dia 16/03/2023 - 22/03/2023
--
```gherkin
  Hugo:
  #Estudando sobre o WireGuard VPN
    > Estudos relacionados a conectividade de multiplas 
    maquinas a um unico servidor ultilizando o WireGuard VPN
    para que a aultentificação de dois fatores seja realizada
 
  Rafael C:
  # Estudos do PAM
    > Estudei junto com Rafael R. as configurações e 
    parâmetros do PAM para entender mais sobre 
    o Modulo PAM, para futuramente conseguir 
    fazer o Modulo PAM e o WireGuard VPN interagir 
    na autenticação.
  
  Rafael R:
  #Estudos do PAM, pam_oath
    > Estudei sobre o módulo pam e sua implementação no 
    Arch Linux, vendo a configuração e seus parametros, 
    tentando entender o "Pam base-stack". depois disso 
    fui verificar o "pam_oath", que providencia uma senha 
    de uso "Único", por enquanto apenas tentando ver como 
    posso utilizar e como linkar com o WireGuard.
  
  Rogerio:
  #Testeando o WireGuard VPN para iniciar altomaticamente.
    > Por falta de tempo essa semana, a implementação teve um pequeno
    contra-tempo, alguns teste foram feitos, porem sem muito avanço. 

  Thomas:
  #Estudos do Wireguard VPN
    > Estudei sobre as configurações do Wireguard VPN e como
    implementá-lo ao Arch Linux. Ao implementar a VPN estudei 
    maneiras de configuração e iniciei estudos de como interligá-lo 
    ao módulo PAM de alguma forma que ambos interajam para 
    realização da autenticação.
```

Semana 06: Dia 23/03/2023 - 29/03/2023
--
```gherkin
  Hugo:
  # Recomeço do módulo PAM
    > revisão dos estudos realizado até agora, 
    olhando por uma perspectiva diferente, para 
    poder ir mais a fundo no módulo
 
  Rafael C:
  # Começo de verdade do módulo PAM
    > Estudando mais a fundo o modulo PAM, junto com o Rafael R.
  
  Rafael R:
  # Começo de verdade do módulo PAM
  
    > Depois da "Reunião" do teams descobri que é realmente melhor começar a programar
    o próprio módulo PAM, estou pesquisando como se faz isso, mas com a explicação dada
    na reunião tive um bom norte.

  Rogerio:
  # ligação entre o WireGarden VPN e o Celular
    > Utilizando a maquina virtual como cliente para conectar meu celular nele podendo
    enviar um "codigo" para voltar um outro dado aleatorio.
  
  Thomas:
  #Configurações Wireguard VPN
    > Estudando tipos de configuração do Wireguard e como utilizá-lo 
    melhor no projeto em geral. Vendo como utilizar chaves públicas 
    e privadas e outros elementos para autenticação.

```

Semana 07: Dia 30/03/2023 - 05/04/2023
--
```gherkin
  Hugo:
  #Integração módulo PAM maquina virtual
    > começo da ultilização do módulo PAM na pratica
 
  Rafael C:
  # Atividades
    > Esse semana, não consegui tempo para estudar o Modulo PAM, 
    pois estava realizando trabalhos de outras materias.
  
  Rafael R:
  # Módulo PAM, vendo como faz em C
    > Comecei a ver as ferramentas (Usando o pacman) na máquina virtual e já consegui
    ter uma boa ideia de pelo menos o básico do módulo PAM, ainda não entendi exatamente
    como funciona as bibliotecas do C nele, mas estou pesquisand
    
  Rogerio:
  # ligação entre o WireGarden VPN e o Celular
    > Utilização do WireGuarden na criação do servidor e utilização do celular como
    cliente, configuração do wg0.conf e aplicativo mobile para tentar estabelecer
    conexão entre eles.
  
  Thomas:
  #Mudança de foco
    > Não estava conseguindo avançar direito com os objetivos 
    no Wireguard VPN então decidi começar estudos sobre o 
    módulo PAM para ajudar no progresso com os demais colegas.
```

Semana 08: Dia 06/04/2023 - 12/04/2023
--
```gherkin
  Hugo:
  #Periodo de Prova
    > Tempo gasto com estudos para provas
 
  Rafael C:
  # Periodo de Prova
    > Periodo de provas, não tive tempo para avançar com os estudos.
  
  Rafael R:
  # Periodo de prova
    > Consegui avançar um pouco em un código teste, mas ainda não terminei, não tive
    tanto tempo para o projeto por conta de provas

  Rogerio:
  # Em espera
    > Perio de Provas, não tive avanço no projeto 
  
  Thomas:
  # Periodo de provas
    > Pela quantidade de provas nesses tempos o estudo 
    sobre o PAM ficou prejudicado.
```

Semana 09: Dia 13/04/2023 - 19/04/2023
--
```gherkin
  Hugo:
  # Um passo para trás
    > Revisão módulo PAM com maior compreenção do que devo fazer 
    devido a explicação em sala
 
  Rafael C:
  # Pacotes Desnecessarios
    > Após explicação da sala de aula sobre o Modulo PAM em linguagem C, 
    percebi que estava utilizando pacotes desnecessarios para tal implementação.
  
  Rafael R:
  # Apresentado em sala de aula, PAM
    > Depois da explicação em sala de aula, eu percebi que estava indo nos diretórios
    errados, vendo "Posições" erradas, tanto que instalei pacotes sem necessidade, agora
    com uma explicação consegui visualizar melhor.

  Rogerio:
  # WireGuard testado em outro computar de reds distintas.
    > Utilização do WireGuard em conjunto com o Rafael R, porem não consegui estabelecer
    uma conecção com a maquina dele, voltando a estudas alguns videos para tentar ver
    como a conecção deve ser feita.
  
  Thomas:
  # Programação
    > Em aula com o professor foi apresentado exemplos de utilização 
    do módulo PAM na programação em C. Utilizando essa base iniciei 
    estudos de como fazer a programação para realizar a autenticação 
    que desejamos.
```

Semana 10: Dia 20/04/2023 - 26/04/2023
--
```gherkin
  Hugo:
  # Progressão módulo PAM
    > Avanço no Módulo PAM com a criação de um programa por mais que não 100%
    funcional.
 
  Rafael C:
  # Avanço no Modulo PAM
    > Com o avanço do Modulo PAM, comecei a ajudar o Rogerio no WireGuard.
  
  Rafael R:
  # Consegui testar um módulo PAM
    > Eu consegui finalmente criar um módulo programando (Mas ainda não tendo muito
    noção do código eu si, eu digo dos comandos), porém está tendo um problema, pois eu
    fiz um módulo que printa algo na tela no login, ele printa de fato a mensagem, porém
    depois é exibido que "Module Unknown" e dá problemas na máquina.

  Rogerio:
  # WireGuard em dois terminais.
    > Utilização do WireGuard em dois terminais diferentres, um como cliente e outro 
    como servidor, para outros testes e para tentar começar a implentear o modelo pam
    como segundo fator de segurança.
  
  Thomas:
  # Problemas na máquina
    > Tive um problema em meu computador com o Virtual Box, a máquina 
    que estava utilizando deu algum erro e não conseguia iniciar, 
    assim não consegui começar a testar algumas coisas sobre o PAM.
```

Semana 11: Dia 27/04/2023 - 03/05/2023
--
```gherkin
  Hugo:
  # A progresso do interronpida
    > A Pregressão do projeto foi interrompida durante esta semana.
  Rafael C:
  # Sem Avanço
    > Não tive tempo para avançar no projeto, 
    pois estava estudando "Listas Circulares" para uma apresentação.
  
  Rafael R:
  # Não tive tempo para pesquisar
    > Eu ainda tentei arrumar o módulo, porém não sei exatamente onde está o erro, não
    sei se estou compilando o ".so" errado ou se estou colocando no diretório errado, ou
    se é algum erro de escrita no "/usr/lib/security"

  Rogerio:
  # Reorganização do projeto
    > com base nas dificuldades do projeto, foi acordado com todos os membros
    que se as adiversidades forem muito grnade, focaremos mais no projeto
    voltado para o sistema PAM, não tivemos um avanço nesta semana.
  
  Thomas:
  # Testes PAM
    > Realização de testes simples por enquanto, como printar 
    uma mensagem na tela se o login for bem sucedido. Estudando 
    outros tipos de testes para melhorar a compreensão.
```

Semana 12: Dia 04/05/2023 - 10/05/2023
--
```gherkin
  Hugo:
  # Junção das partes do projeto
    > com a conexão entre dois terminais, com algumas falhas na conexão não
    conseguimos integrar o PAM ainda.
 
  Rafael C:
  # Conexão com dois terminais
    > Com o Rogerio, conseguimos fazer a conexão com dois terminais.
  
  Rafael R:
  #
    > Como thomas falou anteriormente, com trabalhando juntos a gente conseguiu fazer
    funcionar, eu estava escrevendo errado no diretório final, havia escrevendo errado
    "Required" e "Auth", mas agora está indo melhor

  Rogerio:
  # conexão entre os termianis
    > Com alguns testes conseguimos estabeleser uma conexão entre doisterminais, porem 
    a conexão não estava bem feita e não conseguimos tranferir os dados da forma que 
    queriamos, voltamos a estudar mais sobre o link entre o servidor e o cliente.
  
  Thomas:
  # Continuação dos testes com PAM
    > Tive algumas ideias para testar com o PAM porém os 
    resultados não estão sendo agradáveis. Não sei exatamente 
    o que de errado estou fazendo e estou estudando melhor para 
    avançar. Tentei fazer um módulo para criação de uma palavra 
    de segurança que deveria ser escrita junto ao login para 
    liberar o acesso mas está dando errado.
```

Semana 13: Dia 11/05/2023 - 17/05/2023
--
```gherkin
  Hugo:
  # erro no sistema
    > com os erros que ocorreram estamos verificando suas fontes para poder
    corrigi-los alguns erros mostram que o problema está na conexão IP a próxima
    alternativa é configurar o "eth0" na máquina fisica.
 
  Rafael C:
  # Trabalho em equipe, PAM
    > Trabalhei junto com rafael e thomas para tentar fazer o código de ambos funcionar,
    tivemos certa dificuldade mas o andamento do projeto está bem.
  
  Rafael R:
  # Testes de códigos do PAM, e uma falha.
    > Tive ideias também para códigos e felizmente eles estão funcionando, não
    exatamente para o projeto, mas testei pam de horário, tentei fazer de senha e também
    de rede (que deu errado).

  Rogerio:
  # falha na conexão 
    > O cliente esta conseguindo enviar arqueivos para o servidor, porem o servidor 
    manda arquivos para o cliente e mesmo não esta recebendo, alguns erros indicam que 
    poder ser a conexão IP, a interface do WireGuard mostra que esta tudo certo então
    a unica alternativa que falta é a posivel configuração fisica da maquina o "Eth0".
  
  Thomas:
  # Testes funcionando
    > Algumas ideia de autenticação que tive começaram a dar certo. Entendi melhor como
    funciona o código do PAM e agora estou conseguindo testar códigos melhores.
```

Semana 14: Dia 18/05/2023 - 24/05/2023
--
```gherkin
  Hugo:
  # mudanças no eth0
    > configuramos o eth0 para estabelecer a conexão entre duas maquinas e com o
    auxilio do programa "tdpdump" conseguimos verificar o trafego de IPs para saber
    onde a conexão está chegando.
 
  Rafael C:
  #  Análise do Wireguard
    > Vendo comandos no PAM para o wireguard, tentando descobrir se há alguma forma do
    Wireguard mandar arquivos para o usuário para a verificação do pam.
  
  Rafael R:
  #    Fazendo testes (dando errado) mas indo
    > Trabalhando para ver comandos utéis no PAM para o wireguard, vendo se dá para
    verificar o IP do usuário, mas por enquanto não parece estar sendo uma opção
    plausível.

  Rogerio:
  # Correção de erros
    > Após modificar alguns arquivos do "Eth0" foi posivel estabelecer uma conexão entre
    as maquinas sem muitos problemas, mas para uma melhor verificação foi utilizado um
    programa chamado "tcpdump", ele permite olhar o trafego de IPs para verificar para
    onde a conexão esta passando.
  
  Thomas:
  # Continuação dos testes
    > Realizei testes do PAM relacionados com horário e estou pesquisando comandos mais 
    úteis para tentar fazer a verificação do Wireguard.
```

Semana 15: Dia 25/05/2023 - 31/05/2023
--
```gherkin
  Hugo:
  # junção
    > resolvemos unir as duas partes do projeto, verificamos que o Ping é um bom
    método para verificar se a conexão foi feita.
 
  Rafael C:
  # Reta final
    > Com o grupo decidimos que vamos dar foco em juntar as partes finais do trabalho,
    juntando a ideia do Ping para a verificação junto com wireguard já configurado.
  
  Rafael R:
  # Testes com Ping.
    > Teve a ideia do Ping, estou estudando com ele para ver essa possibilidade, mas
    também verificando outras possibilidades.

  Rogerio:
  # PAM e WirGuard em teste
    > Decidimos juntar as partes que temos do projeto para dar inico a finalização do 
    mesmo, com alguns testes decidimos utilizar o ping como um metodo de verificação 
    quando ambos estão conectados.
  
  Thomas:
  # Continuação dos testes
    > Em grupo observando que a, provável, melhor maneira para testar a conexão com
    o Wireguard era pelo comando "ping" do linux. Tentamos um fazer um código inicial
    que teria que verificar a saída do comando mas não funcionou. Agora estamos vendo
    outras maneiras de tentar analizar a saída do comando.
```

Semana 16: Dia 01/06/2023 - 07/06/2023
--
```gherkin
  Hugo:
  # dois fatores
    > a conexão está estabelecida porém o PAM não está realizando os dois fatores,
    utilizamos novos comandos em C para fazer a análise da saída do "ping".
 
  Rafael C:
  # Testes junto com o grupo
    > Como explicado por Thomas e Rafael, alguns comandos não agiam como planejavamos,
    então estamos fazendo um pouco do zero, mas ainda estamos em uma boa caminhada.
  
  Rafael R:
  # Testes dando um pouco errado.
    > Infelizmente tivemos um problema, os comandos que aprendemos no C não funcionavam
    exatamente como planejado, utilizando comandos para abertura de arquivos que não
    exatamente funcionavam.

  Rogerio:
  # Falha ao tentar utilizar o ping
    > com alguns comandos que testamos junto do PAM não estavamos conseguindo fazer a 
    verificação de dois fatores, resolvemos trocar os comandos utilizados para verificar
    o ping so cliente.
  
  Thomas:
  # Continuação de testes
    > Pesquisamos diversos comandos em C que supostamente fariam a análise da saída
    do "ping" mas estava dando muito certo. Descobrimos que os comandos que tentamos
    não conseguiam fazer o que queríamos.
```

Semana 17: Dia 08/06/2023 - 14/06/2023
--
```gherkin
  Hugo:
  #  2 fatores + Wireguard
    > a conexão foi estabelecida e o PAM está fazendo a verificação com o "ping"
    o que deixa o usuário utilizar o Server.
 
  Rafael C:
  # Ajuda com Wireguard
    > Ajudei o Rogerio a fazer os testes com o wireguard, principalmente com a conexão
    de cliente e servidor, queremos que o servidor e cliente se "Pinguem" para a
    verificação com o ping vindo PAM.
  
  Rafael R:
  # Vendo a parte teorica do PAM
    > Enquanto o thomas estava fazendo mais o código do PAM, eu fui um pouco a parte
    Teorica do PAM, tentando entender mais sobre os comandos que utilizamos, já que
    estavam sendo utilizados sem muito conhecimento por trás.

  Rogerio:
  # WireGuard e PAM unidos
    > Os teste utilizando o PAM deram certo, o WireGuard estabelece uma conexão entre o
    cliente e o servidor, e o PAM consegue "pingar" para verificar se esta funciando,
    apos a verificação o usuario do servidor pode esta livre para poder usar a maquina.
  
  Thomas:
  # TESTE DANDO CERTO
    > Conseguimos uma forma de analisar a saída do "ping" através do comando 
    "system('ping -c 1 10.50.25 > /root/pam_teste/ping.txt')". Isso fez com que a 
    saída do comando seja colocada num txt criado e assim possamos analisar se
    o "ping" está dando certo e se a conexão com o Wireguard está ativa.
```

Semana 18: Dia 15/06/2023 - 21/06/2023
--
```gherkin
  Hugo:
  # Projeto finalizado
    >  projeto está finalizado, com seu objetivo alcançado 
 
  Rafael C:
  # Projeto finalizado
    > Finalmente tudo está ocorrendo bem, o trabalho foi um sucesso.
  
  Rafael R:
  # PAM pronto.
    > Felizmente o trabalho deu certo, o código está dando certo e apenas estamos dando
    toques finais, tentando "Encurtar" os comandos, deixar mais simples.

  Rogerio:
  # WireGuard pronto
    > O projeto esta no final e com tudo dando certo.
  
  Thomas:
  # PAM pronto
    > Código pronto e dando certo. Apenas demos uns toques finais para deixá-lo mais
    apresentável e condizente.
```

Semana 19: Dia 22/06/2023 
--
```gherkin
    Apresentação do trabalho.
```
###### tags: `Documentation`
