====== Anotaciones técnicas sobre servidores en máquinas virtuales ====== //Por Félix Molinuevo, [[axrglobal>|AXR Global]]// **:::** //Fecha creación: **20200329**// ===== Introducción ===== La instalación de un servidor en una máquina virtual es un proceso simple y muy rápido. En pocos minutos se puede tener una instancia preparada para brindar diversos servicios. Sin embargo, es imprescindible realizar varios trabajos que posibiliten la recuperación en caso de desastres, incluyendo avisos de errores y backups remotos. Los pasos que indico acá someramente, son los que realizamos en AXR ((https://axrglobal.com/)) cuando instalamos un nueva instancia virtual. ===== Sobre la configuración inicial ===== Instalado el sistema operativo básico, y los utilitarios estándares, se instalará por ejemplo, si será destinado a hosting, un sistema de administración de los clientes y hosts virtuales, como **Virtualmin** ((https://www.virtualmin.com/)). Para que los servicios funcionen adecuadamente, es imprescindible poner como hostname un FQDN (Fully Qualified Domain Name), por ejemplo srv01.dominio.com. Y ese FQDN debe tener su correspondiente registro A en el DNS, apuntando a la IP de la instancia. Virtualmin instalará todo lo necesario para un servidor de hosting, correo electrónico, scripting, bases de datos y muchos otros servicios. Adicionalmente, instalo habitualmente varios utilitarios que facilitan la administración y el trabajo día a día: apt install screen zsh htop mc iptraf-ng bsd-mailx dnsutils mutt rsync ccze aptitude La configuración del shell **zsh** es lo que sigue a continuación, copiando el archivo .zshrc de algún servidor existente, y el prompt que utilizo para servidores de hosting virtuales. Luego se copia la configuración de **screen** en el archivo .screenrc y se prueba que todo funcione adecuadamente. Para monitorear el servidor con Nagios, necesitamos instalar **Nagios NRPE** ((https://exchange.nagios.org/directory/Addons/Monitoring-Agents/NRPE--2D-Nagios-Remote-Plugin-Executor/details)): apt install nagios-nrpe-server Y se configura Nagios NRPE, tanto en el servidor como en el cliente. El último paso es activar el firewall **FirewallD** ((https://firewalld.org/)) y probar desde otra ubicación que haya quedado correctamente configurado y no haya **puertos innecesarios abiertos**. Para ello se puede usar por ejemplo, **Nmap** ((https://nmap.org/)). Para que cualquier mensaje enviado a root llegue a alguna cuenta de monitoreo, se debe agregar el correspondiente alias en **/etc/aliases**: root: direcciondemonitoreo@dominio y ejecutar el comando **newaliases**. Es necesario también revisar la configuración de **fail2ban** ((https://fail2ban.org/)) para asegurarse que quede como corresponde, activando las jails necesarias según los servicios instalados. Además, configuro el tiempo de bloqueo de IPs en una semana en /etc/fail2ban/jail.conf: bantime = 7d En algunos servidores virtuales quizá sea necesario configurar un archivo de swap. Aunque obviamente no es lo ideal, a veces es necesario. Para ello editar /etc/fstab, agregando una línea: /swapfile none swap sw 0 0 Y ejecutar los siguientes comandos: fallocate -l 4G /swapfile chmod 600 /swapfile mkswap /swapfile swapon -a ===== Pasos finales ===== ==== Nagios ==== Se debe agregar el nuevo servidor en **Nagios** ((https://nagios.org/)). Para ello se creará un nuevo objeto, con los servicios necesarios a monitorear, y se lo agregará al grupo correspondiente. ==== Virtual host por defecto ==== Se debe configurar un virtualhost por defecto para el FQDN del servidor, de manera que si alguien lo accede directo, tenga la información de nuestra empresa. Simplemente se pone en public_html un simple archivo .html con un código básico que indique la dirección web de nuestra empresa. ==== Backup de bases de datos ==== Para finalizar, copio un script de backup de todas las bases de datos MySQL, que las resguarda cada día, y otro que borra los archivos más viejos que un lapso determinado, habitualmente 30 días. Los backups de las bases se guardan en **/srv/backups/mysql** 10 0 * * * /root/archivos/bkup-mysql | mail correo@dominio -s "servidorXX: DBs backup" 2>&1 > /dev/null 50 6 * * 7 /usr/local/bin/eliminaFicherosViejos eliminar /srv/backups/mysql gz 30 30 ==== Backup diario completo ==== Se debe agregar en alguno de los servidores de backup un proceso para que cada día se resguarden los datos de la nueva máquina virtual. Se utiliza para ello **Dirvish** ((http://dirvish.org/)), copiando un archivo de configuración de un servidor existente y adaptándolo al nuevo. **//Nota//**: es **muy importante** restaurar el backup en caso necesario, usando los mismos parámetros de Rsync que utiliza Dirvish, y que son los siguientes: rsync -vrltH -D -pgo --numeric-ids --exclude-from=/ruta/al/archivo origen destino