ssh的代理和端口转发机制介绍

ssh的代理和端口转发机制介绍,第1张

本文介绍通过ssh建立隧道的三种方式。

ssh的隧道均通过端口转发来实现,包括三种模式:

MobaXterm作为一个良心的终端工具,在其MobaSSHTunnel菜单项可以帮助我们基于图形化的方式建立上述三种隧道,其提供的向导也能帮助我们更有效的理解和记住上面这3个参数。因此本文借用这些向导中的截图来进行说明。

实现功能:把ssh服务器能够访问的ip和端口映射到客户端的指定端口,这样在客户端网络内访问客户端的指定端口就能访问到ssh服务器所在网络中的服务。经常使用的场景是客户端自身通过localhost:<指定端口>去访问。

参数说明:

实现功能:把ssh客户端能访问到的ip和端口映射到ssh服务器的指定端口,这样在服务器端的网络内访问服务器的指定端口就能访问到ssh客户端算在网络中的服务。

参数说明:

动态端口转发实际上是本地端口转发的升级版,除了建立本地端口转发之外,这种模式还在ssh的通信两端启动了socks5代理服务,并且通过本地端口转发机制把两个socks5代理连接在一起,因此当访问本地的socks5服务时实际上也是在访问远程的socks5服务。这样当指定客户端作为socks5代理之后,实际上相当于把客户端放入服务器端所在网络中,能够访问网络中的任意一个服务,而无需为每个服务(ip:端口)都配一次本地端口转发规则。

参数说明:

通过跳板机把本地访问转发到远程服务

通过跳板机

把本地 127001:2345 的请求都转发到 1921682191:9742 上

对本地服务或者远程服务经常因为防火墙或其他网络问题导致服务端口受限的情况下,往往需要对所提供的服务端口做转发,本文采用 SSH 实现本地或远程端口的转发,同时在网络畅通,而连接断开的情况下自动重新连接。

SSH本地端口转发命令:

​ 其中, 9907 是本地新开启的端口服务, 3380 为远程Host实际提供服务的端口,在本地终端执行以上命令后,实现请求本地的 9907 端口即可访问到远程的 3380 服务,重点在 -L 参数;Even:远程的 3380 不是可直接访问。

SSH远程端口转发命令:

​ 其中, 8888 是远程新开启的端口服务, 9999 为本地实际提供服务的端口,在本地终端执行以上命令后,实现请求远程的 8888 端口即可访问到本地的 9999 服务,重点在 -R 参数,远程SSH服务需要做相关配置。

​ Details Click Here

Screen命令: Details

​ 查看创建的虚拟会话: screen -ls

​ 重新进入虚拟会话: screen -DR

Telnet it

