hmm
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
\usepackage{listings}
|
||||
\usepackage{booktabs}
|
||||
|
||||
% \usepa
|
||||
\usepackage{style}
|
||||
|
||||
\lstdefinestyle{mystyle}{
|
||||
basicstyle=\ttfamily\footnotesize,
|
||||
@@ -41,11 +41,11 @@
|
||||
Este projecto tem como âmbito implementar uma rede virtual privada (VPN) em um cenário de road-warrior,
|
||||
ou seja, onde o administrador de acesso da rede é o cliente ou tem acesso a ele.
|
||||
|
||||
Para tal, foi implementado um servidor e um cliente OpenVPN, certificados por uma autoriadade central (CA)
|
||||
Para tal, foi implementado um servidor e um cliente OpenVPN, certificados por uma autoridade central (CA)
|
||||
que em si é self-signed. Para além disto, foi implementado um sistema de autenticação de dois factores
|
||||
através do plugin google-authenticator para o OpenVPN.
|
||||
através do plugin \textit{google-authenticator} para o OpenVPN.
|
||||
|
||||
Existe ainda um servidor Apache e um servidro de OpenSSL OCSP. Para simpliflicar, a elaboração do
|
||||
Existe ainda um servidor Apache e um servidor de OpenSSL OCSP. Para simplificar, a elaboração do
|
||||
projecto foram colocados na mesma maquina virtual, mas por razoes de seguranca poderia querer ter
|
||||
estes serviços separados.
|
||||
|
||||
@@ -56,15 +56,19 @@ Temos então três máquinas virtuais:
|
||||
{\bf Nome} & {\bf Script} & {\bf Rede} \\\toprule
|
||||
Road Warrior & VM\_ROAD\_WARRIOR.sh & Rede Externa 193.168.0.0/24 \\
|
||||
VPN Gateway & VM\_OPENVPN\_GATEWAY.sh & Router \\
|
||||
OpenSSL / Apache & VM\_OPENSSL\_APACHE.sh & Reder Interna 10.60.0.0/24 \\
|
||||
OpenSSL / Apache & VM\_OPENSSL\_APACHE.sh & Rede Interna 10.60.0.0/24 \\
|
||||
\end{tabular}
|
||||
|
||||
|
||||
|
||||
|
||||
\section{Criação de certificados}
|
||||
|
||||
Criar chaves com 2048 bits.
|
||||
|
||||
Todos os certificados são criados de uma so vez e são depois copiados para as respetivas
|
||||
máquinas virtuais.
|
||||
|
||||
|
||||
\begin{lstlisting}[language=bash]
|
||||
cert_ca="/C=PT/ST=Coimbra/L=Coimbra/O=UC/CN=CoimbraVPN"
|
||||
cert_vpn="/C=PT/ST=Coimbra/L=Coimbra/O=UC/CN=gateway"
|
||||
@@ -86,17 +90,9 @@ openssl req -new -key apache.key -out apache.csr -subj "$cert_apache" -addext "s
|
||||
openssl ca -batch -in "apache.csr" -cert "ca.crt" -keyfile "ca.key" -out "apache.crt" -config cheese.cfg
|
||||
\end{lstlisting}
|
||||
|
||||
Criar chave secreta.
|
||||
\begin{lstlisting}[language=bash]
|
||||
openssl --genkey secret ta.key
|
||||
\end{lstlisting}
|
||||
|
||||
|
||||
\section{Configuração da \textit{Gateway} VPN}
|
||||
|
||||
\section{Configurar TOTP}
|
||||
|
||||
|
||||
\subsection{Configurar TOTP}
|
||||
|
||||
Foi criado o ficheiro \texttt{totp} com a configuração de autenticação a
|
||||
ser utilizada pelo plugin de PAM para o openvpn.
|
||||
@@ -105,31 +101,99 @@ ser utilizada pelo plugin de PAM para o openvpn.
|
||||
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so totp
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{Aceder ao código}
|
||||
Adicionalmente, devido às restrições de segurança do \textit{systemd},
|
||||
foi necessário desativar o \texttt{ProtectHome} no serviço do OpenVPN
|
||||
para que o plugin PAM consiga ler os ficheiros de segredo do Google Authenticator
|
||||
localizados nas diretorias \textit{home} dos utilizadores.
|
||||
|
||||
\begin{lstlisting}[language=bash]
|
||||
[Service]
|
||||
ProtectHome=false
|
||||
\end{lstlisting}
|
||||
|
||||
Primeiro, na gateway, entramos como o utilizador desejado e obtemos a chave
|
||||
do gerador de palavras passes temporarias. Ao inserir a chave no
|
||||
\texttt{google authenticator} podemos obter a nossa primeira chave de 6 digitos.
|
||||
\texttt{google authenticator} podemos obter um código QR, a nossa primeira
|
||||
chave de 6 digitos.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics{google-authenticator}
|
||||
\end{figure}
|
||||
|
||||
\begin{lstlisting}[language=bash]
|
||||
su john
|
||||
google-authenticator
|
||||
\end{lstlisting}
|
||||
|
||||
\section{Revocation e OCSP}
|
||||
\subsection{Encaminhamento e Firewall}
|
||||
|
||||
Para que a gateway funcione como router entre a rede externa e a rede interna,
|
||||
foi necessário ativar o \textit{IP forwarding} no kernel e configurar as regras
|
||||
de \textit{iptables} para permitir o tráfego da VPN e realizar o mascaramento
|
||||
de IP (NAT).
|
||||
|
||||
% NOTA(vasco): Não temos regras de DROP a packets
|
||||
% talvez deviamos mudar isso nao sei
|
||||
|
||||
\begin{lstlisting}[language=bash]
|
||||
# Ativar encaminhamento
|
||||
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
|
||||
sysctl -p /etc/sysctl.conf
|
||||
|
||||
# Regras de Firewall
|
||||
iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT
|
||||
iptables -I FORWARD 1 -i tun0 -o enp0s9 -j ACCEPT
|
||||
iptables -I FORWARD 1 -i enp0s9 -o tun0 -j ACCEPT
|
||||
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp0s8 -j MASQUERADE
|
||||
\end{lstlisting}
|
||||
|
||||
\section{Configuração do Cliente (Road Warrior)}
|
||||
|
||||
O cliente encontra-se na rede externa (\texttt{193.136.212.10}) e liga-se à VPN
|
||||
gateway na porta 1194. Para garantir a segurança, utiliza-mos autenticação mútua (os certificados X.509)
|
||||
e um \textit{two factor authentication} (2FA) como palavras-passe temporarias, geradas através do
|
||||
\textit{Google Authenticator}.
|
||||
|
||||
\begin{lstlisting}[language=bash]
|
||||
client
|
||||
dev tun
|
||||
proto udp
|
||||
remote 193.136.212.1 1194
|
||||
ca ca.crt
|
||||
cert user.crt
|
||||
key user.key
|
||||
auth-user-pass
|
||||
cipher AES-256-GCM
|
||||
auth SHA256
|
||||
\end{lstlisting}
|
||||
|
||||
\section{Servidor Apache e OCSP}
|
||||
|
||||
O servidor interno (\texttt{10.60.0.1}) alberga o serviço Apache e o responder OCSP
|
||||
da autoridade de certificação.
|
||||
|
||||
\subsection{Revocation e OCSP}
|
||||
|
||||
\subsection{Testar OSCP via revoke}
|
||||
|
||||
\begin{enumerate}
|
||||
\item Conectar ao VPN e ver que funciona
|
||||
\item Na maquina host, nao nas vms, na repo mesmo.
|
||||
\item revogar o certificado via openssl -revoke user.crt -config cheese.cfg -keyfile ca.key -cert ca.crt
|
||||
\item Fechae OSCP e correr VM\_OPENSSL novamente (copiar index.txt e serial?)
|
||||
\item Tentar outra vez e ver que de facto falha
|
||||
\item Estabelecer a ligação VPN e verificar a conectividade à rede interna.
|
||||
\item No diretório da autoridade de certificação (máquina \textit{host}), revogar o certificado do utilizador:
|
||||
\begin{lstlisting}[language=bash]
|
||||
openssl ca -revoke user.crt -config cheese.cfg -keyfile ca.key -cert ca.crt
|
||||
\end{lstlisting}
|
||||
\item Atualizar o ficheiro \texttt{index.txt} no servidor OCSP e reiniciar o serviço para carregar o novo estado de revogação.
|
||||
\item Tentar estabelecer uma nova ligação VPN e verificar que a autenticação falha devido à resposta \texttt{revoked} do responder OCSP.
|
||||
\end{enumerate}
|
||||
|
||||
|
||||
|
||||
\section{Conclusion}
|
||||
Conclusão!!!
|
||||
\section{Conclusão}
|
||||
|
||||
A implementação deste projeto permitiu consolidar conhecimentos sobre redes privadas virtuais e segurança em comunicações.
|
||||
A combinação de certificados digitais com autenticação de dois fatores (TOTP) garante uma robustez significativa contra
|
||||
ataques de interceção e roubo de credenciais.
|
||||
|
||||
A integração do protocolo OCSP permite uma gestão dinâmica da confiança, possibilitando a revogação imediata de acesso a clientes comprometidos sem necessidade de redistribuição de listas de revogação (CRLs) volumosas. Em suma, o sistema cumpre os requisitos de confidencialidade, integridade e disponibilidade propostos.
|
||||
|
||||
\end{document}
|
||||
|
||||
Reference in New Issue
Block a user