Published On: August 6ᵗʰ, 2019 02:06

Cisco NAC Profiler Installation and Configuration Guide, Release 2.1.8

Advanced XML Rules

This appendix contains the following topics:

Advanced XML Rules Syntax

Using Traffic and Web URL Rules within Advanced Rules

Advanced Rule Examples

Cisco NAC Profiler Document Type Definition (DTD)


Note See also Advanced Rules, page 9-17 for additional information.


The Cisco NAC Profiler Advanced Rule option offers the ability to define custom rules using Extensible Markup Language (XML) to combine the Profiler rule types using the Boolean logic operators OR, AND and NOT. You can combine multiple rules of a single type, and different types of rules, into a single Advanced Rule to evaluate any endpoint data collected by Cisco NAC Profiler via the NetMap, NetWatch and NetRelay (for Traffic Rules) modules.

This appendix expands the information provided in Advanced Rules, page 9-17 to assist advanced Profiler administrators with the design and configuration of Advanced Rules, an advanced feature of the product. When designed properly, Advanced Rules significantly increase the flexibility of Cisco NAC Profiler. However, invalid XML configuration in Advanced Rules can also prevent the Server module of the Profiler Server from starting, and poorly constructed rule logic can negatively impact overall system performance. In the current version, the Advanced Rule editor checks Advanced Rules for valid XML prior to saving the rule to the configuration, which provides some level of error checking.

Like any advanced technique, Cisco recommends approaching Advanced Rules with the requisite level of attention to the documentation and requirements specific to the Cisco NAC Profiler product. For example, although the Profiler leverages techniques similar to those used in other applications, such as Intrusion Prevention, Cisco NAC Profiler was not designed to be an IPS. It is important to consider this when configuring Profiles using these advanced techniques and when designing a Cisco NAC Profiler deployment. If questions regarding the design of an Advanced Rule or potential performance impacts arise, it is best to contact Cisco NAC Profiler Technical Support for assistance and guidance.

Advanced XML Rules Syntax

Advanced Rules are configured using valid XML syntax conforming to the Profiler Document Type Description (DTD) as described in Cisco NAC Profiler Document Type Definition (DTD). The general format of an Advanced Rule is as follows:

<Rule name="Advanced Rule">

<RuleEntity entity="Profile Name" cf="certainty_value"/>

<logical_operator 1>

Rule 1

Rule n

</logical_operator 1>

</Rule>

For the purposes of this document, a logic block is defined as the one or more rules enclosed by a logical operator: AND, OR or NOT. It is acceptable to "nest" multiple logic blocks within logical operators to create complex rules that check multiple criteria. The NOT operator can be designed to exclude other criteria.

In an Advanced Rule, the Profiler Modeling Engine ("Modeler") does not use the Rule name syntax on the first line itself. This is used only to name the rule so that it can be identified. When creating Advanced Rules, Cisco highly recommends choosing a descriptive name to facilitate system description, although you can name the rule anything that you like.

The RuleEntity on second line of an Advanced Rule is critical. This line directs the Modeler to associate each Advanced Rule to the Profile to which it is bound.

The second line of each Advanced Rule must use the following syntax:

<RuleEntity entity="[Profile-Name]" cf="x"/>


Where:

[Profile-Name] is replaced with the name of the Profile (case sensitive)

x is replaced with the certainty value for this rule, a number between .01 and 1

In the following example, the named Advanced Rule is interpreted as bound to the Profile named Advanced Printer. Any endpoint for which the logic of this Advanced Rule tests true will be placed in the Advanced Printer profile with a certainty of 65%:

<RuleEntity entity="Advanced Printer" cf="0.65"/>

Immediately following the "entity=" line of the Advanced Rule, the syntax of the rule which defines the rule logic is entered with proper XML format, as described in the sections which follow.


Note Cisco highly recommends inserting comments into Advanced Rules to properly document them so others can understand the underlying logic of the rule without assistance from the original author of the rule. You can add comment lines to an Advanced Rule using the following syntax:
<!-- comment text -->


Multiple Logic Blocks

One of the primary advantages of using Advanced Rules is the ability to use other available logical operators within the rule logic, such as AND and NOT, and different rule types, such as MAC Vendor and DHCP Vendor Class, in a single rule.

