当前位置: 首页 > 科技观察

SSH安全最佳实践

时间:2023-03-12 10:24:29 科技观察

众所周知,SSH是远程控制中使用最广泛也是最重要的工具,所有*nix系统都默认开启SSH服务。SSH虽然可以保证数据传输的安全,但是在默认配置的情况下,SSH存在被检测和暴力破解的危险,很多主机因此沦为僵尸。本文介绍SSH安全的最佳实践,以提高主机安全性。网络限制信息安全最根本、最有效的方法是确保网络安全。通过网络限制,最大程度保证系统安全。SSH服务也是如此。硬防、安全组(针对云资源,相当于硬防)、主机防火墙等限制SSH端口,保证安全。防火墙防火墙的主要工作是使用预定义的规则检查传入和传出的流量。硬件防火墙和安全组这里就不多说了。*nix主机可以使用iptables防火墙,iptables是netfilter的应用级包,可以用来过滤数据包,接受或拒绝数据包(或采取其他动作)保护系统免受攻击。使用iptables定义通过IP地址、端口或协议限制SSH流量的规则。还可以跟踪最近的SSH端口连接。也可以根据连接到SSH的速率使用速率限制连接来阻止IP地址。使用防火墙并调整其配置有助于减少SSH攻击的机会。典型的Iptables白名单访问示例如下:...-AINPUT-s192.168.1.8-ptcp-mstate--stateNEW-mtcp--dport2022-jACCEPT-AINPUT-s192.168.1.6-ptcp-mstate--stateNEW-mtcp--dport2022-jACCEPT-AINPUT-ptcp--dport2022-jREJECT--reject-withicmp-host-prohibit...上述规则中只允许IP地址192.168.1.6和192.168.1.8访问端口2022(修改后的ssh端口)。BastionHostBastionHost是专门设计用于阻止来自网络的恶意流量和攻击的安全网关。堡垒暴露在公网的安全代理和审计服务,通过堡垒机对用户操作进行限制和审计,记录用户操作,对可疑操作进行预警或直接阻断,减少对主机的威胁。当两个通道建立SSH连接时,设置堡垒机可能有助于提高安全性并保护系统。堡垒机是一个非常重要的安全设备,但同时也是一个风险点和单点。如果堡垒机因漏洞或其他因素被攻破或出现故障,将导致重大问题。毕竟,如果你把所有的鸡蛋都放在一个篮子里,那么如果你把它们掉在地上,它们都会碎掉。因此,保证堡垒机的安全性和高可用非常重要。双因素身份验证(2FA)在双因素身份验证中,系统需要两种不同形式的身份验证才能获得访问权限。最常见的双因素认证就是用户在登录时,除了输入用户名和密码外,还需要通过短信验证码才能登录系统。虽然发送到移动设备的一次性密码容易受到中间人(MITM)攻击,但第二个因素总比没有第二个因素要好。更安全的双因素身份验证和硬件是安全验证卡YubiKey和AppleTouchID。开源的方法包括基于google-authenticator和FreeOPT的方法以及基于freeipa的方法。通过启用双因素身份验证,系统管理员可以确保任何通过SSH登录远程系统的用户都必须使用多个容易被盗的凭据进行身份验证,这可以保证比单独使用密码或SSH密钥更安全。此外,国家网络安全等级保护标准中,在网络、主机等部分密码要求中明确要求进行双因素认证。公钥和基于SSH证书的身份验证尽管基于SSH密钥的身份验证是密码身份验证的更好替代方案,并且可以增强远程登录过程的安全性,但它也有其潜在的障碍。例如,用户必须将私钥存储在他们的设备上,这可能会被盗或泄露。而且,SSH证书其实只是换个名字的密码,私钥也可以泄露给别人利用。为了防止私钥泄露,生成证书时最好设置密码保护。另外,将私钥保存在非常有用的~/.ssh/目录下,也能在一定程度上避免泄露。基于CA签名证书的SSHCertificate-based身份验证是更好的选择。SSH证书通过使用CA公钥保护登录过程,同时还提供证书来验证每个密钥的身份。使用这种认证方式,不需要每次都去服务器添加用户公钥,只需要在sshd_config中添加一个CA公钥信任:TrustedUserCAKeys/etc/ssh/user_ca_key.pub同时,就可以颁发证书时对公钥的用户名、时间、源地址等进行限制。配置成功后,访问ssh是根据用户的私钥(userss)和CA颁发的cert证书(user-cert.pub):ssh-p2022-oCertificateFile=user-cert.pub-iuserssuser@192.168.1.22可以配置方便sshconfig简化访问选项设置:HosttestHostName192.168.1.22Port2022UseruserCertificateFile~/.ssh/user-cert.pubIdentityFile~/.ssh/users然后就可以轻松ssh测试访问了。基于SSH证书的身份验证为任何计算环境提供了一种安全且可扩展的身份验证方法。修改默认SSH设置OpenSSH默认选项通常通过文件/etc/ssh/sshd_config配置。前面我们也提到,默认配置存在安全隐患,需要优化。更改默认的22端口默认情况下,SSH服务监听tcp的22端口。在任何时候,互联网上都会出现大量检测22端口的检测机器人,对普通用户和字典密码进行自动暴力破解。你新开一个vps主机,然后安全组打开22端口,几分钟后你就会收到SSH密码尝试攻击的日志。端口检测时,SSH服务往往会通过默认的22端口进行检测,如果改为非22端口,大部分此类检测都可以避免。修改sshd默认端口的方法是修改/etc/ssh/sshd_config文件找到:Port22修改为:Port2022然后重启sshd服务:systemctlrestartsshd.service当然也可以设置其他端口小于65535.注意修改前记得先在防火墙上打开端口,以免自己被踢出登录失败iptables-IINPUT-ptcp-mstate--stateNEW-mtcp--dport2022-jACCEPT禁用root登录其次,默认情况下,用户可以以root身份通过SSH连接到服务器。SSHroot或超级用户帐户是一项非常危险的功能,因为它允许对整个系统进行完全访问和控制。此外,root用户是网络暴力攻击中最容易受到攻击的帐户。通过在服务器上禁用rootSSH登录,可以避免攻击成功的可能性,通过权限分配可以更好地进行用户行为审计和溯源。禁止root登录的方法是修改/etc/ssh/sshd_config文件,在最后添加一行:PermitRootLoginnodisablepasswordlogin。前面说过,密码认证虽然方便,但是最容易被暴力攻击,容易泄露账号。这可能是系统被黑客入侵了。最常见的原因(root建议的密码)。应完全禁用基于密码的SSH身份验证,并选择至少使用SSH密钥。禁止密码登录的方法是修改/etc/ssh/sshd_config文件,在末尾添加一行:PasswordAuthenticationno使用“AllowUsers”来限制访问另外,默认情况下,所有系统用户都可以使用自己的密码或公钥登录SSH,同样存在安全隐患。并非所有系统用户都需要通过SSH远程登录。还限制特定用户的SSH访问大大增强了安全性。可以通过/etc/ssh/sshd_config文件中的配置来设置可以访问SSH的白名单:AllowUsersuser1user2chongchong这样系统中只有user1user2chongchong三个用户可以使用SSH登录。相应的还有AllowGroups用户组白名单DenyUsers用户黑名单DenyGroups用户组黑名单总结本书中虫虫介绍了SSH安全的最佳实践,但这是最常用、最有效的加固方法。根据环境和合规性要求,这些方法实际上可以根据需要进行调整。应该注意的是,要意识到遵循良好做法并正确实施它们通常具有挑战性。