標籤:計算 plugin 方法 driver etc open 報文 .com 調用
關於openstack安全性群組,採用一問一答的形式記錄如下
1. 是載入在計算節點的還是網路節點的?
是載入在計算節點的
2. 是使用iptable規則實現的嗎?
M版的neutron實現了openvswitch 基於流表的防火牆
之前常見的是用iptables實現的,一般會建立neutron-openvswi-XXX鏈
3. iptables實現的防火牆方法中,添加的規則都是accept,其餘的包都是drop的嗎?
是的添加的規則一般都在最後預設drop規則的前面return掉。安全性群組利用iptables實現原理如下
其中需要說明兩點
(1). ipset
0 0 RETURN all -- any any anywhere anywhere match-set NIPv4de0fc679-6a26-43d6-a3f6- src,規則的意思是利用ipset來指定src集合,在這個集合中的srcIP報文都可以通過。
通過命令ipset list可以查看到所有的ipset集合
[[email protected] var]# ipset list
Name: NIPv4de0fc679-6a26-43d6-a3f6-
Type: hash:net
Revision: 3
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 16816
References: 1
Members:
192.168.188.19
Name: NIPv6de0fc679-6a26-43d6-a3f6-
Type: hash:net
Revision: 3
Header: family inet6 hashsize 1024 maxelem 65536
Size in memory: 17552
References: 1
Members:
(2).security-group 遠端
如果選擇一個安全性群組作為來訪源地址,則該安全性群組中的任何雲主機執行個體都被允許使用該規則訪問任一其它雲主機。
例如host-1綁定安全性群組default, host-2綁定安全性群組secg1, 這時在default中添加一條規則並且指定遠程為secg1, 那麼這條規則適用於src-ip是host-2的報文。
4. neutron-openvswitch-agent實現firewall的代碼結構是怎麼樣的?
(1) 首先在/etc/neutron/plugins/ml2/openvswitch_agent.ini 中設定firewall_driver的類名(用於指定載入類的路徑),並開啟安全性群組開關。
#firewall_driver = <None>
#firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
firewall_driver = neutron.agent.linux.openvswitch_firewall.OVSFirewallDriver
enable_security_group = true
(2) 所有的firewall基於父類FirewallDriver,每種firewall都需要實現該父類的幾個介面;
prepare_port_filter : port建立時調用一次,初始化安全性群組資訊
apply_port_filter
update_port_filter : port安全性群組更新時被調用
remove_port_filter : port安全性群組刪除時被調用
filter_defer_apply_on
filter_defer_apply_off
ports
defer_apply
update_security_group_members
update_security_group_rules
security_group_updated
這些介面由securitygroups_rpc.py調用。
neutron openvswitch agent實現安全性群組的方法