如何把VPS作为SSH代理跳墙


VPS 不仅可以用来搭建 PPTP、L2TP/IPSec 和 OpenVPN,而且还可以直接作为 SSH 代理跳墙(我自己搭建的是L2TP/IPSec的方式,但是,电脑上基本上是连上就断,手机上却可以正常访问,在调试的时候觉得应该是OpenSwan的问题,不知谁能解答一下?)。

以下将介绍一个如何把 VPS 作为 SSH 代理跳墙的简易方法:
I、连接 VPS
对 Windows 来讲,你可以安装一个 SSH 客户端(例如 Putty), 对 Mac 来讲,你也可以安装一个 SSH 客户端(例如 Issh),但更简单的方法是直接在终端应用程序上通过以下命令连接:

ssh -N -D 7070 [email protected] -p 22222

记得将 “94.249.184.93″ 替换成你 VPS 的 IP 地址,将22222换成你的修改了之后的SSH端口,按下 “Return” 键,输入 VPS 登录密码,如果正确,回车后你将看不到任何新的内容(可以加入-f选项当连接成功后进入后台运行)。
顺便说一下,不管你的 VPS 事先是否已经安装了 VPN,你都可以把 VPS 作为 SSH 代理,这不会影响 VPN 的使用。

技巧:
尽管以上是最简单的连接方法,但是只能供你一个人使用――除非你想把自己的 VPS 帐户和别人分享。而如果要和别人分享同一个 SSH 代理,你可以通过以下 4 个步骤新建一个受限的 VPS 用户:

1、登录 VPS
在终端应用程序上输入以下命令(设置了密钥访问的自行修改,比如添加”-i”和”-p”选项):

ssh [email protected]

记得将 “94.249.184.93″ 替换成你 VPS 的 IP 地址。

2、创建一个用户组
输入以下命令:

groupadd sshproxy

你可以将 “sshproxy” 替换成任意名字。

3、创建受限用户
输入以下命令:

useradd -d /home/sshproxy -m -g sshproxy -s /bin/false sshproxy

以上命令将会在 “sshproxy” 创建一个新的 SSH 用户 “sshproxy”,该用户只能使用 SSH 代理,不能登录你的 VPS 帐户(设置shell为/bin/false的效果)。

4、为新用户设置密码
输入以下命令:

passwd sshproxy

然后,为该用户设置任意密码 (例如 “123456″)。

完了之后,你就可以把该用户名和密码分享给朋友,他们也就可以通过以下命令使用你的 SSH 代理:

ssh -N -D 7070 [email protected]

记得把 “sshproxy” 替换成你新建的用户名,把 “94.249.184.93″ 替换成你 VPS 的 IP 地址。
确实是可以跳墙,但是,真的很不稳定:
channel 2: open failed: connect failed: No route to host
channel 2: open failed: administratively prohibited: open failed
channel 8: open failed: connect failed: Connection timed out
……

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
# useradd -h
用法:useradd [选项] 登录
useradd -D
useradd -D [选项]

选项:
-b, –base-dir BASE_DIR 新账户的主目录的基目录
-d, –home-dir HOME_DIR 新账户的主目录
-D, –defaults 显示或更改默认的 useradd 配置
-g, –gid GROUP 新账户主组的名称或 ID
-G, –groups GROUPS 新账户的附加组列表
-m, –create-home 创建用户的主目录
-M, –no-create-home 不创建用户的主目录
-s, –shell SHELL 新账户的登录 shell

小知识:/sbin/nologin和/bin/false的区别

/bin/false是最严格的禁止login选项,一切服务都不能用,而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务。
如果想要用false在禁止login的同时允许ftp,则必须在/etc/shells里增加一行/bin/false。

小技巧:
查看 /etc/passwd文件,能看到各用户使用的shell

nologin
当用户配置成/sbin/nologin时,如果再使用该用户ssh到linux操作系统,会提示
This account is currently not available.

如果在树莓派下,配置错误,误将/usr/sbin/nologin配置成/sbin/nologin,SSH时会提示
root@raspberrypi:/home# useradd -s /sbin/nologin piaohailin
root@raspberrypi:/home# su piaohailin
Cannot execute /sbin/nologin: No such file or directory

false
当用户配置成/bin/false时,ssh之后显示如下:
root@raspberrypi:/home# useradd -s /bin/false piaohailin
root@raspberrypi:/home# su piaohailin
root@raspberrypi:/home# whoami
root
不会有任何提示,用户切换不过去。

绑定本地端口

既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性。
假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:
$ ssh -D 8080 user@host
SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。

SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
$ ssh -p 2222 user@host
上面这条命令表示,ssh直接连接远程主机的2222端口。

本地转发

