Criando um servidor de virtualização super leve com Debian 10 e Virtualbox WEB
Com VirtualBox é possivel executar diversos sistemas operacionais (Windows, Linux, UNIX, BSD) simultaneamente no mesmo hardware, que são chamados de máquinas virtuais. Uma das características é o mascaramento dos recursos físicos (incluindo processadores, quantidade de memória, interfaces de rede), o que permite diminuir a administração de drivers nas máquinas virtuais, e transferir uma máquina virtual entre servidores físicos diferentes.
Existem várias ferramentas de virtualização disponíveis.
Microsoft Virtual Server 2005 R2 – disponível para plataforma x86 e x86_64 bits. Suporte: Somente Windows.
Qemu – ferramenta de virtualização de código aberto disponível para windows, mac e Linux.
Vmware – Disponível para Windows e Linux.
VirtualBox – Aplicativo de código aberto disponível para Windows, Mac, Linux e Solaris.
Xen – Suporta Windows, bem como distribuições Linux.
O VirtualBox inicialmente foi lançado sob licença proprietária, mas mais tarde (2007) a Oracle Corporation começou a lançá-lo sob GNU General Public License. Escrito completamente em C, C ++ e Assembly Language está disponível para Windows, OS X, Linux e Solaris.
Recomendo já baixar a ISO nonfree: https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/
Adicione o repositório do virtualbox
Debian 10 Buster
# apt install wget vim apt-transport-https gnupg # echo 'deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian buster contrib' > /etc/apt/sources.list.d/virtualbox.list # wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | apt-key add - # wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | apt-key add -
Vamos a instalação, a versão 5.2 (nesta data 08/10/19) ainda não tem uma versão (Oficial) 6 compatível com o phpVirtualbox. Mas se você é expert existe alguns forks compatível com 6.0.
Certifique-se que seu repositório esteja usando os repositórios nonfree e contrib.
# vim /etc/apt/sources.list
Ao final de cada linha verifique se consta: nonfree e contrib, se não tiver adicione, ficando assim:
deb http://deb.debian.org/debian/ buster main contrib non-free deb-src http://deb.debian.org/debian/ buster main contrib non-free deb http://security.debian.org/debian-security buster/updates main contrib non-free deb-src http://security.debian.org/debian-security buster/updates main contrib non-free # buster-updates, previously known as 'volatile' deb http://deb.debian.org/debian/ buster-updates main contrib non-free deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
Atualize o repositório
# apt update # apt install firmware-linux firmware-linux-free firmware-linux-nonfree
Já vamos aproveitar para otimizar a parametrização do uso da memoria SWAP do nosso debian. Ajustaremos o swappiness para 10, assim o SWAP só começará a ser usado quando a memória RAM estiver 90% cheia.
# echo "# Reduz o uso de SWAP" >> /etc/sysctl.conf # echo "vm.swappiness=10" >> /etc/sysctl.conf # echo "# Melhora a gestão de cache" >> /etc/sysctl.conf # echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf # echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
Reinicia a máquina para carregar os novos módulos do kernel.
# apt install virtualbox-5.2 # reboot
Verifique se swappiness retorna o valor 10
# cat /proc/sys/vm/swappiness
Faça download dos pacotes extras: https://www.virtualbox.org/wiki/Download_Old_Builds_5_2 como instalei a versão 5.2 irei baixar a versão correspondente: (If you’re looking for the latest VirtualBox 5.2 packages, see VirtualBox 5.2 builds.)
# su - # cd /tmp/ # wget https://download.virtualbox.org/virtualbox/5.2.44/Oracle_VM_VirtualBox_Extension_Pack-5.2.44.vbox-extpack
Instale os pacotes extras
# VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.2.44.vbox-extpack
Responta Yes (y)
Vamos executá-lo como o nosso usuário vbox, porque ele não precisa acessar o resto do seu sistema.
# useradd -d /home/vbox -m -g vboxusers -s /bin/bash vbox
Defina uma senha para seu usuario vbox
# passwd vbox
Diga ao seu sistema qual usuário vai executar o VirtualBox.
# echo 'VBOXWEB_USER=vbox' > /etc/default/virtualbox # echo 'VBOXWEB_HOST=127.0.0.1' >> /etc/default/virtualbox
Faça com que o vboxweb-service inicie no boot. Como dito acima nosso usuário não precisa ter acesso total ao sistema, entao vamos instalar o sudo e roda-lo via sudo.
# apt install sudo
Adicione no /etc/rc.local o comando para iniciar junto com o boot.
# vim /etc/rc.local
Adicione
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Solução para inicialização automatica: # use o comando la listar as VMs criadas # sudo -u vbox VBoxManage list vms # Colete as ID # "Debian" {d288884d-a3d4-4903-b84e-5c6039af13b5} # Pegue o "ID" da VM e use o Comando a baixo descomentando a linha: # Adicione um sleep para aguardar 30seg para dar tempo do modulo do kernel ter tempo de iniciar # sleep 30 # sudo -u vbox VBoxHeadless -s d288884d-a3d4-4903-b84e-5c6039af13b5 & exit 0
Alterare as permissões:
# chmod +x /etc/rc.local # ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
Vamos instalar o serviço web + php
# apt install apache2 libapache2-mod-php\ php-cli php-bcmath php-gmp php-mbstring php-zip php-curl\ php php-common php-soap php-gd unzip php-pear php-mysql php-xml php-soap
Por segurança recomendo remover a assinatura do servidor, para isso:
# sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-available/security.conf # sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf-available/security.conf
Vamos também configurar nosso domínio virtual para acessar o servidor via domínio (ex vbox.remontti.com.br) e restringir ele apenas para nossos IP de gerencia.
# vim /etc/apache2/sites-available/000-default.conf
Faça as devidas alterações, não esqueça de alterar em Require ip para os IPs que você vai autorizar as conexões.
<virtualhost *:80> Protocols h2 http/1.1 ServerName vm.remontti.com.br ServerAdmin noc@remontti.com.br ErrorDocument 403 http://www.remontti.com.br/ DocumentRoot /var/www/html <Directory /var/www/html/> Options FollowSymLinks AllowOverride All Require ip 127.0.0.1 ::1 192.168.0.0/16 172.16.0.0/12 100.64.0.0/10 10.0.0.0/8 250.0.0.0/22 2000:000::/32 </Directory> LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </virtualhost>
Habilite os módulos
# a2enmod http2 # systemctl restart apache2
Que tal configurar um certificado grátis com let’s encrypt?
# apt install apache2 apache2-utils letsencrypt python-certbot-apache # systemctl stop apache2 # letsencrypt --authenticator standalone --installer apache -d vm.remontti.com.br
Agora já é possível acessar “vm.remontti.com.br” com HTTPS, faça um teste se seu domínio esta respondendo corretamente.
Para evitar que o certificado expire faça um script e colocando ele no cron para que o mesmo renove automaticamente.
# vim /etc/renovassl.sh
Adicione
#!/bin/bash /usr/bin/systemctl stop apache2 /usr/bin/certbot -q renew /usr/bin/systemctl start apache2
De permissão de execução:
# chmod +x /etc//renovassl.sh
Adicione ao cron e restarte o cron
# echo '00 00 * * * root /etc/renovassl.sh' >> /etc/crontab # systemctl restart cron
Vamos configurar o projeto phpvirtualbox, dentro do diretório padrão do apache.
# cd /var/www/ # rm -rf /var/www/html/ # wget https://github.com/phpvirtualbox/phpvirtualbox/archive/5.2-1.tar.gz -O phpvirtualbox-5.2-1.tar.gz # tar -vxzf phpvirtualbox-5.2-1.tar.gz # mv phpvirtualbox-5.2-1 html # rm phpvirtualbox-5.2-1.tar.gz # chown vbox:vboxusers html -R # cd /var/www/html/ # cp config.php-example config.php # vim config.php
// ... // var $username = 'vbox'; var $password = 'pass'; // ... // var $language = 'pt_br'; var $vrdeports = '9000-9100'; var $vrdeaddress = '0.0.0.0'; // ... // var $enableAdvancedConfig = true;
É altamente recomendado que você tenha um firewall em cima da range de portas 9000 a 9100, pois é onde será possível fazer acesso remoto, e recomendo que depois da instalação sempre desative o acesso remoto a VM, segue um exemplo de firewall, no exemplo já irei proteger tb a porta do SSH, lembre-se de deixar seu ip na ACL de permissões.
# apt install nftables # systemctl enable nftables
Modelo fechando as portas do SSH [22] e a range de acesso remoto [9000-9100], você pode personalizar de acordo com sua instalação.
#!/usr/sbin/nft -f flush ruleset table inet filter { # IPv4 que terao acesso set acesso-total4 { type ipv4_addr flags interval elements = { 200.200.200.16/28, 200.200.200.0/28} } # IPv6 que terao acesso set acesso-total6 { type ipv6_addr flags interval elements = { 2804:1234:bebe::48, 2804:4321:bebe::/48 } } chain input { type filter hook input priority 0; #ip saddr @acesso-total4 accept #ip6 saddr @acesso-total6 accept # Permite acesso SSH na porta 22 ip saddr @acesso-total4 tcp dport 22 counter accept ip6 saddr @acesso-total6 tcp dport 22 counter accept # Permite acesso tela remota portas padões Vbox ip saddr @acesso-total4 tcp dport { 9000-9100 } counter accept ip6 saddr @acesso-total6 tcp dport { 9000-9100 } counter accept # Drop nas portas para demais IPs # SSH tcp dport 22 counter drop # Vbox Remote tcp dport { 9000-9100 } counter drop type filter hook input priority 0; } chain forward { type filter hook forward priority 0; } chain output { type filter hook output priority 0; } }
Reinicie o nftables e verifique se o mesmo foi carregado:
# systemctl enable nftables # nft list ruleset
# sudo -u vbox vboxwebsrv & # usermod -a -G vboxusers vbox # reboot
Agora acesse:
https://DOMINIO/
Usuário: admin
Senha: admin
Não esqueça de alterar a senha do usuário admin!
O mais legal que você está usando quase nada do hardware da máquina para “subir” seu sistema de virtualização.
Virtulabox peca em não dar uma solução para inicialização automática, mas é muito fácil fazer isso incluindo no rc.local. Use o comando:
# sudo -u vbox VBoxManage list vms
Vai ser listado os ID das suas VMs. Ex:
“ns1” {d288884d-a3d4-4903-b84e-5c6039af13b5}
“ns2” {a2893475-atd4-4973-b81e-6039af13bss5}
Agora que você ja tem as IDs adicione em /etc/rc.local: da seguinte forma, alterando pelas suas ID.
sleep 30 # sleep para aguardar 30seg para dar tempo do modulo do kernel ter tempo de iniciar sudo -u vbox VBoxHeadless -s d288884d-a3d4-4903-b84e-5c6039af13b5 & sudo -u vbox VBoxHeadless -s a2893475-atd4-4973-b81e-6039af13bss5 &
Agora quando o servidor reiniciar suas VMs vão iniciar automaticamente, (Não esqueça de quando for desligar o servidor fazer o processo de desligamento de cada VM)
Uma das vantagens deste servidor é que é o virtualbox é muito simples!!! Dentro de /home/vbox/ vão estar suas imagens sendo muito facil de fazer uma copia e migrada para algum outro servidor em caso de “pau”. É claro tenha sempre redundância de hardware em seu servidor, faça sempre pelo menos um RAID1 (espelhamento de disco) eu gosto de fazer RAID10 com pelo menos 5 SSDs, onde 1 dos SSDs eu instalo o sistema e os outros 4 (ou 6 ou 8 …) somo ex 2 (RAID0) e espelho nos outros 2 (RAID1) logo temos o RAID10.
Acesso remoto
No windows você pode usar o famoso mstsc e informar seu IP:PORTA, no linux tem um pacote chamado vinagre basta instala-lo.
Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!
Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.
Abraço!
Sabe de algum phpvirtualbox que funcione no debian 11?
Lindo Tutorial amigo
cara primeiramente quero te agradeçe por compratilhar esse conhecimento muito massa com todos nós.
fui instalar novamente e me deparei com um problema ocorre o seguinte erro ao coloca o user e e passowrd
(Error logging in to vboxwebsrv.) já pesquisei pra caramba a até o momento não consgio encontrar
Parece que a senha não está conferindo, sete uma nova e ajuste as configurações.
Boa noite!
Como faz para resolver a questão do Flash play?
Usa o acesso remoto.
mstsc – no Windows
vinagre – Linux
Deus te proteja! Vc é 10!
Eu poderia usar essa ferramenta em produção para rodar Windows Servers ou recomendaria algo mais robusto como um proxmox, xenserver, etc…
Sim (eu uso)
Show… Vou começar usar em produção então, muito mais simples e atende bem para o que eu preciso. Valeu!
Olá! Primeiramente agradeço pelos conteúdos de alto nível.
Bom, fiz a instalação porem quando vou executar a maquina o console não conectar, apresenta o erro “TCP: SECURITY_ERROR Error #2048”. Tem alguma dica? obrigado!
Bom dia, esse exemplo, é como um terminal server é? busco muito, como criar um servidor de VM remoto. Tanto para os usuario acessarem uam VM remota ou até mesmo, criar sua propria maquina, tipo cloud?
Belo Trabalho!!
teria algum problema se caso eu quiser instalar ele sem o certificado ??
Nenhum 😉
boa noite,
parabéns pelo excelente tutorial, a instalação do debian que você indica é a netinstall, instalar sem interface gráfica?
obrigado, até mais
Exatamente!
faz proxmox com detalhes, afinal é baseado no debian e muito mais robusto e completo