Uma VPN (Virtual Private Network) é uma forma de acessar com segurança uma rede local, outro gateway de internet, servidores na intranet ou navegar de forma segura na internet.
Acessando redes locais
Uma VPN permite acessar uma rede corporativa como se estivesse conectado localmente. Esse tipo de configuração é útil para situações em que um colaborador opera viajando muito e precisa acessar recursos da rede local de qualquer lugar. O que difere de uma VPN-Proxy é apenas a rede em que o usuário é alocado pelo servidor VPN. No primeiro caso, para permitir acesso aos serviços locais, o tunelamento realizado permite acesso a todas as rodas e serviços locais. No caso de uma VPN-Proxy o tunelamento é feito de forma a alocar o usuário em uma rede fechada e que possui acesso apenas para a internet.
Navegando com segurança em redes públicas (VPN-Proxy)
Vários provedores de serviços oferecem conexões VPN com o objetivo de permitir ao usuário uma forma de burlar eventuais controles de conteúdos impostos em uma rede. Essas redes podem ser de um campus universitário, ambientes de trabalho ou hotspots públicos. A utilização dessas ferramentas para acessar conteúdos proibidos pelas políticas desses ambientes não é recomendada.
Uma utilização coerente dessa ferramenta seria para a navegação segura em ambientes públicos: Wi-Fi abertos, aeroportos, rodoviárias e outros mais. Esses ambientes são potenciais alvos de ataques virtuais, roubos de informações sensíveis e monitoramento de usuários.
Nesse caso, a utilização de uma VPN, que seja confiável, cria um canal de comunicação seguro através da internet. Esse canal é estabelecido entre o dispositivo e o servidor VPN. A comunicação que será enviada a um web site deixa de ser entregue pelo gateway local e passa a ser entregue pelo gateway da VPN. Esse processo faz com que o dispositivo esteja virtualmente na rede do servidor da VPN.
O caminho da comunicação: O celular irá se comunicar com o web site. Após estabelecer uma conexão VPN com o gateway 2, os dados que ele envia irão sempre passar pelo gateway 1, criptografados, e chegarão ao gateway 2. O gateway 2, por sua vez, irá encaminhar os dados do celular para o web site. O gateway 2 também será responsável por receber as respostas do web site e encaminhá-las, criptografadas, para o gateway 1. O gateway 1 receberá esses dados e encaminhará de volta para o celular. Como os dados estão criptografados, o gateway 1, não terá como inspecionar ou analisá-los.
Esse tipo de comunicação aumenta a troca de mensagens e o delay de comunicação entre o celular e o site desejado. Isso se deve ao fato de que a informação transitará por uma terceira rede. Apesar do aumento do delay e redução do throughput, a utilização de uma VPN impede que terceiros acessem os dados e até os metadados de uma comunicação, pois todo o tráfego é encapsulado e criptografado entre o cliente e o servidor VPN.
Protocolos
Existem vários protocolos que realizam essa comunicação fim a fim. Cada um possui suas especificidades. Os mais utilizados são:
OpenVPN Protocolo open source que é mais utilizado para prover conexões VPN a clientes, seja para acessar a rede local de uma organização ou para proteger uma conexão, quando em redes públicas.
IPsec: Mais utilizado para conexões entre firewalls para prover uma conexão segura site to site.
Instalação no linux
Um serviço de VPN como o OpenVPN exporta um pacote de certificados e configurações que pode ser importado de forma simplificada pelo usuário em seus dispositivos. Isso economiza tempo ao evitar uma configuração passo a passo de todos os itens de segurança. Para estações que estejam rodando o Gnome o seguinte pacote pode ser instalado:
Após instalado basta acessar o gerenciado de conexões e importar o arquivo de configuração fornecido pelo servidor OpenVPN.
Instalação no android
No android o processo é parecido, porém o aplicativo que importa as configurações e as aplica é o OpenVPN Connect – Fast & Safe SSL VPN Client. Após instalá-lo é só importar o arquivo de configuração e inserir as informações de usuário e senha.
Bloqueios
Alguns tipos de bloqueios podem impedir que a conexão com o servidor VPN seja estabelecida. O que mais impacta é quando existe uma restrição de comunicação pela porta 1194. Quando uma rede local impede que seus clientes efetuem comunicações para esta porta(porta padrão na maioria dos servidores OpenVPN), o tunelamento não é estabelecido e a comunicação não flui. Uma alternativa para contornar essa situação é ter servidores que permitam configurar outras portas de conexão.
Outro tipo de bloqueio que ocorre é quando uma rede bloqueia acesso web (portas 80/443) a serviços de VPN ou direcionamento de tráfego. Nesse caso o bloqueio é por inspeção de pacotes e ele ocorre antes que o tunelamento seja estabelecido. O objetivo desse bloqueio é não permitir que os usuário pesquisem formas de burlar as regras do firewall.
O Ansible é uma aplicação que automatiza a execução de tarefas em múltiplas máquinas virtuais (VM’s). Essa automatização permite configurar ambientes grandes e complexos de TI evitando possíveis falhas de execução ou digitação humana.
Instalação
Host de controle
Para instalação do Ansible as seguintes configurações são necessárias no host de controle.
ansible -m command -a "hostname" all ansible -m ping all
Ambiente de controle
É recomendável ter um host de controle dentro do ambiente a ser monitorado. Dessa forma o acesso externo é feito a este host que controla os demais hosts “clientes” desejados.
Playbooks
São instruções de comandos a serem executados pelo host de controle nos clientes. Essas instruções são estruturadas em um arquivo .yml.
Módulos
São comandos pré-definidos são inseridos nos playbooks e que executam tarefas nos clientes. Tarefas comuns como envio de arquivos, atualização e instalação de pacotes podem ser feitos por módulos já existentes.
apt
Módulo de configuração de aplicações do Ansible.
Comandos úteis no linux:
Gerar chave privada e pública para o acesso SSH. ‘-t rsa’ para utilizar a versão 2 do algoritmo rsa.
$ ssh-keygen -t rsa
Instalar chave criptográfica para acesso via SSH
$ ssh-copy-id user@ip_host_client
Acesso SSH com transmissão de ambiente gráfico X11.
O rsync permite a sincronização de arquivos e pastas de forma rápida entre uma fonte e um destino. O seguinte comando é utilizado para sincronização da pasta Blog no PC com um servidor na nuvem.
O Hexo é uma plataforma de blog pessoal open source que utiliza textos em markdown para gerar páginas HTML. Ele mostra ser uma plataforma leve e prática de ser utilizada, principalmente se for associada a contêineres Docker. Aproveitando essa facilidade foi criado um contêiner para hospedar o conteúdo que se deseja publicar em uma VM no Google Cloud.
Docker
O Docker foi utilizado nesse projeto para subir e manter o contêiner operacional na VM. O contêiner foi configurado para iniciar junto com a inicialização da VM. O redirecionamento de porta foi feito para a porta 4000, ou seja, toda comunicação que chegar na porta 4000 da VM será direcionada para o contêiner. Foi estudado também a execução de comandos do Docker utilizando o Pipe “|”. O mesmo se mostrou poderoso para associar a execução de comandos bash a uma lista de elementos que são exibidos no terminal. O vídeo demonstrou a execução de Streams, Redirects e Piping.
Criar um contêiner com hexo-server instalado
1
$ sudo docker run --restart=always --name=hexo-server -d -p 4000:4000 -v /home/username/Blog:/blog davyyy/hexo server
Criação de novos posts no hexo-server
1
$ sudo docker run --rm --volumes-from hexo-server davyyy/hexo new nome_do_post
Na plataforma do GCloud foi necessário criar uma regra para abertura da porta 4000 e direcionamento dela para VM. O tutorial a seguir foi utilizado: https://www.youtube.com/watch?v=JmjqPpQdtW8