Instituto Superior Técnico, Universidade de Lisboa
Segurança Informática em Redes e Sistemas
O objectivo do guia consiste em aprender como funciona e como pode ser implementada uma VPN usando o software OpenVPN, que usa o protocolo TLS (Transport Layer Security) para proteger as comunicações. Neste guia iremos ainda revisitar as ferramentas nmap e iptables (firewall).
Obtenha o laboratório Kathará que servirá de base aos exercícios a desenvolver durante a aula. A topologia é a apresentada na figura abaixo. O lado esquerdo da rede (equipamentos ligados ao router 1) representa a rede de uma organização; o lado direito representa a Internet.
-
Use o comando
traceroutepara verificar a que redes da organização consegue chegar a partir do PC1. A quais não é possível? -
Controlando o router 2 (mas não o router 1) é possível fazer com o que PC1 tenha acesso a todas as redes. Faça essa alteração.
-
Usando o comando
iptablescoloque regras de firewall no router 1 que impeçam o acesso de e à rede192.168.0.0/24a partir da Internet (que tem mais endereços do que os mostrados no diagrama). -
No PC1, use o comando
nmappara detetar as máquinas presentes na rede200.200.200.128/25. Quantas máquinas foram encontradas e quais os serviços? (NB: onmapvai percorrer cerca de 128 endereços, logo demora algum tempo)
nmap 200.200.200.128/25-
Crie regras de firewall (
iptables) no router 1 que impeçam o acesso aos protocolos HTTP (80) e SSH (22) a partir da Internet, mas que permitam o acesso de dentro para fora (apenas para a rede200.200.200.128/25pois a192.168.0.0/24já se encontra bloqueada de e para a Internet). -
Repita o comando
nmapa partir do PC1 e do servidor 3 e verifique as diferenças. Porque é que continuamos a conseguir aceder por ssh ao router 1 usando o IP200.200.200.254?
Uma Virtual Private Network (VPN), ou rede privada virtual, permite o acesso a partir do exterior a uma rede interna de uma organização. Adicionalmente permite proteger criptograficamente o tráfego que circula nas redes públicas.
Neste exercício vamos configurar o PC1 para aceder à rede interna (redes ligadas ao router 1), apesar do router 1 não permitir acessos do exterior. Portanto, o PC1 vai usar uma VPN para fazer esse acesso. Em concreto, vamos ter um cliente e um servidor OpenVPN:
- Servidor OpenVPN: o servidor designado simplesmente VPN (lado esquerdo, em baixo) vai ser o servidor OpenVPN, ou seja, o computador ao qual os computadores que queiram usar a VPN se terão de ligar.
- Cliente OpenVPN: o PC1 vai ser o cliente OpenVPN.
- O OpenVPN usa chaves assimétricas e certificados para autenticar os utilizadores, logo precisa de uma Public Key Infrastructure (PKI) para fazer a criação, distribuição e revogação de certificados. Para o efeito vamos usar uma PKI mínima, que inclui apenas uma Certification Authority (CA) muito simples. Aliás, a CA devia estar num ambiente com elevado grau de segurança, p.ex., num computador desligado da Internet, mas não vamos considerar esse aspecto.
O OpenVPN fornece um conjunto de scripts para gerar a CA e certificados: easy-rsa.
Na máquina VPN mude para a directoria /etc/openvpn/ e execute:
cp -r /usr/share/easy-rsa /etc/openvpn/
cp /etc/openvpn/easy-rsa/vars.example /etc/openvpn/easy-rsa/varsEdite o ficheiro /etc/openvpn/easy-rsa/vars.
Altere as últimas linhas para incluir o seguinte:
set_var KEY_COUNTRY "PORTUGAL"
set_var KEY_CITY "Lisbon"
set_var KEY_ORG "sirssec"
set_var KEY_EMAIL "admin@example.com"
set_var KEY_OU "OpenVPN"
Emita o seguinte comando na directoria easy-rsa para inicializar a PKI:
./easyrsa init-pkiEmita o seguinte comando para inicializar a CA, criando o seu par de chaves e um certificado com a sua chave pública:
./easyrsa build-ca nopass- Temos agora as chaves da CA.
Vamos gerar chaves e certificados para o servidor e para o cliente continuando a usar os scripts
easy-rsa(não defina password).
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-req client nopass
./easyrsa sign-req client client- Vamos gerar parâmetros Diffie-Hellman para o servidor usar quando clientes se tentarem ligar a ele:
./easyrsa gen-dh- O OpenVPN fornece um conjunto de mechanismos de security hardening. Um desses mecanismos é chamado tls-auth e permite verificar a integridade das mensagens trocadas durante o handshake do TLS. Convém notar que o TLS verifica a integridade dessas mensagens, mas faz essa verificação depois do handshake, não durante o handshake. No standard, depois do handshake, o cliente e servidor enviam um ao outro um MAC das mensagens trocadas e verificam se estão de acordo com o que esperavam.
O mecanismo tls-auth do OpenVPN usa um "truque" que não funciona no caso geral: ter à partida uma chave secreta (simétrica) partilhada entre cliente e servidor para verificar a integridade das mensagens trocadas durante o handshake do TLS através da colocação de um MAC em cada uma das mensagem. Este mecanismo serve para proteger de ataques de negação de serviço ou de tentativas de injecção de pacotes (p.ex. para tentar fazer buffer overflow).
Gere a chave secreta que será partilhada entre o servidor e o(s) cliente(s) executando:
openvpn --genkey --secret ta.key
cp ta.key /etc/openvpn- No PC1 copie o ficheiro exemplo de configuração para a área de root:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~Repare que tem de dar a esse ficheiro o mesmo nome que usou em cima no comando ./easyrsa gen-req, seguido da extensão .conf. Neste caso por acaso o nome é o mesmo - cliente - mas podia ser diferente.
- Copie os seguintes ficheiros que foram gerados no servidor VPN (que estão na pasta
/etc/openvpn/easy-rsa/e suas subpastas) para a área do root do PC1:
ca.crt- certificado da CAclient.crt- certificado do clienteclient.key- chaves do clienteta.key- a chave do mecanismo tls-auth
Sugestão: use o comando scp ou a pasta shared.
O ficheiro client.key contém a chave privada do cliente, logo tem de ser apagado do servidor. Esse ficheiro e o que contém a chave privada do servidor (server.key) têm de ser mantidos secretos. Escusado será dizer que seria muito errado copiar o ficheiro server.key para o cliente!
-
No PC1, edite o ficheiro
client.confno cliente e defina o endereço do servidor VPN (campo remote) e os nomes dos ficheiros com as chaves -
No servidor de VPN, copie os ficheiros
ca.crt,dh.pem,server.key,server.crteta.keypara a pasta/etc/openvpn/. -
Analise o ficheiro
server.confque já está na mesma pasta. Altere o seguinte:
- Mude
dh1024.pemparadh.pem. - Descomente a linha
tls-auth ta.key 0(tire o ;).
- Repare que o mesmo ficheiro contém a linha:
server 200.200.200.0 255.255.255.128Esta linha indica que a subrede da VPN é a 200.200.200.0/25, ou seja, que um computador externo (no nosso caso, o PC1) vai aparecer para a rede interna com um endereço IP dessa subrede.
Muito provavelmente, na sua configuração a comunicação entre essa subrede e a subrede 200.200.200.128/25 (que é parecida mas diferente) está barrada na firewall do router1. Remova essa restrição, reconfigurando a firewall.
- Execute o servidor de VPN no servidor, em modo debug, a partir da pasta
/etc/openvpn:
openvpn server.confCaso o openvpn falhe, poderá ser necessário correr o seguinte comando antes:
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun
(No futuro, para lançar normalmente use o script
/etc/init.d/openvpn)
-
Descomente a seguinte linha ao ficheiro
client.confpara activar a compressão das comunicações:comp-lzo. -
Execute o cliente no PC1, em modo debug:
openvpn client.conf-
Observe as mensagens no cliente e servidor. Verifique que já estão ligados.
-
Verifique as rotas presentes no router 1 executando
ip route. Repare que existe já uma rota para a rede200.200.200.0/25através do servidor de VPN. Esta é a rede com os IPs atribuídos aos clientes de VPN. -
Coloque o cliente e o servidor OpenVPN em background com
Ctrl + zseguido do comandobg.
-
Tente agora aceder do PC1 à rede que está bloqueada (
192.168.0.0/24) usando o comandoping. É possível? Porquê? -
Faça
traceroutedo PC1 para o servidor 4. O router 2 está presente no caminho? Porquê? -
Execute no router 2 o comando
tcpdumppara observar informação sobre os pacotes trocados. Faça novamentetraceroutedo PC1 para o servidor 4 e tome nota dos endereços IP de origem e de destino enviados pelo cliente e servidor OpenVPN. O que conclui daí sobre aquilo que uma VPN protege de quem está na Internet? -
Faça agora
traceroutedo servidor 4 para o PC1 e tome também nota dos endereços IP de origem e de destino enviados pelo cliente e servidor OpenVPN. Novemente, o que conclui?
Referências:
-
Oskar Andreasson, Iptables Tutorial, version 1.2.2, http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html, 2006
-
OpenVPN Howto, https://openvpn.net/community-resources/how-to/

