區域網路

macOS 防火牆阻擋傳入連線

macOS 防火牆控制的是其他電腦向你的 Mac 發起的連線,不控制你的 App 發起的連線。

適用於:「系統設定」>「網路」>「防火牆」適用於 macOS 13 Ventura 及以上版本。較早的版本使用「安全性與隱私權」。檢查日期:2026年10月29日

症狀

  • 其他裝置無法連到你 Mac 上的伺服器、遊戲或共享服務。
  • Mac 不回應其他裝置的 ping。
  • 開發伺服器在 Mac 上可以使用,但同一個 Wi-Fi 上的手機卻連不到。
  • macOS 詢問是否允許某個 App 接受傳入的網路連線。

可能原因

  • 阻擋所有傳入連線。Apple 表示,此選項會阻擋連到非必要服務及所有其他共享服務的連線。
  • 被拒絕的 App。你先前在提示中按了「拒絕」,或該 App 在防火牆「選項」中被設為阻擋。
  • 隱形模式。Mac 不會回應 ping 等探測請求。
  • 伺服器監聽 127.0.0.1。這樣無論防火牆如何設定,都只有 Mac 本身能連線。

如何檢查

  1. 選擇「蘋果」選單 >「系統設定」>「網路」>「防火牆」。查看「防火牆」是否開啟。

  2. 按一下「選項」。查看你的 App 的設定,以及「阻擋所有傳入連線」。

  3. 從「終端機」顯示防火牆狀態。

    /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
    /usr/libexec/ApplicationFirewall/socketfilterfw --getblockall
    /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode
  4. 確認伺服器監聽的是所有位址,而不只是 127.0.0.1。

    lsof -nP -iTCP:8000 -sTCP:LISTEN

如何修正

  1. 如果需要共享或伺服器功能,請在防火牆「選項」中關閉「阻擋所有傳入連線」。

  2. 按一下「加入」按鈕並選取 App,將它設為允許傳入連線。

  3. 按一下「好」,再從其他裝置測試一次連線。

  4. 你也可以從「終端機」允許 App。將路徑換成你的 App。

    sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/Example.app

    需要管理者密碼。

  5. 保持防火牆開啟,只允許必須接受連線的 App。

使用 Kilobat

  1. Kilobat 的過濾器控制的是你的 App 發起的連線,無法取代 macOS 防火牆處理傳入連線。

  2. 若要查看伺服器程序開啟的通訊端,請使用 destinations 指令。

    kilobat destinations --pid 12345

常見問題

macOS 防火牆會阻擋傳出連線嗎?

不會。Apple 將它描述為防範其他電腦所發起連線的保護機制。傳出連線請使用過濾器 App。

隱形模式有什麼作用?

Mac 不會回應來自不明來源的 ping 等探測請求。已允許的 App 仍會收到它們的請求。

資料來源

資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。