When multiple rules are added to Profiles via the GUI Profile editor of the Profiler Server, the individual rules are added to the Modeler as distinct entities. During a remodel, the Modeler must evaluate each of the rules specified in the enabled Profiles individually through the standard Profile creation process. When multiple rules are added to a Profile using the GUI, the default logical operator is OR. Because individual rules in a Profile are evaluated independently, it is possible for multiple rules to test true and therefore the certainty algorithm that represents the combined certainty resulting from the match of multiple rules is used. The key concept to consider regarding using the GUI for defining multiple rules in a Profile is that they are evaluated by the Modeler independently.

In contrast, an Advanced Rule can have multiple logic blocks using the logical operators, and those logic blocks can be nested within additional operators providing maximum flexibility. However, in the case of Advanced Rules, the logic embedded in the rule is evaluated sequentially according to the specified logical operation. For example, if there are two or more logical blocks nested within an AND operator, and if the first block tests false, the Modeler ceases to evaluate the remaining logical blocks in the rule because the AND requires all blocks to test true. Similarly if two or more logical blocks are nested within an OR, as soon as one logical block tests true, the condition of the Advanced Rule is met (that is, at least one condition tests true), and the Modeler ceases to evaluate the remaining logic in the Advanced Rule.

Therefore, when testing against multiple criteria, you can define Advanced Rules (when properly constructed) that are much more efficient than if you specified multiple rules using the GUI.

OR Operator and Order of Rules/Logic Blocks

When creating Advanced Rule logic, prefix notation is used. In prefix notation, you specify the logic operator (e.g., AND, OR, NOT) to the outside of the items (rules) to which the logic will apply. For example, consider the following logical block taken from the system-generated Advanced Rule for the Generic Printer Profile:

<OR>
  <TrafficRule ipaddr="0.0.0.0" sport="0" dport="515"/>
  <TrafficRule ipaddr="0.0.0.0" sport="0" dport="9100"/>
</OR>

In the logic block example above, two traffic rules are defined inside an OR operator— that is, between the <OR> and </OR>. When evaluating this rule, the Modeler evaluates the first rule and then the second rule, only if necessary, in the order implied by the rule itself. Because the logical operator is OR, this logic block will test true if either of the Traffic Rules is true. Therefore, if the first rule in the list tests true, the Modeler does not continue to check the remaining rule. This block of logic will test true for the Target of Evaluation (TOE) and the Modeler will continue to the next block, or next rule.

When multiple rules are specified within a logic block using the OR operator, it is good practice to order the rules in the logic block so that any rules more likely to test true are defined in the logic block at the very top of the list. Similarly, if logic blocks are nested within an OR, the logic blocks most likely to test true should be placed first so that the Modeler finds the hit and exits the Advanced Rule as efficiently as possible.

This highlights a key general concept in efficient design of Advanced Rules. Because the AND operator requires all rules (or nested logic blocks) to test true, strategic use of AND can greatly improve the efficiency of rules. The AND logical operator can be used within Advanced Rules to create logic blocks that are "pre-qualifiers" for the rule to increase efficiency and performance of the Modeler.

Generic Printer Rule

The following is an example of how this principle can be used in practice. The Generic Printer rule is an Advanced Rule that includes a series of traffic rules that match traffic from the print servers specified in MyNetwork to endpoints on ports 9100 to 515, the standard printer ports. The primary logic block in this system-generated Advanced Rule is created by using the OR operator on two traffic rules for each known print server IP address (added to MyNetwork configuration) as shown in the following example:

        <OR>
         <TrafficRule ipaddr="1.1.2.50" sport="0" dport="515"/>
         <TrafficRule ipaddr="1.1.2.50" sport="0" dport="9100"/>
         <TrafficRule ipaddr="1.1.2.51" sport="0" dport="515"/>
         <TrafficRule ipaddr="1.1.2.51" sport="0" dport="9100"/>
         <TrafficRule ipaddr="1.1.2.52" sport="0" dport="515"/>
         <TrafficRule ipaddr="1.1.2.52" sport="0" dport="9100"/>
         <TrafficRule ipaddr="1.1.2.53" sport="0" dport="515"/>
         <TrafficRule ipaddr="1.1.2.53" sport="0" dport="9100"/>
        </OR>

