|
1 | 1 | --- |
2 | | -title: Maquinas virtuales casi nativas con kvm usando debian/ubuntu |
3 | | -description: Aprende cómo configurar y asegurar tu servidor OpenSSH siguiendo prácticas |
4 | | - recomendadas para reducir riesgos y proteger tus conexiones remotas. |
| 2 | +title: Máquinas Virtuales Casi Nativas con KVM en Debian/Ubuntu |
| 3 | +description: Descubre cómo instalar, configurar y utilizar KVM en Debian/Ubuntu para crear máquinas |
| 4 | + virtuales de alto rendimiento con QEMU y libvirt. |
5 | 5 | author: Vor |
6 | 6 | date: 2024-11-16 |
7 | 7 | categories: [Guides, Virtualization, KVM, Qemu, Libvirt] |
8 | | -tags: [Virtualiization, Linux] |
| 8 | +tags: [Virtualization, Linux, KVM, QEMU] |
9 | 9 | image: |
10 | | - path: /assets/img/posts/guides/linux/Linux-KVM-logo-transparent.png |
| 10 | + path: /assets/img/posts/guides/linux/Linux-KVM-logo-transparent.webp |
11 | 11 | alt: KVM Logo |
12 | 12 | --- |
13 | 13 |
|
14 | | -## Introducción |
| 14 | +# Máquinas Virtuales Casi Nativas con KVM en Debian/Ubuntu |
15 | 15 |
|
| 16 | +**¿Te gustaría aprovechar al máximo el poder de la virtualización en Linux?** En esta guía, aprenderás |
| 17 | +a configurar KVM para ejecutar máquinas virtuales de alto rendimiento en tu sistema Debian o Ubuntu. |
16 | 18 |
|
17 | | -En este post, exploraremos cómo configurar nuestro sistema para poder crear y administrar |
18 | | -maquinas virtuales de kvm, utilizando qemu y libvirt. |
19 | | - |
20 | | -**Temas que abordaremos:** |
21 | | -- Instalacion y configuracion |
22 | | -- Guia rapida a virt-manager |
23 | | -- Creacion de una maquina virtual |
| 19 | +--- |
24 | 20 |
|
25 | | -## ¿Qué es KVM? |
| 21 | +## **¿Qué es KVM y cómo funciona?** |
26 | 22 |
|
27 | | -Kernel Virtual Machine (KVM) es una tecnologia de virtualizacion que permite transformar |
28 | | -a Linux en un hipervisor que nos permitira ejecutar varios entornos virtuales aislados |
29 | | -llamados maquinas virtuales (VM) |
| 23 | +KVM (Kernel-based Virtual Machine) permite que Linux actúe como un hipervisor de tipo 1 (bare-metal). |
| 24 | +Esto significa que, a diferencia de otros sistemas de virtualización, KVM trabaja directamente sobre |
| 25 | +el hardware de tu máquina, ofreciendo un rendimiento casi nativo. |
30 | 26 |
|
31 | | -## ¿Cómo funciona KVM? |
32 | | -KVM convierte a linux en un hipervisor de tipo 1 (bare metal). Todos los hipervisores |
33 | | -necesitan elementos del sistema operativo (por ejemplo, el administrador de memoria, |
34 | | -el programador de procesos, el stack de red, etc) para poder ejecutar las maquinas virtuales. |
35 | | -Las KVM tienen todos estos elementos porque forman parte del kernel de Linux. Cada maquina |
36 | | -virtual se implementa como un proceso habitual de Linux, el cual se programa con la herramienta |
37 | | -estandar de Linux para este fin, e incluye sistemas virtuales de hardware exclusivos, como |
38 | | -la tarjeta de red, la CPU, memoria RAM, discos, etc |
| 27 | +**Características clave:** |
| 28 | +- Aprovecha los mismos recursos de administración que Linux: memoria, CPU, red, etc. |
| 29 | +- Cada máquina virtual funciona como un proceso regular de Linux, completamente aislado. |
| 30 | +- Es compatible con sistemas virtuales de hardware, incluidas CPUs, tarjetas de red, discos y más. |
39 | 31 |
|
40 | | -### Características clave de KVM: |
| 32 | +--- |
41 | 33 |
|
42 | | -## Instalación y configuracion del entorno |
| 34 | +## **Instalación y configuración** |
43 | 35 |
|
44 | | -Para configurar el entorno de virtualizacion tenemos que instalar algunos paquetes en el |
45 | | -sistema: |
| 36 | +### **Paso 1: Instalar los paquetes necesarios** |
| 37 | +Esta guía está diseñada para sistemas basados en Debian/Ubuntu. Sin embargo, es compatible con cualquier |
| 38 | +distribución de Linux; solo será necesario buscar y adaptar los paquetes requeridos según tu distribución. |
46 | 39 |
|
47 | | -### En sistemas basados en Debian/Ubuntu: |
48 | 40 | ```bash |
49 | 41 | sudo apt update && sudo apt upgrade -y |
50 | | -sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst libvirt-daemon |
| 42 | +sudo apt install qemu-kvm libvirt-clients bridge-utils virtinst libvirt-daemon-system |
51 | 43 | ``` |
52 | 44 |
|
53 | | -Una vez instalado, asegúrate de que el servicio esté en ejecución: |
54 | | -```bash |
55 | | -sudo systemctl start ssh |
56 | | -sudo systemctl enable ssh |
57 | | -``` |
| 45 | +Esto incluye: |
| 46 | +- **QEMU-KVM**: Herramienta principal para crear y gestionar máquinas virtuales. |
| 47 | +- **libvirt**: Sistema eficiente para administrar máquinas virtuales. |
| 48 | +- **virtinst**: Proporciona utilidades como `virt-install` para crear máquinas virtuales fácilmente. |
| 49 | +- **bridge-utils**: Para configurar redes en tus máquinas virtuales. |
58 | 50 |
|
59 | | -## Configuración de OpenSSH |
| 51 | +### **Paso 2: Configurar las redes virtuales** |
| 52 | +Para que las máquinas virtuales tengan acceso a Internet, puedes usar una red virtual con NAT o |
| 53 | +configurar una interfaz bridge. |
60 | 54 |
|
61 | | -### 1. **Deshabilitar el acceso root** |
62 | | -Es una buena práctica deshabilitar el inicio de sesión de root para prevenir accesos no autorizados |
63 | | -a un usuario privilegiado. |
| 55 | +#### Red virtual de tipo NAT: |
64 | 56 |
|
65 | | -En el archivo `/etc/ssh/sshd_config`, busca la siguiente línea: |
66 | 57 | ```bash |
67 | | -PermitRootLogin yes |
68 | | -``` |
69 | | -Cámbiala a: |
70 | | -```bash |
71 | | -PermitRootLogin no |
| 58 | +# Verifica si hay redes disponibles |
| 59 | +sudo virsh net-list |
| 60 | + |
| 61 | +# Inicia la red predeterminada si no está activa |
| 62 | +sudo virsh net-start default |
| 63 | + |
| 64 | +# Configura la red para que inicie automáticamente con el sistema |
| 65 | +sudo virsh net-autostart default |
72 | 66 | ``` |
73 | | -Luego, reinicia el servicio SSH para aplicar los cambios: |
| 67 | + |
| 68 | +#### Crear una interfaz bridge: |
| 69 | + |
74 | 70 | ```bash |
75 | | -sudo systemctl restart ssh |
76 | | -``` |
| 71 | +# Crear la interfaz bridge |
| 72 | +nmcli connection add type bridge ifname br0 |
77 | 73 |
|
78 | | -### 2. **Usar claves SSH en lugar de contraseñas** |
| 74 | +# Asignar una interfaz física al bridge |
| 75 | +nmcli connection add type bridge-slave ifname eth0 master br0 |
79 | 76 |
|
80 | | -La autenticación basada en claves SSH es mucho más segura que las contraseñas. Para configurarlo: |
| 77 | +# Configurar una IP estática |
| 78 | +nmcli connection modify br0 ipv4.addresses 192.168.1.100/24 ipv4.method manual |
| 79 | +nmcli connection modify br0 ipv6.method ignore # Deshabilitar IPv6 si no lo usas |
81 | 80 |
|
82 | | -1. Genera un par de claves en tu máquina local: |
| 81 | +# Si prefieres usar DHCP (opcional) |
| 82 | +nmcli connection modify br0 ipv4.method auto |
| 83 | +nmcli connection modify br0 ipv6.method ignore |
83 | 84 |
|
84 | | - **RSA (Más común):** |
85 | | - ```bash |
86 | | - ssh-keygen -t rsa -b 4096 -C "<comentario>" |
87 | | - ``` |
| 85 | +# Deshabilitar STP (o habilitarlo si es necesario) |
| 86 | +nmcli connection modify br0 bridge.stp no |
88 | 87 |
|
89 | | - **Ed25519 (Recomendada, más moderna):** |
90 | | - ```bash |
91 | | - ssh-keygen -t ed25519 -C "<comentario>" |
92 | | - ``` |
| 88 | +# Reducir el tiempo de forward delay |
| 89 | +nmcli connection modify br0 bridge.forward-delay 0 |
93 | 90 |
|
94 | | -2. Copia la clave pública al servidor: |
95 | | -```bash |
96 | | -ssh-copy-id usuario@servidor |
97 | | -``` |
98 | | -3. Asegúrate de que el servidor permite la autenticación por claves en el archivo `/etc/ssh/sshd_config`: |
99 | | -```bash |
100 | | -PasswordAuthentication no |
101 | | -PubkeyAuthentication yes |
| 91 | +# Activar el bridge |
| 92 | +nmcli connection down "Wired connection 1" |
| 93 | +nmcli connection up br0 |
102 | 94 | ``` |
103 | 95 |
|
104 | | -### 3. **Cambiar el puerto por defecto** |
105 | | -El puerto predeterminado para SSH es el 22, que es uno de los mas atacados por bots. |
106 | | -Cambiar el puerto puede añadir una capa de protección. |
| 96 | +# Extra: añadir br0 a virsh |
107 | 97 |
|
108 | | -En `/etc/ssh/sshd_config`, busca y cambia la línea: |
109 | | -```bash |
110 | | -Port 22 |
| 98 | +Crea el siguiente archivo en /tmp/br0.xml y añade el siguiente contenido: |
| 99 | + |
| 100 | +```xml |
| 101 | +<network> |
| 102 | + <name>br0</name> |
| 103 | + <forward mode="bridge"/> |
| 104 | + <bridge name="br0" /> |
| 105 | +</network> |
111 | 106 | ``` |
112 | | -Por otro puerto, por ejemplo, 2222: |
| 107 | + |
| 108 | +Luego ejecuta: |
| 109 | + |
113 | 110 | ```bash |
114 | | -Port 2222 |
| 111 | +virsh net-define /tmp/br0.xml |
| 112 | +virsh net-start br0 |
| 113 | +virsh net-autostart br0 |
| 114 | +virsh net-list --all |
115 | 115 | ``` |
116 | | -No olvides abrir el nuevo puerto en tu firewall y reiniciar el servicio SSH: |
| 116 | + |
| 117 | +### **Paso 3: Agregar tu usuario al grupo `libvirt`** |
117 | 118 | ```bash |
118 | | -sudo systemctl restart ssh |
| 119 | +sudo usermod -aG libvirt myuser |
| 120 | +sudo systemctl restart libvirtd # Reinicia el servicio de libvirt para aplicar los cambios |
119 | 121 | ``` |
120 | 122 |
|
121 | | -### 4. **Configurar el límite de intentos de autenticación** |
| 123 | +--- |
| 124 | + |
| 125 | +## **Usando virt-manager: Una interfaz gráfica para KVM** |
122 | 126 |
|
123 | | -Para proteger el servidor de ataques de fuerza bruta, limita el número de intentos fallidos |
124 | | -de autenticación. |
| 127 | +Si prefieres una solución gráfica, **virt-manager** es una herramienta que proporciona una interfaz sencilla |
| 128 | +para crear, administrar y monitorear tus máquinas virtuales. |
| 129 | + |
| 130 | +Instálalo con: |
125 | 131 |
|
126 | | -En el archivo `/etc/ssh/sshd_config`, añade las siguientes líneas: |
127 | 132 | ```bash |
128 | | -MaxAuthTries 3 |
129 | | -MaxSessions 2 |
| 133 | +sudo apt install virt-manager |
130 | 134 | ``` |
131 | 135 |
|
132 | | -### 5. **Deshabilitar la autenticación por contraseñas** |
133 | | - |
134 | | -Si utilizas claves SSH, puedes deshabilitar el acceso mediante contraseñas para aumentar |
135 | | -aun más la seguridad. |
| 136 | +Una vez instalado, inícialo ejecutando: |
136 | 137 |
|
137 | | -En `/etc/ssh/sshd_config`: |
138 | 138 | ```bash |
139 | | -PasswordAuthentication no |
140 | | -PermitEmptyPasswords no |
| 139 | +virt-manager |
141 | 140 | ``` |
142 | 141 |
|
143 | | -## Monitoreo y Auditoría de SSH |
| 142 | +--- |
| 143 | + |
| 144 | +## **Configuración y creación de una máquina virtual** |
144 | 145 |
|
145 | | -Una buena práctica es monitorear los intentos de acceso y asegurarse de que no haya actividad |
146 | | -sospechosa en el servidor. |
| 146 | +Con el entorno configurado, crear tu primera máquina virtual es muy sencillo: |
147 | 147 |
|
148 | | -- Revisa los logs de SSH regularmente usando `journalctl -fu ssh` en GNU/Linux con systemd. |
149 | | - Como alternativa, puedes usar `tail -f /var/log/auth.log` o `tail -f /var/log/secure`. |
150 | | -- Configura un sistema de detección de intrusos como **Fail2Ban** para bloquear automáticamente |
151 | | - las IPs que intentan acceder con ataques de fuerza bruta. |
| 148 | +1. **Abrir virt-manager:** |
| 149 | + Ejecuta `virt-manager` desde tu terminal o menú de aplicaciones. |
| 150 | + |
| 151 | + {: .normal } |
| 152 | + |
| 153 | +2. **Añadir una nueva conexión:** |
| 154 | + Haz clic en **"File"** y selecciona **"Add Connection"**. Luego, conecta con la configuración predeterminada. |
| 155 | + |
| 156 | + {: .normal } |
| 157 | + |
| 158 | +3. **Crear una nueva máquina virtual:** |
| 159 | + Haz clic en el botón **"Nuevo"** y sigue el asistente: |
| 160 | + - Elige el medio de instalación (archivo ISO o red). |
| 161 | + - Configura los recursos asignados (CPU, RAM, disco). |
| 162 | + - Personaliza la red y otros ajustes según tus necesidades. |
| 163 | + |
| 164 | + {: .normal } |
| 165 | + |
| 166 | +4. **Inicia la máquina virtual:** |
| 167 | + Una vez creada e instalada, selecciona tu VM y haz clic en **"Iniciar"**. |
| 168 | + |
| 169 | +--- |
0 commit comments