在雲和容器今天,基礎的虛擬架構更先得重要了。而其中基於Linux內核的開放虛擬機KVM更是最重要虛擬化基礎架構。本文蟲蟲將帶領大家一起實例學習利用KVN構建自己的虛擬平臺。其中包括:基於Centos 7.6安裝KVM、組網、配置VNC、安裝webvirtcloud進行KVM虛擬平臺管理,安裝kalil inux虛擬機實例。
KVM安裝
開啟虛擬化加速
KVM依賴CPU虛擬加速,需要確保機器已經開啟,可以通過linux命令查看該信息:
grep -E 'svm |vmx' /proc/cpuinfo
如果顯示如下:
上面表示已經啟動了Intel的虛擬化加速。其中vmx表示Intel CPU的虛擬技術Intel Virtualization Technology, Intel VT-x。svm是AMD CPU的虛擬技術AMD Secure Virtual Machine, AMD SVM
如果你的終端執行後沒有輸出,你需要重啟電腦進入BIOS開啟用虛擬化。開機按鍵進入BIOS:
自攢機看主板:華碩按F8、Intel按F12,其他主板按ESC、F11或F12;
筆記本:聯想ThinkPad系列按F1,其他品牌按F2;
品牌臺式機按品牌分, Dell按ESC,其他按F12;
進入BIOS後,進入Configuration中設置開啟:
AMD CPU:
安裝KVM和相關的軟件組件
我們所有安裝都在Centos字符終端下,不會安裝任何圖形工具來管理虛擬機。
安裝KVM需要安裝一下相關軟件包:
yum install qemu-kvm qemu-img libvirt virt-install libvirt-client libvirt-python
yum安裝時候會自動安裝必須的許多依賴項。安裝完成後,可以通過以下命令檢查:
lsmod | grep kvm
如果安裝無誤,輸入應該顯示類似如下:
配置網絡
默認情況下,KVM會在虛擬機管理程序上設置名為"virbr0"的網絡接口。它為為虛擬機創建一個網絡,該網絡使用NAT(網絡地址轉換)訪問它所駐留的網絡之外的資源,在本例中使用的是192.168.122.0/24。
為了虛擬機能有單獨的網絡,我們需要配置橋接網絡:
cd /etc/sysconfig/network-scripts/
cp ifcfg-eno1 ifcfg-bridge0
注意加重部分根據實際情況換成實際的網卡名
修改ifcfg-eno1配置為:
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME= eno1
DEVICE= eno1
ONBOOT=yes
BRIDGE= bridge0
修改ifcfg-bridge0配置為:
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
NAME= bridge0
DEVICE= bridge0
ONBOOT=yes
IPADDR=10.0.15.240
GATEWAY=10.0.15.254
DNS=114.114.114.114
注意網絡按照實際情況修改,網卡ifcfg-eno1中的ip地址信息配置刪除,新增加"BRIDGE= bridge0",而在ifcfg-bridge0中配置ip地址等信息。
然後重啟網絡:
systemctl restart network
配置VNC
修改監聽地址
在KVM創建虛擬機時候virt-install添加使用'-vnc'選項時,就會在localhost(127.0.0.1)地址啟動一個監聽。為了遠程訪問,我們需要修改vnc的默認配置。我們修改/etc/libvirt/qemu.conf,查找:
# vnc_listen ="0.0.0.0"
去掉改語句前面的#註釋符號,使得該配置生效,這樣就可以遠程反問vnc了。
防火牆開放端口
相應我們需要在防火牆開放規則,開啟vnc的端口。VNC的默認端口範圍從TCP 5900開始,往下順延,一臺虛擬機佔用一個端口。我們在防火牆上開啟TCP 5900 -> 6100段端口就足矣。
firewall-cmd --zone = public --permanent --add-port = 5900-6100/tcp
如果使用iptables:
iptables -A INPUT -p tcp -m state --state NEW --dport 6000:6500 -j ACCEPT
添加後通過運行來驗證我們的規則條目
firewall-cmd --zone = public --permanent --list-ports
iptables使用
iptabes iptables -n -L
構建虛擬機
準備安裝鏡像
構建虛擬機之前需要先下載好安裝ISO鏡像,本例子中我們選擇國內鏡像站,下載kali最新安裝包鏡像kali-linux-light-2019.2-amd64.iso。
下載完成後,使用
sha1sum kali-linux-light-2019.2- amd64.iso 並比對鏡像站提供的哈希值做校對,確保安裝包無誤。
生成虛擬機
OK,萬事具備只欠東風,生成虛擬機也很容易只需要用virt-install命令即可:
virt-install --name kali --ram 1024 --file=/var/lib/libvirt/images/kali.img --file-size=10 --vnc --cdrom=kali-linux-2019.2-amd64.iso
在應該看到以下內容:
上面提示機器已經創建成功,需要我們完成具體安裝,這時候就需要VNC介入開啟安裝窗口了。
VNC安裝kali linux
可以通過命令行
virsh vncdisplay kali
可以獲得該臺虛擬機vnc監聽端口:
本例中為:
:1
啟動安裝界面
這樣我們就可以通過VNC客戶端(需要先下載)連接到虛擬機管理程序,比如本例中為10.0.15.240:5900 (或者10.0.15.240:1)
上面已經顯示了kali安裝界面,我們直接選擇圖形安裝,然後按照正常安裝步驟安裝即可。
問題解決
安裝步驟中在安裝引導一步中報錯:
需要在安裝包設置一步驟,選擇網絡鏡像時候選擇否
安裝後登陸中界面亂碼
通過dpkg-reconfigure locales"。選擇locals選項選中en_US.UTF-8和zh_CN.UTF-8,確定後,將en_US.UTF-8選為默認。
安裝中文字庫
apt install xfonts-intl-chinese
apt install ttf-wqy-microhei
KVM常見管理命令
KVM的虛擬機都是可以使用命令行管理的,此處我們簡單的總結下常見命令。
virsh list:查看啟動中的虛擬機
virsh list --all:列出所有虛擬機
irsh start name:啟動虛擬機
virsh shutdown name:關閉虛擬機
virsh destroy name:強制關閉虛擬機
virsh suspend name:掛起虛擬機(暫停,保存運行狀態)
virsh resume name:恢復掛起的虛擬機
virsh edit name:編輯虛擬機的xml配置文件
virsh undefine name:刪除創建的KVM虛擬機
virsh snapshot-create name 創建快照
virsh snapshot-revert name 恢復快照
webvirtcloud管理KVM平臺
雖然完全可以基於命令工具來管理KVM,但是不夠直接方便。為此我們最後介紹一個通過Web管理KVM虛擬平臺的系webvirtcloud。關於這個軟件目前介紹還比較少,他是WebVirtMgr軟件的升級版本,WebVirtMgr網上有很多文檔介紹,大家可以參考學習。
安裝
webvirtcloud直接安裝比較費勁,為了便捷直接使用容器化方式安裝。
拉取鏡像:
docker pull mplx/docker-webvirtcloud:latest
docker啟動:
docker run -d \\
-p 8080:80 \\
-v /srv/webvirtcloud/data:/srv/webvirtcloud/data \\
-v /srv/webvirtcloud/ssh:/var/www/.ssh \\
--name webvirtcloud \\
mplx/docker-webvirtcloud:latest
compose方式啟動,配置如下
啟動後遠程瀏覽器訪問,默認用戶密碼是admin admin
宿主機SSH證書登陸
為了管理KVM虛擬平臺需要在宿主機上創建ssh證書鏈接配置。首先創建一個KVM實例管理用戶webvirtmgr。
adduser webvirtmgr
配置證書登陸
mkdir /home/webvirtmgr/.ssh
cd /srv/webvirtcloud/ssh/
這個/srv/webvirtcloud/ssh目錄為我們管理系統容器中映射來的目錄
cp id_rsa.pub /home/webvirtmgr/.ssh/authorized_keys
chmod 0600 /home/webvirtmgr/.ssh/authorized_keys
chown -R webvirtmgr:webvirtmgr /home/webvirtmgr/.ssh
將該用戶添加到libvirtd管理組
usermod -a -G libvirtd webvirtmgr
為libvirt添加一條polkit策略
vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
內容如下:
[libvirt group Management Access]
Identity=unix-group:libvirt
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
重啟libvirtd服務
systemctl restarts libvirtd.service
注意上述步奏很重要,如果配置不對,則下一步添加實例時候會報錯:
添加實例
首選我們需要添加KVM示例,默認支持4種方式,由於我們的管理系統是在容器中,我們使用SSH鏈接方式:
添加實例名稱、IP地址,用戶後點擊ADD,就會添加了實例
實例管理
添加實例成功後就可以對實例進行配置,包括虛擬機(Instances)、存儲、網絡,網卡、NWFilters和密鑰等
添加主機
選擇instances標籤頁,點擊右上"+"就可添加主機,可以使用默認6中配置,也可以custom自定義配置或者通過模版和XML文件設置配置。
主機管理
創建一個主機後,可以點擊主機,進行主機管理界面如下圖:
可以進行開關機Power、訪問、resize擴容、鏡像、設置、統計和銷燬主機的操作。注意所有改變主機配置的操作,都必須在關機後才能進行。
實例監控
webvirtcloud也提供了從KVM實例到每一臺虛擬主機的監控信息。
日誌記錄
webvirtcloud同樣也提供了實例到主機層次的操作日誌記錄。
總結
KVM是一個非常強大的虛擬化程序,是現代虛擬化解決方案的骨幹之一。本文我們通實例詳細介紹了KVM的安裝配置,最後成功安裝了kali linux虛擬機。還介紹了一款基於Web管理強大KVM 虛擬平臺管理軟件,通過這些我們可以自建和管理個性化虛擬化基礎架構。
閱讀更多 蟲蟲安全 的文章