我已经搜索了很长一段时间,但找不到它.
我在Ubuntu Linux上并希望在端口80上运行服务器,但由于Ubuntu的安全机制,我收到以下错误:
java.net.BindException: Permission denied:80
解决方法
简答:你不能.低于1024的端口只能由root打开.根据评论 – 好吧,你可以使用
CAP_NET_BIND_SERVICE,但是这种应用于java bin的方法将使得任何java程序都可以使用此设置运行,如果不是安全风险,这是不可取的.
答案很长:您可以将端口80上的连接重定向到您可以作为普通用户打开的其他端口.
以root身份运行:
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
由于环回设备(如localhost)不使用预先路由规则,如果需要使用localhost等,也可以添加此规则(thanks @Francesco):
# iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
注意:上述解决方案不适合多用户系统,因为任何用户都可以打开端口8080(或您决定使用的任何其他高端口),从而拦截流量. (致CesarB).
# iptables -t nat --line-numbers -n -L
Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 redir ports 8088 2 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8080
你感兴趣的规则是nr. 2,所以删除它:
# iptables -t nat -D PREROUTING 2