首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在setcap的帮助下,将端口80上的远程端口向前设置到本地主机?

如何在setcap的帮助下,将端口80上的远程端口向前设置到本地主机?
EN

Unix & Linux用户
提问于 2012-06-23 14:21:36
回答 5查看 30.6K关注 0票数 19

当我是NATed时,我想简单地接受用于开发的连接,所以我尝试这样做:

代码语言:javascript
复制
$ ssh ubuntu@example.org -R 80:localhost:80

当我试图绑定一个低端口时,它失败了:

代码语言:javascript
复制
Warning: remote port forwarding failed for listen port 80

所以我发现我可以做setcap 'cap_net_bind_service=+ep' /my/application来允许它侦听低于1024的端口。所以我把这个放在我的suders crontab里:

代码语言:javascript
复制
@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd

但它还是不让我绑定到80端口。我做错了什么?我只是打算用nginx来代理8080或iptables之类的东西,但是我仍然很好奇为什么我想要做的事情不起作用。

EN

回答 5

Unix & Linux用户

回答已采纳

发布于 2012-07-30 12:41:56

除非登录用户的用户id为0(根用户),否则OpenSSH将拒绝绑定到特权端口。有关的代码行是:

代码语言:javascript
复制
if (!options.allow_tcp_forwarding ||
    no_port_forwarding_flag ||
    (!want_reply && listen_port == 0) ||
    (listen_port != 0 && listen_port < IPPORT_RESERVED &&
    pw->pw_uid != 0)) {
        success = 0;
        packet_send_debug("Server has disabled port forwarding.");

资料来源:http://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate=1.162行1092-1098。

如果您好奇的话,pwstruct passwd *类型的,在linux上是用/usr/include/pwd.h定义的

票数 19
EN

Unix & Linux用户

发布于 2013-12-05 10:14:02

我遇到了类似的问题,所以我的解决方案是将DNAT规则添加到nat表的OUTPUT链中:

代码语言:javascript
复制
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -p tcp --dport 80 \
-j DNAT --to-destination :8080

对于所有本地生成的tcp数据包,此规则有效地将目标端口80替换为8080。

如果您也希望转发任何传入连接,那么在PREROUTING nat链中添加一个额外的规则:

代码语言:javascript
复制
iptables -t nat -A PREROUTING -d 10.0.0.200 -p tcp --dport 80 \
-j REDIRECT --to-port 8080

其中,10.0.0.200是应该将传入连接转发到web服务的接口的IP地址。

票数 6
EN

Unix & Linux用户

发布于 2019-02-06 20:54:43

从客户端,您可以通过sudo运行ssh:

代码语言:javascript
复制
sudo ssh -L 80:127.0.0.1:80 myuser@myhost.com

虽然我不能肯定这对您本地系统的安全影响,但它还是有效的。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/41451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档