總結openstack防火牆的核心是防火牆策略和防火牆規則,策略是一組防火牆規則集合,規則是由一組匹配條件(如埠範圍、協議、ip位址),以及對匹配流量採取的操作(allow、deny);
策略可以設定成public,跨project使用;
防火牆的功能實現有很多方式,取決於driver的選用;例如:iptables driver使用iptables rule來實現,ovs driver使用流表,cisco防火牆driver使用nsx裝置;
openstack現有fwaas v1和fwaas v2,本文介紹v1
openstack rocky版本
fwaas v1提供針對路由的保護,當防火牆關聯到乙個路由上,那麼所有的內部port都是受該防火牆保護的;
防火牆driver
[firewall_drivers]
iptables = neutron_fwaas.services.firewall.service_drivers.agents.drivers.linux.iptables_fwaas:iptablesfwaasdriver
neutron_fwaas.services.firewall.service_drivers.agents.drivers.linux.iptables_fwaas
class
iptablesfwaasdriver()
:# firewall: fw_with_rules _make_firewall_dict_with_rules
defcreate_firewall
:if firewall[
'admin_state_up']:
# setup操作如下:
# 1. 生成名稱i,o(ingress, egress) + v4(ip版本) + fwid 取前11位;嘗試刪除對應鏈
# 2. 嘗試刪除名為fwaas-default-policy的鏈
# 3. 建立名為fwaas-default-policy的鏈,並加入drop all的規則
# 4. 增加規則:增加第一步中刪除的鏈,在每個鏈中(1)drop所有無效包(2)allow已建立鏈結的包(3)根據firewall_rule裡的規則加入
# 5. 將第4步中生成的鏈鏈結到forward,將第3步生成的鏈鏈結到forward
# 生效
self._remove_conntrack_new_firewall(agent_mode,
# 設定pre_firewall為當前firewall
self.pre_firewall =
dict
(firewall)
else
:# 如果firewall的admin_state_up為false,即只新增default drop all的規則
更新防火牆從agent的看起
neutron_fwaas.services.firewall.service_drivers.agents.l3reference.firewall_l3_agent
class
fwaasl3agentextension()
:def
update_firewall()
:# l320 先呼叫driver的刪除
self.fwaas_driver.delete_firewall(
self.conf.agent_mode,
router_info_list,
firewall)
# l348 再呼叫driver的update
self.fwaas_driver.update_firewall(
self.conf.agent_mode,
router_info_list,
firewall)
def
delete_firewall
: fwid = firewall[
'id'
]try
: ipt_if_prefix_list = self._get_ipt_mgrs_with_if_prefix(
agent_mode, router_info)
for ipt_if_prefix in ipt_if_prefix_list:
ipt_mgr = ipt_if_prefix[
'ipt'
]# 刪除建立過程中3,4步驟的生成的鏈
self._remove_chains(fwid, ipt_mgr)
self._remove_default_chains(ipt_mgr)
) self.pre_firewall =
none
defupdate_firewall
:try
:if firewall[
'admin_state_up']:
# 詳見建立防火牆的建立過程
if self.pre_firewall:
# 如果已有防火牆,作比較,獲取需要增加和刪除的規則
self._remove_conntrack_updated_firewall(agent_mode,
else
: self._remove_conntrack_new_firewall(agent_mode,
else
:# 更新當前防火牆
self.pre_firewall =
dict
(firewall)..
....
在更新防火牆中已提及
在針對防火牆的操作中,還有insert_rule和remove_rule等操作;
neutron_fwaas.services.firewall.fwaas_plugin
class
firewallplugin()
:def
insert_rule
(self, context,
id, rule_info)
:# 判斷防火牆是否可以更新
self._ensure_update_firewall_policy(context,id)
fwp =
super
(firewallplugin,
self)
.insert_rule(context,
id, rule_info)
# 呼叫agent做update_firewall
self._rpc_update_firewall_policy(context,id)
resource =
'firewall_policy.update.insert_rule'
self._notify_firewall_updates(context, resource, rule_info)
return fwp
defremove_rule
(self, context,
id, rule_info)
: self._ensure_update_firewall_policy(context,id)
fwp =
super
(firewallplugin,
self)
.remove_rule(context,
id, rule_info)
# 呼叫agent做update_firewall
self._rpc_update_firewall_policy(context,id)
resource =
'firewall_policy.update.remove_rule'
self._notify_firewall_updates(context, resource, rule_info)
return fwp
防火牆工作原理是在關聯router後,針對該router對應的namespace做iptables的規則新增。而且在fwaas v1中是預設default都drop,然後加allow的規則。
後記
後續會接著介紹一下fwaas v2的功能。
防火牆 防火牆安全
作為計算機的第一道屏障,防火牆的重要性不言而喻,儘管防火牆在面臨網路攻擊時仍有很大的缺陷,不如無法阻止自內而外的攻擊,對複雜多變的網路攻擊攻擊無法預警和像ids所做的那樣。但防火牆依然是伺服器乃至個人機的一道不可或缺的屏障。木桶原理 本文將對防火牆做乙個初步的簡介,顯然像我們知道的那樣,防火牆是一款...
防火牆系列(一) 何為防火牆
簡單解釋下內聯網路和外聯網路 內聯網路類似於區域網是指某個企業或者單位內部互動的網路,外聯網路就是外部的internet 部署在使用者內聯網路和外聯網路之間的一道屏障,一切內外聯網路交換的資料都應該通過防火牆裝置。以預先定義好的安全規則為標準,防火牆將對通過他的資料進行安全監測,符合安全規則的資料流...
防火牆的分類及功能
防火牆分為 軟體防火牆 硬體防火牆 晶元級防火牆 軟體防火牆 執行在特定的計算機上,需要客戶預先安裝好的計算機作業系統的支援。一般來說這台計算機就是整個網路的閘道器,俗稱個人防火牆。軟體防火牆像其他軟體產品一樣需要先在計算機上安裝並做好配置才可以使用。防火牆廠商中做網路版軟體防火牆最出名的莫過於ch...