0x00 概述
对一个沙箱环境而言,其中最重要的一点就是网络的隔离,OpenStack网络支持Flat、VLAN、VXLAN等模式,配合路由器和防火墙可轻松虚拟一个简单的企业网络。
0x01 网络环境
1.1 网络拓朴
不同网络区域首先得进行网络划分,主要包含三个区域:
- 外网服务器区:为互联网提供服务,能访问互联网、内外服务器区,不能访问工作区域;
- 内网服务器区:为外网服务器、工作区提供服务,不能访问互联网、外网服务器区、工作区;
- 工作区:办公区域,各个部门间网络互通,可访问互联网、内网服务器区、外网服务器区。
这里使用172.16.x.0/24
作为服务器区的IP段,10.0.x.0/24
为工作区各部门的IP段,网络拓扑图如下:
注:这里网络、实例、路由器等名称统一使用小写。
1.2 公共网络
使用管理员登录Horizon,【管理员】-【网络】,这里会看见一个为public
的网络,其IP段为172.24.4.225/28
(有强迫的可以删掉),创建一个名为network_public
的外部网络和一个IP地址池为192.168.20.100-200
的子网。
有时外部网络和子网有在Web界面会创建失败,使用SSH登录到服务器使用命令创建:
因为只有一张网卡,为了减少去配IP的麻烦,这里将浮动IP地址池(192.168.20.100-200
)配到与服务器IP同一个段。
1.3 创建网络
【项目】-【网络】-【网络】,点击【创建网络】,会有三个选项:
- 网络:配置网络名称;
- 子网:配置子网IP、掩码、网关等信息;
- 网络详情:配置IP地支持、DHCP、DNS等信息。
这里服务器区和办公区的网段都使用DHCP进行IP分配,分别创建以下网络:
1.4 创建路由器
【项目】-【网络】-【路由器】,点击【创建路由器】,创建2个路由router_internal
和router_isp
,其中router_isp
选择外部网络network_public
:
router_isp
点击router_isp
进入该路由器,切换到【接口】项,分别添加2个接口172.16.0.1
和192.168.0.5
:
再切换到【静态路由表】项,分别添加办公区和内网服务器区的静态路由:
router_internal
点击router_internal
进入该路由器,切换到【接口】项,分别添加以下连接接口:
再切换到【静态路由表】项,添加一条缺省路由:
0x02 创建实例
现在网络已经配置完,回到【项目】-【计算】-【实例】,点击右上角【启动实例】,按照拓朴选择对应网络分别创建以下实例:
这里全部使用CentOS7
的映像,创建完后,【项目】-【网络】-【网络拓朴】大概是这样:
这时你会发现,所有实例之间都是能ping
得通的,并没有想要之前设定的结果,这时就需要防火墙。
0x03 FwaaS
FwaaS(FireWall-as-a-Service),即防火墙服务,防火墙可以在路由器上做策略。
3.1 安装FwaaS
通过yum
安装FwaaS:
# yum -y install openstack-neutron-fwaas
加载防火墙
在service_plugins
后面加上firewall
:
添加所需驱动程序:
Horizonz中启用防火墙,修改enable_firewall
为True
:
将修改更新到数据库:
重启Neutron服务:
代码语言:javascript复制# systemctl restart neutron-server
3.2 配置防火墙
重新登录Horizonz,在【项目】-【网络】下的菜单会添加【防火墙】这一项,切换到【防火墙规则】添加以下规则:
切换到【防火墙策略】,添加一条策略,并加入刚才配置的2条规则:
切换到【防火墙】,添加一条记录,选择刚才创建的策略,并关联router_internal
路由器:
3.3 测试防火墙
在外网服务器区使用server_www(172.16.0.5)
分别ping互联网、办公区、内网服务器区:
在办公区使用it_pc1(10.0.10.3)
分别ping互联网、外网服务器区、内网服务器区、人力资源部:
在内网服务器区使用server_db(172.16.10.4)
分别ping互联网、外网服务器区、办公区:
网络隔离效果已经达到了设定要求。
0x04 网络映射
在www_server(172.16.0.5)
上启动httpd服务,监听80端口,现在要将该服务器的HTTP服务映射到“互联网”(192.168.20.100-200)。
4.1 关联浮动IP
【项目】-【计算】-【实例】,选择实例【操作】下拉菜单,选择管理浮动IP:
这时在实例列表【IP 地址】列会多出一个浮动IP192.168.20.101
:
4.2 安全组
这时从外部还不能访问该服务器,需要在安全组添加入口规则放行,【项目】-【计算】-【访问 & 安全】新添加一条记录sg_public
,然后添加一条规则:
现在访问http://192.168.20.101:
至此,一个简单的虚拟网络环境已经建立起来,其中还存在很多安全上的问题,比如通过实例可以访问192.168.20.7上的服务,一个合适的渗透测试环境还需要逐渐去完善。
0x05 参考
- https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/8/html/networking_guide/sec-fwaas
- https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux_OpenStack_Platform/6/html/Administration_Guide/Networking-ExternalConnectivity.html