0×00 概述
对从业渗透测试的人员来说,保持技能更新是非常重要的,而更新技能的过程中,需要大量的去学习、实践和总结,比较传统的学习方式是通过虚拟机安装靶机来练习,这种方式往往缺少一种真实渗透中的网络环境,而拿真实的网络来搞事往往会面临很对未知的风险,比如被查水表什么的。在工作中,有时候测试一个内网转发脚本、恶意程序或避免影响业务需要一个沙箱环境,目前比较常见的是使用GNS3(网络设备模拟器)+虚拟机来模拟网络环境,随着云计算技术的兴起,无疑给建立虚拟环境多了一种选择,通过虚拟技术,可以建立更加复杂的测试环境,甚至仿真一个企业网络以便测试各种攻击场景。
0×01 环境准备
1.1 OpenStack
OpenStack是一个快源的云计算管理平台项目,由组件组合完成具体工作,详细介绍见OpenStack官网。OpenStack的部署方式分为手动部署和自动化部署,自动化部署工具主要有packstack
、devstack
及Fuel
等,这里使用packstack
在单机+单网卡的环境进行一键部署。
1.2 服务器环境
- 磁盘容量: >= 500GB
- 内存容量: >= 32GB
- 操作系统: CentOS-7-x86_64-Minimal-1611
- 网卡数量: 1
1.3 网络配置
系统安装完后,先给服务器配置一个静态IP:
# vi /etc/sysconfig/network-scripts/ifcfg-em1
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.20.7
GATEWAY=192.168.20.254
NETMASK=255.255.255.0
NDS1=8.8.8.8
这里我使用192.168.20.7
作为服务器IP,保存重启网络:
# systemctl restart network.service
1.4 部署OpenStack
通过yum源进行安装packstack
:
# yum -y install centos-release-openstack-mitaka epel-release
# yum -y install openstack-packstack
使用packstack部署OpenStack:
# packstack --allinone
安装时间大概15~30分钟左右。
1.5 桥接网卡
使用packstack安装后,如果重启系统,虚拟网络会无法连接外部网络,这时需要创建一个虚拟网卡:
# vi /etc/sysconfig/network-scripts/ifcfg-br-ex
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=192.168.20.7
NETMASK=255.255.255.0
GATEWAY=192.168.20.254
DNS1=8.8.8.8
ONBOOT=yes
默认安装缺省IP段是172.24.4.225/28
,这里修改为192.168.20.7/24
,保存,同时修改em1
网卡配置为:
DEVICE=em1
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes
保存,重启网络服务,不成功直接重启服务器。
0×02 实例与映像
OpenStack默认使用VirtIO
来管理实例映像,默认直接上传ISO文件会识别不了磁盘,这时需要使用含VirtIO
驱动的映像,镜像说明文档见:
https://docs.openstack.org/image-guide/obtain-images.html
这里统一制作qcow2
格式的映像文件。
2.1 Linux qcow2映像
- 手动制作
以制作Kali Linux为例,下载ISO文件kali-linux-light-2017.1-amd64.iso
:
# qemu-img create -f qcow2 kali-linux-light-2017.1-amd64.qcow2 10G
# kvm -smp 1 -m 512 -cdrom kali-linux-light-2017.1-amd64.iso /
-drive if=virtio,file=kali-linux-light-2017.1-amd64.qcow2 /
-net nic,model=virtio -net user
然后就像正常一样安装系统,安装完直接关掉。
- 官方的映像文件
有些Linux发行版官方提供现成映像文件,下载过来就可以直接使用:
# CentOS 7
http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
# Debian 9
http://cdimage.debian.org/cdimage/openstack/current-9/debian-9-openstack-arm64.qcow2
由于官方的云镜像是没有提供密码的,这时需要修改root密码,password:
冒号后边为密码:
# virt-customize -a CentOS-7-x86_64-GenericCloud.qcow2 --root-password password:toor
2.2 Windows qcow2映像
以Windows 2008 R2为例子,其他Win系统制作过程类似,由于Windows系统默认不带VirtIO
驱动,先下载驱动程序:
- https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
- https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win_amd64.vfd
生成映像文件:
# qemu-img create -f qcow2 Windows_2008_R2_x64.qcow2 20G
- 安装系统
命令行启动安装:
# kvm -m 2048 -cdrom cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso /
-drive file=Windows_2008_R2_x64.qcow2,if=virtio,boot=on -fda virtio-win-0.1.140_amd64.vfd -boot d
手动加载驱动:【自定义(高级)】-【加载驱动程序】-【浏览】-【软盘驱动器】,选择对应操作系统版本选项,然后确定:
安装完后关机。
- 安装网卡驱动
重新命令启动虚拟机:
# kvm -m 1024 -drive file=Windows_2008_R2_x64.qcow2,if=virtio,boot=on -cdrom virtio-win-0.1.140.iso /
-net nic,model=virtio -net user -boot c
找到【设备管理器】-【其他设备】-【以太网控制器】,右键更新驱动程序软件:
【浏览】-【CD驱动器】,确定:
安装完毕:
注:不能关闭的情况下直接kill掉进程。
0×03 Horizon
Horizon是一个用于管理、控制OpenStack服务的Web控制面板,可以通过http://192.168.20.7/dashboard/进行登录,管理帐号是admin
密码保存在/root/keystonerc_admin
。
3.1 上传映像
从http://192.168.20.7/dashboard/登录后,【项目】-【计算】-【映像】-【创建映像】:
Horizon控制面板添加映像支持2种方式,一种是通过HTTP/HTTPS直接下载,另一种是通过本地上传,在【映像源】选【映像文件】,将制作好的虚拟机上传到OpenStack:
3.2 创建实例
在【映像】列表的Windows_2008_R2_x64
后面点击【启动】,其中【详细信息】、【源】、【flavor】、【网络】这四项为必选项:
创建完实例,在【实例】点击实例名称进入该实例的详细信息页面,切换到【控制台】即可对虚拟机进行操作:
3.3 开机恢复实例状态
默认情况下,如果重启OpenStack的机器,实例是不会自动恢复之前的状态的,这时需要修改一下配置文件:
# vi /etc/nova/nova.conf
# 去掉注释,将false改成true
resume_guests_state_on_host_boot=true
0×04 卸载
配置的过程中难免有时出错需要重新再来,保存以下脚本为unpackstack.sh
#!/bin/bash
# Warning! Dangerous step! Destroys VMs
for x in $(virsh list --all | grep instance- | awk '{print $2}') ; do
virsh destroy $x ;
virsh undefine $x ;
done ;
# Warning! Dangerous step! Removes lots of packages
yum remove -y nrpe "*nagios*" puppet "*ntp*" "*openstack*" /
"*nova*" "*keystone*" "*glance*" "*cinder*" "*swift*" /
mysql mysql-server httpd "*memcache*" scsi-target-utils /
iscsi-initiator-utils perl-DBI perl-DBD-MySQL ;
# Warning! Dangerous step! Deletes local application data
rm -rf /etc/nagios /etc/yum.repos.d/packstack_* /root/.my.cnf /
/var/lib/mysql/ /var/lib/glance /var/lib/nova /etc/nova /etc/swift /
/srv/node/device*/* /var/lib/cinder/ /etc/rsync.d/frag* /
/var/cache/swift /var/log/keystone /var/log/cinder/ /var/log/nova/ /
/var/log/httpd /var/log/glance/ /var/log/nagios/ /var/log/quantum/ ;
umount /srv/node/device* ;
killall -9 dnsmasq tgtd httpd ;
vgremove -f cinder-volumes ;
losetup -a | sed -e 's/:.*//g' | xargs losetup -d ;
find /etc/pki/tls -name "ssl_ps*" | xargs rm -rf ;
for x in $(df | grep "/lib/" | sed -e 's/.* //g') ; do
umount $x ;
done
卸载操作:
# sh unpackstack.sh
卸载后就可以使用packstack重新部署,需要注意的是,该脚本并不是100%的清除,只是删除基本的文件,比如安装时加入的iptables规则是不会清除的,有强迫症的建议重装系统或在虚拟机里部署。
至此,部署OpenStack和制作映像文件基本完成了。
0×05 参考
- http://gtcsq.readthedocs.io/en/latest/openstack/image-create-guide.html
- https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/3/html/Getting_Started_Guide/appe-Getting_Started_Guide-Removing_PackStack_Deployments.html
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/54900.html