日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[连载型] Neutron 系列 (15): OpenStack 是如何实现 Neutron 网络 和 Nova虚机 防火墙的...

發布時間:2025/3/15 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [连载型] Neutron 系列 (15): OpenStack 是如何实现 Neutron 网络 和 Nova虚机 防火墙的... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題導讀:




1.Nova安全組是什么? 2.Nova的是如何配置的? 3.FWaas是什么?









1. Nova 安全組

1.1 配置

節點配置文件配置項說明
controller/etc/nova/nova.confsecurity_group_api = nova是的 nova secgroup* 命令使用的是 nova 安全組的 API
/etc/neutron/plugins/ml2/ml2_conf.inienable_security_group = False禁止 Neutron 安全組
nova-compute /etc/nova/nova.conf /etc/nova/nova-compute.conf firewall_driver = nova.virt.firewall.IptablesFirewallDriver指定 Nova 安全組的驅動,可以是IptablesFirewallDriver 或者 NWFilterFirewall。默認是 IptablesFirewallDriver。見下面的說明。
?/etc/neutron/plugins/ml2/ml2_conf.inienable_security_group = False禁止 Neutron 安全組
network/etc/neutron/plugins/ml2/ml2_conf.inienable_security_group = False禁止 Neutron 安全組

?

nova 提供兩種實現方式:使用 libvirt's nwfilter 的實現以及使用 linux iptables 的實現,默認的方式是使用 linux iptables。可以通過設置配置項??firewall_driver 的值指定。需要注意的是,即使使用 iptables,依然使用了部分 nwfilter 功能。參見

?

https://ask.openstack.org/en/question/19456/how-security-group-is-implemented/

?

  • firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
  • firewall_driver=nova.virt.libvirt.firewall.NWFilterFirewall


1.2 CLI

[AppleScript]?純文本查看?復制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 列表安全組: s1@controller:~$ nova secgroup-list-rules novasg1 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range? | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp???????? | 22??????? | 22????? | 0.0.0.0/0 |????????????? | +-------------+-----------+---------+-----------+--------------+ 創建一個安全組規則: s1@controller:~$ nova secgroup-add-rule novasg1 udp 53 53 100.1.100.0/24 +-------------+-----------+---------+----------------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+----------------+--------------+ | udp | 53 | 53 | 100.1.100.0/24 | | +-------------+-----------+---------+----------------+--------------+ 刪除虛機的安全組: s1@controller:~$ nova remove-secgroup 2c59a875-bc23-4605-ad70-5315d7a3f8e2 novasg1 添加安全組到虛機: s1@controller:~$ nova add-secgroup 2c59a875-bc23-4605-ad70-5315d7a3f8e2 novasg1 創建第二個安全組: s1@controller:~$ nova secgroup-add-rule novasg2 添加規則: s1@controller:~$ nova secgroup-add-rule novasg2 icmp -1 -1 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | icmp | -1 | -1 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ 再添加安全組到虛機: s1@controller:~$ nova add-secgroup 2c59a875-bc23-4605-ad70-5315d7a3f8e2 novasg2



1.3 iptables 鏈

Nova-compute 增加了 filter 表的 INPUT,OUTPUT 和 FORWARD 鏈:

?

<ignore_js_op>

?