In this example, there are 4 print servers known to be at the following addresses and entered in the MyNetwork configuration of Cisco NAC Profiler:

1.1.2.50
1.1.2.51
1.1.2.52
1.1.2.53

As outlined above, if this logic block is used by itself, the Modeler evaluates each of the traffic rules until a match occurs. On the first match, the Modeler will exit with the result that the Advanced Rule tested true for the Target of Evaluation (ToE).

AND Operator

You can increase the efficiency of the Advanced Rule using the AND operator with a specific logic block (as described in Generic Printer Rule) and a new, more general "pre-screening" logic block as shown in the following example. This example illustrates how the system-generated Advanced Rule for Generic Printer is constructed in practice in the current Profiler version:

Pre-Screen AND Logic Block

<AND>
        <OR>
         <TrafficRule ipaddr="0.0.0.0" sport="0" dport="515"/>
         <TrafficRule ipaddr="0.0.0.0" sport="0" dport="9100"/>
        </OR>
        <OR>
         <TrafficRule ipaddr="1.1.2.50" sport="0" dport="515"/>
         <TrafficRule ipaddr="1.1.2.50" sport="0" dport="9100"/>
         <TrafficRule ipaddr="1.1.2.51" sport="0" dport="515"/>
         <TrafficRule ipaddr="1.1.2.51" sport="0" dport="9100"/>
         <TrafficRule ipaddr="1.1.2.52" sport="0" dport="515"/>
         <TrafficRule ipaddr="1.1.2.52" sport="0" dport="9100"/>
         <TrafficRule ipaddr="1.1.2.53" sport="0" dport="515"/>
         <TrafficRule ipaddr="1.1.2.53" sport="0" dport="9100"/>
        </OR>
       </AND>

The AND operator and the new OR logic block is added to the original logic block that specifically matches the traffic from the known print servers as described in Generic Printer Rule.

The new logic block in conjunction with the AND operator ensures that the traffic comes from one of the desired port numbers associated with printing before it is evaluated for whether it comes from the specified list of print servers (i.e., the original OR logic block). When used in conjunction with the AND operator, this technique provides a pre-screening function for the Advanced Rule. Both of the logic blocks, the general AND specific, have to test true to satisfy the conditional. When the general logic block tests false (e.g., the traffic is not on the port numbers known to be associated with printing), the Modeler will exit out of the rule and move on—not wasting the cycles to verify if this is traffic from a specific IP address on the specified ports. This technique can substantially increase performance, particularly in situations where the specific logic block contains many entries, for example several hundred print servers. The design of the rule using the pre-screening block ensures the Modeler only evaluates traffic known to be associated with printing, potentially avoiding evaluating non-conforming traffic.

NOT Operator

The use of the NOT operator in Advanced Rules is similar to that of other logical operators, and it is common to combine NOT with the AND and OR operators in logical blocks. NOT can be used to exclude endpoints that match specific criteria from those that share common attributes.

For example, if an Advanced Rule is needed to match all endpoints on a given subnet, excluding devices with host address (last octet) of .1 through .10 and the subnet broadcast (.255) addresses, the following logic block employing the NOT operator can be used:

<AND>

<AddressRule ipaddr="10.180.0.0" mask="255.255.255.0"/>

<NOT>

<OR>

<AddressRule ipaddr="10.180.0.0" mask="255.255.255.248"/>

<AddressRule ipaddr="10.180.0.8" mask="255.255.255.255"/>

<AddressRule ipaddr="10.180.0.9" mask="255.255.255.255"/>

<AddressRule ipaddr="10.180.0.10" mask="255.255.255.255"/>

<AddressRule ipaddr="10.180.0.255" mask="255.255.255.255"/>

</OR>

</NOT>

</AND>

Note that the bolded section, the NOT operator, has nested within it the logic block using OR with rules that will match the specific addresses to be excluded from matching this rule. Again, both logic blocks within the AND operator must test true for the Modeler to match a ToE to this rule: the first logic block that matches all host addresses on the 10.180.0 subnet and the negation of the logic block interpreted as any host address not .1 through .10 and .255.

The following example shows how to use NOT in an Advanced Rule to exclude certain endpoints known to not connect wirelessly (based on host IP address using an Address Rule) when communicating with a known Novell server. In the example, endpoints connected via wireless are known to be assigned host addresses on the 10.200.0.0/21 subnet. Accordingly the NOT operator is used to exclude hosts with an address on this subnet from the hosts matching a traffic rule indicating communication with a specified Novell server on the designated port number (e.g., using a Traffic Rule):

