WebLogic 安全性编程

     上一页  下一页    在新窗口中打开目录     
在此处开始内容

使用网络连接筛选器

本部分包含下列主题:

 


使用网络连接筛选器的优势

安全角色和安全策略使您能够确保域级别、应用程序级别以及应用程序组件级别的 WebLogic 资源安全。连接筛选器使您能够拒绝网络级别的访问。因此,网络连接筛选器可以提供另一个安全层。连接筛选器可用来保护单个服务器、服务器群集或者整个内部网络的服务器资源的安全。

对于通过管理端口控制访问,连接筛选器特别有用。按照网络防火墙的配置情况,可能可以使用连接筛选器进一步限制管理访问。典型的用法是:将管理端口访问权限限制为仅访问域中的服务器和计算机。这样,即使攻击者绕过防火墙访问计算机,也无法执行管理操作,除非他们在某台受允许的计算机上进行攻击。

网络连接筛选器是一种防火墙,可以将它们配置为基于协议、IP 地址和 DNS 节点名进行筛选。例如,您可以拒绝源自公司网络之外的任何非 SSL 连接。从而确保来自 Internet 上各种系统的访问都是安全的。

 


网络连接筛选器 API

本部分将描述 weblogic.security.net 包。此 API 提供了用于开发网络连接筛选器的接口和类。另外也包括了 ConnectionFilterImpl 类,该类是网络连接筛选器的一个即用实现。有关详细信息,请参阅本版本 WebLogic Server 的 Javadocs for WebLogic Classes

本部分包含下列主题:

连接筛选器接口

要实现连接筛选,请编写可以实现连接筛选器接口的类。提供下列用于实现连接筛选器的 weblogic.security.net接口:

ConnectionFilter 接口

此接口定义了可以实现连接筛选的 accept()方法。要对服务器进行编程以实现连接筛选,请实例化实现本接口的类,然后在管理控制台中配置该类。此接口是实现连接筛选的最低要求。

注意: 如果单独实现此接口,则不能达到通过使用管理控制台输入和修改筛选规则来限制客户端连接的目的;如果要实现此目的,必须使用其他格式(例如在管理控制台中定义的平面文件)。要使用管理控制台输入和修改筛选规则,也必须实现 ConnectionFilterRulesListener接口。有关 ConnectionFilterRulesListener 接口的描述,请参阅 ConnectionFilterRulesListener 接口

有关说明如何使用此接口的代码示例,请参阅连接筛选器示例

ConnectionFilterRulesListener 接口

服务器使用此接口确定在管理控制台的 ConnectionFilterRules 字段中指定的规则在启动期间和运行时是否有效。

注意: 您可以实现此接口,或者只使用 WebLogic 连接筛选器实现 weblogic.security.net.ConnectionFilterImpl,该实现作为 WebLogic Server 产品的一部分提供。

此接口定义了两种方法,可用于实现连接筛选:setRules()checkRules()。除了实现 ConnectionFilter 接口,通过实现此接口可以使用管理控制台输入筛选规则以限制客户端连接。

注意: 为了在管理控制台中输入和编辑连接筛选规则,您必须实现 ConnectionFilterRulesListener 接口;否则必须使用其他方法。例如,您可以使用平面文件。

有关如何使用此接口的代码示例,请参阅连接筛选器示例

连接筛选器类

为实现连接筛选器提供下列两个 weblogic.security.net 类:

ConnectionFilterImpl 类

本类是 ConnectionFilterConnectionFilterRulesListener 接口的 WebLogic 连接筛选器实现。一旦使用管理控制台配置了连接筛选器,默认情况下,本连接筛选器就接受所有传入连接,同时提供静态工厂方法使服务器能够获得当前连接筛选器。要使用本连接拒绝访问,只需要用管理控制台输入连接筛选器规则。

本类作为 WebLogic Server 产品的一部分提供。要配置本类以进行使用,请参阅配置 WebLogic 连接筛选器

