區域網路
macOS 防火牆阻擋傳入連線
macOS 防火牆控制的是其他電腦向你的 Mac 發起的連線,不控制你的 App 發起的連線。
症狀
- 其他裝置無法連到你 Mac 上的伺服器、遊戲或共享服務。
- Mac 不回應其他裝置的 ping。
- 開發伺服器在 Mac 上可以使用,但同一個 Wi-Fi 上的手機卻連不到。
- macOS 詢問是否允許某個 App 接受傳入的網路連線。
可能原因
- 阻擋所有傳入連線。Apple 表示,此選項會阻擋連到非必要服務及所有其他共享服務的連線。
- 被拒絕的 App。你先前在提示中按了「拒絕」,或該 App 在防火牆「選項」中被設為阻擋。
- 隱形模式。Mac 不會回應 ping 等探測請求。
- 伺服器監聽 127.0.0.1。這樣無論防火牆如何設定,都只有 Mac 本身能連線。
如何檢查
選擇「蘋果」選單 >「系統設定」>「網路」>「防火牆」。查看「防火牆」是否開啟。
按一下「選項」。查看你的 App 的設定,以及「阻擋所有傳入連線」。
從「終端機」顯示防火牆狀態。
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate /usr/libexec/ApplicationFirewall/socketfilterfw --getblockall /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode確認伺服器監聽的是所有位址,而不只是 127.0.0.1。
lsof -nP -iTCP:8000 -sTCP:LISTEN
如何修正
如果需要共享或伺服器功能,請在防火牆「選項」中關閉「阻擋所有傳入連線」。
按一下「加入」按鈕並選取 App,將它設為允許傳入連線。
按一下「好」,再從其他裝置測試一次連線。
你也可以從「終端機」允許 App。將路徑換成你的 App。
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/Example.app需要管理者密碼。
保持防火牆開啟,只允許必須接受連線的 App。
使用 Kilobat
Kilobat 的過濾器控制的是你的 App 發起的連線,無法取代 macOS 防火牆處理傳入連線。
若要查看伺服器程序開啟的通訊端,請使用 destinations 指令。
kilobat destinations --pid 12345
常見問題
macOS 防火牆會阻擋傳出連線嗎?
不會。Apple 將它描述為防範其他電腦所發起連線的保護機制。傳出連線請使用過濾器 App。
隱形模式有什麼作用?
Mac 不會回應來自不明來源的 ping 等探測請求。已允許的 App 仍會收到它們的請求。
資料來源
- Apple 支援:在 Mac 上更改防火牆設定
- Apple 支援:在 Mac 上使用防火牆阻擋連線
- Apple 平台安全性:應用程式防火牆
- socketfilterfw(8),macOS 27.2 內建的 man 頁面
資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。