<Rule name="Novell Employee">
  <RuleEntity entity="Novell_Employee" cf="0.90"/>
  <AND>
    <NOT>
       <AddressRule ipaddr="10.200.0.0" mask="255.255.248.0"/>
    </NOT>
    <TrafficRule ipaddr="192.168.1.101" dport="524" sport="0"/>
  </AND>
</Rule>

Using REGEX Within Advanced Rules

Many of the rule types that are used within the logic blocks of Advanced Rules utilize a Regular Expression (REGEX) for the matching data, like the standard rules defined through the GUI. Many of the examples in this document illustrate the use of REGEX within their logic blocks.

Using Traffic and Web URL Rules within Advanced Rules

As described in Chapter 9, "Configuring Endpoint Profiles," Traffic Rules and the Web URL Application Rule type require Cisco NAC Profiler to perform collection of specific network traffic—traffic meeting certain criteria specified in the Profile rules themselves. This requires both the NetWatch and NetRelay (in the case of Traffic Rules only) modules to be configured to collect traffic that the Modeler will in turn evaluate for rule matches in enabled Profiles utilizing these rule types.

When the GUI is used to create Traffic Rules and/or Web URL Application Rules within Profiles, it automatically makes the necessary configuration changes to the NetWatch and NetRelay modules throughout the system necessary for the Profiler to begin collecting this network traffic from the Collector monitor ports, or via NetFlow on Collectors running NetRelay.

During the Apply Changes -> Update Modules that must follow the addition/enabling of Profiles using Traffic or Web URL Application Rules, the new XML configuration files for all NetWatch and NetRelay modules in the system are generated and upon module restart, the system begins collecting this data so that the Modeler can begin examining it for rule matches.


Note In the case of URL rules, there is no configuration change to NetRelay, only to NetWatch. Traffic Rules require configuration of both modules for specific collection.


However, the GUI does not parse the Advanced XML Rules in version 2.1.8 and earlier. Therefore, if Traffic Rules or Web URL application rules are used in Advanced Rules, the configuration of the NetWatch and NetRelay for collection of specific network traffic for evaluation against these rules is not automated, and must be done manually. This can be accomplished simply by creating an additional rule using the GUI. A standard Traffic or Web URL rule is added to the Profile containing the Advanced Rule containing Traffic or Web URL rule(s). The standard rule which acts as a "collection rule" is added with a low level of certainty (1% typically will suffice). Its intended purpose is to activate the specific collection needed so the Profiler begins collecting traffic via NetWatch and or NetRelay to evaluate against the Advanced Rule.

The construction of these "collection rules" for Traffic Rules in particular can have performance implications as described earlier in this document: each time a standard rule is added using the GUI, it must be evaluated by the Modeler. Therefore a technique that may be employed is to make these collection rules open and not attempt to add a standard rule for the specific destination or source addresses of interest—that is use the IP address of 0.0.0.0 for the source or destination IP in the collection rule as applicable. This will result in the system collecting all traffic observed on the designated source or destination port number. The Advanced Rule logic will be used to identify the desired match. It is good practice to avoid configuring a list of collection rules with specific hosts identified and forcing the Modeler to evaluate each of the collection rules and the Advanced Rule.

To illustrate this concept, consider the Advanced Rule discussed under NOT Operator that includes a Traffic Rule that is designed to match endpoints communicating with a Novell Server IP on port 524. In the same Profile (Profile name Novell_Employee in the example), a standard Traffic Rule is defined using the GUI to act as a collection rule for the Advanced Rule. That Traffic Rule has the following parameters to ensure the set up of NetWatch and NetRelay modules in the system for traffic collection:

0.0.0.0

Dest IP

Src Port 0

Dest Port 524

Certainty 1%

After adding the standard Traffic Rule used as a collection rule and the Advanced Rule to the Novell_Employee Profile and enabling the Profile, an Apply Changes -> Update Modules needs to be executed to generate the NetWatch and NetRelay configurations and begin collection of the traffic needed to match the Advanced Rule. After the restart, as endpoints are observed matching the criteria: communicating with the Novell Server on port 524 but not having a wireless host address, they are added to the Novell_Employee Profile with a certainty of 90% (as specified in the Advanced Rule above).

