1. 問題
Mac 與 linux一樣宣渗,1024以下端口為特權(quán)端口,只有root用戶才有權(quán)監(jiān)聽。因此捣郊,要在mac上使用web服務(wù)軟件監(jiān)聽80或433端口,要么以root用戶啟動(dòng)應(yīng)用程序慈参,要么使用端口轉(zhuǎn)發(fā)呛牲。
2. 使用ipfw(Internet Protocol Firewall)設(shè)置端口轉(zhuǎn)發(fā)
//不過,ipfw工具在高版本mac里面已經(jīng)不存在了
ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
3. 使用pf(packet filter)
1.創(chuàng)建anchor文件
anchor文件定義了我們想要轉(zhuǎn)發(fā)的端口驮配。
//文件位置
/etc/pf.anchors/<CUSTOM NAME>
//文件內(nèi)容娘扩,可以添加多行以下格式內(nèi)容
rdr pass on lo0 inet proto tcp from any to any port <source port> -> 127.0.0.1 port <destination port>
//如:8080 轉(zhuǎn)發(fā)到80
//rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
2. 測(cè)試anchor文件
//測(cè)試命令
sudo pfctl -vnf /etc/pf.anchors/<CUSTOM NAME>
這是時(shí)候端口轉(zhuǎn)發(fā)并未生效尊勿,只是檢查anchor文件是否合法。如果看到以下輸出結(jié)果畜侦,證明是有效的元扔。
fctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.
rdr pass on lo0 inet proto tcp from any to any port = <SOURCE PORT> -> 127.0.0.1 port <DESTINATION PORT>
3. 創(chuàng)建pfctl config文件
anchor文件驗(yàn)證后,需要?jiǎng)?chuàng)建pfctl config文件旋膳。
//文件位置
/etc/pf-<CUSTOM NAME>.conf
//配置內(nèi)容
rdr-anchor "forwarding"
load anchor "forwarding" from "/etc/pf.anchors/<CUSTOM NAME>"
4. 測(cè)試配置文件
可通過以下命令啟動(dòng),停止pfctl
//啟動(dòng)
sudo pfctl -ef /etc/pf-<CUSTOM NAME>.conf
//停止
sudo pfctl -df /etc/pf-<CUSTOM NAME>.conf
4. 端口轉(zhuǎn)發(fā)啟動(dòng)生效
上面的命令可以根據(jù)需求啟動(dòng)和停止端口轉(zhuǎn)發(fā)澎语。另外如果想要機(jī)器啟動(dòng)自動(dòng)開啟端口轉(zhuǎn)發(fā),可以通過launchctl plist file验懊。
//文件位置
/Library/LaunchDaemons/com.apple.pfctl-<CUSTOM NAME>.plist
//文件內(nèi)容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.pfctl-<CUSTOM NAME></string>
<key>Program</key>
<string>/sbin/pfctl</string>
<key>ProgramArguments</key>
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf-<CUSTOM NAME>.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
//添加到啟動(dòng)運(yùn)行列表
sudo launchctl load -w /Library/LaunchDaemons/com.apple.pfctl-<CUSTOM NAME>.plist