Skip to content

Commit 99c9ad1

Browse files
committed
add new post: virtual machines with kvm
1 parent 4ed499d commit 99c9ad1

13 files changed

+116
-98
lines changed
Lines changed: 116 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,151 +1,169 @@
11
---
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.
55
author: Vor
66
date: 2024-11-16
77
categories: [Guides, Virtualization, KVM, Qemu, Libvirt]
8-
tags: [Virtualiization, Linux]
8+
tags: [Virtualization, Linux, KVM, QEMU]
99
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
1111
alt: KVM Logo
1212
---
1313

14-
## Introducción
14+
# Máquinas Virtuales Casi Nativas con KVM en Debian/Ubuntu
1515

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.
1618

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+
---
2420

25-
## ¿Qué es KVM?
21+
## **¿Qué es KVM y cómo funciona?**
2622

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.
3026

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.
3931

40-
### Características clave de KVM:
32+
---
4133

42-
## Instalación y configuracion del entorno
34+
## **Instalación y configuración**
4335

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.
4639

47-
### En sistemas basados en Debian/Ubuntu:
4840
```bash
4941
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
5143
```
5244

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.
5850

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.
6054

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:
6456

65-
En el archivo `/etc/ssh/sshd_config`, busca la siguiente línea:
6657
```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
7266
```
73-
Luego, reinicia el servicio SSH para aplicar los cambios:
67+
68+
#### Crear una interfaz bridge:
69+
7470
```bash
75-
sudo systemctl restart ssh
76-
```
71+
# Crear la interfaz bridge
72+
nmcli connection add type bridge ifname br0
7773

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
7976

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
8180

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
8384

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
8887

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
9390

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
10294
```
10395

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
10797

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>
111106
```
112-
Por otro puerto, por ejemplo, 2222:
107+
108+
Luego ejecuta:
109+
113110
```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
115115
```
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`**
117118
```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
119121
```
120122

121-
### 4. **Configurar el límite de intentos de autenticación**
123+
---
124+
125+
## **Usando virt-manager: Una interfaz gráfica para KVM**
122126

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:
125131

126-
En el archivo `/etc/ssh/sshd_config`, añade las siguientes líneas:
127132
```bash
128-
MaxAuthTries 3
129-
MaxSessions 2
133+
sudo apt install virt-manager
130134
```
131135

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:
136137

137-
En `/etc/ssh/sshd_config`:
138138
```bash
139-
PasswordAuthentication no
140-
PermitEmptyPasswords no
139+
virt-manager
141140
```
142141

143-
## Monitoreo y Auditoría de SSH
142+
---
143+
144+
## **Configuración y creación de una máquina virtual**
144145

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:
147147

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+
![Desktop View](assets/img/posts/guides/linux/KVM_Posts/open-virt-manager.png){: .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+
![Desktop View](assets/img/posts/guides/linux/KVM_Posts/file-virt-manager.png){: .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+
![Desktop View](assets/img/posts/guides/linux/KVM_Posts/create-vm-virt-manager.png){: .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+
---
29.8 KB
Loading
21.9 KB
Loading
26.3 KB
Loading
21 KB
Loading
38.2 KB
Loading
38.8 KB
Loading
28.7 KB
Loading
35.1 KB
Loading
49.1 KB
Loading

0 commit comments

Comments
 (0)