选择合适的远程服务
每个月,服务器诊所都要描述如何最大程度地使用服务器室中的硬件。本专栏经常涉及使用 Linux 的方法,这些方法并不象理所应当的那样众所周知:将 Linux 用于 Fortran 程序、将 Linux 用于专为旧操作系统设计的应用程序等等。
紧接着的第二个话题便是本篇专栏文章的主题:安全性。
您的服务器在物理上应当是被隔离的,应当禁用所有不必要的联网访问,并且只能通过 ssh 或更好的方式访问服务器。特别值得一提的是,尽可能少使用实时的 te.net、ftp、rlogin 和 rsh 以及相关服务;它们实在是太危险了。
假设您已经做了所有这些事。现在您出门在外 - 可能在演示产品,或者在与新客户协商讨论需求,或者在结束一个会议(这已归入您的培训预算之中)。您需要调出公司中的某些材料。那么该怎么办呢?
首先,您当然应该尝试一番。程序员和管理员本可以在正常的上班时间里在自己比较安静的工作场所工作,但是他们却喜欢强迫自己突击完成这些工作,这可是出了名的。您可别让自己成为这种行为的牺牲品!确信您进行的连接具有合法的业务目的,并非违规行为。
但是,如果您过去有这些组织问题,那么连接问题的答案便是“使用 ssh”。即使您原则上更依赖于虚拟专用网(VPN)而非 ssh,我还是认为出现紧急情况时,如若不能使用常规方法,那么设置 ssh 访问会比较谨慎些。VPN 仍然有些难以处理,并且需要依靠特别的硬件配置。如果您是通过客户机的网络(多半是使用普通桌面机器)“呼叫主机”的,则您可以进行的选择是极其有限的。
ssh 满足需要
好消息是 ssh 在这些限制的夹缝之中通常还能满足需要。即使您外出办事,但在公共接入点(比如“网吧”),您还是可能有足够的资源使 ssh 工作。
您或许不能依赖于自己的设备。说得严重些,带着任何比手持设备大的设备到处走,是另一个安全性风险;更糟的是,许多地方不准插入外来的硬件。您通常必须使用提供给您的硬件。
但是下载 puTTY、ssh 或 MindTerm 客户机一般都很快。而且我也喜欢那样做。 任何具有足够的网络栈、可以连接到您的服务器室的主机,都可能有准许进行下载的 Web 浏览器。使用已经安装好的客户机要小心;对于某些人而言,将客户机替换成经过修改的、能捕获击键信息(或更糟的情况)的客户机实在是太容易了。
另一种方式是构造嵌入了 MindTerm 客户机作为 applet 的 Web 页面,这表面上看起来挺吸引人的。而我的经验告诉自己这种方法没什么用处。大多数地方都禁用 Java、或提供只具有旧的 Java 运行时引擎(JRE)的浏览器,或者采用别的方式来降低 applet 的便利性。如果我要使用 MindTerm,则只想下载和安装该客户机以及兼容的 JRE。对于构造针对最终用户的应用程序,applet 通常是一种好技术。applet 还适合进行只读配置。但是,我发现这种用法非常少。因此,为使自己的工作具有效率,不值得花时间去解决 applet 环境中可能存在的难题。我一直觉得,找到一个兆字节的空闲大容量存储器并在上面安装 ssh 客户机会更加方便。
您坐下一会后就应当安装新的 ssh 客户机并启动它。但是,这可能还不够。某些地方防火墙关闭了大多数端口,或者至少关闭了包括 ssh 的标准端口 22 在内的许多端口。
这里有另一种准备提供帮助的方法。在我的至少一台主机上,我希望让 sshd(ssh 守护程序)在通常被指派给常见因特网服务(比如 ftp、http、smtp 或 pop3)的端口上运行。即使是最严密的防火墙也要打开端口 21、8080、25 和 110 中的一个。将您的一台机器设置为“捕获”这样的通信,您就可以使它穿过大多数的防火墙。
这听起来是否象是“非法闯入者”在说话呀?我不赞成滥用网络。经常有其它公司的雇员邀请我使用他们的网络,虽然他们也知道,用敏感的方式(比如临时打开端口 22)更改他们的防火墙就公司制度而言是不可行的。我逐渐接受了这种认识:准备采用“旁门左道”也是当前专业实践的一部分,但我需要确保自己只以一种负责任的方式完成这个工作。
当然,随着 ssh 通道的打开,我就拥有像坐在服务器室中控制台前的几乎所有功能。如果需要有图形显示,我可以通过通道使用 X 或 VNC,也可以从命令行访问其它所有常见活动。
这样就启动了我的工作会话,然后:我下载引用 ssh 客户机,快速安装并启动它们,然后用 SSL 保护的密码往回验证我留在服务器室中运行的某个 sshd。
请注意,我仍然容易受到篡改过的主机的攻击。一个经过充分修改的桌面机器或一个警惕的“窥视狂”可以在击键信息到达 SSL 库之前将其记入日志。这种情况的解决方案就是使用一次性密码(OTP)系统。到目前为止,在我看来 OTP 带来的麻烦多于安全性。OTP 给您自己带来的代价和收益肯定至少会略微有所不同。无论如何,回到日常的工作场所可能是更新密码的好时机。
使用标准部件
我希望服务器诊所每个月都显示工作代码。在本文中,很难添加任何代码。我推荐的配置很简单,在标准的参考资料中都作了充分的记录。例如,要在第二个端口上添加 ssh 服务,只要将如下行:
Port 8080
添加到现有的 /etc/ssh/sshd_config,然后重新启动 sshd。另一个方法是使用“网络代理程序”或“端口转发器”(比如 netcat 或 socat),将它指回本地主机(localhost)的标准 ssh 端口,这个方法在运行试验和调优日志记录或额外安全性方面很有用。
代理程序
这里的上下文中的“代理程序”是一个小型“转换程序”,它只是让网络流量通过。如果我在端口 22 上设置了 sshd 服务器,并且希望在端口 110 上设置另一台 sshd 服务器,那么实现这个想法的一个方法是安装网络代理程序。这样的代理程序在端口 110 上用作服务器,接收来自外界的流量。它通过在端口 22 上充当客户机来处理这些分组。基本 sshd 服务器完成所有的实际工作;代理程序的作用只是从一个端口转换到另一个端口(可能在另一台主机上)。
这篇特别的专栏文章的真正价值并不在于深奥的代码,而只是在于传达了一个清晰的概念,您应该以此为目标来启用自己的远程服务。我已经尝试过许多方法。利用这些经验,尤其要了解不要做什么,至少要了解在您首次设置服务器室时不要做什么:禁止 Telnet,不要让不用的服务一直开着,不用担心 applet(尤其不要担心 applet 签名),以及如若感到不对劲就不要进行远程登录。
另一方面,一定要使用标准部件。我已经尝试过许多聪明的想法,用于调整 ssh 协议或自己的防火墙,以阻止“黑帽”黑客(指专门利用网络技巧入侵网络进行破坏的人,译者注)。与这些想法所提供的安全性方面的小小增强相比,它们的维护比较困难,因此有些得不偿失。除非我编制一个明确的安全性项目的预算,并具有明确的长期目标,否则最好将时间花在使用 ssh 上,而不是花时间设法改进它。
采用以上步骤,您将拥有一个服务器室,它的安全性要比您只使用标准的 Linux 服务器安装时要好得多。您还能够从全球可以找到几乎所有的同步连接上远程管理它。对于您自己的安全性计划,这是一个不错的起点。