[AppleScript]?純文本查看?復制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 -N nova-compute-FORWARD -N nova-compute-INPUT -N nova-compute-OUTPUT -N nova-compute-inst-122 #每個虛機一個鏈,命名規則是 ”inst“-<instance 在數據庫中的 id> -N nova-compute-local -N nova-compute-provider -N nova-compute-sg-fallback -N nova-filter-top -A INPUT -j nova-compute-INPUT -A FORWARD -j nova-filter-top -A FORWARD -j nova-compute-FORWARD -A OUTPUT -j nova-filter-top -A OUTPUT -j nova-compute-OUTPUT -A nova-compute-FORWARD -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT #允許本機上的虛機發出 DHCP 廣播 -A nova-compute-INPUT -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT? #允許本機接受 DHCP 廣播包 -A nova-compute-inst-122 -m state --state INVALID -j DROP -A nova-compute-inst-122 -m state --state RELATED,ESTABLISHED -j ACCEPT -A nova-compute-inst-122 -j nova-compute-provider -A nova-compute-inst-122 -s 91.1.180.2/32 -p udp -m udp --sport 67 --dport 68 -j ACCEPT #接受該虛機所在子網的 DHCP Server 返回的包 -A nova-compute-inst-122 -s 91.1.180.0/24 -j ACCEPT???????????????????????????????????? #在配置項 allow_same_net_traffic = true 的情況下接受同網段虛機的來訪包 -A nova-compute-inst-122 -p tcp -m tcp --dport 22 -j ACCEPT???????????????????????????? #用戶安全組規則指定的來訪包 -A nova-compute-inst-122 -s 100.1.100.0/24 -p udp -m udp --dport 53 -j ACCEPT?????????? #用戶安全組規則指定的來訪包 -A nova-compute-inst-122 -p icmp -j ACCEPT????????????????????????????????????????????? #用戶安全組規則指定的來防爆 -A nova-compute-inst-122 -j nova-compute-sg-fallback??????????????????????????????????? #沒被上面規則處理的其它來訪包 -A nova-compute-local -d 91.1.180.14/32 -j nova-compute-inst-122??????????????????????? # “-d“ 決定了 nova 安全組只檢查進入虛機的網絡包 -A nova-compute-sg-fallback -j DROP???????????????????????????????????????????????????? #丟棄其它包,只允許上述規則指定的網絡訪問 -A nova-filter-top -j nova-compute-local



2. FWaas

2.1 概念

從 Havana 版本開始,Neutron 提供一種基于 Neutron L3 Agent 的一種網絡四層防火墻虛擬化參考實現 Firewall-as-a-service,簡稱 FWaas。本文的分析是基于 OpenStack Juno 版本進行的。Juno 版本中,FWaas 是分租戶的,但是可以在多個租戶之間共享。每個租戶只允許一個防火墻。與物理的防火墻類似,FWaas 也有三個主要概念:

?

(1)規則(Rule):允許用戶指定所要匹配的名稱,描述,針對的協議(TCP, UDP, ICMP, ANY),行為(Allow,Deny),源/目的 IP 地址/子網 和 端口號/端口號區間。

?

<ignore_js_op>

?

與 neutron 安全組中的規則的區別是,這里需要指定被匹配到的數據包的處理行為是通過(ALLOW)和不通過(DENY),但是不能指定網絡方向。FWaas 會將規則同時應用到進出網絡的網絡包上。

?

(2)策略(Policy):規則的邏輯集合。Policy 可以是共享的 和 被審計的(Audited)。目前,FWaas 只是把 “audited” 保存到 DB 中,并沒有對它做任何處理。

?

<ignore_js_op>

?

(3)防火墻(Firewall):策略的邏輯集合。見上面右圖。Juno 版本中,每個租戶只能擁有最多一個 Firewall。防火墻可以是共享的。

?

這里需要說明的是 FWaas 和 Security Group (安全組) 的區別。安全組規則在連接到一個實例的計算節點上的Linux橋 qbr 上實施,FWaaS 創建的防火墻規則在租戶網絡邊緣實現的虛擬路由器上實施。 FWaaS 并不旨在取代安全組的功能,并且它提供更為補充安全組,特別是在其當前實現狀態下。 FWaaS 目前缺乏安全組提供的一些功能,包括無法指定通信的方向等。與此相反,安全組,也因為他們缺乏創建特定規則拒絕所有流量的能力,因此需要 FWaas 作為補充。


2.2 配置

節點配置和操作
控制節點上修改 /etc/neutron/neutron.conf:
[default]
service_plugins = router,lbaas,firewall
[service_providers]
service_provider = FIREWALL:Iptables:neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver:default

service neutron-server restart

修改 /usr/share/openstack-dashboard/openstack_dashboard/local/local_settings.py:'enable_firewall': True
網絡節點上修改 /etc/neutron/fwaas_driver.ini:
[fwaas]
driver = neutron.services.firewall.drivers.linux.iptables_fwaas.IptablesFwaasDriver
enabled = True

