加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 如何限制反向SSH调整端口?

发布时间:2020-12-13 18:26:24 所属栏目:Linux 来源:网络整理
导读:我们有一个公共服务器,它接受来自防火墙后面的多个客户端的SSH连接. 这些客户端中的每一个都使用ssh -R命令从端口80的Web服务器到公共服务器创建反向SSH隧道. 反向SSH隧道的目标端口(在客户端)为80,源端口(在公共服务器端)依赖于用户.我们计划为每个用户维护
我们有一个公共服务器,它接受来自防火墙后面的多个客户端的SSH连接.

这些客户端中的每一个都使用ssh -R命令从端口80的Web服务器到公共服务器创建反向SSH隧道.

反向SSH隧道的目标端口(在客户端)为80,源端口(在公共服务器端)依赖于用户.我们计划为每个用户维护一个端口地址映射.

例如,客户端A将其端口80的Web服务器隧道传送到我们的端口8000;客户B从80到8001;客户C从80到8002.

Client A: ssh -R 8000:internal.webserver:80 clienta@publicserver

Client B: ssh -R 8001:internal.webserver:80 clientb@publicserver

Client C: ssh -R 8002:internal.webserver:80 clientc@publicserver

基本上,我们要做的是将每个用户绑定到一个端口,并且不允许它们隧道到任何其他端口.

如果我们使用SSH的正向隧道功能和ssh -L,我们可以使用permitopen = host:port配置允许通过隧道传输哪个端口.但是,反向SSH隧道没有等价物.

有没有办法限制每个用户的反向隧道端口?

解决方法

由于您不允许以粗体显示,我假设您希望在SSH客户端进行某种运行时拒绝,以防止端口绑定.所以,我已经为您挖掘了源代码:

serverloop.c:

/* check permissions */
if (!options.allow_tcp_forwarding ||
    no_port_forwarding_flag ||
    (!want_reply && listen_port == 0)
#ifndef NO_IPPORT_RESERVED_CONCEPT
    || (listen_port != 0 && listen_port < IPPORT_RESERVED &&
    pw->pw_uid != 0)
#endif
    ) {
        success = 0;
        packet_send_debug("Server has disabled port forwarding.");
} else {
        /* Start listening on the port */
        success = channel_setup_remote_fwd_listener(
            listen_address,listen_port,&allocated_listen_port,options.gateway_ports);
}

不幸的是,正如您所看到的,除了标准端口之外,没有多少条件可以阻止端口转发.

我打算在iptables中推荐使用mod_owner的相同建议,但杰夫已经打败了我.

您最干净的解决方案就是修改此文件(例如,您可以使用pw-> pw_uid来获取用户连接的uid,并将其映射到正确的端口)并重新编译SSH服务器,但这取决于如何你很舒服.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读