2016/10/09

How to Set IP Port Forwarding on MacOS 10.14 Mojave

更新 2017-09-25:
升級了 High Sierra,流程與 Sierra 相同,因此先直接調整標題方便搜尋。
更新 2018-09-25:
升級了 Mojave,流程與 Sierra 相同,因此先直接調整標題方便搜尋。

--- 以下正文 ---

趁著連假更新了 MacOS Sierra,一切順利,只是 Packet Filter 設定在每次系統進行大更新時就會被重置,之前 EI Capitan 沒有紀錄與 10.10 的差異,趁著這次做一次更新。基本上的流程與 Yosemite 的設定沒有太大不同,唯一需要注意的只有在儲存 plist 時,多了些手續,流程重新整理如下。


欲使用 PF,必須先於 /etc/rc.conf 內將其 enable,內容如下:
pf_enable="YES"
接著編輯 /etc/sysctl.conf,啟用 IP forwarding 功能:
net.inet.ip.forwarding=1
這樣 PF 便可以用來設定 IP Forwarding 功能了。

再來定義 Packet Filter 防火牆規則,規則需要被記載在被稱作是 anchor 的檔案中,通常會將相關的規則,獨立撰寫在一個所謂 anchor 檔案中,而預設存放 anchor 的位置,是位於 /etc/pf.anchors/ 裡頭,這位置預設只有 com.apple 這個檔案,因此為了要訂一組新規則用以區分,就新建立一個名為 net.turbidness 的檔案,內容如下:
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port { 443 8443 } -> 127.0.0.1 port 8443 
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port { 80 8080 } -> 127.0.0.1 port 8080
rdr 是 redirect 的意思,所以以上的設定,可以將連入 80(443) 的 packet redirect 至 8080(8443)。

接著,要將新的 anchor 設定加入 /etc/pf.conf ,首先指定給 rdr anchor 一個 alias name:
rdr-anchor "net.turbidness"
接著於同一個檔案指定 anchor 的路徑,內容如下:
load anchor "net.turbidness" from "/etc/pf.anchors/net.turbidness"
在原本的 pf.conf 裡頭有著 Apple 預設的內容,若不清楚應該加在文件哪一部分,就直接加在相關內容下方即可。到此為止,所有的設定已添加完畢,接著就是讓 PF 正確運行以上的設定。可以利用 pfctl -f /etc/pf.conf 將新的設定檔讀入,或利用 pfctl -d,以及 pfctl -e 來將 PF 關閉之後重新開啟。

最後,若希望開機自動啟用 Port Forwarding,則可以修改 pfctl 於開機載入時的 plist,該檔案位於 /System/Library/LauchDaemons/com.apple.pfctrl.plist,但在編輯檔案時會發現此檔案受到保護為唯讀,因此需要重新開機,進入回復模式(開機時按下  ⌘ + R),再透過終端機將 csrutil 關閉。指令如下:
csrutil disable
再次重開機正常進入系統,此時便可編輯 com.apple.pfctrl.plist 檔案了,plist 為 xml 內容格式,只要將 -e 參數加入內容中的 Array 列表最後,這樣下次開機時, pfctl 便會載入 pf.conf 後,並緊接著啟動了。

最後,重新開機前,記得先進入回復模式,將 csrutil 重新啟動,加強系統安全性。
csrutil enable

(本文為回覆 MyEclipse Forum 文章之後另外整理的內容 - 連結)

肉包

小明總是在住家附近的肉包店買肉包,20 年來,肉包從一顆 10 元漲到一顆 30 元,從一天可以吃三顆,到一天只能吃一顆,今天他心血來潮問了老闆為何這些年漲了這麼多,老闆很驕傲地回答... 「這區的店租漲價了啊!然後你沒發現我們現在店面不但有冷氣,又有座位,還有 80"...