幫我們的粉絲專頁按個讚!
本篇將教您如何使用 CloudFlare 來保護您的 Home Assistant。
事前準備
- 擁有一個網域:如未購買可參考 Gandi.net 購買,可依自身需求選擇適合的網域、價位 )
- Home Assistant
- CloudFlare 帳號:請先註冊,並將擁有的網域設定上去
將 Home Assistant 的預設 Port 進行更換
目前 CloudFlare 所支援的 HTTPS Port 如下:
- 443
- 2053
- 2083
- 2087
- 2096
- 8443
所以在這之前,我們需要把 Home Assistant 的 Port 更改為 CloudFlare 所支援的 HTTPS Port 。
在設定檔中,設定 http integration 中的 server_port,這邊以8443作為範例
http:
server_port: 8443
修改完成之後,重新啟動Home Assistant,並且如果在路由器中有設定Port Forwarding規則的話,也要一併更改。
在 CloudFlare 中新增一個子網域
前往 CloudFlare 的 DNS 控制台,新增子網域址向您的 Home Assistant。
- 按新增紀錄
- 類型選擇 CNAME
- 名稱設定為您想要的子網域(這邊以 homeassistant 作為範例)
- 目標填寫您 DuckDNS 所對應的網域
- Proxy 狀態請記得打勾,要不然無法透過 CloudFlare 進行保護
設定 CloudFlare 的加密模式
前往 CloudFlare 控制台,將加密模式設定為完整 (嚴格)。
為 Home Assistant 設定 SSL 證書
這時候試試先可以試試看能不能透過您的子網域連線上去,前往 https://homeassistant.您的網域:8443。
這時您可能會發現網頁顯示Error 526(Invalid SSL certificate)的錯誤。
因為這只有從您到Cloudflare有進行加密連線,而Cloudflare與HomeAssistant之間是沒有加密連線的,所以我們要讓Cloudflare與HomeAssistant之間進行加密連線。
那在這裡,我們可以使用 CloudFlare 提供的原點憑證(Origin Certificate)來達到 CloudFlare 與 Home Assistant 之間的加密連線。
在主機名稱的選項中,選擇剛剛新增的子網域後按下建立。
這時候會看到原點憑證(Origin Certificate)與私密金鑰(Private Key),將這兩個內容,分別使用電腦中的文字編輯器儲存下來,並上傳至HomeAssistant。
- 將原點憑證(Origin Certificate)另存到名稱叫做origin.pem的檔案
- 將私密金鑰(Private Key)另存到名稱叫做origin.pem的檔案
- 將這兩個上傳到 <您的Homeassistant>\ssl\cloudflare路徑中
再來在設定檔中,設定 http integration 中的 ssl_certificate 與 ssl_key 的路徑到剛剛上傳的檔案。
http:
server_port: 8443
ssl_certificate: /ssl/cloudflare/origin.pem
ssl_key: /ssl/cloudflare/private.pem
修改完成之後,重新啟動Home Assistant,使CloudFlare與HomeAssistant之間進行加密連線。
這時候再次前往 https://homeassistant.您的網域:8443,可以看到已經能夠正常連線了。
阻擋來自非CloudFlare的流量
因為我們現在已經使用CloudFlare來加密流量,但如果有人知道HomeAssistant伺服器的真實IP的話,它就可以繞過CloudFlare直接存取我們的HomeAssistant。
為了避免此狀況,可以前往路由器中的防火牆,設定防火牆規則。
這邊以RouterOS 指令作為範例,先新增 CloudFlare 的 IP 到 Address List (CloudFlare 的IP列表):
# 新增 CloudFlare 的 IPv4 到 CloudFlarev4 列表
/ip firewall address-list
add list=CloudFlarev4 address=173.245.48.0/20
add list=CloudFlarev4 address=103.21.244.0/22
add list=CloudFlarev4 address=103.22.200.0/22
add list=CloudFlarev4 address=103.31.4.0/22
add list=CloudFlarev4 address=141.101.64.0/18
add list=CloudFlarev4 address=108.162.192.0/18
add list=CloudFlarev4 address=190.93.240.0/20
add list=CloudFlarev4 address=188.114.96.0/20
add list=CloudFlarev4 address=197.234.240.0/22
add list=CloudFlarev4 address=198.41.128.0/17
add list=CloudFlarev4 address=162.158.0.0/15
add list=CloudFlarev4 address=104.16.0.0/12
add list=CloudFlarev4 address=172.64.0.0/13
add list=CloudFlarev4 address=131.0.72.0/22
# 新增 CloudFlare 的 IPv6 到 CloudFlarev6 列表
/ipv6 firewall address-list
add list=CloudFlarev6 address=2400:cb00::/32
add list=CloudFlarev6 address=2606:4700::/32
add list=CloudFlarev6 address=2803:f800::/32
add list=CloudFlarev6 address=2405:b500::/32
add list=CloudFlarev6 address=2405:8100::/32
add list=CloudFlarev6 address=2a06:98c0::/29
add list=CloudFlarev6 address=2c0f:f248::/32
再來設定為僅允許來自 CloudFlare 的 IP 連線至 Home Assistant
# 僅允許 CloudFlarev4 列表中的IP連線
/ip firewall filter add action=drop chain=forward comment="drop from !CloudFlarev4 to 8443" protocol=6 dst-port=8443 src-address-list="!CloudFlarev4"
# 僅允許 CloudFlarev6 列表中的IP連線(有待確認)
/ipv6 firewall filter add action=drop chain=forward comment="drop from !CloudFlarev6 to 8443" protocol=6 dst-port=8443 src-address-list="!CloudFlarev6"
在 Home Assistant 中允許 Proxy 請求
在設定檔中,設定 http integration 中的 use_x_forwarded_for 與 trusted_proxies。
http:
server_port: 8443
ssl_certificate: /ssl/cloudflare/origin.pem
ssl_key: /ssl/cloudflare/private.pem
use_x_forwarded_for: true
trusted_proxies:
- 173.245.48.0/20
- 103.21.244.0/22
- 103.22.200.0/22
- 103.31.4.0/22
- 141.101.64.0/18
- 108.162.192.0/18
- 190.93.240.0/20
- 188.114.96.0/20
- 197.234.240.0/22
- 198.41.128.0/17
- 162.158.0.0/15
- 104.16.0.0/13
- 104.24.0.0/14
- 172.64.0.0/13
- 131.0.72.0/22
- 2400:cb00::/32
- 2606:4700::/32
- 2803:f800::/32
- 2405:b500::/32
- 2405:8100::/32
- 2a06:98c0::/29
- 2c0f:f248::/32
總結
基本上這樣設定完後就可以透過 CloudFlare 來保護您的 Home Assistant了,如上面內容有疏漏,還請告知,我會盡快補充,謝謝。
祝各位有個愉快的智慧家庭體驗。
延伸閱讀
類別:教學 智慧家庭
標籤:CloudFlare Home Assistant HTTPS SSL 智慧家庭
聽說有隻叫做夜空藍喵の夜喵
這位編輯懶到什麼自我介紹也沒打...