玩转KVM:TLS安全登录

下面来讲讲KVM的安全知识,TLS?有什么用?

libvirt怎么远程?

说TLS安全连接之前,我们需要先聊一下怎么可以远程管理KVM。 目前vmware, xen, kvm, lxc等都支持libvirt, libvirt的强大,然后根本不需要考虑怎么远程的问题。我们只需要考虑怎么更好地远程管理它。
玩转KVM:TLS安全登录

TLS配置实践

简单的逻辑图:
玩转KVM:TLS安全登录

管理证书服务器

创建临时目录,以将文件和更改保存到其中
mkdir /opt/cert_files
cd cert_files/

使用 openssl 命令创建 2048 位 RSA 密钥
openssl genrsa -out cakey.pem 2048

使用该密钥针对本地 CA 创建自签名证书
这里参数: 按需修改:/C=CN/L=GDFS/O=EFLY/CN=KVM CA

字段如下:
玩转KVM:TLS安全登录
玩转KVM:TLS安全登录

检查 CA 证书
openssl x509 -noout -text -in cacert.pem

##client, server
创建密钥
openssl genrsa -out serverkey.pem 2048
openssl genrsa -out clientkey.pem 2048

为服务器创建证书签名请求
openssl req -new -key serverkey.pem -out serverkey.csr \
-subj "/C=CN/O=EFLY/CN=${KVM}/dns_name=${KVM}/ip_addres={IP}"

可以使用配置文件形式实现 server.info:
玩转KVM:TLS安全登录
玩转KVM:TLS安全登录
openssl req -new -key serverkey.pem -out serverkey.csr \
-config server.info
为客户机创建证书签名请求
openssl req -new -key clientkey.pem -out clientkey.csr \
-subj "/C=CN/O=EFLY/OU=virtualization/CN=root"

扫描二维码关注公众号,回复: 6042024 查看本文章

创建客户机和服务器证书
openssl x509 -req -days 3650 -in clientkey.csr -CA cacert.pem -CAkey cakey.pem \
-set_serial 1 -out clientcert.pem
openssl x509 -req -days 3650 -in serverkey.csr -CA cacert.pem -CAkey cakey.pem \
-set_serial 94345 -out servercert.pem

检查密钥
openssl rsa -noout -text -in clientkey.pem
openssl rsa -noout -text -in serverkey.pem

检查证书
openssl x509 -noout -text -in clientcert.pem
openssl x509 -noout -text -in servercert.pem

路径说明:
玩转KVM:TLS安全登录

服务端(所有KVM角色)

mkdir -p /etc/pki/CA
将认证中心 (CA) 证书 cacert.pem 文件复制到 /etc/pki/CA/cacert.pem
scp [proxy_ip]:/opt/cert_files/cacert.pem /etc/pki/CA/cacert.pem

创建 /etc/pki/libvirt 目录。将 servercert.pem 服务器证书文件复制到 /etc/pki/libvirt/servercert.pem。创建 /etc/pki/libvirt/private 目录。将 serverkey.pem 服务器密钥文件复制到 /etc/pki/libvirt/private/serverkey.pem 目录。确保只有 root 用户才能够访问专用密钥。

mkdir /etc/pki/libvirt
scp [proxy_ip]:/opt/cert_files/servercert.pem /etc/pki/libvirt/.
mkdir /etc/pki/libvirt/private
scp [proxy_ip]:/opt/cert_files/serverkey.pem /etc/pki/libvirt/private/.
chmod -R o-rwx /etc/pki/libvirt/private

