Unifi智慧家庭防火牆規則分享(上)
接下來我們要利用Unifi OS網路設定模組去建立針對智慧家庭的防火牆規則,讓我們在享受自動化、懶人化的居家體驗下也能盡量防範不肖人士竊取我們重要的資料與隱私。
Unifi Firewall rules 邏輯介紹
因為新版的介面在防火牆設定這塊真的是不太好用…所以我們還是切到舊版來介紹比較方便,一樣點選左下角的Settings,再選左邊的System Settings欄位,中間會看到已開啟的New User Interface選項,把它關掉並按Deactivate確認後就會自動跳轉到舊版的控制頁面,阿如果你本來就是舊版的請直接略過這段…
![切換到舊版的Unifi Controller頁面](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/10/%e5%88%87%e6%8f%9b%e8%88%8a%e7%89%88.png)
WAN
、LAN
、GUEST
三大類,其中WAN
開頭的就是跟外網有關,而LAN
開頭的就是跟內部的區域網路有關,GUEST
就是跟訪客網路有關的設定,這三大類又個別分成IN
、OUT
、LOCAL
三種路徑區別:![進入防火牆設定頁面](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/enter-fw.png)
IN
:指我們的流量從某一個Network(ex:192.168.10.x)進入Router並通往另一個Network(ex:192.168.20.x or WAN)的流程。OUT
:指從流量離開Router通往某一個Network(ex:192.168.10.x or WAN)的流程。LOCAL
:指流量從某一個Network(ex:192.168.10.x, 192.168.20.x or WAN)通往Router的流程。
從上面可以看出來如果我們要擋住IOT Vlan通往LAN Vlan的流量,那麼其實在IN
或OUT
上制定規則都是可行的,差別在於流量從IOT Vlan進入Router前就被禁止,還是離開Router前往LAN Vlan才被禁止,一般要建立這種從某個Vlan
通往另一個Vlan
的規則都會直接在LAN IN
裡面制定,讓流量不會進入Router。
來創建第一條規則吧
大概了解前面講的規則區別後我們來建立我們第一條防火牆規則試看看,首先我們來建立一條允許已建立/相關的連線通訊的規則,聽起來不知道在幹嘛,其實就是讓已經建立的連線們可以互相溝通的規則,首先在FIREWALL介面點選Rules IPv4的LAN IN
規則,按最下面的CREATE NEW RULE建立新的規則。
![建立防火牆規則頁面](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/fw1.png)
![防火牆規則命名、選擇Action](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/fw2.png)
![防火牆規則狀態設定、Source與Destination設定](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/fw3.png)
成群結黨還是比較好辦事的
再建立下一條防火牆規則前還有一件事情要做,就是建立Group,目前我們去區分每個客戶端(就是所有連上我們網路的裝置)的方法就只有Vlan
,但不是所有防火牆規則都能只用Vlan
來建立,我們需要先建立群組以後才會方便管理。
首先在FIREWALL介面點選Groups選項並點選下面的CREATE NEW GROUP建立群組,我們先建立一個代表所有Private Address的群組,這種代表所有內部IPv4範圍的群組統稱RFC1918(不要問我為何我也不清楚),所以我們就把群組名稱取做RFC1918,然後點選Address IPv4類別,下面輸入192.168.0.0/16
、172.16.0.0/12
、10.0.0.0/8
就包含所有Private Address了。
![建立Groups頁面](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/gp1.png)
![建立RFC1918群組](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/gp2.png)
接著我們來建立第二條規則,允許LAN Vlan的裝置連線到所有內部網路!一樣在FIREWALL介面點選Rules IPv4的LAN IN
規則,按最下面的CREATE NEW RULE建立新的規則,這次取名為Allow LAN to All Local IP,要執行的Action選擇Accept代表我們允許連線,我們這條規則是從LAN Vlan出發的封包進入Router後可以前往任何內部網路也就是前面創立的RFC1918群組,,所以SOURCE的地方我們要選擇Network並且指定為LAN這個Vlan網路,然後目的地的類型要選擇Address/Port Group,IPv4 Address Group的地方選擇我們剛剛創地的RFC1918群組,Port Group不指定直接選擇Any,按下儲存後我們就創立了一個允許LAN Vlan的裝置連線到所有內部網路的防火牆規則囉!
![Allow LAN to All Local IP防火牆規則設定畫面](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/fw4.png)
建立拒絕連線的防火牆規則
前面我們介紹的兩條規則都是允許不同Vlan
溝通連線的防火牆規則,現在我們來建立禁止除了LAN Vlan內的裝置連線到其他網路設備的防火牆規則,這條規則會擋下所有跨Vlan
的連線,除了我們前面特別允許的規則除外,首先我們一樣在FIREWALL介面點選Rules IPv4的LAN IN
規則,按最下面的CREATE NEW RULE建立新的規則Block other vlan,因為是要禁止連線所以這邊的Action選擇Drop讓嘗試連線的裝置顯示連線逾時,其實要選擇Reject也可以但就會直接顯示連線被拒絕感覺比較派一點,接著SOURCE跟DESTINATION都直接設為RFC1918群組,代表從所有內部網路連線到其他所有內部網路都是不允許的。
![](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/fw5.png)
![Block other vlan防火牆規則設定畫面](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/fw6.png)
這邊要來提一下Unifi防火牆規則的執行順序,從FIREWALL介面點選Rules IPv4的LAN IN
的規則條列畫面中可以看到最左側有一個RULE INDEX,Unifi防火牆規則會照下圖紅色箭頭由INDEX小至大執行,排在上面的規則會先被執行才執行下面的,所以我們要把Action是Accept的規則擺在上面讓他先允許連線,接著執行下面的Drop規則時上面先執行的Accept才會維持允許連線的狀態,否則先執行完Block other vlan規則以後你下面才執行的Allow LAN to All Local IP就會失效,所以大家創完各種防火牆規則後記得來這邊調整一下他們的RULE INDEX,直接用滑鼠拉前面的藍色小十字標示就可以拖動該條規則改變他的RULE INDEX了。
![防火牆規則執行order](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/fw7.png)
讓我們來試看看防火牆規則是不是真的有成功建立,我先把我的筆電連到IOT Vlan的WiFi,可以從下圖紅匡看到我的Private IP變成192.168.20.111
,我的桌機Private IP固定在LAN Vlan的192.168.10.56
,照我們剛剛建立的規則如果我從筆電要去連線桌機就會如下圖顯示Request timeout
,代表我們剛建立的Drop防火牆規則是成功的!
![嘗試從IOT Vlan連線至LAN Vlan](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/iot-ping-lan.png)
接著我們把筆電連回LAN Vlan的WiFi測試看看Allow LAN to All Local IP這條規則有沒有成功執行,從下圖可以看到我們筆電的Private IP變成192.168.10.63
,這次我們試著從筆電去連線在IOT Vlan Private IP為192.168.20.56
的智慧家庭設備,可以看到封包是可以送過去的代表連線成功啦!
![嘗試從LAN Vlan連線至IOT Vlan](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/lan-ping-iot.png)
建立傳說中的神秘通道
目前我們網路的狀態是LAN Vlan可以連線到任何Vlan
設備,而其他Vlan
的裝置都沒辦法跨Vlan
連線,但這樣會造成我們在家中連LAN Vlan WiFi的手機沒辦法控制IOT Vlan裡的裝置,所以我們必須照"針對智慧家庭的Vlan規劃"中規劃的一樣,在LAN Vlan中架設智慧家庭主機(例如:Homekit中樞設備、Home assistant server…等等。),並且開放這些IP讓IOT Vlan的智慧裝置們可以連線。
首先我們要新增一個在LAN Vlan中可以允許連線的IP的群組,一樣FIREWALL介面點選Groups選項並點選下面的CREATE NEW GROUP建立群組,群組名稱我這邊取做HA server,Type選擇Address IPv4,然後下面填入我們允許IOT Vlan設備可以連到LAN Vlan內的IP,像這邊我目前是有三組IP,分別是當作Homekit智慧中樞的Ipad跟Homepod mini,還有架設在桌機上的Home assistant server,未來若還有新增更多智慧家庭中心的設備可以再加IP進這個群組方便管理。
![建立HA Server Groups](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/ha-ip.png)
接著就來新增一條LAN IN
的規則,我是取名叫Allow IOT to HA server,要執行的Action選擇Accept,SOURCE的地方我們要選擇Network並且指定為VLAN20_IOT這個Vlan網路,然後目的地的類型要選擇Address/Port Group,在IPv4 Address Group的地方選擇我們剛剛創地的HA server群組,Port Group不指定直接選擇Any,最後儲存設定就新增好我們的神秘通道啦!
![建立Allow IOT to HA server防火牆規則](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/fw8.png)
一樣我們來試看看這條規則有沒有成功建立,但我們要先去LAN IN
規則總表的地方確認剛新增的規則排列的比Drop的規則上面,才不會因為執行順序的關係失敗,接著我們把筆電連上IOT Vlan的WiFi網路,一樣從Terminal上可以執行指令查看目前的Private IP為192.168.20.111
代表筆電是在IOT Vlan裡面,接著我們試看看連到我們Private IP固定在LAN Vlan的192.168.10.56
的桌機,跟前面的結果一樣顯示Request timeout
,代表新增Allow IOT to HA server還是能順利維持IOT Vlan無法連線LAN Vlan的防火牆規則。
![嘗試從IOT Vlan連線至LAN Vlan](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/iot-ping-lan.png)
然後我們一樣讓筆電在IOT Vlan內並且去嘗試連線192.168.10.48
,也就是我們架設在LAN Vlan的Home assistant server,從下圖可以看到我們剛剛新增的防火牆規則起作用了,IOT Vlan的裝置可以順利連線到LAN Vlan內我們指定的IP!
![嘗試從IOT Vlan連線至LAN Vlan內的HA server Groups](https://cdn.jsdelivr.net/gh/funskie/blog_pic/images/2021/11/iot-ping-ha.png)
一切看起來很美好,但是…
目前的防火牆規則架設看起來都順利完成,成功讓IOT Vlan內的智慧家庭裝置都最大限度的跟需要保護的LAN Vlan做區隔,只要確保我們HA server群組內的IP都是我們確認過安全的裝置,那麼就算IOT Vlan的智慧裝置有些有資安漏洞也可以盡量降低風險,但其實目前的防火牆設置還是有些漏洞需要解決,可是我寫到這發現這篇文好像真的太長了,就把他切成上下集每天到天橋下輪流講吧…