ubuntu使用qemu-kvm,libvirt搭建虛擬機,並搭建libvmi來虛擬機自省

qemu版本:2.4.0.1
libvmi版本:0.10.1
libvirt版本:2.4.0

1、安裝qemu

準備工作:

 sudo apt-get update -y
 sudo apt-get install git make patch tar -y
 sudo apt-get install qemu-kvm -y
 #提前安裝virt-viewer的原因是如果後裝virt-viewer會對libvirt產生覆蓋,使libvirt安裝失敗
 sudo apt-get install vnc4server virt-viewer -y

安裝qemu,這裏會覆蓋上面的qemu-kvm中的一些關鍵包。

wget http://download.qemu-project.org/qemu-2.4.0.1.tar.xz
tar xvfJ qemu-2.4.0.1.tar.xz
#下面這幾步的目的是最新的libvmi裏有對qemu2.4.0.1的補丁,雖然我們不使用新版的libvmi但是需要裏面的patch。
git clone https://github.com/libvmi/libvmi
cd libvmi
cp libvmi/tools/qemu-kvm-patch/kvm-qemu-2.4.0.1-libvmi.patch qemu-2.4.0.1/
sudo apt-get install zlib1g-dev libglib2.0-dev libtool autoconf flex bison -y
cd qemu-2.4.0.1
patch -p1 < ./kvm-qemu-2.4.0.1-libvmi.patch
./configure
make 
sudo make install
ldconfig

2、安裝libvirt

在安裝前先刪除系統自帶的libvirt,一般在/usr/lib/下,不確定的可以查找一下:

find / -name libvirt-admin*
find / -name libvirt-lxc*
find / -name libvirt-qemu*
find / -name libvirt.so*

找到刪除即可,然後安裝:

sudo apt-get install libyajl-dev libxml2-dev libdevmapper-dev libpciaccess-dev libnl-3-dev libnl-route-3-dev uuid python-urlgrabber python-libxml2-y
wget http://pkgs.fedoraproject.org/repo/pkgs/libvirt/libvirt-2.4.0.tar.xz/53ebd616857333fc3ce4dea3db986488/libvirt-2.4.0.tar.xz
tar xvfJ libvirt-2.4.0.tar.xz
cd libvirt-2.4.0
#./autogen.sh --system非常重要,可以讓新安裝的版本和系統發行版有相同路徑,這樣可以覆蓋發行版,不會產生混淆
./autogen.sh --system  --localstatedir=/var --sysconfdir=/etc --enable-compile-warnings=error
make -j64 && make install && ldconfig
#使libvirt和python綁定
sudo apt-get install python-dev -y
git clone https://github.com/libvirt/libvirt-python
cd libvirt-python
python setup.py build && sudo python setup.py install
#安裝虛擬機管理工具
git clone https://github.com/rlaager/python-virtinst
cd python-virtinst
python setup.py build && sudo python setup.py install

完成上面兩步安裝後,啓動libvirtd服務

libvirtd -d

檢查是否安裝成功:
在這裏插入圖片描述
如果出現和pid file有關的問題,嘗試用下面解決方法:
在這裏插入圖片描述
在這裏插入圖片描述

3、安裝libvmi

 sudo apt-get install python-pip libffi-dev python-docopt libfuse-dev libjson-c-dev check -y
 pip install pkgconfig
 pip install future
 wget https://github.com/libvmi/libvmi/archive/v0.10.1.tar.gz
 tar -zxvf v0.10.1.tar.gz
 cd libvmi-0.10.1
 ./autogen.sh
 ./configure --enable-xen=0
 make
 sudo make install
 sudo ldconfig
 #libvmi綁定python接口
 cd ./tools/pyvmi
 python setup.py build && python setup.py install 

4、 搭建網橋

sudo apt-get install bridge-utils

修改網絡配置文件

vi /etc/network/interfaces

如果固定ip,添加

auto eth0 
iface eth0 inet manual 
auto br0 
iface br0 inet static 
address 192.168.200.130 
network 192.168.200.0 
netmask 255.255.255.0 
broadcast 192.168.200.255 
gateway 192.168.200.1 
dns-nameservers 8.8.8.8 
bridge_ports eth0 
bridge_stp off 
bridge_fd 0 
bridge_maxwait 0

