OpenStack Neutron FWaaS 學習( by quqi99 )
OpenStack Neutron FWaaS 學習 ( by quqi99 )
作者:張華 發表於:2013-06-24
版權宣告:可以任意轉載,轉載時請務必以超連結形式標明文章原始出處和作者資訊及本版權宣告
( http://blog.csdn.net/quqi99 )
另一篇和防火牆相關的文章,OpenStack中的防火牆 ( by quqi99 ) http://blog.csdn.net/quqi99/article/details/7447233
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能用多個router。見下圖,router中的qr-XXX虛擬介面用於和tenant網路相連,qg-XXX虛擬介面用於跟外部網路相連,防火牆服務應該是過濾出入tenant網路的所有流量,所以firewallpolicy應該是應用在qr-XXX虛擬介面上(iptables出口rule中新增”-oqr-+” a即可,入口規則新增”-iqr-+”即可),如果對所以tenant網路都適用的話可以運用在qg-XXX介面上(但havana的這一版本不會實現這一點,並且也不會實現Zones的概念,一組像上面的qr-XXX介面可以組成一個Zone,也不會檢查address sppofing)。所以防火牆規則不僅應該像之前的安全組那個運用到計算節點上,也應該運用在相應的tenant'srouter的主機相應的namespace下(這即是所謂的邊緣防火牆規則).
參考實現將會有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:
1)Firewallas a Service (FWaaS) APIs and DB Model,https://review.openstack.org/29004
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
相關文章
- 深入理解openstack neutron
- openstack neutron網路外掛學習(三)【Open vSwitch實現】
- OpenStack安裝(四)-Neutron模組
- MPLS學習( by quqi99 )
- OpenDaylight學習 ( by quqi99 )
- openstack網路(neutron)模式之GRE的基本原理模式
- OpenStack學習資料
- Quagga 路由軟體學習(by quqi99)路由
- 雲端計算管理平臺之OpenStack網路服務neutron
- 照著官網來安裝openstack pike之neutron安裝
- OpenStack學習系列之十二:安裝ceph並對接OpenStack
- 7.neutron-server啟動——neutron api啟動過程ServerAPI
- 給學習 OpenStack 架構的新手入門指南架構
- 學習筆記:openstack實驗環境安裝筆記
- 學習 OpenStack 的新指南和教程的六個建議
- Openstack學習筆記(三):keystone的安裝與配置筆記
- OpenStack中ipv6的設計與使用的一些理論分析(未測試)( by quqi99 )
- neutron的基本原理
- OpenStack高可用 -- DRBD塊映象 + Pacemaker心跳機制實現Active/Passive模式的高可用mysql叢集 ( by quqi99 )模式MySql
- 通過例子學習 Keystone - 每天5分鐘玩轉 OpenStack(19)
- iZotope Neutron Pro for mac(混音樂器)Mac
- different testing types ( by quqi99 )
- neutron建立network執行的那些命令
- 使用dmsetup命令生成snapshot ( by quqi99 )
- 理解 OpenStack
- 每天5分鐘複習OpenStack(十)Ceph 架構架構
- Vmware中的虛擬網路 ( by quqi99 )
- Screen/Tmux/Byobu分屏工具的使用 ( by quqi99 )UX
- OpenStack 之vmware機器遷移到openstack叢集
- OpenStack核心元件元件
- OpenStack整合DockerDocker
- openstack指定IP
- OpenStack-雲端計算,虛擬化技術,初步認識OpenStack,瞭解OpenStack的結構部署以及OpenStack核心專案
- 重啟openstack的openstack-service命令不存在
- 每天5分鐘複習OpenStack(九)儲存發展史
- 編譯linux kernel及製作initrd ( by quqi99 )編譯Linux
- 學習學習再學習
- OpenStack Git review 使用GitView