KVM

O KVM é um hypervisor que possibilita a criação de VM’s de uma forma eficiente quanto a utilização do hardware.


Instalação

  1. Pacotes necessários para instalação do KVM e suas dependências:
    1
    $ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
  2. Adicionando usuários aos grupos:
    1
    $ sudo adduser `id -un` libvirtd
  • id -un representa o nome do usuário. Efetue um relogin para validar a alteração.

Verificar a instalação:

1
2
3
$ virsh list --all
Id Name State
---------------------------

References

VPN

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.

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.

Figura 1: Exemplo de comunicação de um celular para um web site através de uma 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:

1
$ sudo apt-get install network-manager-openvpn-gnome

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.

Serviços de VPN

Exemplo de serviços de VPN-Proxy:

References

Ansible

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.

1
2
3
4
5
6
7
8
9
sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-get install python-software-properties
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible
sudo apt-get install aptitude
sudo apt-get install python-apt
sudo apt-get install python3-apt
Hosts clientes
  • É necessário instalar os pacotes do python em todos os hots clientes, os demais pacotes listados são adicionais aos comandos que serão utilizados.
  • É necessário que o host de controle já possua acesso aos nós clientes, de preferência com troca de chaves criptográficas SSH entre eles.
1
2
3
4
5
6
sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-get install python-software-properties
sudo apt-get install aptitude
sudo apt-get install python-apt
sudo apt-get install python3-apt
Comandos ansible
1
2
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.

$ ssh -Y [email protected]

  • 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.
1
$ rsync -avz --no-perms --rsync-path='sudo rsync' /home/user/Blog/source/_posts/ server.com.br:/home/user/Blog/source/_posts/
  • Configuração de IP estática no linux. Editar o arquivo /etc/network/interfaces
1
2
3
4
5
6
7
8
9
auto eth0
iface eth0 inet static
name Ethernet LAN card
address 192.168.0.1
netmask 255.255.255.0
broadcast 192.168.0.255
network 192.168.0.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4

References

Hexo e ferramentas de texto

Hexo - Blog

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

Outros comandos Docker

1
2
3
4
$ sudo docker ps -aq # Listar contêineres  abertos
$ sudo docker ps -aq | sudo xargs docker rm # Excluir todos contêineres
$ sudo docker images # Listar images disponíveis
$ sudo docker images -aq | sudo xargs docker rmi # Excluir todas images não associadas a contêineres

Google Cloud

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

Atividades a desenvolver

  • Rodar webserver via docker
  • Substituir página principal por Hexo estático ?
  • Implementar compilador latex no hexo

References