實踐 Neutron FWaaS - 每天5分鍾玩轉 OpenStack(118)


前面我們學習了 FWaaS 的理論知識,今天將通過實驗來學習 FWaaS。

在我們的實驗環境中,有兩個 instance: cirros-vm1(172.16.100.3) 和 cirros-vm2(172.16.101.3)。

cirros-vm1 和 cirros-vm2 分別位於網絡 vlan100 和 vlan101。 vlan100 和 vlan101 之間由虛擬路由器 test_router 連接。 網絡拓撲如下:

在 test_router 沒有應用任何 FWaaS 的情況下,cirros-vm1 可以通過 ping 和 ssh 跨網絡訪問 cirros-vm2。

下面我們將進行如下實驗: 1. 創建一個不包含任何 rule 的 firewall “test_firewall” 並應用到 test_router。
此時 FWaaS 生效,默認情況下會阻止任何跨子網的流量。 2. 創建 rule 允許 ssh,並將其添加到 test_firewall。此時 cirros-vm1 應該能夠 ssh cirros-vm2。

應用無 rule 的 firewall

點擊菜單 Project -> Network -> Firewalls,打開 Firewall Policies 標簽頁面。 目前沒有定義任何 Policie。

點擊按鈕,顯示Policy 創建頁面。

將 Policy 命名為 “test_policy”,直接點擊 “Add” 按鈕。

這樣我們創建的 test_policy 不包含任何 Rule。

進入 “Firewalls” 標簽頁,點擊 “Create Firewall” 按鈕

將新的 Firewall 命名為 “test_firewall”,並關聯 “test_policy”。

在 “Routers” 標簽頁中選擇 “test_router”。 點擊 “Add” 創建 firewall。

等待 test_firewall 的 Status 變為 “Active”,此時 test_router 已經成功應用 test_policy。

可以通過 iptables-save 查看 router namespace 的 iptables 規則

為了讓大家了解底層到底發生了什么變化,下面用 vimdiff 顯示了應用 test_firewall 前后 iptables 規則的變化。

下面我們來分析一下這些規則。

route 在轉發數據包時會使用 chain:

-A FORWARD -j neutron-vpn-agen-FORWARD

neutron-vpn-agen-FORWARD 的規則如下:

-A neutron-vpn-agen-FORWARD -o qr-+ -j neutron-vpn-agen-iv4e85f4601   -A neutron-vpn-agen-FORWARD -i qr-+ -j neutron-vpn-agen-ov4e85f4601   -A neutron-vpn-agen-FORWARD -o qr-+ -j neutron-vpn-agen-fwaas-defau   -A neutron-vpn-agen-FORWARD -i qr-+ -j neutron-vpn-agen-fwaas-defau

我們以第一條為例,其含義是:從 router namespace 任何一個 qr-* interface 發出
的流量都會應用 chain neutron-vpn-agen-iv4e85f4601,該 chain 定義如下:

-A neutron-vpn-agen-iv4e85f4601 -m state --state INVALID -j DROP   -A neutron-vpn-agen-iv4e85f4601 -m state --state RELATED,ESTABLISHED -j ACCEPT

其規則為: 1. 如果數據包的狀態為 INVALID,則 DROP。 2. 如果數據包的狀態為 RELATED 或 ESTABLISHED,則 ACCEPT。

其他正常傳輸的數據怎么處理呢? 回到 neutron-vpn-agen-FORWARD chain 的下一條關於 router 外出數據的規則:

-A neutron-vpn-agen-FORWARD -o qr-+ -j neutron-vpn-agen-fwaas-defau

neutron-vpn-agen-fwaas-defau 內容為:

-A neutron-vpn-agen-fwaas-defau -j DROP

可見,數據會被丟棄。 同樣的道理,router 上所有進入 qr-* interface 的數據也會被丟棄。

其結論是:在沒有定義任何 firewall rule 的情況下,進出 router 的數據包都會被丟棄。

ping 和 ssh 測試表明目前 cirros-vm1 確實已經無法與 cirros-vm2 通信。

下節添加新的規則允許 ssh,之后我們也會比較安全組和 FWaaS 的異同。

blob.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM