Linux 服务器安全:六个 必知必会的 SSH 最佳实践

Linux

SSH 是常用的 Linux 服务器管理工具。无论运行 CentOS, Debian, Ubuntu 等 Linux 操作系统的服务器,还是它们之间的连接都会用到 SSH , 若您曾经远程登录过 Linux 服务器,您至少听过它的大名。

缩略语 SSH 表示 「Secure Socket Shell」,如它名称所示,协议底层建立在安全之上。大部分系统管理员认为 SSH 天生具有非常安全的特质。许多情况下,这样认为是正确的。SSH 天生具有令人叹服的安全性。诸如,通讯加密阻止网络劫持,主机私钥、公钥非对称加密认证方法排除对系统具体用户名的依赖,保证最大安全前提下的灵活性。

然而,在网络上存在着海量的运行着 SSH 的服务器,攻击者更喜欢在里面找出最傻、最弱者花大力气攻破它,使它成为肉鸡。在安全方面,贪图便利意味着被骗,被卖。因此,很多系统管理员倾向于安装即用,不做配置,甚至想都不想,完全依赖默认配置。这样的行为在大多数情况下似乎没什么问题,但至少使您处于最弱安全者的处境,成为攻击者青睐的目标。综上,相信若您能在安全方面稍付出些努力,学习实践一些安全配置,未雨绸缪,使您的主机安全性提升到靠前的行列里,避免您的主机成为攻击者青睐的对象,将会使您的主机坚固性大大提升。(译注:不要认为您的数据没价值。当您的主机被突破,必然成为肉鸡,去攻击其他机器,助纣为虐。现成的东西拿来即用,知其然不知其所以然,是危险的)

若对上述深以为然,下面有些 Linux 服务器安全可利用的技术坚固您的 SSH 服务器安全.

一、防御暴力破解

坚固 SSH 安全性最普遍的是防御暴力破解。主要由于系统管理员首要面临的是网络上大量的机器(很多是肉鸡)会不断地自动嗅探您的 SSH 服务以图突破您的安全防线。这些提线木偶会自动组合海量的用户名/密码对来尝试登入 SSH 服务器。但是,防暴力破解软件可以抵御这样的攻击。简单解释其原理就是,在指定的时间间隔内达到或超过指定的失败登录尝试次数后,将禁止来源机器 IP 地址访问。

仅有的开源防暴力破解解决方案有 ConfigServer Firewall (CSF) 和 Fail2Ban.  CSF 常用于 cPanel 类服务器,由于具备 WHM 插件。

配置防暴力破解的利与弊

有利

  • 对于失败的登录尝试,自动禁用其访问 IP 地址,切断其继续访问尝试。降低其猜测出 SSH 服务器上某一权限用户的可能。
  • 在软件的帮助下,易于实现。无需对 SSH 服务本身的配置进行修改。

弊端

  • 防暴力破解软件无法区分攻击者和合法用户的登录请求。如果您偶然多次失败登录尝试达到识别条件,您将把自己锁在门外!确定当如此的窘境发生时,您有可靠的备选方案登录到您的服务器。诸如,把您能获取到的公网 IP 地址预先放到服务器配置白板列表里,或使用类似 KVM 或 IPMI 设备等,做为最后的救命稻草。

二、改变 SSH 默认监听端口号

另一最普遍安全防护手段是,改变 SSH 默认的监听端口号 22/tcp 到其它端口号。

这个设置修改相对容易。例如,欲将默认的 SSH 端口号 22 修改成 2222,只需将 SSH 服务的配置文件 /etc/ssh/sshd_config 中如下修改即可。

Port 2222

提醒一下,端口号 2222 也已成为最普遍的替换端口号。因此,自动嗅探程序也可能把这个端口也列为嗅探目标端口。应设置更随机的端口号,如 2452 。甚至您连2这个数字都不想要,也可以设置成如 6543 这样的数字,任何小于 65535 的端口号都可,只要服务器上的其它服务未占用那个端口号都行。(译注:小于1024的端口号一般被知名服务占用,故最好大于 1024)。

改变 SSH 默认端口号的利弊

有利

  • 这个技术手段通常很有效地切断网络上自动嗅探程序的攻击。对于弱智的自动嗅探脚本,它只会针对端口 22 进行嗅探,当然奏效。

弊端

  • 这个技术应被归为暗黑类的安全防护手段(「security by obscurity」)。碰到较智能的自动嗅探脚本,能转换端口号,或任何人使用专用扫描软件如 nmap ,发现您隐藏的 SSH 服务端口号也只是分分钟的事。
  • 这个技术也使您访问 SSH 服务器稍微不方便,每次登录连接,指定目标地址外,必须指定端口号。