If the step of adding the collection rule as well as the Advanced Rule to the Novell_Employee Profile is not taken, NetWatch and NetRelay are not programmed to collect this traffic, and no matches will occur.

Advanced Rule Examples

The example Advanced Rules provided in this section are designed to provide the reader with additional examples of Advanced Rule construction to further illustrate the concepts outlined in this section.


Note Although properly constructed, the rules in this section are not necessarily useful in all environments as-is. They are provided primarily as examples of how the rule types and logic available in Advanced Rules might be combined to Profile certain endpoints.


AND Operator with Multiple Logic Blocks

This first example illustrates the use of the AND operator with multiple logic blocks: one consisting of a single MAC Vendor rule, and the other multiple Address Rules with the OR operator applied. The devices that match this rule must have a MAC address with an OUI containing Cisco (case-insensitive) and have an IP address on one of the 17 specified subnets of the 192.168.240.0 network.

<Rule name="CiscoRouterAdv">
      <RuleEntity entity="Cisco Infrastructure" cf="0.6"/>
    <AND>
      <Vendor vendor="/^cisco/i"/>
     <OR>
      <AddressRule ipaddr="192.168.208.0" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.16" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.48" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.64" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.80" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.96" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.112" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.128" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.144" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.160" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.176" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.192" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.208" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.224" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.208.240" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.209.0" mask="255.255.255.240"/>
      <AddressRule ipaddr="192.168.209.16" mask="255.255.255.240"/>
     </OR>
    </AND>
   </Rule>

Access Point / DHCP Vendor Classes

This next example Advanced Rule profiles any Access Point that:

Attempts to communicate with a central wireless switch with IP address 10.4.1.5 communicating on port 5000 (the default tunnel port for the Enterasys/Trapeze APs)

Is observed by Profiler to send a DHCP request with any of the following DHCP Vendor Classes: WIRELESS-AP:AP1002, WIRELESS-AP:AP3000/I, or WIRELESS-AP:AP4102.

<Rule name="Advanced Access Points">
      <RuleEntity entity="ETS Access Points" cf="0.90"/>
    <AND>
      <TrafficRule ipaddr="10.4.1.5" sport="0" dport="5000"/>
     <OR>
      <DHCPVendor vendor="/WIRELESS-AP:AP1002/i"/>
      <DHCPVendor vendor="/WIRELESS-AP:AP3000/i"/>
      <DHCPVendor vendor="/WIRELESS-AP:AP4102/i"/>
     </OR>
    </AND>
   </Rule>

Wireless Windows Endpoints

This example identifies endpoints running a version of Windows known to be attached via wireless based on having host addresses on the wireless subnets. The WebClient/Web User Agent rule is used to identify devices displaying a web client associated with the Windows OS. This rule illustrates one of the principles outlined earlier regarding the ordering of rules within a logic block: the wireless network subnets should be ordered from most populated to least populated to ensure an early match and exit from the logic block.

<Rule name="Win User Wireless">
      <RuleEntity entity="Windows Users - Wireless" cf="0.85"/>
    <AND>
     <OR>
      <AddressRule ipaddr="10.1.0.0" mask="255.255.255.0"/>
      <AddressRule ipaddr="10.1.1.0" mask="255.255.255.0"/>
      <AddressRule ipaddr="10.1.2.0" mask="255.255.255.0"/>
      <AddressRule ipaddr="10.1.4.0" mask="255.255.252.0"/>
      <AddressRule ipaddr="10.2.0.0" mask="255.255.255.0"/>
      <AddressRule ipaddr="10.2.1.0" mask="255.255.255.0"/>
      <AddressRule ipaddr="10.2.2.0" mask="255.255.255.0"/>
      <AddressRule ipaddr="10.2.4.0" mask="255.255.252.0"/>
     </OR>
     <OR>
      <WebClient banner="/Windows|Win32/i"/>
      <DHCPVendor vendor="MSFT 5.0"/>
      <DHCPVendor vendor="MSFT 98"/>
      <DHCPVendor vendor="Microsoft Windows CE"/>
     </OR>
    </AND>
   </Rule>

