上一篇曾提到,設定 Let's Encrypt 憑證是為了方便萬一臨時在外面,沒有自己電腦或 WinBox 管理工具的情況下,可以快速用瀏覽器方式進行 Mikrotik RouterOS 設備管理。但應該沒有人想把管理後台直接曝露在外面,高掛「歡迎光臨 My Home」。

在這強烈推薦用 RouterOS 提供的 Port Knocking 機制,限制管理後台的存取方式以提高安全性。Port Kocking 機制,我自己喜歡形容這像是一個開密碼鎖的過程,設定概念會像下圖

第一階段 - 先連線到指定的埠號,如 1234
RouterOS 會將觸發此連線埠的 IP 放入指定的 Address List (P1-Knocking),且只保留 30 秒或指定的時間內。

第二階段 - 連線到另一個指定埠號,如 12345
基於第一階段的 Address List,允許及必須在這 30 秒內或指定時間內,完成連入第二階段的指定埠號,會將其 IP 列入另一個 Address List (P2-Trusted),且設定 timeout 時間為 1 小時或指定時間。

最後,設定網頁管理或 WinBox 的存取,僅允許在 P2-Trusted 清單中的 IP 可連入。

老樣子,使用 Terminal 執行指令增加防火牆規則最快。針對第一階段及第二階段的判斷規則增加,指令參考如下。

/ip firewall filter add action=add-src-to-address-list address-list="P1-Knocking" address-list-timeout=30s chain=input dst-port=1234 protocol=tcp comment="**P1-Knocking**" place-before=0
/ip firewall filter add action=add-src-to-address-list src-address-list="P1-Knocking" address-list="P2-Trusted" address-list-timeout=1h chain=input dst-port=12345 protocol=tcp comment="**P2-Trusted**" place-before=0

最後,如果 WinBox 的預設連接埠 8291,未曾設置任何防火牆規則可對外連接,想加以利用 Port Knocking 機制完成設定,可直接參考下面指令增加規則。

/ip firewall filter add action=accept src-address-list=P2-Trusted protocol=tcp chain=input in-interface-list=WAN dst-port=8291 comment="**WinBox**" place-before=0

如果本來就已經有防火牆規則是直接連線到 WinBox 、HTTPS 或其他,可到 IP \ Firewall \ Filter Rules,找到對應的規則,用 UI 方式調整 Src. Address List 設定,以提高連線安全性。

上述動作即完成了佈署,但另一個問題來了,要怎樣才能完成這開密碼鎖...不是,達成這個依序連線到指定埠的過程呢?

無須其他輔助工具,最簡單的方式就是,開個瀏覽器輸入位址加上埠號,依序連線後,就可以成功連線到管理後台或其他想要的連接。

整個操作過程,我用 Lab 環境模擬,如下動畫
192.168.16.104 是 RouterOS 的 Wan IP
192.168.16.200 是發動連線的外部 IP

設定小記

  1. 請避免使用範例增加規則,盡可能依據需求並設計連線埠。
  2. 是否只能兩階段敲埠?並沒有硬性,想要只設計一個或超過三個以上都可以,端看防火牆規則的設計。
  3. 用參考指令新增加的規則,預設會放置在最前面做判讀。
  4. 如果是用 UI 方式點選 + 號增加規則,產生的規則會在所有項目的最後,請務必檢視並調整順序,否則可能被其他規則所阻擋,導致無法連線。
  5. 如果有使用 Mikrotik 提供的 Bruteforce prevention 或其他像是防止被掃埠的規則在防火牆,請將本文設定的規則,放在那些規則的前面,因為使用瀏覽器去敲埠,觀察也會觸發那些規則的偵測。

參考資料

Mikrotik docs - Port knocking
Mikrotik docs - Bruteforce prevention
en2o Studio - MikroTik RouterOS 防止被掃描 Port