OpenStack Neutron FWaaS 學習( by quqi99 )
OpenStack Neutron FWaaS 學習 ( by quqi99 )
作者:張華 發表於:2013-06-24
版權宣告:可以任意轉載,轉載時請務必以超連結形式標明文章原始出處和作者資訊及本版權宣告
( http://blog.csdn.net/quqi99 )
OpenStack的網路元件已經從Quantum更名為Neutron了。之前Quantum就有一個安全組的實現,它執行在每一個計算節點上,能夠做到:
1)過濾進入到計算節點上虛機的流量
2)過濾從虛機出來的流量(nova-network並不能實現這一點)
3)過濾虛機之間的流量
安全組的一般用法及實現框圖如下:
$nova secgroup-create mygroup description
$nova secgroup-add-rule mygroup tcp 22 22 192.168.1.0/24
$nova boot --flavor 1 --image f16f1d2d-71d6-41b7-98a5-319f142d61f5--security_groups mygroup i1
上述一個安全組由一系列的iptable rule組成,rule都是針對soure/dest ip及tcp port的,它不能像下一代的防火牆一樣來表達應用特性像audited rules,也不能提供邊緣防火牆的特性。所以在Neutron提供L4/L7層框架之際,也將推出了FWaaS服務(https://docs.google.com/document/d/1PJaKvsX2MzMRlLGfR0fBkrMraHYF0flvl0sqyZ704tA/edit?pli=1
在FWaaS中,tenant可以建立多個Firewall instances,而每一個virtual firewall instance和多個Firewall Policies關聯,每個firewall policies由多個Firewall rules按序組成。不能直接應用一個rule,它必須先加入到一個policy中,因為它需要先審計。如下圖:
多層防火牆的應用場景如下圖:
Neutron L3 agent執行在gateway host上,它通過linux的namespace特性例項化多個neutron router,一個tenant能用多個
參考實現將會有4個chains,出和入各一個,ipv4和ipv6各一個。:
所以相應地在FWaaSAgent中會有幾個方法:
create_firewall(apply_list, fireall),fireall是指一組上面的防火牆規則,apply_list指一些networknamespace
update_firewall(apply_list, fireall)
delete_firewall(apply_list, fireall)
關於將上面的firewallinstance在哪裡應用到VM應涉及到L4/L7服務框架了。以前Neutron只有一級外掛結構(像OVS外掛,像LinuxBridge外掛),但現在引入了L4/L7層服務框架之後變成了兩層,即實現了在一個核心外掛(像OVS外掛)下再能新增若干個服務(像LBaaS,像FWaaS)。可參見:https://docs.google.com/document/d/1iLzieNKxM7xip_lRidmalAhF_6-Yf1b_cePF4yeAnkQ/edit?pli=1,
# ip netns exec qrouter-e438bebe-6795-4b68-a613-ec0df38d3064 iptables -t filter -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N neutron-filter-top
-N neutron-l3-agent-FORWARD
-N neutron-l3-agent-INPUT
-N neutron-l3-agent-OUTPUT
-N neutron-l3-agent-fwaas-defau #新增的 firewall chain
-N neutron-l3-agent-iv4aa85bd66 #新增的 firewall chain
-N neutron-l3-agent-local
-N neutron-l3-agent-ov4aa85bd66 #for firewall
-A INPUT -j neutron-l3-agent-INPUT
-A FORWARD -j neutron-filter-top
-A FORWARD -j neutron-l3-agent-FORWARD #將 forward 轉到 neutron 的chain
-A OUTPUT -j neutron-filter-top
-A OUTPUT -j neutron-l3-agent-OUTPUT
-A neutron-filter-top -j neutron-l3-agent-local
-A neutron-l3-agent-FORWARD -o qr-+ -j neutron-l3-agent-iv4aa85bd66 #進資料網路的包
-A neutron-l3-agent-FORWARD -i qr-+ -j neutron-l3-agent-ov4aa85bd66 #出資料網路的包
-A neutron-l3-agent-FORWARD -o qr-+ -j neutron-l3-agent-fwaas-defau #進資料網路的包的預設處理 chain
-A neutron-l3-agent-FORWARD -i qr-+ -j neutron-l3-agent-fwaas-defau #出資料網路的包的預設處理 chain
-A neutron-l3-agent-INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 9697 -j ACCEPT
-A neutron-l3-agent-fwaas-defau -j DROP #預設丟棄沒有被以上規則處理的所有包
-A neutron-l3-agent-iv4aa85bd66 -m state --state INVALID -j DROP
-A neutron-l3-agent-iv4aa85bd66 -m state --state RELATED,ESTABLISHED -j ACCEPT #接受狀態為 RELATED, ESTABLISHED (已建立的連線)的包
-A neutron-l3-agent-iv4aa85bd66 -p tcp -m tcp --dport 80 -j ACCEPT #根據定義的 FWaas rule,接受目的埠為 80 的 tcp 包
-A neutron-l3-agent-ov4aa85bd66 -m state --state INVALID -j DROP
-A neutron-l3-agent-ov4aa85bd66 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A neutron-l3-agent-ov4aa85bd66 -p tcp -m tcp --dport 80 -j ACCEPT #根據 FWaas rule,接收目的埠為 80 的 tcp 包
相關進階的程式碼和BP:
2) FwaaS agent,https://blueprints.launchpad.net/quantum/+spec/quantum-fwaas-agent
3) FwaaS Plugin, https://blueprints.launchpad.net/quantum/+spec/quantum-fwaas-plugin 4) FwaaS ip tables driver https://blueprints.launchpad.net/quantum/+spec/quantum-fwaas-iptables-driver