验证这些文件是否已正确放置
find /etc/pki/CA/*|xargs ls -l
ls -lR /etc/pki/libvirt

##配置libvirt
生成 /etc/default/libvirtd 文件和 /etc/libvirt/libvirtd.conf 文件的副本。
编辑 /etc/default/libvirtd 文件
## Start libvirtd to handle qemu/kvm:
start_libvirtd="yes"

## options passed to libvirtd, add "-l" to listen on tcp
修改前

  • libvirtd_opts=""
    修改后
  • libvirtd_opts="-l"

编辑 /etc/libvirt/libvirtd.conf 文件,并在 libvirtd.conf 文件中使用 tls_allowed_dn_list 伪指令配置一组允许的主题。以下示例显示原始文件中的更改。它将可接受的客户机证书限制为具有 O=IBM,OU=virtualization 值的证书,而系统可能会对国家或地区 (C) 和公共名 (CN) 分配任何值。主题中字段的顺序必须与您创建证书时使用的顺序相同。
玩转KVM:TLS安全登录

重新启动 libvirtd 守护程序服务,以使更改生效
# /etc/init.d/libvirtd restart
Stopping libvirtd daemon: [ OK ]
Starting libvirtd daemon: [ OK ]

客户端(KVM-API-118)

将认证中心 (CA) 证书 cacert.pem 从 PowerKVM 主机复制到管理站 /etc/pki/CA/ 目录。请勿变更文件名。
scp [proxy_ip]:/opt/cert_files/cacert.pem /etc/pki/CA/

将客户机证书 clientcert.pem 复制到 /etc/pki/libvirt/ 目录,并将客户机密钥 clientkey.pem 从 PowerKVM 主机复制到 /etc/pki/libvirt/private/ 目录。使用缺省文件名称,并确保只有 root 用户才能够访问专用密钥。

mkdir -p /etc/pki/libvirt/
scp [proxy_ip]:/opt/cert_files/clientcert.pem /etc/pki/libvirt/.
mkdir /etc/pki/libvirt/private
scp [proxy_ip]:/opt/cert_files/clientkey.pem /etc/pki/libvirt/private/.
chmod -R o-rwx /etc/pki/libvirt/private

验证这些文件是否已正确放置
ls -lR /etc/pki/libvirt/

角色机需要安装:
yum -y install cyrus-sasl-md5

设置代理(VNC角色)

可以使用nginx 或者 haproxy等工具
##如haproxy
apt-get install haproxy

##每一台VM都需要做一个端口代理, 端口号:165+KVM服务器的ip位数
vim /etc/haproxy/haproxy.cfg

listen kvm-proxy-ip位数
bind 0.0.0.0:165ip位数
mode tcp
use_backend kvm-tls-ip位数
backend kvm-tls-ip位数
mode tcp
server kvm-tls-35 10.10.10.35:16514 -一定是16514


listen kvm-proxy-35
bind 0.0.0.0:16535
mode tcp
use_backend kvm-tls-35
backend kvm-tls-35
mode tcp
server kvm-tls-35 10.10.10.35:16514 -一定是16514

##启动haproxy
service haproxy restart

##验证连通
root@KvmApiServer:~# virsh -c qemu+tls://KVM_PROXY:16515/system hostname
ubuntu-kvm35

返回正常, 则完成远程

Sasl认证(所有KVM角色)

(1)libvirt sasl配置在/etc/sasl2/libvirt.conf,Tls是tcp的加密传输协议,所以mech_list:需要设置成digest-md5。

vim /etc/sasl2/libvirt.conf

  • 修改前, + 修改后
    玩转KVM:TLS安全登录

(2)创建用户
root@ubuntu-kvm35:/etc/libvirt# saslpasswd2 -a libvirt efly
Ps: 密码 Rjkj@efly#123
玩转KVM:TLS安全登录

(3)指定密码库
root@ubuntu-kvm35:/etc/sasl2# sasldblistusers2 -f /etc/libvirt/passwd.db
玩转KVM:TLS安全登录

(4)修改libvirtd.conf
修改 /etc/libvirt/libvirtd.conf
玩转KVM:TLS安全登录

(5)重启libvirtd
systemctl restart libvirtd

(6)测试连接
root@KvmApiServer:~# virsh -c qemu+tls://PROXY:16515/system hostname
玩转KVM:TLS安全登录
玩转KVM:TLS安全登录

猜你喜欢

转载自blog.51cto.com/13475644/2385909
TLS