Cisco NAC Profiler Document Type Definition (DTD)

The purpose of a DTD is to define the legal building blocks of an XML document. It defines the document structure with a list of legal elements and attributes. The DTD for Cisco NAC Profiler rules and events is provided as a reference in Profiler DTD for Rules and Events.

In the current versions of Cisco NAC Profiler, Advanced Rules defined by the administrator are not validated against the DTD. However, in version 2.1.8 an XML parser is added to provide basic XML syntax checking for the Advanced Rule editor.


Warning Improper XML syntax used in an Advanced Rule that is committed to the system configuration will result in a Server module failure on the system upon restart of the system via Apply Changes -> Update Modules.


Before an Advanced XML Rule is saved to the configuration, the syntax is checked and if the Advanced Rule is not valid XML format, an error is displayed. Cisco highly recommends using the DTD in Profiler DTD for Rules and Events along with the examples in this document when authoring Advanced XML rules to ensure validity of the XML and compliance with the DTD.

By reviewing the Profiler DTD, the reader can review the different types of rules that are available via the Advanced XML Rule option and the data that must be provided. Note that in addition to the use of the logical operators reviewed earlier in this document, there are also several rule types that can be used in Advanced Rules that are not available through the GUI in the current releases of Profiler. Some examples of rules available only through the Advanced Rule include:

DHCP Options, which allow rules to be defined based upon either the Requested or Assigned DHCP options

StackRules, which allow rules to be defined based on several Network Stack Info attributes of endpoints such as TTL, Window Size, TCP options, etc.


Note An important caveat regarding the TTL value: NetWatch will auto-adjust the TTL value observed in network traffic for an endpoint if the value is not divisible by 8. If the traffic from the endpoint has traversed one or more routers before being received on a monitor interface, this mechanism is designed to reset the TTL to the original value set by the stack on the endpoint itself. This is designed to prevent having to write rules using multiple values: <OR><... ttl="32" .../><... ttl="31"...>...</OR>, etc. Eight was chosen as some standard TTLs are not always a power of2. Some older systems use 48 and 60. Any TTL value observed in a packet >= 256 will be automatically reset to 255.


These two rule types available only in Advanced XML rules are illustrated in the following examples: one for detecting Apple machines via the requested DHCP options (MAC OS does not include a recognizable DHCP Vendor Class in DHCP requests), and a second one designed to detect endpoints running Microsoft Windows version 3.1.

<Rule name="MacOSAdv">
       <RuleEntity entity="Mac OS" cf="0.75"/>
       <AND>
        <Vendor vendor="/^Apple/i"/>
        <DHCPReqOptions option-list="/^1,3,6,15,112,113,78,79,95/"/>
       </AND>
    </Rule>


<Rule name="Win31Adv">
       <RuleEntity entity="Windows 3.1" cf="0.50"/>
       <AND>
        <StackRule list="/^2$/" ttl="32" window="8192" df="2"/>
        <DHCPReqOptions option-list="/^1,3,15,6,44,46,47,43/"/>
       </AND>
    </Rule>

Profiler DTD for Rules and Events

This section provides the DTD for Cisco NAC Profiler rules and events as a reference.



<!ELEMENT ModelConfiguration ( Entity+,
                               Rule+,
                               Event*,
                               CCARule* ) >

<!ELEMENT Entity EMPTY >
<!ATTLIST Entity name        CDATA #required 
                 description CDATA #implied
                 user        ( t | f )  "f"  >

<!ELEMENT Rule ( RuleEntity,
                 AddressRule*,
                 Vendor*,
                 DHCPHost*,
                 DHCPVendor*,
                 DHCPReqOptions*,
                 DHCPOptions*,
                 WebServer*,
                 WebClient*,
                 SMTPServer*,
                 DNS*,
                 SNMP*,
                 CTNBT*,
                 FTPServer*,
                 SSHServer*,
                 WebURL*,
                 StackRule*,
                 TrafficRule*,
                 PortRule*,
                 AND*,
                 OR*,
                 NOT* ) >
<!ATTLIST Rule name CDATA #implied >