ConnectionEvent 类

所有事件状态对象都从本类派生出来。所有事件都是通过引用对象进行构造。这里的对象就是源,逻辑上认为源就是一个对象,某个特定事件最初就出现该对象上。为了新建 ConnectionEvent 实例,应用程序使用本类提供的以下方法:getLocalAddress(), getLocalPort()getRemoteAddress()、getRemotePort()hashcode()

有关如何使用本类的代码示例,请参阅清单 7-1,网络连接筛选示例

 


连接筛选器规则的编写指南

本部分描述如何编写和计算连接筛选器规则。如果不指定连接规则,则接受所有连接。

连接筛选器是在平面文件中编写,还是在管理控制器中直接输入,取决于如何实现连接筛选。连接筛选器示例中对这两种方法都进行了说明。

下列部分提供了有关编写连接筛选器规则的信息和指南:

连接筛选器规则语法

连接筛选器规则语法如下所示:

筛选器规则格式的不同取决于是使用筛选器文件输入筛选器规则,还是在管理控制台中输入筛选器规则。

连接筛选器规则的类型

可以识别两种筛选规则:

如何计算连接筛选器规则

当客户端连接至 WebLogic Server 时,按照规则编写顺序对规则进行计算。第一条匹配规则决定了连接方式。如果没有规则可匹配,则允许连接。

为了进一步保护服务器的安全,并且只允许某些地址进行连接,请将最后一条规则指定为:

0.0.0.0/0  *  *  deny

将这条规则指定为最后一条规则后,只允许前面规则所允许的连接,而拒绝所有其他连接。例如,如果您指定下列规则:

<Remote IP Address> * * allow https
0.0.0.0/0 * * deny

只有具有远程 IP 地址的计算机才能访问运行连接筛选器的 WebLogic Server 的实例。拒绝所有其他系统的访问。

注意: 默认的连接筛选器实现将 0 (0.0.0.0/0) 的目标地址解释为“该规则应该适用于所有的 IP 地址”。按照设计,默认的筛选器不计算端口或本地地址,只计算操作。要在使用默认筛选器时明确指定限制,请修改规则。
注意: 另一个选项用于实现自定义连接筛选器。可以从http://dev.bea.com/code/security.jsp获取示例筛选器;FastFilterEntry.java 示例包含确定如何处理规则的 match()方法。

 


配置 WebLogic 连接筛选器

WebLogic Server 提供现成的网络连接筛选器。要使用该筛选器,只需使用管理控制台对其进行配置。有关如何配置连接筛选器的信息,请参阅“确保 WebLogic Server 的安全”。

 


开发自定义连接筛选器

如果您决定不使用 WebLogic 连接筛选器,而要自己开发连接筛选器,则可以使用 weblogic.security.net 包中提供的应用程序编程接口 (API) 进行开发。有关该 API 的说明,请参阅网络连接筛选器 API

要使用 WebLogic Server 开发自定义连接筛选器,请执行下列步骤:

  1. 编写实现 ConnectionFilter 接口的类(最低要求)。
  2. 或者,如果您要直接使用管理控制台输入并修改连接筛选规则,请编写可同时实现 ConnectionFilter 接口和 ConnectionFilterRulesListener 接口的类。

  3. 如果选择在第 1 步中实现最低要求(只实现 ConnectionFilter 接口),请在平面文件中输入连接筛选规则,并在实现 ConnectionFilter 接口的类中定义平面文件的位置。然后使用管理控制台在 WebLogic Server 中配置类。有关在管理控制台中配置类的说明,请参阅确保 WebLogic Server 安全中的使用连接筛选器。有关如何使用平面文件实现连接筛选的示例,请参阅连接筛选器示例中所引用的 SimpleConnectionFilter.java 文件。
  4. 如果选择在第 1 步中实现两个接口,请使用管理控制台配置类并输入连接筛选规则。有关在管理控制台中配置类的说明,请参阅确保 WebLogic Server 安全中的使用连接筛选器。有关如何使用 ConnectionFilterRulesListener 接口实现连接筛选的示例,请参阅连接筛选器示例中所引用的 SimpleConnectionFilter2.java 文件。

