银行业中的 Linux
M-Tech 是一家位于加拿大艾伯塔省卡尔加里的计算机安全产品和服务公司。 本文介绍了我们为加拿大西部一家大型金融机构开发互联网银行系统的经验。 由于它讨论了该组织的计算机安全基础设施,因此他们要求我们不要在此明确提及他们的名称。 该系统现已投入生产,允许数千用户在线进行金融交易。
本文将描述
构建互联网银行系统需要哪些组件
Linux 如何使开发互联网银行系统更容易
将 Linux 服务器部署为最终系统的关键组件
互联网银行可以定义为任何使金融机构的客户能够通过互联网执行金融交易的系统。 由于客户与金融机构之间的连接是电子的,因此我们仅限于不需要交换金钱或文件的交易。 剩余的有以下内容
资金转账
账户余额和历史查询
账单支付
贷款申请
检索有关服务、分行位置等的信息。
向金融机构发送反馈
虽然给定的互联网银行系统可能不支持所有这些功能,但可以实现任何这些功能。 互联网银行基本上是现有银行系统的用户友好、安全和分布式的用户界面。 考虑到这一点,我们受聘做以下工作
设计和部署网络和应用程序基础设施,以支持新应用程序。
帮助用 Java 实现基于 WWW 的用户界面。
帮助将新系统与客户主机中的现有业务逻辑集成。
该应用程序供成千上万的用户使用,其中许多用户对计算机的经验有限。 因此,用户界面应适合那些计算机技能仅限于访问计算机、知道如何启动 WWW 浏览器以及如何输入 URL 的人。
我们受聘构建的互联网银行系统的其他要求是
我们客户组织中的不同组必须能够轻松地实现具有不同图形、广告和菜单的应用程序的不同用户界面。
我们的客户必须能够在将来自定义和扩展系统的功能。
到目前为止,互联网银行系统最重要的特征是它不应该造成任何损害。 特别是,该系统必须确保
现有的“后端”(用于处理交易的主机)应该不会受到攻击。 最重要的是,它不能容易受到拒绝服务攻击。
连接到互联网上的用户和我们客户网络上的互联网银行系统之间的网络中的第三方,应该无法破译或更改这些点之间的通信。
应使用经济上可行的尽可能可靠的机制对用户进行身份验证。
作为一般规则,对于用户和金融机构而言,该系统应与用户在银行分行进行的交易一样安全。
部署后,该系统由四个物理组件组成
客户端工作站,包括具有 Java 和 SSL 功能的 WWW 浏览器
一个或多个防火墙系统,用于保护互联网银行服务器免受外部攻击
一个或多个应用程序网关:Java 用户界面小程序是从这些网关下载的,并且必须通过它们与后端通信。
后端交易处理系统:对于大多数金融机构,包括我们的客户,都使用 IBM 主机。
这些硬件组件之间有三个概念性网络段
客户端和外部防火墙之间的互联网
外部防火墙和应用程序 WWW 服务器之间的 Network-1
应用程序 WWW 服务器和主机之间的 Network-2
此安排如图 1 所示。
在开发客户的互联网银行系统时,我们首先部署了一个基于 Linux 的开发环境,该环境由 Compaq Prosignia 服务器、64MB 内存和一对 4.3GB Ultra Wide SCSI 磁盘组成。 我们在此系统上安装了 Debian Linux 发行版。 在该平台上,我们安装了各种工具,如表 1所示。
我们将此设置用作我们的主要开发环境。 使用 Apache-SSL,我们能够测试各种浏览器以检查应用程序的行为并调整其外观。
使用一些自定义的 Makefiles 和库,我们能够在此环境中编写 Java 客户端代码、C 语言 CGI 和守护程序、C 语言主机程序和 COBOL 程序存根。
通过实现 RPC 系统,其中代码生成器将主事务描述文件转换为每个目标平台的源代码,我们只需几个简短的命令即可将新的事务类型添加到互联网银行应用程序。
为了保护最终系统免受拒绝服务、窃听和冒充攻击,我们使用 Linux 来实现外部防火墙。 由于我们的访问控制规则简单且静态,因此我们能够使用 Linux 内核的内置数据包过滤功能来限制对仅所需服务的远程访问 - DNS 和 HTTPS。
作为防止未经授权访问的进一步预防措施,互联网上的任何系统都必须先通过我们的应用程序代码才能连接到我们客户的主机。 从互联网到主机根本没有网络数据包的路径。 我们的应用程序系统无法连接到主机以外的任何计算机; 这最大限度地减少了客户网络上其他系统的暴露。
为了确保私密通信,我们使用嵌入在 HTTPS 中的 SSL 协议来保护应用程序 WWW 服务器和客户端机器之间的通信。 我们也不完全信任应用程序 WWW 服务器和主机之间的物理连接,因此我们应用程序在 WWW 服务器上与主机上的事务管理软件之间的所有通信都已加密。
最后,由于用户可能会登录并离开他们的终端,因此我们在客户端 Java 小程序和主机之间实施了一个令牌管理系统,其中令牌具有几分钟的隐式超时。 无人值守的会话在客户端机器上看起来与有人值守的会话完全一样,但被阻止进行新的交易。
在这种规模的实时系统中,一个重要的考虑因素是由于停电、硬件故障或高负载而导致停机的可能性。 我们的系统受到不间断电源 (UPS) 的保护,以防止断电。 此外,我们实施了两个相同的应用程序服务器,每个服务器都充当 DNS 和应用程序服务器。 一个系统配置为主 DNS,另一个系统配置为辅助 DNS。 如果主服务器发生故障,DNS 查询将导致客户端连接到辅助系统。
最后,所有连接状态信息都存储在主机上的数据库中。 由于应用程序服务器是无状态的,因此连续的事务可以通过任意数量的并行运行的应用程序服务器进行路由。 并且由于应用程序服务器是 PC,因此我们可以通过购买更多 PC 服务器以及智能路由器来扩展系统以处理任意大量的流量。
但是,为了充分利用 Linux 的技术优势,我们的客户必须思想开放。 我们很幸运能与这位客户合作,因为他们根据其可靠性、功能、可扩展性、可维护性和成本来判断此架构的优点。 我们深信,实施团队对技术替代方案的开放态度使他们能够实施最佳解决方案,而不仅仅是与其竞争对手相同的技术。
我们以前曾将 Linux 用作开发平台,并选择它是因为它的大多数发行版都包含丰富的工具集。 这个项目没有任何意外 - Linux 是一个方便、高效和可靠的开发平台。 我们的任何开发工具都从未出现问题,也从未遇到过系统停机。
过去,我们曾为 Windows NT 以及其他 UNIX 平台开发过软件。 Linux 作为开发和部署平台,与这些平台相比非常有优势——它只是功能更全、支持更好。
Linux 正在证明其作为生产环境的价值。它运行在廉价的硬件上,并与 Apache SSL 结合,提供出色的 WWW 服务器性能。如果我们不花费更多钱,并满足于功能较少的工具集,我们很难找到可以运行我们的 WWW 服务器、开发环境和防火墙的同等系统。
在这个项目中,Linux 丰富的网络功能被证明特别有用。特别是以下几点:
设置防火墙很简单,并且最终的系统非常有效。
我们的开发服务器使用 ssh 进行安全远程连接,使用 X Window System 来方便地访问源文件和工具,并使用 Samba 允许开发人员直接从他们的 PC 访问文件。
BIND 使得从主服务器到备份服务器的故障转移变得容易实现。
各种 Shell 工具使得保持备份服务器上的软件最新版本变得容易。
Linux 不仅功能丰富,而且也得到了很好的支持。我们发现,每当发现新的安全漏洞时,Linux 总是第一个提供补丁或解决方法的系统。例如,据报道,ping-of-death 漏洞在三个小时内得到了修复,并且用于解决常见缓冲区溢出漏洞的 Linux 补丁与该漏洞的发现同时发布。我们怀疑任何供应商都能与 Linux 程序员的全球社区的响应速度相提并论。
