QEMU/KVM: como proteger o acesso ao monitor?

QEMU/KVM: como proteger o acesso ao monitor?

Executando QEMU/KVM com monitor:kvm ...some_parameters... -monitor unix:/my_path/my_fifo,server,nowait

Podemos então conectar usando socat - UNIX-CONNECT:/my_path/my_fifocomandos de digitação.
Fácil e prático.

Gostaria de expor a interface do monitor à rede local (provavelmente usando socat, de acordo com o método de segurança), que é razoavelmente seguro. Como posso proteger o acesso ao monitor?

Não vejo nenhuma opção de senha, certificado, etc. disponível. Portanto, suspeito que devo confiar em um método externo ao QEMU/KVM.

Responder1

Você pode usar o SSH para acessar esse soquete com segurança, aproveitando as opções de segurança fornecidas pelo SSH. Você não precisa socatde nada, porque o SSH permite o encaminhamento de soquete para soquete ou tcp para soquete através -Lda opção:

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

Por exemplo, se o seu qemuprocesso for executado com -monitor unix:/my_path/my_fifo,server,nowaita opção, use ssh virtualization-host -L /tmp/monitor:/my_path/my_fifopara conectar e, em seguida, conecte-se ao soquete local /tmp/monitorou use ssh virtualization-host -L 12345:/my_path/my_fifoe telnet para localhost:12345(o cliente SSH escutará apenas no localhost neste caso).

Para obter melhor segurança, use chaves SSH para conectar-se aos monitores. No host de virtualização remota, crie um usuário que terá rwdireitos sobre o /my_path/my_fifoobjeto. Crie um par de chaves e coloque a chave pública no arquivo desse usuário ~/.ssh/authorized_keysde forma restrita para permitir apenas o encaminhamento:

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

Para conectar, use um comando que não aloque um shell e não execute um comando, útil apenas para encaminhamentos:

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

e por fim, use telnet localhost 12345para acessar o soquete do monitor encaminhado via SSH.

informação relacionada