如果dhcp,添加

auto eth0 
iface eth0 inet dhcp 
auto br0 
iface br0 inet dhcp 
bridge_ports eth0 
bridge_stp off 
bridge_fd 0
bridge_maxwait 0

以上是隻有一個eth0網卡的情況下,如果有多個,以此類推即可。
然後reboot就可以了
搭建完成後測試下:
在這裏插入圖片描述

4、安裝虛擬機

mkdir /var/data/images/
mkdir /var/data/isoes
#將鏡像放到/var/data/isoes下,/var/data/images下存放虛擬機磁盤
qemu-img create -f qcow2 /var/data/images/ubuntu1204.qcow2 20G
#具體參數就不介紹了,注意虛擬機內存不要太大,2G即可,否則後面libvmi將內存溢出。
virt-install --virt-type=kvm --name=u1204 --ram=2048 --vcpus=1 --hvm --cdrom=/var/data/isoes/ubuntu-12.04-server-amd64.iso  --network=bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --disk path=/var/data/images/ubuntu1204.qcow2,size=20,bus=virtio,format=qcow2

安裝虛擬機直到成功
可以用virsh list --all查看安裝完成的虛擬機。

5、配置libvmi

虛擬機安裝成功後,需要配置libvmi.conf

touch /etc/libvmi.conf

如何配置libvmi.conf在LibVMI Installation Instructions有介紹。依次完成就好,沒有坑。
配置完成後,可以測試一下:
文件pslist.py:

#!/usr/bin/env python
import pyvmi
import sys
def get_os_params(vmi):
    ostype = vmi.get_ostype()
    if ostype.lower() == "windows":
        return get_windows_params(vmi)
    elif ostype.lower() == "linux":
        return get_linux_params(vmi)
    else:
        print("Sorry, {} ostype is not supported in this example yet.".format(
            ostype))
        exit(1)
def get_linux_params(vmi):
    tasks_offset = vmi.get_offset("linux_tasks")
    name_offset = vmi.get_offset("linux_name") - tasks_offset
    pid_offset = vmi.get_offset("linux_pid") - tasks_offset
    list_head = vmi.translate_ksym2v("init_task")
    return (tasks_offset, name_offset, pid_offset, list_head)
def get_windows_params(vmi):
    tasks_offset = vmi.get_offset("win_tasks")
    name_offset = vmi.get_offset("win_pname") - tasks_offset
    pid_offset = vmi.get_offset("win_pid") - tasks_offset
    list_head = vmi.read_addr_ksym("PsInitialSystemProcess")
    return (tasks_offset, name_offset, pid_offset, list_head)
def processes(vmi):
    tasks_offset, name_offset, pid_offset, list_head = get_os_params(vmi)
    next_process = vmi.read_addr_va(list_head + tasks_offset, 0)
    list_head = next_process
    while True:
        procname = vmi.read_str_va(next_process + name_offset, 0)
        pid = vmi.read_32_va(next_process + pid_offset, 0)
        next_process = vmi.read_addr_va(next_process, 0)
        if (pid < 1<<16):
            yield pid, procname
        if (list_head == next_process):
            break

def main(argv):
    vmi = pyvmi.init(argv[1], "complete")
    if vmi.get_access_mode() == 'file':
        print("Process listing for File {}".format(vmi.get_name()))
    else:
        print("Process listing for VM {}".format(vmi.get_name()))
    for pid, procname in processes(vmi):
        print "[%5d] %s" % (pid, procname)

if __name__ == "__main__":
    main(sys.argv)

執行 python pylist.py [vm_name],這裏vm_name是我們在第4步中安裝虛擬機設置的name,而且切記在第4步中虛擬機內存不要開太大,建議2G即可。如果正常輸出,則以上所有步驟都搭建成功!
之後可以使用libvmi的github提供的使用volatility來進行虛擬機自省。

參考:
libvirt官網:https://libvirt.org/
libvmi官網:http://libvmi.com/
libvmi最新github項目:https://github.com/libvmi/libvmi

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章