POX簡單防火牆實做

在這裡我們把限定IP為防火牆,就有如我們將host1的IP:10.0.0.1設定為必須阻擋IP

並且我們以forwarding資料夾裡的l2_learning為基底製作一個簡易的防火牆

因為裡面必須導入IP封包的函式庫因此在上方多加

from pox.lib.packet.ipv4 import ipv4 from pox.lib.addresses import IPAddr, EthAddr

並且在def _handle_PacketIn (self, event):裡多加上

if isinstance(packet.next, ipv4): // 如果是ipv4的封包類型就往下做

if str(packet.next.srcip) == IPAddr('10.0.0.1'): //如果source ip是10.0.0.1就往下做

actions = [] //actions裡面是空白代表將封包drop

msg = of.ofp_flow_mod(command=of.OFPFC_ADD, //增加規則(命令)

idle_timeout=20, //若沒有啟動命令在20秒後命令消失

hard_timeout=of.OFP_FLOW_PERMANENT, //hard timeout代表命令出現後在一定時間會消失

//of.OFP_FLOW_PERMANENT 是沒有的意思

buffer_id=None, //不須指定暫存器

actions=actions,

match=of.ofp_match(dl_src = packet.src, //當符合來源MAC為此封包時就會發送這個命令

))

event.connection.send(msg.pack()) //送出命令

return //換下一個封包

以下是啟動後的範例圖片

先是以host3(10.0.0.3) ping host2(10.0.0.2)成功

並且在switch裡面也有雙方交換封包的命令

以下是由host2(10.0.0.2) ping host1(10.0.0.1)

而host2無法接收到host1的回傳封包

並且在交換器的命令表可以看到host2將封包傳送給host1的命令

而反白的部分為host1將封包傳回host2時被switch丟棄的命令(drop)

頁面下是簡單做好的防火牆範例