OPC (用于过程控制的 OLE )被广泛应用在控制系统中,用于提供不同供应商的设备和软件之间的互操作性。
最新版本的 OPC (OPC UA) 在其设计中已经包括了安全性需求,但 OPC“ Classic ” 协议 ( OPC DA, OPC HAD 和 OPC A&E ) 基于微软的 DCOM 协议, DCOM 协议是在网络安全问题被广泛认识之前设计的。因此,这些协议给那些希望能确保控制系统安全性和可靠性的工程师带来了极大的挑战。
本应用指南简要介绍了与 OPC 相关的安全问题,并解释了如何使用 OPC enforcer 保护 OPC 服务器和 OPC 客户端。
OPC Classic 的安全问题
大多数 TPC 和 UDP 通讯协议都使用单一的标准化端口号 - 例如, Modbus TCP 通常使用 502 端口。客户端设备 建立对 服务器 设备 502 端口的连接 ,然后发送数据到服务器设备,或者接受来自服务器设备的数据。使用防火墙来保护这些客户端和服务器设备相对而言比较简单 - 只需设置防火墙,仅允许指定端口号的上的通讯,阻止其他所有的网络通讯即可。
OPC Classic 协议就不是如此简单了。建立 OPC 连接需要以下两步:
l 客户端通过 135 端口查询服务器以获取通讯所需的 TCP 端口号。
l 客户端使用第一步获取到的端口号连接到服务器,访问目标数据。
步骤 1 中数据对象请求使用的端口号是标准化的,且是众所周知的。然而,实际数据连接(步骤 2 )使用的端口号是由 OPC 服务器以一个虚拟随机序列动态分配的,因此没有办法提前知道服务器返回给客户端的端口号。另外,服务器可以分配的端口号范围很广 - Windows Server 2008 下超过 16000 个端口号,早期的端 Windows 版本则超过了 48000 个口号。
正因如此,传统的防火墙在保护 OPC 服务器时,不得不允许 OPC 客户端和 OPC 服务器之间如此大范围内的任何端口号的 TCP 连接。在这种情况下,防火墙提供的安全保障被降至最低。因此,目前绝大多数的 OPC 服务器都在没有任何防火墙保护的情况下运行,从而很容易受到恶意软件和其他安全威胁的攻击。
多芬诺 OP C Classic enforcer 软插件
多芬诺 OPC enforcer 软插件可以 动态跟踪 OPC 服务器分配的 OPC 数据连接的端口号。最低限度的打开通讯所需的防火墙的端口,允许数据连接通过,同时关闭所有未使用的端口。 OPC enforcer 软插件 也可以对 OPC 数据请求和响应信息执行 “ sanity check ” ,从而阻止任何不符合有关 DCE/RPC 标准的信息。
因此, OPC enforcer 软插件 能够对使用 OPC Classic 协议的系统提供有效的防火墙保护。 OPC 数据连接将畅通无阻地通过 Tofino 安全模块( SA ),而任何异常通讯和恶意通讯都将被阻挡,同时通过 多芬诺 Firewall 软插件 产生报告。 Tofino 安全模块提供的这些保护与 Windows PC 无关;不需要对 OPC 客户端或服务器做任何更改。
使用范例
下面的内容介绍如何使用 OPC enforcer 软插件 来保护 OPC 客户端和 OPC 服务器设备之间的通信。在这个例子中,我们将用 Matrikon OPC Explorer 作为一个客户端与 Mat ri kon OPC 仿真服务器进行通信。在 OPC 服务器和控制网络的其余部分之间安装 多芬诺 安全模块。 多芬诺 组态管理平台( CMP )用于配置和管理 多芬诺 安全模块。系统网络结构图如图 1 所示。
CMP 的配置
CMP 使用户可以通过拖放节点视图图标到网络编辑器中(或者通过使用 Tofino discovery 和 asset discovery 功能),创建控制网络模型。如果需要的话,可以模拟整个网络,但是只有防火墙规则中涉及到的设备才是网络模型中必须包含的。因此,案例中的 OPC 网络的最终模型(图 2 )是非常简单的。
一旦模型创建完成后,必须激活 Tofino 安全模块中的 Firewall 和 OPC enforcer 软插件。这一工作在网络编辑器中的 Tofino 图标的 “Modules ” 标签页中完成。
创建和配置防火墙规则
接下来,创建防火墙规则,允许客户端和服务器之间的 OPC 通讯。参照以下步骤创建 “talker ” 防火墙规则:
l 双击 OPC 服务器的图标显示服务器的设置,然后单击其中的 firewall 标签页。
l 在 “network ” 视图中( Tofino CMP 的左上角)找到 OPC 客户端图标,然后将该图标拖放到 OPC 服务器的 firewall 标签页中的 “talker rules ” 一行。
l 从 “protocols ” 视图( Tofino CMP 的右下角)中将 “OPC Classic TCP ” 协议拖放到服务器的 firewall 标签页中的 OPC 客户端图标上。
l 双击 “OPC Classic-TCP ” 防火墙规则,将其权限改为 “enforcer ” ,点击 “OK ” 。该权限设置使 OPC enforcer 能检查计算机间的通讯,并且跟踪被创建的 OPC 数据连接。
完成后的防火墙规则如图 3 所示。点击视图底部的 “OK ” 按钮,新的规则即可保存到 Tofino CMP 中,同时也被下载到 Tofino 安全模块中。
测试规则
独特的 “ 测试 ” 模式允许所有的网络通讯通过 Tofino 安全模块,但对实际运行中会受阻的通讯产生报警信息。从而可以在不存在意外阻止正确工厂操作所需通讯的风险下,对防火墙和 OPC enforcer 规则进行测试。
使用 “general/communication ” 标签页中底部的下拉控制,可以设置运行模式,在 Tofino 的工作模式改变后,必须停止并重启 OPC 客户端,这样的话 OPC enforcer 就能发现数据连接请求,解析出所分配的端口号,并配置防火墙以便让数据连接通过。
当 OPC enforcer 创建完防火墙规则,允许数据连接通过 Tofino 安全模块后,将给 CMP 发送报警信息即 “exception heartbeat ” 通知用户。这些信息都显示在屏幕底部的 “event ” 视图中。双击这些心跳信息中的某一条信息,将打开图 4 所示详细视图。
通过监测异常事件,编辑防火墙和 OPC enforcer 的配置,用户就能确保所有必需的系统通讯都能通过 Toflno S A ,同时也不会产生报警。测试完成后,可以将 Tofino SA 设置为运行模式,执行已配置好的规则。
OPC enforcer 选项
有三个选项可用来控制 OPC enforcer 如何管理每个 OPC 连接。
“Sanity check ” 功能使 OPC enforcer 能检查数据连接请求和响应是否符合 DCE/RPC 协议标准,并且阻止任何不标准的通讯。对于一些 OPC 客户端和 / 或服务器,需要关闭该功能。
“Fragment check ” 功能使 OPC enforcer 能阻止不完整的 DCE/RPC 数据连接请求。和 “Sanity check ” 相同,对于一些 OPC 客户端,可能需要关闭该功能。
“connection T/O ” 定义了数据连接请求和实际数据连接开始之间的最长时间限制。如果由于某种原因, OPC 客户端不再创建数据连接,该设置将确保通过 OPC enforcer 在防火墙创建的 “ 大门 ” 及时关闭。默认的时间限制是 5 秒,但对于一些 OPC 客户端,这个值可能需要增加。对 Matrikon OPC Explorer 的测试表明, 10 秒的超时设置对该客户端是最佳的选择,如图 5 所示。
通过计算机名连接 VS 通过 IP 地址连接
如果 OPC 客户端通过 IP 地址访问 OPC 服务器,那么只需要 OPC Classic-TCP 防火墙规则。如果 OPC 客户端被配置为不是通过 OPC 服务器的 IP 地址而是通过其计算机名访问 OPC 服务器,那么在 Tofino 安全模块中需要设置额外的防火墙规则,以便允许域名解析通讯通过防火墙。
在范例系统中,必须在 OPC 服务器的 Firewall 标签页中配置 talker 规则,允许 OPC 客户端和 OPC 服务器之间的 NetBIOS 名字服务和 NetBIOS 数据报服务,如图 6 所示。
在对等网络配置中,为了相互定位, OPC 客户端和服务器还必须能发送和接受广播 NetBIOS 通讯。在基于域的网络中,这些机器必须能够发送和接受往返于域控制器的 NetBIOS 通信。根据网络的设计和使用的具体的通信协议,可能需要额外的 broadband , talker 和 / 或 global 规则。
对等网络下的广播规则设置如图 7 所示。广播规则在 Firewall 标签页中设置。
总结
Tofino OP C Classic enforcer 为使用 OPC Classic 通信服务的 OPC 客户端和服务器提供了有效的防火墙保护。 OPC enforcer 配置简单,其特有的 “ 测试 ” 模式让您在真正部署之前有机会对组态规则进行测试。