三、禁止 Root 用户 SSH 登录

另一常用技术手段,全面禁止,或禁止使用用户密码 root 用户SSH 远程登录系统。虽然禁止了 root 用户 SSH 登录.。但仍可以授权通过密钥 SSH 远程登录的普通用户以 sudo 特权权限,这样的用户通过密钥 SSH 登录后,以用户密码,使用 sudosu 命令获取root 权限管理系统。

这个配置的设置,可以通过 SSH 配置文件 /etc/ssh/sshd_config 中以下字段的设置来改变。

允许 root 用户只能使用 SSH 密钥登录(不能使用 root 密码 SSH 登录),改变设置如下:

PermitRootLogin without-password

全面禁止 root 用户 SSH 远程登录,如下配置:

PermitRootLogin no

禁止 Root 用户 SSH 登录的利弊分析

有利

  • 这个防护手段起一定的作用。因为 Linux 系统的 Root 用户名通常为 「root」(就像 Windows 系统服务器的系统管理员用户名为 「Administrator」一样普遍),因此,易于猜中(不用猜)。现禁用了这个用户,意味着攻击者少了个只需猜密码的攻击弱点。猜用户名/密码两个因素组合比只猜一个因素难度加大。
  • 使用 sudo 权限的好处,相当于又加了一道普通用户密码的防护(Sudo 权限设置允许被设置为具有 sudo 权限的普通用户可以使用自己的用户登录密码通过 sudo 指令获取 Root 权限),就算攻击者猜中用户名和密钥 SSH 运程进入系统,由于用户是普通用户,没有破解的普通用户的登录密码,不能通过 sudo 指令获取 Root 权限,其作为也有限。

弊端

  • 这个手段,若错误配置 sudo 权限,有使你自己不能登录系统的风险。若你有通过诸如 远程终端 等其它手段登录到系统的备用方案,这仍不失为一个很好的安全防护技术。

四、禁用用户密码验证登录,首选密钥验证

关于密码,人们常谈论的安全课题是设置的密码要长,随机性好,难以猜测,不使用现成的词汇等等防护手段。代替用户密码验证的 SSH 密钥是一个密钥文件。

SSH 密钥相比密码要安全得多,密钥文件中包含更长、更随机的数据。若大概了解 SSL 加密,或见过其密钥文件, SSH 密钥与其类似。密钥文件中包含非常长的、随机的、结构数据。

使用 SSH 密钥文件代替人工键盘输入的一串密码去登录系统。更像互联网上普遍使用的通讯加密 SSL 所做的那样。

若要禁用用户密码登录 SSH 服务器,可在 SSH 配置文件 /etc/ssh/sshd_config 中如下设置:

PasswordAuthentication no

禁用密码验证登录,首选密钥验证的利弊分析

有利

  • 此方法有力降低类似暴力破解方式的攻击成功的可能性。
    • 大多数暴力破解自动攻击脚本仅仅是不断尝试密码组合(字典方式)。相对于需要密钥的验证方式,这根本就是南辕北辙。它根本无成功的可能。
    • 若真的有人试图靠猜测攻击 SSH 密钥,密钥相比密码长得多、更随机无序的数据,运算量及破解成功的难度和几率是无法想像的。

弊端

  • 这个手段会降低登录 SSH 服务器的便利性。若您恰好没有密钥文件,将无法登录到 SSH 服务器。
  • 以上原因,使您同样有被 SSH 服务器拒之门外的风险,举例来说,您丢了您的密钥文件呢?因此,留一条可靠的备选途径是加保险的办法,如 remote console (远程终端)。

如果有人获得了您的密钥文件,就像他拥有您的密码一样,完全可以以您的身份登录系统。好在,不像密码,密钥很容易让它失效,再创建个新的使之生效,其它不用改变。

对于 SSH 密钥,另一个有意思的是,相比一个账户只对应一个密码,同一账户可以使用多个密钥认证。

可以想见,就算不禁用密码验证方式,同样可以使用密钥验证。SSH 服务器确定有一个用户的公钥文件,此用户默认使用密钥认证登录。

五、仅允许白名单里的 IP 地址主机登录

一个非常有效的安全手段是,仅允许白名单里的 IP 地址主机登录。这个可以通过 firewall (防火墙)规则设置文件设置。含义是只允许那些批准了的机器登录。

这个方法对于居家或共享连接的用户或许难于实现,因为用户自己可能是动态获得的 IP 地址(译注:原文中所说的难以获知自己的 IP 地址,对于技术人员应不是问题), 它经常变化,难以固定。但是,许多情况下,您可以使用 VPN 或静态IP 地址解决这个问题。