service neutron-l3-agent restart


2.3 實現

目前的實現中,FWaas 是通過在其所在 tenant 中的所有 Virtual Router 上添加 iptbales 規則來實現對進出數據網絡的網絡包進行控制的。

?

代碼實現:

?

控制節點上(class FirewallPlugin):

?

(1)create rule:純數據庫操作,將 rule 保存到數據中。 (2)create policy:純數據庫操作,將 policy 保存到數據中。 (3)如果將 rule 添加到一個已經添加到 firwall 的 policy,或者將一個 policy 加入一個存在的 firewall,在數據庫操作后,通過 RPC fanout 到所有的 L3 Agent host:

?

{'args': {'firewall': {'status': 'PENDING_UPDATE', 'name': u'fw-for-tcp', 'shared': None, 'firewall_policy_id': u'd14e23a3-2ee6-411d-b678-e6db3dac45f5', 'tenant_id': u'74c8ada23a3449f888d9e19b76d13aab', 'admin_state_up': True, 'id': u'aa85bd66-dc4c-4d1b-909e-6f5736c279c7', 'firewall_rule_list': [{'protocol': u'icmp', 'description': u'', 'source_port': None, 'source_ip_address': None, 'destination_ip_address': None, 'firewall_policy_id': u'd14e23a3-2ee6-411d-b678-e6db3dac45f5', 'position': 1, 'destination_port': None, 'id': u'8658229d-6e34-4069-b091-e560f9e54dc9', 'name': u'rule-allow-icmp', 'tenant_id': u'74c8ada23a3449f888d9e19b76d13aab', 'enabled': True, 'action': u'allow', 'ip_version': 4L, 'shared': False}, {'protocol': u'tcp', 'description': u'', 'source_port': None, 'source_ip_address': None, 'destination_ip_address': None, 'firewall_policy_id': u'd14e23a3-2ee6-411d-b678-e6db3dac45f5', 'position': 2, 'destination_port': '80', 'id': u'00b5bad2-dd14-48d6-9a5c-7b65e6e8c480', 'name': u'fule-allow-tcp-80', 'tenant_id': u'74c8ada23a3449f888d9e19b76d13aab', 'enabled': True, 'action': u'allow', 'ip_version': 4L, 'shared': False}], 'description': u''}, 'host': 'controller'}, 'namespace': None, 'method': 'update_firewall'}

?

  • insert_rule/remove_rule/update_firewall_rule/update_firewall_policy -> Firewall_db_mixin.insert_rule/remove_rule/update_firewall_rule/update_firewall_policy -> _rpc_update_firewall_policy -> _rpc_update_firewall -> (if policy has a firewall) FirewallAgentApi.update_firewall
  • create_firewall -> Firewall_db_mixin.create_firewall -> FirewallAgentApi.create_firewall
  • update_firewall -> Firewall_db_mixin.update_firewall -> FirewallAgentApi.update_firewall
  • delete_firewall -> Firewall_db_mixin.delete_firewall -> FirewallAgentApi.delete_firewall
  • FirewallAgentApi.create/update/delete_firewall -> fanout_cast ("create/update/delete_firewall", topics.L3_AGENT, "controller", firewall) -----> FWaaSL3AgentRpcCallback.create/update/delete_firewall -> FWaaSL3AgentRpcCallback._invoke_driver_for_plugin_api

?

網絡節點上(class FWaaSL3AgentRpcCallback):

?

(1) 通過 RPC 獲取所有的 router,在獲取firewall 所在的 tenant 上的 routers (2)調用 IptablesFwaasDriver.update_firewall,依次更新每個 router 的 iptables 規則 (3)首先刪除已有規則,然后根據配置的 rules 重新生成規則

?

[AppleScript]?純文本查看?復制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 root@network:/var/cache# 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 包

轉載于:https://www.cnblogs.com/liuhongru/p/11098379.html

總結

以上是生活随笔為你收集整理的[连载型] Neutron 系列 (15): OpenStack 是如何实现 Neutron 网络 和 Nova虚机 防火墙的...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。