QEMU/KVM: ¿cómo proteger el acceso al monitor?

QEMU/KVM: ¿cómo proteger el acceso al monitor?

Ejecutando QEMU/KVM con monitor:kvm ...some_parameters... -monitor unix:/my_path/my_fifo,server,nowait

Luego podemos conectarnos usando socat - UNIX-CONNECT:/my_path/my_fifoy luego escribir comandos.
Fácil y práctico.

Me gustaría exponer la interfaz del monitor a la red local (probablemente usando socat, según el método de seguridad), que es bastante segura. ¿Cómo puedo proteger el acceso al monitor?

No veo ninguna opción de contraseña, certificado, etc. disponible. Así que sospecho que tengo que confiar en un método externo a QEMU/KVM.

Respuesta1

Puede utilizar SSH para acceder a dicho socket de forma segura, aprovechando las opciones de seguridad proporcionadas por SSH. No necesita socatnada, porque SSH permite reenviar socket a socket o tcp a socket mediante -Lla opción:

     -L [bind_address:]port:host:hostport
     -L [bind_address:]port:remote_socket
     -L local_socket:host:hostport
     -L local_socket:remote_socket

Por ejemplo, si su qemuproceso se ejecuta con -monitor unix:/my_path/my_fifo,server,nowaitla opción, use ssh virtualization-host -L /tmp/monitor:/my_path/my_fifoto connect y luego conéctese al socket local /tmp/monitor, o use ssh virtualization-host -L 12345:/my_path/my_fifoy telnet localhost:12345(el cliente SSH escuchará solo en localhost en este caso).

Para lograr una mayor seguridad, utilice claves SSH para conectarse a los monitores. En el host de virtualización remoto, cree un usuario que tendrá rwderechos sobre el /my_path/my_fifoobjeto. Cree un par de claves y coloque la clave pública en ~/.ssh/authorized_keysel archivo de ese usuario de forma restringida para permitir solo el reenvío:

restrict,port-forwarding,command="/bin/false" ssh-... ..... (the public key string)

Para conectarse, use un comando que no asigna un shell y no ejecuta un comando, útil solo para reenvíos:

ssh monitoruser@virtualization-host -i mointor_private_key -L 12345:/my_path/my_fifo -N

y finalmente, use telnet localhost 12345para acceder al socket del monitor reenviado vía SSH.

información relacionada