仅允许白名单里的 IP 地址主机登录之利弊分析

有利

  • 这个方法提供强壮的安全性,因为网络上的攻击者攻击时不可能获得您白名单里指定的 IP 地址。
  • 毫无疑问,这个方法完全可替代一些其它的安全防护手段,如暴力破解防护、禁用密码登录等。因为,攻击者在这个防护策略下,攻击手段都是废柴,连接近服务器的机会都没有。

弊端

  • 这个手段增大您被您的 SSH 服务器拒之门外的风险。尤其您是居家互联网连接或您是动态获取 IP 地址上网。
  • 访问的便利性降低,因为您从获得的 IP 地址不在 SSH 服务配置白名单里的地方,是无法访问到 SSH 服务器的。
  • 还是有办法解决这个问题,因为您的 SSH 服务器上的 IP 白名单是由您来设定的,可要想好哦。

在我自己的个人服务器上,需要强壮的安全性的话,这是我通常使用的安全策略。这样,我不但可以保留用密码登录,也可保留 SSH 默认端口。我常常变换我的服务器。必要时,还会创建新的服务器。我发现实现 IP 地址白名单应是最快、最方便的安全防护策略设置了。每当有需要,我只需把现成的白名单复制到目标服务器上,其它设置根本不用动。

六、混合方法: 允许 IP 白名单里的密码登录,同时允许所有登录使用密钥登录

如果您欲练达,兼顾各方需求。有无数的混合安全防护方法选择。组合一个或多个上述防护手段是为混合安全防护方法。

以一个我客户曾经的解决方案为例, GigeNET  服务器运行在我的客户公司内部。公司中的职员在公司内部可通过密码登录到服务器,因此,每个员工设置一个密码给我们,我们创建用户和密码可以让他们内部密码登录。但是,授权可以通过互联网从外部访问服务器的职员,从外部访问是禁止使用密码登录的,只能使用密钥登录。

这个需求的实现实际很简单,它提供了最大的禁止密码访问的安全,也提供了一些安全情况下允许密码登录的便利性。

实现这个安全策略,在 SSH 服务器配置文件 /etc/ssh/sshd_config 如下修改:

# 全局设置禁止密码登录
PasswordAuthentication no

[...]

# 在 IP 白名单段中的设置覆盖全局设置
# 放置下面的语句到配置文件尾
Match address 1.2.3.4/32
PasswordAuthentication yes

以上设置,IP 地址 1.2.3.4 是白名单中允许的 IP 地址设置。您可以使用多条这样的语句设置多个 IP 地址段或单个 IP 地址。也可以使用 IPv4 CIDR(IPv4 汇聚地址段)指定更大范围的 IPv4 地址段,如替换 /32 到 /28,/27 等。

注意,越大范围的 IP 地址段越应放到 白名单 的后面。(译注:这涉及到匹配速度和精度的逻辑,自己思考)

混合方法的利弊分析

好处

  • 这个方法,可以避免从外部访问使用密码登录的安全问题。同时,也提供从内部访问允许密码登录的便利性。因此,它避免了为了便利而导致安全的衰弱。
  • 如果您机器的 IP 地址导致您排除到 IP 白名单之外,您仍可凭借您保存在自己机器上的密钥文件登录。

弊端

  • 类似 IP 地址白名单防火墙方法,这个策略需要多付出些精力在服务器配置上。因为当您 IP 地址变化了或允许内部不同网段的用户登录时,都需相应地修改服务器配置。不像其它策略,修改 IP 地址白名单,不是那么紧急了。因为,您还可以用密钥登录。

最终,您必须谨慎考虑和选择最适合您自己情况的安全策略

期望这些技术或策略能提供给您些灵感,帮助您坚固服务器的安全。谨慎思考存在的风险现状及可应对之策,揉合多种手段解决问题。

基于对上述技术手段的理解及各防护技术的优缺点的认知,根据您的实际需求,抓住要面对的最重要、最需解决的安全风险,混合多种技术手段,坚固您的服务器安全。

文末,我不断提醒大家,安全是相对的。无任何事物是不可穿透的。重要的是让您的服务器相比其他大多数更安全一些。甚至,您仅仅实现文中讲到的安全策略的一种,也强过那些大多数只是运行着安装时默认配置的 SSH 服务器。它们就像裸奔着的 SSH 服务器,时时召唤着侵蚀。

原文地址:https://www.gigenet.com/blog/ssh-securit...

译文地址:https://learnku.com/linux/t/36247

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 1

眼花看成SSL。。。

3周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!