在Linux下,默认端口1024下的程序是要在root下才能使用的,在其他用户下,如果尝试使用将会报错。在有的时候,我们可能考虑程序运行在root帐户下,可能会给Linux系统带来安全风险。那如何能够让非root用户运行的程序能够对外启用小于1024的端口呢?本文尝试给出一些方法: \x0d\\x0d\第一种方法:\x0d\SetUID\x0d\为用户的应用程序在执行位设置user ID能够使程序可以有root权限来运行,这个方法让程序能够像在root下运行有同样的效果,不过需要非常小心,这种方法同样会带来安全风险,特别是当要执行的程序本身存在安全风险。使用的方法是:\x0d\chown rootroot /path/to/application #使用SetUID chmod u+s /path/to/application \x0d\\x0d\我们可以看到在系统下,/usr/bin/passwd这种文件,就使用了SetUID,使得每个系统的用户都能用passwd来修改密码——这是要修改/etc/passwd的文件(而这个只有root有权限)。\x0d\既然要使用非root用户运行程序,目的就是要降低程序本身给系统带来的安全风险,因此,本方法使用的时候需要特别谨慎。 \x0d\第二种方法:\x0d\CAP_NET_BIND_SERVICE\x0d\从21开始,Linux内核有了能力的概念,这使得普通用户也能够做只有超级用户才能完成的工作,这包括使用端口1。\x0d\获取CAP_NET_BIND_SERVICE能力,即使服务程序运行在非root帐户下,也能够banding到低端口。使用的方法:\x0d\#设置CAP_NET_BIND_SERVICE setcap cap_net_bind_service =+ep /path/to/application \x0d\\x0d\Note:\x0d\1 这个方法并不是所有Linux系统通适,内核在21之前的并没有提供,因此你需要检查要使用此方法所在系统是否支持(Linux must support capacity);\x0d\2 另外需要注意的是,如果要运行的程序文件是一个脚本,这个方法是没有办法正常工作的(Script won't work)。 \x0d\第三种方法:\x0d\Port Forwarding\x0d\如果要运行的程序有权限监听其他端口,那么这个方法是可以使用的,首先让程序运行在非root帐户下,并绑定高于1024的端口,在确保能正常工作的时候,将低端口通过端口转发,将低端口转到高端口,从而实现非root运行的程序绑定低端口。要使用此方法可以使用下面的方式:\x0d\# Enable the IP FORWARD kernel parameter sysctl -w netipv4ip_forward=1 # Use iptables rules to redirect packets iptables -F -t nat iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to:8088 \x0d\\x0d\第一步使用sysctl确保启用IP FORWARD功能(此功能在Red Hat/CentOS默认是被禁用的),注意,代码中使用的sysctl设置是临时性设置,重启之后将会被重置,如果要长久保存,需要在/etc/sysctlconf文件内修改:\x0d\# Default value is 0, need change to 1 # netipv4ip_forward = 0 netipv4ip_forward = 1 \x0d\\x0d\然后从文件中加载新的配置\x0d\# load new sysctlconf sysctl -p /etc/sysctlconf # or sysctl -p # default filename is /etc/sysctlconf \x0d\\x0d\第二步就是使用iptables的规则来实现端口转发到程序所在的端口,示例中我们要将80端口转发到8088。\x0d\此种方法能够比较好的达到我们的目的,我们的程序可以通过非root用户来运行,并能够对外提供低端口号的服务。 \x0d\第四种方法:\x0d\RINETD2\x0d\这种方法使用的也是端口转发,此工具可以将本地端口映射到远程端口,但此功能对于我们当前的功能来说,有点鸡肋,毕竟我们新增了一个额外的程序,这将可能会增加我们系统的风险性。在此不做推荐。

如果想不通过访问路由器,这是不可能实现的。这个功能并不是windows决定,而是由路由器决定,路由器他的 *** 作系统并不是windows,每个厂家的设置方法也不一样,没有一个标准的协议。

首先他的工作原理你要搞懂。简单一点的讲他是一个内网与外网的中转服务器。一个外接设备,所以你要想设置他,你只能通过他的接口(一般都是WEB界面,你在程序中想设置他的话,你只能通过他提供的接口方式去访问,不访问,那是肯定不行的)。

比如我想用wan口的IP,1921682180,远程连接lan口内网19216818235的ubuntu,如何实现:

在防火墙下面添加如下规则 cat /etc/config/firewall

实际实现在iptable的nat表下面添加了如下规则

这样通过wan ip加src_dport就可以访问到内网机器的ssh端口了。

dmz就是加强版的端口转发,比如你内网IP里面有22端口给ssh用,也有80端口给web用,也有23端口给telnet用。如果用端口转发的话,你需要建立三条端口转发的规则。用dmz的话一下子就都可以了。

在防火墙下面添加如下规则 cat /etc/config/firewall

实际实现在iptable的nat表下面添加了如下规则

openwrt上面使用miniupnpd服务来实现upnp服务

/etc/config/upnpd里面的log_output设置成1,可以在logread下查看交互日志。

右键查看属性可以看到路由器的信息

抓包可以看到路由器发送SSDP广播包给239255255250,NOTIFY消息内容包含上面信息。

抓包可以看到路由器发送SSDP广播包给239255255250,NOTIFY消息内容被byebye。

upnp可以通过另一种方式实现端口映射,就是客户端告诉路由器说,我想要通过哪个端口应该到哪个端口,然后路由器帮忙建立端口转发规则。

ubuntu安装upnpc

ubuntu的ssh添加2222端口,upnp默认只允许1024-65535端口的映射

sudo vim /etc/ssh/sshd_config

sudo /etc/initd/ssh restart

ubuntu 通过upnpc请求添加端口映射,2222内部端口,9000外部端口

这时候在upnpleases下面就会添加一条信息,iptable -t nat下面添加一条规则。完成端口映射

ubuntu 通过upnpc请求删除端口映射

会有如下信息被upnpd捕获到

以上就是关于ssh的代理和端口转发机制介绍全部的内容,包括:ssh的代理和端口转发机制介绍、ssh 跳板机端口转发、Autossh+screen实现可断开自动重连的SSH connection等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10112260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存