有时,远程机器能访问某个端口(如remote-secret.com:8080),但本地机器无法访问。这时使用SSH的本地转发功能,即可将远程端口映射到本地:
$ ssh -L 9090:remote-secret.com:8080 my-remote-host.com
此时访问本地的9090端口就相当于用远程服务器my-remote-host.com访问remote-secret.com:8080。
提示:如果写成-L 9090:localhost:8080,就是把远程服务器的8080端口映射到本地的9090端口了
应用举例:如果远程服务器处于某受保护的内网中,可以借助其SSH服务获得与其等同的访问权限。
提示:默认情况下,本地转发的端口只能在本机上访问,要想允许外部访问,请添加-g选项。

参考链接:


《“如何把VPS作为SSH代理跳墙”》 有 21 条评论

  1. [Tools]代理转发工具汇总分析: https://www.t00ls.net/articles-35614.html

    1. http://www.freebuf.com/articles/system/12182.html #Socks代理反弹突破内网
    2. http://www.cnseay.com/3972/ #奇人绝技:利用php socket5代理进行内网渗透测试
    3. https://www.91ri.org/14390.html #内网渗透随想
    4. http://le4f.net/post/reverse-shell-during-the-penetration-test #渗透测试:反弹与转发小结
    5. http://staff.washington.edu/corey/fw/ssh-port-forwarding.html #ssh 端口转发

  2. 一种把指定程序的 TCP 流量重定向到代理的方法
    https://www.v2ex.com/t/476594
    https://github.com/hmgle/graftcp
    `
    graftcp 可以把任何指定程序(应用程序、脚本、shell 等)的 TCP 连接重定向到 SOCKS5 代理。

    对比 tsocks、proxychains 或 proxyChains-ng,graftcp 并不使用 LD_PRELOAD 技巧来劫持共享库的 connect()、getaddrinfo() 等系列函数达到重定向目的,这种方法只对使用动态链接编译的程序有效,对于静态链接编译出来的程序,例如默认选项编译的 Go 程序,proxychains-ng 就无效了。graftcp 使用 ptrace(2) 系统调用跟踪或修改任意指定程序的 connect 信息,对任何程序都有效。
    `

  3. 一款轻量级、功能强大的内网穿透代理服务器。支持tcp、udp流量转发,支持内网http代理、内网socks5代理,同时支持snappy压缩、站点保护、加密传输、多路复用、header修改等。支持web图形化管理,集成多用户模式。
    https://github.com/cnlh/nps

  4. 如何在CentOS / RHEL 8上创建无外壳访问权限的SFTP用户
    https://bynss.com/2020/306304.html
    `
    $ sudo adduser –shell /bin/false sftpuser
    $ sudo passwd sftpuser

    $ sudo mkdir -p /var/sftp/files
    $ sudo chown sftpuser:sftpuser /var/sftp/files

    $ sudo chown root:root /var/sftp
    $ sudo chmod 755 /var/sftp

    $ sudo vim /etc/ssh/sshd_config
    Match User sftpuser
    ForceCommand internal-sftp
    PasswordAuthentication yes
    ChrootDirectory /var/sftp
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

    $ sudo systemctl restart sshd.service
    `

  5. What’s different between /bin/false and /sbin/nologin as nologin user’s shell
    https://www.thegeekdiary.com/whats-different-between-bin-false-and-sbin-nologin-as-nologin-users-shell/
    `
    Since both commands return non-zero, there is not so much difference. Originally, /bin/false has been created for a general command as it always returns non-zero. Then, seems it is used as nologin user’s shell before creating /sbin/nologin.

    简单来说就是当对应帐户尝试直接通过shell登录时,它们都会返回非0值,不过 nologin 可能会有更友好的返回信息(内容放在/etc/nologin.txt里面),但就限制帐户对shell的直接访问这一点来说,两者并没有不同。
    `
    What’s the difference between /sbin/nologin and /bin/false
    https://unix.stackexchange.com/questions/10852/whats-the-difference-between-sbin-nologin-and-bin-false

    What is the difference between /sbin/nologin and /bin/false?
    https://serverfault.com/questions/519215/what-is-the-difference-between-sbin-nologin-and-bin-false

    Does /usr/sbin/nologin as a login shell serve a security purpose?
    https://unix.stackexchange.com/questions/155139/does-usr-sbin-nologin-as-a-login-shell-serve-a-security-purpose
    `
    So the actual intent of nologin is just so that when a user attempts to login with an account that makes use of it in the /etc/passwd is so that they’re presented with a user friendly message, and that any scripts/commands that attempt to make use of this login receive the exit code of 1.

    With respect to security, you’ll typically see either /sbin/nologin or sometimes /bin/false, among other things in that field. They both serve the same purpose, but /sbin/nologin is probably the preferred method. In any case they’re limiting direct access to a shell as this particular user account.

    限制特定用户帐户对 shell 的[直接]访问。
    `

回复 a-z 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注