<!ELEMENT AND  ( AddressRule*,
                 Vendor*,
                 DHCPHost*,
                 DHCPVendor*,
                 DHCPReqOptions*,
                 DHCPOptions*,
                 WebServer*,
                 WebClient*,
                 SMTPServer*,
                 DNS*,
                 SNMP*,
                 CTNBT*,
                 FTPServer*,
                 SSHServer*,
                 WebURL*,
                 StackRule*,
                 TrafficRule*,
                 PortRule* ) >

<!ELEMENT OR   ( AddressRule*,
                 Vendor*,
                 DHCPHost*,
                 DHCPVendor*,
                 DHCPReqOptions*,
                 DHCPOptions*,
                 WebServer*,
                 WebClient*,
                 SMTPServer*,
                 DNS*,
                 SNMP*,
                 CTNBT*,
                 FTPServer*,
                 SSHServer*,
                 WebURL*,
                 StackRule*,
                 TrafficRule*,
                 PortRule* ) >

<!ELEMENT NOT  ( AddressRule*,
                 Vendor*,
                 DHCPHost*,
                 DHCPVendor*,
                 DHCPReqOptions*,
                 DHCPOptions*,
                 WebServer*,
                 WebClient*,
                 SMTPServer*,
                 DNS*,
                 SNMP*,
                 CTNBT*,
                 FTPServer*,
                 SSHServer*,
                 WebURL*,
                 StackRule*,
                 TrafficRule*,
                 PortRule* ) >

<!ELEMENT RuleEntity EMPTY>
<!ATTLIST RuleEntity name CDATA #required 
                     cf   CDATA #required>

<!ELEMENT AddressRule EMPTY>
<!ATTLIST AddressRule ipaddr CDATA #required 
                      mask   CDATA #required >

<!ELEMENT Vendor EMPTY>
<!ATTLIST Vendor vendor CDATA #required >

<!ELEMENT DHCPHost EMPTY>
<!ATTLIST DHCPHost name CDATA #required >

<!ELEMENT DHCPVendor EMPTY>
<!ATTLIST DHCPVendor vendor CDATA #required >

<!ELEMENT DHCPReqOptions EMPTY>
<!ATTLIST DHCPReqOptions option-list CDATA #required >

<!ELEMENT DHCPOptions EMPTY>
<!ATTLIST DHCPOptions option-list CDATA #required >

<!ELEMENT WebServer EMPTY>
<!ATTLIST WebServer banner CDATA #required >

<!ELEMENT WebClient EMPTY>
<!ATTLIST WebClient banner CDATA #required >

<!ELEMENT SMTPServer EMPTY>
<!ATTLIST SMTPServer banner CDATA #required >

<!ELEMENT DNS EMPTY>
<!ATTLIST DNS name CDATA #required >

<!ELEMENT SNMP EMPTY>
<!ATTLIST SNMP description CDATA #required >

<!ELEMENT CTNBT EMPTY>
<!ATTLIST CTNBT nbt CDATA #required >

<!ELEMENT FTPServer EMPTY>
<!ATTLIST FTPServer banner CDATA #required >

<!ELEMENT SSHServer EMPTY>
<!ATTLIST SSHServer banner CDATA #required >

<!ELEMENT WebURL EMPTY>
<!ATTLIST WebURL url CDATA #required >

<!ELEMENT StackRule EMPTY>
<!ATTLIST StackRule ttl     CDATA #implied 
                    df      CDATA #implied
                    scale   CDATA #implied
                    mss     CDATA #implied
                    window  CDATA #implied
                    list    CDATA #implied >

<!ELEMENT TrafficRule EMPTY>
<!ATTLIST TrafficRule ipaddr CDATA #required 
                      sport  CDATA #required
                      dport  CDATA #required >

<!ELEMENT PortRule EMPTY>
<!ATTLIST PortRule port CDATA #required >

<!-- Events -->
<!ELEMENT Event EMPTY>
<!ATTLIST Event name   CDATA #required 
                valid  CDATA #required
                id     CDATA #required
                level  CDATA #required
                fauth  ( t | f ) "f"
                snmp   ( t | f ) "f"
                web    ( t | f ) "f"
                syslog ( t | f ) "f"
                asm    ( t | f ) "f" >

<!-- CCA Rules -->
<!ELEMENT CCARule EMPTY>
<!ATTLIST CCARule name   CDATA #required 
                  match  CDATA #required
                  cf     CDATA #required
                  type   CDATA #required
                  role   CDATA #required >