@RunZhi
2016-09-14T00:14:39.000000Z
字数 2369
阅读 1270
操作系统实验报告
1.在centos虚拟机中安装ovs,最好源码安装
2.会写基本的openflow条目以控制网络包的转发方向
3.基于OVS,想出一个应用场景,并且在其中设计应用程序和相应的openflow条目以实现
(参考网站:CentOS7 安装 Openvswitch)
下载源码后,解压.
从spec文件中删除openvswitch-kmod的依赖包,并创建一个新的spec文件
在openvswitch文件夹所在目录输入:
rpmbuild -bb --without check ~/openvswitch-2.5.0/rhel/openvswitch_no_kmod.spec
然后把下载的tar.gz包放到用户目录下的rpmbuild/SOURCES文件夹中,然后继续终端输入
rpmbuild -bb --without check ./openvswitch-2.5.0/rhel/openvswitch_no_kmod.spec
过了几分钟后编译完成.
再安装编译后的rpm文件:
sudo yum localinstall /home/runzhizeng/rpmbuild/RPMS/x86_64/openvswitch-2.5.0-1.x86_64.rpm
(注意, /home/runzhizeng/是用户目录,需要具体替换)
然后启动服务,并查看服务器状态
systemctl start openvswitch.service
systemctl -l status openvswitch.service
会有如下显示信息,至此安装完成.
(以下实验内容参考于基于Open vSwitch的openFlow实践.)
首先,启动ovsdb,依次输入如下命令:
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--private-key=db:Open_vSwitch,SSL,private_key \
--certificate=db:Open_vSwitch,SSL,certificate \
--bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
--pidfile --detach
ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach
然后创建一个交换机,名字是ovs
ovs-vsctl add-br ovs
创建一个端口p0,设置端口p0的OpenFlow,端口编号为100,类型为internal
ovs-vsctl add-port ovs p0 -- set Interface p0 type=internal ofport_request=100
为了避免网络接口上的地址和本机已有网络地址冲突,创建一个虚拟网络空间 ns0,把p0接口移入网络空间ns0,并配置 IP 地址为 192.168.1.100
ip netns add ns0
ip link set p0 netns ns0
ip netns exec ns0 ip addr add 192.168.1.100/24 dev p0
ip netns exec ns0 ifconfig p0 promisc up
使用同样的方法创建端口p1,p2.输入如下命令
ovs-vsctl show
会显示
添加新的 OpenFlow 条目,修改从端口 p0 收到的数据包的源地址为 9.181.137.1
ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,\
in_port=100,actions=mod_nw_src:9.181.137.1,normal"
然后通过ns0网络向p1端口ping数据
ip netns exec ns0 ping 192.168.1.101
打开另外一个终端,输入如下命令使用tcpdump从p1抓取icmp数据
ip netns exec ns1 tcpdump -i p1 icmp
此处终端会有如下显示:
添加新的 OpenFlow 条目,重定向所有的 ICMP 数据包到端口 p2.
ovs-ofctl add-flow ovs idle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:102
从端口p0发送数据到p1
ip netns exec ns0 ping 192.168.1.101
用tcpdump监听端口2的ICMP数据包
ip netns exec ns2 tcpdump -i p2 icmp
会有如下显示:
中间人攻击即指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容
假设攻击者A想要对B进行中间人攻击,而B和网络服务商C进行通信。
首先,要实现中间人攻击,首先就需要使用arp欺骗,在linux下,arp欺骗可以通过dsniff实现。
A对B完成ARP欺骗后,一个很重要的问题是:如何让B无法察觉自己已被欺骗?这时候,可以通过ovswitch进行数据包的转发实现B与服务商C的通信。
如此以来,A就做了B和C的中间人。此时就可以进行下一步的攻击,比如通过伪造证书窃取网页密码等。
但由于实验者暂时还无法做到通过ovswitch进行数据包的转发(遇到了各种奇怪的问题,比如数据转发失败,或是突然内核错误等等。。。。)。因此本应用场景未能实现。