目录
- 准备web服务
- 通过pf实现端口转发
- 其他命令
- 参考文章
准备web服务
使用Flask启动一个简单的web服务
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(port=5000)
浏览器访问:http://127.0.0.1:5000/
通过pf实现端口转发
将所有端口8080
的请求,都转发到127.0.0.1:5000
,类似Nginx的反向代理
1、开启IPv4 的转发
# 开启 IPv4 的转发
$ sudo sysctl -w net.inet.ip.forwarding=1
# 查看当前端口转发功能状态
sudo sysctl -a | grep forward
net.inet.ip.forwarding: 1
net.inet6.ip6.forwarding: 0
2、添加转发配置文件
sudo vim /etc/pf.anchors/http
rdr pass on lo0 inet proto tcp from any to any port 8080 -> 127.0.0.1 port 5000
rdr pass on en0 inet proto tcp from any to any port 8080 -> 127.0.0.1 port 5000
查看到的网络名称
$ ifconfig -a
# lo0 是本机ipv4地址 eg: 127.0.0.1
# en0 是局域网ipv4地址 eg: 192.168.0.100
检查正确性
$ sudo pfctl -vnf /etc/pf.anchors/http
3、修改pf配置文件
sudo vim /etc/pf.conf
增加如下配置
# 在 rdr-anchor "com.apple/*" 下添加
rdr-anchor "http-forwarding"
# 在 load anchor "com.apple" from "/etc/pf.anchors/com.apple" 下添加
load anchor "http-forwarding" from "/etc/pf.anchors/http"
重启pf服务
sudo pfctl -ef /etc/pf.conf
浏览器访问:http://127.0.0.1:8080/
其他命令
# 启用pf服务
$ sudo pfctl -e
# 强制重启PF服务
$ sudo pfctl -E
# 关闭PF
$ sudo pfctl -d
参考文章
- https://man.openbsd.org/pfctl
- https://man.openbsd.org/pf.conf
- Mac下使用PF进行端口转发和防火墙配置(类似Linux的iptables)