Entorno de virtualización con Proxmox
¿Qué es Proxmox?
Proxmox VE (Proxmox Virtual Enviroment) es un entorno de virtualización de servidores de código abierto basada en Debian con una versión modificada del Kernel, para la gestión de
- Maquinas virtuales con KVM
- Contenedores con LXC
- Almacenamiento
- Redes virtuales
- Clústeres de alta disponibilidad
- Copias de seguridad tanto de las Maquinas virtuales como de los contenedores
¿Donde puedo instalar Proxmox?
En un servidor físico
Podemos instalar Proxmox en un equipo físico (servidor, portátil o sobremesa) con mínimo 8Gb de memoria RAM.
En una Maquina virtual
Utilizando Virt-Manager, VirtualBox o cualquier otro sistema de virtualización, podemos montar un pequeño laboratorio de Proxmox a modo de prueba.
En un VPS (Servidor Privado Virtual)
Hetzner es un proveedor Alemán de infraestructura donde podemos contratar nuestras propias Maquinas virtuales (VPS) o servidores dedicados.
A continuación os dejo su página web.
Personalmente llevo trabajando bastante tiempo con este proveedor por su calidad de servicio y productos.
En un servidor dedicado
Hetzner también dispone de servidores dedicados con muy buenas prestaciones donde puedes instalar Proxmox para usar en producción.
Mi laboratorio con Proxmox
En esta ocasión vamos a ver como podemos instalar un servidor de pruebas con Proxmox en una instancia de Cloud en Hetzner.
.Antes de comenzar debemos saber que la instalación la vamos a realizar sobre una una Maquina virtual KVM de Hetzner.
Por tanto, al a ser una virtualización anidada (virtualización dentro de otra virtualización) no tendremos el mismo rendimiento que si fuera una maquina física.
Instalación
Requerimientos de la maquina
En nuestro caso hemos seleccionado un VPS CX21, podemos ver los precios en el siguiente enlace
- 2 vCPU
- 4 Gb RAM
- 40 Gb de Disco Duro
- 20 TB de tráfico
- Sistema operativo Debian 10
Opción 1 - Instalación mediante ISO
Una vez que hemos creado nuestro servidor VPS
- Desde el panel de administración de Hetzner montamos la imagen ISO de Proxmox
- Reiniciar el servidor
- Abrimos la consola gráfica noVNC dentro del panel de Hetzner situada en la parte superior derecha junto al boton para encender y apagar nuestro servidor
- Por último, seguimos los pasos del asistente de instalación de Proxmox


