2

我正在远程运行 Floodlight SDN 控制器,并且有一个带有 2 个交换机和 2 个主机的 mininet 拓扑。尽管使用 REST API [curl 命令] 启用了防火墙规则,我还是能够 ping 所有主机。

迷你网拓扑-

sudo mn --topo=linear,2 --mac --controller=remote,ip=192.168.56.107 --switch=ovsk,protocols=OpenFlow13

泛光灯控制器-

sdn@sdn-controllers:~/floodlight$ sudo java -jar target/floodlight.jar

REST API 启用防火墙-

sh curl http://192.168.56.107:8080/wm/firewall/module/enable/json -X PUT -d ''

即使在启用防火墙规则后,Pingall 也能正常工作-

在此处输入图像描述

为什么流量没有被丢弃?我错过了什么?

4

1 回答 1

1

以下命令仅启用防火墙,默认情况下不启用其中的任何规则来控制数据包流。假设控制器在 localhost 上运行。

sh curl http://localhost:8080/wm/firewall/module/enable/json -X PUT -d ''

您可以使用以下命令检查防火墙状态并验证防火墙是否真的启用:

sh curl http://localhost:8080/wm/firewall/module/status/json

默认情况下,防火墙拒绝所有流量,除非创建了明确的 ALLOW 规则。您可能需要通过查询 /wm/firewall/rules/json 来检查现有规则列表,以查看网络拓扑中是否存在任何 ALLOW 规则。

您可以在感兴趣的交换机上添加规则,如下所示,感兴趣的交换机 id 应该根据您的拓扑结构。让我们考虑 switch1 的 id 是 00:00:00:00:00:00:00:01。以下命令为所有流通过交换机 00:00:00:00:00:00:00:01 添加了一条允许规则。

sh curl POST -d '{"switchid : "00:00:00:00:00:00:00:01"}' http://localhost:8080/wm/firewall/rules/json

交换机中存在上述规则应仅允许连接到交换机 1 的主机之间进行 ping。

假设 h1 的 IP 地址是 10.0.1.1,而 h2 的 IP 地址是 10.0.1.2。

以下命令应为主机 10.0.1.1 和主机 10.0.1.2 之间的所有流添加一个 ALLOW 规则。请注意,不指定操作意味着 ALLOW 规则。

curl -X POST -d '{"src-ip": "10.0.1.1/32", "dst-ip": "10.0.1.2/32"}' http://localhost:8080/wm/firewall/rules /json

curl -X POST -d '{"src-ip": "10.0.1.2/32", "dst-ip": "10.0.1.1/32"}' http://localhost:8080/wm/firewall/rules /json

上述规则的存在应允许提及的主机之间 ping

要阻止主机之间的流量,您可能需要根据您的网络拓扑使用您感兴趣的主机 IP 地址添加如下拒绝规则。

sh curl -X POST -d '{"src-ip" : "10.0.1.1/32", "dst-ip": "10.0.1.2/32", "nw-proto":"ICMP", "action" : "拒绝" }' http://localhost::8080/wm/firewall/rules/json

上述规则的存在将阻止上述主机之间的 ping - 现在 pingall 命令将显示输出,使得主机 10.0.1.1(h1) 和 10.0.1.2(h2) 之间的 ping 不成功。在这种情况下,以下命令还应显示 h1 和 h2 之间没有发生 ping

h1 平 h2

于 2019-12-03T02:01:19.580 回答