1
heliushao88 2023-02-11 21:39:47 +08:00 via Android
将 PubkeyAuthentication yes 前边的#去掉。这样证书登录就开启了。 证书登录
|
2
edis0n0 OP 大概测试了下每个设备都是 SSH 连上服务器后访问服务器上的 127.0.0.1:8000 和服务端通信,也就是说每个用户只要有访问 127.0.0.1 地址的权限就行,目前已经限制只有给这些设备分配的用户能通过密码登录,不知道还有什么可以做的
|
3
edis0n0 OP @heliushao88 #1 用证书登录客户端就连不上服务器了,客户端程序只支持密码登录,开发这程序的公司已经倒闭了要不到代码
|
4
edis0n0 OP 感觉 SSH 在这里相当于 TLS 的角色,那时候可能 TLS 没普及他们懒得自己实现加密
|
5
yaott2020 2023-02-11 21:45:35 +08:00 via Android
觉得不安全就配 fail2ban ,说实话这种有些年代的软件可以换了,不仅不安全,出问题还没什么办法
|
6
jim9606 2023-02-11 21:53:14 +08:00 4
因为估计这个系统的 ssh 服务器 /客户端组件可能都无法更新,建议考虑 VPN 专网保护,要先接通 vpn 再用客户端 ssh 连接。
|
7
rekulas 2023-02-11 21:55:04 +08:00
感觉还可以把服务器端口转发到另一台网关,让他们将网关当服务器去通信,就算出现安全问题也不影响服务器本身
|
8
littlewing 2023-02-11 22:05:06 +08:00
6 楼通过 VPN 打通内网后在内网访问的方法好,然后在机器上配置一下防火墙
|
9
salmon5 2023-02-11 22:28:45 +08:00
22 端口修改成 5 位大端口即可,密码 20-30 位随机密码足够了
|
10
mikewang 2023-02-11 22:32:09 +08:00 6
可以试试端口敲门( Port knocking )。防火墙默认禁止访问 ssh 端口,当客户 IP 向特定端口“敲门”后,防火墙对该 IP 放行。
https://linux.die.net/man/1/knockd https://github.com/jvinet/knock |
11
Owenjia 2023-02-11 23:25:13 +08:00 1
登录后是怎么通过什么方式访问的呢?只在服务端做更改的话能想到的有:
1. 如果可以的话禁掉 shell 登录只开 tcpforwarding ,或者 sshd 里 match 用户然后强制指定一个运行在 bwarp 里的受限 shell ,根据客户端行为配置规则; 2. iptables 的 filter->output 可以默认 drop 然后用 owner 模块控制登录用户可访问的网络地址;访问时间固定的话可以用 time 模块做限制;一段时间内同时存在的 ssh 链接数目可以做限制; fail2ban 加定期人工审计日志。 另外可以在服务器端保持更新、减少不必要服务运行也可以起到一个减少攻击面的作用。 |
12
billytom 2023-02-11 23:58:15 +08:00
其实,把端口改成 5 位的高位随机口,然后密码用 1password 那种带大小写和符号的,28 位。然后禁掉 root 登陆,改用户登陆后 su 。。。基本上不存在暴力破解可能的
|
13
laqow 2023-02-12 00:22:44 +08:00
虚拟机或 docker 里面建用户,host 的服务端口映射到虚拟机 127.0.0.1:8000 里面
|
14
iseki 2023-02-12 04:14:08 +08:00
老旧系统建议 VPN 隔离
|
15
bao3 2023-02-12 07:02:51 +08:00 via iPhone
你需要先看一下 openssh 在 08 年后的安全更新,没有没涉及你现在的 ssh 应用。改端口没有任何意义,因为扫描端口也就 1 分钟的事,改再大也只是 1 分钟后赤裸相见。反而是 openssh 的安全更新,涉及到加密调整,可能容易被获取权限。
上面朋友提到 vpn ,这是个好主意,而且要用较新式的 vpn ,比如 ike v2 之类的。 |
16
ax2009live 2023-02-12 07:16:15 +08:00
指定 DDNS 的域名访问 SSH 不就可以了吗?可以减少 99.99%的风险;
比如家里的动态域名为 home1.domail.com home2.domain.com 如果有多个,可以自行增加; 服务器建立文件 ipupdate 并赋予执行权限,crontab -e 定期执行这个文件,比如十分钟执行这个文件 ipupdate #!/bin/sh home1_ip=`ping home1.domain.com -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'` home2_ip=`ping home2.domain.com -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'` new_ip=$home1_ip,$home2_ip port1=22 cd `dirname $0` if [ -e './home1_ip.txt' ]; then home1old_ip=`tail ./home1_ip.txt -n 1` home2old_ip=`tail ./home2_ip.txt -n 1` if [ "$home1old_ip" != "$home1_ip" ]||[\ "$home2old_ip" != "$home2_ip" ] ; then old_ip=$home1old_ip,$home2old_ip `/sbin/iptables -D INPUT -p tcp -m multiport --dport $port1 -s $old_ip -j ACCEPT` `/sbin/iptables -I INPUT -p tcp -m multiport --dport $port1 -s $new_ip -j ACCEPT` echo $home1_ip > ./home1_ip.txt echo $home2_ip > ./home2_ip.txt fi else `/sbin/iptables -I INPUT -p tcp -m multiport --dport $port1 -s $new_ip -j ACCEPT` echo $home1_ip > ./home1_ip.txt echo $home2_ip > ./home2_ip.txt fi 每十分钟检查动态域名是否有变化,如有变化,更新放行端口; 为了避免服务器重启不放行端口,启动的时候把 ipupdate 同一目录下的 txt 全部删掉,运行 ipupdate 会重新建立; |
17
JingKeWu 2023-02-12 07:31:25 +08:00
|
18
ax2009live 2023-02-12 07:36:10 +08:00
|
19
uncat 2023-02-12 10:55:56 +08:00
无论是 VPN 还是 Knock, 都离不开客户端改造.
你的思路是对的, 服务端配置 fail2ban, 限定一天里面允许 failed 的次数是 5, 然后默认屏蔽超过这个次数的 IP 24 小时即可. 注意一下自己使用的软件防火墙是什么, 调整一下 fail2ban 配置使其兼容即可. |
20
xuanbg 2023-02-12 10:59:50 +08:00
家宽也可以白名单,只不过要经常上服务器去改白名单
|
21
leonshaw 2023-02-12 11:16:35 +08:00
强密码本身不用担心暴破。密码登录主要问题在服务器能看到明文密码,所以客户端一定要有 host key 校验。fail2ban 可以有,能减少服务器压力,或者让攻击者知难而退。
|
22
wfhtqp 2023-02-12 11:33:31 +08:00
headsacle
|
23
zed1018 2023-02-12 15:20:17 +08:00
如果我没有理解错,假设你的客户端只是需要类似 NTL 去搭一个到服务器上的 8000 port ,你还可以把客户端用的那个 user 设置 nologin ,这样即使别人暴力到了也多一层保护
|
24
adoal 2023-02-12 15:54:36 +08:00
既要又要还要是不可能的。脱保了而且连源码都没有的系统,又不打算重新开发,那只能通过堆屎山的运维手段来缓解了。
首先要在服务器端更新系统组件,这是必须做的。多年不更新,鬼知道哪个 CVE 会暴雷。当然如果服务器端操作系统比较老,比如 CentOS 6 这样的,就算更新到最新也很老了。可以自己编译安装较新版的 OpenSSH ,不过不要替换系统自带的,可以安装在另外路径,系统自带的停掉,用新的来服务。不过这样做了还是要自己日常关注 OpenSSH 的安全通告,必要时手动升级。 另外,你的意思是客户端程序里调用 ssh 登录,登录成功后做了端口转发,而且是程序内部代码实现的,不是调用外部 ssh 命令,现在没办法改了?(如果是调用外部程序,就可以用加套的方式替换) 客户端程序的行为没法改,不等于运行客户端的环境没没法动。#19 说的“无论是 VPN 还是 Knock, 都离不开客户端改造”大概意思时连运行客户端环境都没法动的情况。如果不是他说的这样,其实是可以认真考虑用 VPN 的。当然如果要运行客户端的是各个非 IT 的业务员工的家里,那部署 VPN 会造成心智负担。要么做好培训和支持,要么另行开发易操作的部署程序,都会比较折腾,但并不是完全不可行的。 |
25
adoal 2023-02-12 15:56:52 +08:00
fail2ban 、改受限 shell ,也算是短平快的辅助手段了。但一般来说这些只是辅助手段。根本的还是认证安全 /网络链路安全。
|
26
adoal 2023-02-12 16:01:10 +08:00
深刻教训:定制开发的信息化项目一定要要求交付源代码了才能通过验收。不要信搅基陈之类的网红信息咨询顾问的鼓吹。不是每个信息化开发商都是皮袍索芙特这样的长命巨头,也不是每个业主都有条件出丰裕的资金每个项目都找长命巨头来做。
|
27
yinmin 2023-02-12 16:46:56 +08:00
如果服务器没法动,就只有改造网络了。
第一种方式是架 vpn 专网,服务器放专网里,然后客户端先 vpn 拨入再访问服务器。如果你熟悉 docker 的话,架设 vpn 最简单的方式是用 hwdsl2/ipsec-vpn-server 镜像(下载量超千万),windows 客户端使用 Windows 内置的 IKEv2 协议(不推荐 l2tp 协议),客户端无需安装第三方软件,只需要将 vpn 证书导入系统,然后配置即可。使用者是无法导出证书,也就是说,只有你安装的机器可以用 vpn ,使用者无法自己克隆一个出来,克隆硬盘也不行。 第二种方式是使用 stunnel 做双向证书认证,stunnel 稳定性很好,这个配置有点专业,你可以自己研究一下。 推荐一款设备做 vpn 服务器,软路由神器 nano pi r2s 或者 r4s ,安装 armbian linux 操作系统,安装 Docker ,安装 hwdsl2/ipsec-vpn-server 镜像,如果企业用,不推荐 openwrt ,直接上 armbian ,妥妥的 500Mbps+。 |
28
parametrix 2023-02-12 22:09:53 +08:00
密码有什么问题?你这 104 位随机密码比 ed25519 私钥位数还长,不用 fail2ban 除了 DDOS 风险我看不出来能出啥问题。
|
29
parametrix 2023-02-12 22:11:54 +08:00
另外,SSH 加密套件的安全性完全不输给 TLS ,用 SSH 做安全通讯没什么问题。
|
30
julyclyde 2023-02-13 08:57:20 +08:00
都用家用宽带了,还能有啥严肃业务啊……
|
32
coolloves 2023-03-29 20:40:42 +08:00
怎么感觉 nginx 反代就可以解决吧?
对方通过 ssh 隧道来接你内部 127:8000 的服务,回收 ssh,nginx 把服务暴漏出去,做个简单验证,给不同的用户不同的密码.这样风险小很多吧. |