Opción 2 - Instalación a través de comandos
Nos conectamos por SSH a nuestro servidor VPS con Debian 10 y nos logueamos como root.
Averiguamos la ip de nuestro servidor VPS
ip aAsociamos la dirección ip al dominio que tendrá nuestro servidor dentro del archivo /etc/hosts
nano /etc/hosts98.123.2.38 homelab.local homelabComprobamos que efectivamente la asociación esta correcta
hostname --ip-addressAñadimos los repositorios de Proxmox
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve buster pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.listAñadimos la clave GPG de los repositorios de Proxmox y le damos permisos de ejecución
wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpgchmod +r /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpgActualizamos el sistema con los nuevos repositorios
apt update && apt full-upgrade -yInstalamos todos los paquetes necesarios para Proxmox VE
apt install proxmox-ve postfix open-iscsi -yReiniciamos el sistema
reboot
Para acceder a la interfaz web, abrimos nuestro navegador e introducir https://98.123.2.38:8006
Debemos aceptar el aviso de seguridad y posteriormente introducir nuestro usuario de root con su contraseña correspondiente.
Configuración de la red
Es necesario realizar las siguientes configuraciones para que todos nuestros contenedores y maquinas virtuales puedan tener acceso a internet.
Añadir una nueva red virtual vmbr1
Abrimos el archivo /etc/network/interface
nano /etc/network/interfaceCopiamos y pegamos la siguiente configuración cambiando los datos por los nuestros
auto lo iface lo inet loopback iface enp1s0 inet manual auto vmbr0 iface vmbr0 inet static address 98.123.2.38 gateway 134.32.1.1 bridge_ports enp1s0 bridge_stp off bridge_fd 0 auto vmbr1 iface vmbr1 inet static address 10.21.21.254 netmask 255.255.255.0 bridge_ports none bridge_stp off bridge_fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '10.21.21.0/24' -o vmbr0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '10.21.21.0/24' -o vmbr0 -j MASQUERADE``
Explicación:
- vmbr1: Es el nombre de nuestra nueva red virtual.
- echo 1 > /proc/sys/net/ipv4/ip_forward Activamos el bit de forwarding para que las conexiones de nuestros contenedores LXC pasen por el anfitrión (VPS).
- iptables -t nat -A POSTROUTING -s ‘10.21.21.0/24’ -o vmbr0 -j MASQUERADE regla de iptables para redirigir el tráfico de nuestra nueva red vmbr1 a través de la red principal en mi caso vmbr0.
- post-up / post-down para levantar o bajar la regla de iptables cada vez que se reinicie el servidor o la interfaz de red.
Eliminar el mensaje de subscription
Para eliminar el mensaje de subscription del inicio,
Abrimos el archivo /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
nano /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.jsSustituimos if (data.status !== ‘Active’) por if (false).
Finalmente reiniciamos el servicio de proxmox
systemctl restart pveproxy.service
Añadir el repositorio de imagenes Turnkey
Turnkey es una biblioteca basada en Debian, que proporciona imágenes optimizadas de aplicaciones ya pre-instaladas y configuradas.
Gracias a TurnKey podemos disfrutar de diversas aplicaciones sin pasar por el complejo proceso de instalación y configuración.
Vamos al directorio /usr/share/perl5/PVE
cd /usr/share/perl5/PVERenombramos el archivo original
mv APLInfo.pm APLInfo.pm.bakDescargamos el nuevo APLinfo a través de este comando
wget https://raw.github.com/turnkeylinux/pve-patches/master/PVE/APLInfo.pm –no-check-certificateActualizamos proxmox
pveam update
Consejos de seguridad
Una vez que ya tenemos nuestro servidor listo con las configuraciones vistas anteriormente, se recomienda tener en cuenta algunas de estas medidas para prevenir posibles ataques.
- Iptables para limitar el acceso al panel web.
- Cambiar la url y puerto por defecto.
- Instalar certificado SSL.
- Añadir una capa de login con .htpasswd.
- Securizar el acceso ssh al servidor.
- Instalar fail2band para bloquear posibles ataques.
Iptables para limitar el acceso al panel web
Hay muchas formas de aplicar reglas de iptables para bloquear el acceso o mejor dicho limitar el acceso a determinadas redes, interfaces o ip concretas.
En mi caso voy a bloquear todo el tráfico entrante a traves de la interfaz física del servidor con destino el puerto 8006.
En el archivo /etc/network/interfaces añadimos las siguientes lineas justo debajo de la configuración de nuestra interfaz principal
# Deniega todo el tráfico entrante INPUT con destino el puerto 8006 desde nuestra ip pública post-up iptables -I INPUT -p tcp --dport 8006 -j DROP # Acepta únicamente el tráfico desde la red local a través de la interfaz lo (loopback) al puerto 8006 post-up iptables -I INPUT -p tcp -i lo --dport 8006 -j ACCEPT``
Para aplicar los cambios guardamos, cerramos el archivo y reiniciamos los servicios de red
service networking restart
Cambiar la url y puerto por defecto
Para cambiar la url por defecto de acceso a nuestra interfaz web en Proxmox, debemos instalar Nginx como proxy inverso
Instalar servidor web nginx
apt -y install nginxAbrimos el archivo /etc/nginx/sites-enabled/default
nano /etc/nginx/sites-enabled/defaultBorramos todo el contenido y pegamos las siguientes lineas
server { listen 80; server_name homelab.nexosocial.org; location / { proxy_pass https://87.211.12.3:8006; } }``
Reiniciamos nginx
service nginx restart
Instalar certificado SSL
Para ello os recomiendo seguir los pasos expuestos en el apartado Certificados SSL con Certbot de este blog
Añadir una capa de login con .htpasswd
Para ello os recomiendo seguir los pasos expuestos en el apartado Directorio privado con .htpasswd de este blog
Securizar el acceso ssh al servidor
Para ello os recomiendo seguir los pasos expuestos en el apartado Gestión básica de ssh de este blog
Instalar fail2band para bloquear posibles ataques
Para ello os recomiendo seguir los pasos expuestos en el apartado Seguridad con Fail2ban de este blog