lichao 发表于 2024-7-3 15:39:07

【Linux】如何安全的部署SSH服务器

本帖最后由 lichao 于 2024-7-4 07:45 编辑

    近期爆出OpenSSH远程执行漏洞,管理员只需要编译安装最新版openssh即可,linux上的编译其实很简单,无非是bootstrap/autogen/autoconf/configure/make/cmake这几个命令。这里讨论一下如何安全的部署SSH服务器。

1. 大部分常用软件都爆出过漏洞,无论是常见操作系统,系统软件,应用软件,功能SDK,都爆出过严重漏洞。
2. 有些漏洞发现者并不会公开而是自行使用漏洞,所以不爆漏洞并不代表就安全。而提交的漏洞经过一定流程和优先级,几个月后才公布给大众知晓。

    如果因为可能有漏洞所以就不用软件了也不是明智的选择,可以利用多种系统机制和整体规划来缓解未知漏洞。SSH是远程登录必备工具,是做Linux远程命令行操作的不二选择。而OpenSSH是其中使用最广最知名的SSH服务器,是各大Linux系统装机自带的系统软件,SSH服务器有很多组织或个人开发过, WIKI中列举了几种著名的SSH服务器: https://en.wikipedia.org/wiki/Comparison_of_SSH_servers.   

    网络攻击是在互联网诞生时就存在的,而根据服务器上常用软件又有各式各样的攻击,比如DDos攻击,CC攻击,字典穷举密码攻击,或者基于漏洞扫描的攻击。由于OpenSSH的广泛使用,又有运维新手出现弱密码或root登陆等配置错误的问题,自然有攻击者盯着SSH服务器进行自动化攻击。既然这样的问题几十年前就已经存在了,那么肯定会有一套相对可靠的方案来缓解攻击,直接的参考就是公司内网的部署。笔者于2018年左右研究过公司堡垒机的常规防护措施,同时为团队设计堡垒机(跳板机)系统,因此对于SSH服务器的防护略有心得。下面就来谈谈内网跳板机布局:

假设A主机是堡垒机,B主机是真实服务器:
1. A主机在chroot环境中运行sshd,chroot可视为轻量型docker,只能进行最简单的操作,只提供bash(或sh)和ssh(对于bash的history等功能自然要阉割掉了)。
2. A主机是公司内可访问的,想登陆A主机需要硬件密令,实体类似于U盘,每分钟此密令都会变,过期的密令登陆会失败。此密令同时用于在家办公时访问内网
3. 用户无法访问B,必须登录A以后才能再登陆B

    这里介绍一下chroot,chroot并不算是个常用命令,主要用于在沙盒内运行程序,chroot除了沙盒执行外,还可以用于兼容性编译&执行。比如服务器已经安装了gcc3.0,但是现在想使用gcc5.0去编译一个库,为了不影响系统自带的头文件和库文件,就可以在沙盒中执行编译&运行,当然现在也可以用docker去做了
   家庭宽带的IP是经常变化的,如果无法通过iptables设置IP范围访问sshd,我们可以根据公司内网结构,手改一个适合个人服务器的跳板机:
1. A主机在chroot环境中运行sshd,通过构造沙盒目录使chroot只提供bash(或sh)和ssh。注意构造chroot目录时可以用ldd命令查找依赖库,防止bash/ssh因为缺少动态库无法运行。
2. B主机配置iptables限制sshd端口访问IP为A主机。因为A是服务器所以IP是不变的,只需保证互相网络访问通畅即可。

    可以看到A主机因为只能执行bash和ssh,且处于沙盒之中,因此登陆后无法进行其他操作只能使用ssh命令。假设攻击者以某种方式进了A,但是由于不知道B的IP和端口,也不能执行任何命令,所以也无法进行下一步操作,假设chroot本身有漏洞,但由于我们构造的chroot不含任何其它二进制,因此被攻破的可能性可以忽略。而对于B来说,攻击者直接访问B会被防火墙拦截IP。所以这套跳板机方案是完备的。如果成本有限也可以进一步将2个主机的逻辑部署到一台中。这里提个问题,跳板机除了用于防止SSHD攻击,还有什么作用?
    对于跳板机的支持,很多ssh工具都有提供,笔者日常使用WinTerm。
    除上述跳板机布局外,以下是几点攻击缓解措施:
1. 密码设为强密码(包括登录密码,Redis等开放端口的服务),不至于被爆破
2. 配置iptables或firewalld防火墙,配置访问策略,包括服务器禁止ping,减少被攻击的几率
3. SSHD安全配置,包括禁用root登陆,禁用密码登录,使用公钥登录,不使用22端口等,
4. 启用SELinux,增加安全性缓解未知漏洞
5. 为了防止DDos和CC,架构设计成多个备用服务器访问一台数据服务器的结构,这样一台挂了也影响不大。
6. 使用CloudFlare/Fastly/国内CDN加速防止域名攻击
7. 尽量减少使用第三方组件,用的越多漏洞越多。

相信看懂了本篇文章的人,应该不会惧怕在公网开放ssh端口了吧?
页: [1]
查看完整版本: 【Linux】如何安全的部署SSH服务器