注意:如果在 Java 或 Web 浏览器客户端试图连接至 WebLogic Server 实例时实现连接筛选,则 WebLogic Server 实例会构造 ConnectionEvent对象,并将其传递到连接筛选器类的 accept()方法。连接筛选器类将检查 ConnectionEvent对象,并通过返回接受连接;或者通过引发 FilterException 拒绝连接。

在收集客户端连接信息之后,两种实现的类(只实现 ConnectionFilter 接口的类,以及同时实现 ConnectionFilter 接口和 ConnectionFilterRulesListener 接口的类)必须调用 accept() 方法。然而,如果只实现 ConnectionFilter 接口,收集的信息则包括远程 IP 地址以及下列连接协议:httphttpst3t3sldapldapsiiopiiopscom。如果实现两种接口,收集的信息就包括远程 IP 地址、远程端口号、本地 IP 地址、本地端口号和连接协议。

 


连接筛选器示例

本部分引用了示例代码,可从 BEA 的dev2dev网站上联机获得。net 目录中包含 ant 生成文件、包含说明的 package.html 文件、连接 filter 文件,以及下列 Java 文件(包含两个连接筛选器示例):

每个连接筛选器示例都提供可以解析规则并设置匹配规则算法的高效通用的连接筛选器,这样连接筛选将最低开销添加到 WebLogic Server 连接。如果有必要,您可以修改本示例代码,然后重新使用。例如,您可能要在筛选器中使用本地或远程端口号,或者使用将减少筛选开销的特定站点算法。有关如何生成、配置和运行这些示例的说明,请参阅这些示例中包含的 package-summary.html 文件。

SimpleConnectionFilter 示例通过使用筛选器文件中定义的规则,实现了 ConnectionFilter 接口并对连接进行筛选。

public class SimpleConnectionFilter implements ConnectionFilter {
public static final String FILTER_FILE = "filter";
  private FilterEntry[] rules;
...

SimpleConnectionFilter2 示例通过您使用管理控制台定义的规则实现 ConnectionFilterConnectionFilterRulesListener 接口。

public class SimpleConnectionFilter2
implements ConnectionFilter, ConnectionFilterRulesListener {
  private FilterEntry[] rules;
private Vector entries;
  ...

清单 7-1 中,WebLogic Server 使用 ConnectionEvent 调用 SimpleConnectionFilter.accept() 方法。使用 SimpleConnectionFilter.accept() 方法可以获取远程地址和协议,并将协议转化为位掩码,以避免在匹配规则时进行字符串比较。然后,SimpleConnectionFilter.accept() 方法针对每条规则比较远程地址和协议,直到找到匹配为止。

该代码片断是从网络连接筛选器代码示例的 SimpleConnectionFilter.java 文件获取的。

清单 7-1 网络连接筛选示例
  public void accept(ConnectionEvent evt)
throws FilterException
{
InetAddress remoteAddress = evt.getRemoteAddress();
String protocol = evt.getProtocol().toLowerCase();
int bit = protocolToMaskBit(protocol);
     if (bit == 0xdeadbeef)
{
bit = 0;
}
// 以编写顺序检查规则。
for (int i = 0; i < rules.length; i++)
{
switch (rules[i].check(remoteAddress, bit))
{
case FilterEntry.ALLOW:
      return;
case FilterEntry.DENY:
     throw new FilterException("rule " + (i + 1));
case FilterEntry.IGNORE:
     break;
default:
     throw new RuntimeException("connection filter internal error!");
}
}
// 如果无匹配规则,将可以成功连接。
return;
}

  返回顶部       上一页  下一页