有段时间自己写 web server 的时候考虑到想直接绑定 80 和 443 端口,但默认情况下 Linux 只有 root 用户或经过提权才能绑定 1024 以下的端口(如 80、443)。此时如果既不想用特权用户权限跑某个服务(避免安全问题),也想使用这些端口,那就需要一些配置。
例子:将 80 端口流量转发到 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
此时外部已经可以通过 80 端口访问服务的 8080 端口服务,但本机是无法这样访问的。可以加上以下条件解决:
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080
如果需要移除以上规则,则可以:
sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -D OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080
赋予某个程序使用 1024 以下端口的权限:
sudo /sbin/setcap 'cap_net_bind_service=+ep' ~/.bun/bin/bun
这里 ~/.bun/bin/bun 可以换成任何程序,如 node.js、python、go
一般我比较推荐方法2,相比于方法1没有中转开销。