Aploium Blog

Cold code, warm soul.

@Aploium1年前

02/13
14:56
安全

几个避免SSH监听公网的思路

通常情况下, SSH监听外网, 改SSH端口能避免一些扫描器, 但是对于刻意的扫描还是能被找到的.
不让SSH对外listen, 能降低攻击面, 但是需要不影响正常的SSH访问

几个思路:
0. 如果条件允许, 能仅对特定网段监听当然是最方便的
1. 使用SSH -R来获得反向SSH隧道, 但是实现要求和条件都很麻烦
2. 平时关闭SSH服务, 用另一个守护服务接受请求(最好是UDP)来按需调起SSH服务… //好蛋疼啊:(
3. 使用类似shootback或ngrok的反向TCP隧道把只对本地监听的SSH转发到别的服务器上, 用户再从那台服务器访问

主要说一下3 (因为前几天才重写了一遍shootback XD)

网络结构参考这张图

在这种情况下目标并不是在NAT后面,  而是由于关闭了SSH对外的监听, 只接受localhost的连接, 所以与上半张图的情况一样。

这台机器上的SSH服务对于外网来说是不可见的, 只有本机可以访问

普通情况下一个只监听localhost的SSH当然是虾扯蛋了…..

 

shootback运行在本地, 主动连接本地的SSH和另一台服务器, 把本地SSH映射到另一台服务器的某个端口上

做到SSH端口和服务器本身的分离.

由于shootback slaver是主动连接出口服务器的,  所以能避免被扫描到

可以把高危的HTTP服务器上的SSH映射某台偏僻的机器上

 

shootback的通常用途是把一台没有公网IP的机器暴露给公网,

这里是反过来用, 把本来暴露给公网的SSH隐藏掉, 把本机的SSH开到另一台机器上


实际操作步骤:

假设想要隐藏SSH的服务器IP是 1.2.3.4 另一台偏僻服务器用做出口, IP是 7.7.7.7
首先在两台服务器上下载shootback, 这个请看这里
https://github.com/aploium/shootback#getting-started

然后在两台机器间建立shootback连接

# 想要隐藏SSH的服务器
python(or python3) slaver.py -m 7.7.7.7:10000 -t 127.0.0.1:22
# SSH真正出口服务器
python3 master.py -m 0.0.0.0:10000 -c 0.0.0.0:10022

测试连接是否成功

# 在你自己的电脑上运行
# 成功的话应该能连接到1.2.3.4的SSH上
ssh 7.7.7.7 -p 10022

如果成功, 那就能关掉1.2.3.4的SSH外网监听了
修改 /etc/ssh/sshd_config
ListenAddress 0.0.0.0 这一行改为
ListenAddress 127.0.0.1
保存退出, 重启SSH
sudo service ssh restart
sudo service sshd restart
(上面两条可能不同地方不一样)

再测试一下能不能SSH上 7.7.7.7:10022

如果能就搞定~


注意1: 这只是一个突然想到的脑洞, 没有经过长期测试, 从经验看应该没什么问题

注意2: 这种方案要求负责映射SSH端口的程序相当稳定,  要是运行一段时间就挂掉, 就再也连不上服务器了, 可能只能在控制面板中重启……shootback在设计上是充分考虑了超长时间运行,  不过不能100%保证不会挂

几个避免SSH监听公网的思路

  1. Zaizai
    Firefox 52Firefox 52Android 6.0.1Android 6.0.1

    如果不是对安全有苛刻要求,ssh监听公网就可以了吧…采用公钥私约机制登录,关闭密码登录的方式,可以解决大部分安全问题吧。。

    回复

来一发吐槽叭O(∩_∩)O    仅首次吐槽时需要审核