Configuring a DNS Inspection Policy Map for Additional Inspection Control
DNS application inspection supports DNS message controls that provide protection against DNS spoofing and cache poisoning. User configurable rules allow filtering based on DNS header, domain name, resource record type and class. Zone transfer can be restricted between servers with this function, for example.
The Recursion Desired and Recursion Available flags in the DNS header can be masked to protect a public server from attack if that server only supports a particular internal zone. In addition, DNS randomization can be enabled avoid spoofing and cache poisoning of servers that either do not support randomization, or utilize a weak pseudo random number generator. Limiting the domain names that can be queried also restricts the domain names which can be queried, which protects the public server further.
A configurable DNS mismatch alert can be used as notification if an excessive number of mismatching DNS responses are received, which could indicate a cache poisoning attack. In addition, a configurable check to enforce a Transaction Signature be attached to all DNS messages is also supported.
To specify actions when a message violates a parameter, create a DNS inspection policy map. You can then apply the inspection policy map when you enable DNS inspection according to the "Configuring Application Inspection" section on page 25-5.
To create a DNS inspection policy map, perform the following steps:
(Optional) Add one or more regular expressions for use in traffic matching commands according to the "Creating a Regular Expression" section on page 21-12. See the types of text you can match in the match commands described in Step 3.
(Optional) Create one or more regular expression class maps to group regular expressions according to the "Creating a Regular Expression Class Map" section on page 21-14.
Step 1 Step 2
Step 3 (Optional) Create a DNS inspection class map by performing the following steps.
A class map groups multiple traffic matches. Traffic must match all of the match commands to match the class map. You can alternatively identify match commands directly in the policy map. The difference between creating a class map and defining the traffic match directly in the inspection policy map is that the class map lets you create more complex match criteria, and you can reuse class maps.
To specify traffic that should not match the class map, use the match not command. For example, if the match not command specifies the string "example.com," then any traffic that includes "example.com" does not match the class map.
For the traffic that you identify in this class map, you can specify actions such as drop, drop-connection, reset, mask, set the rate limit, and/or log the connection in the inspection policy map.
If you want to perform different actions for each match command, you should identify the traffic directly in the policy map.
a. Create the class map by entering the following command:
hostname(config)# class-map type inspect dns [match-all] class_map_name hostname(config-cmap)#
Where class_map_name is the name of the class map. The match-all keyword specifies that traffic must match all criteria to match the class map. match-all is the default and only option. The CLI enters class-map configuration mode, where you can enter one or more match commands.
b. (Optional) To add a description to the class map, enter the following command:
hostname(config-cmap)# description string c. (Optional) To match a specific flag that is set in the DNS header, enter the following command:
hostname(config-cmap)# match [not] header-flag [eq] {f_well_known | f_value}
Where the f_well_known argument is the DNS flag bit. The f_value argument is the 16-bit value in hex. The eq keyword specifies an exact match.
d. (Optional) To match a DNS type, including Query type and RR type, enter the following command:
hostname(config-cmap)# match [not] dns-type {eq t_well_known | t_val} {range t_val1 t_val2}
Where the t_well_known argument is the DNS flag bit. The t_val arguments are arbitrary values in the DNS type field (0-65535). The range keyword specifies a range and the eq keyword specifies an exact match.
e. (Optional) To match a DNS class, enter the following command:
hostname(config-cmap)# match [not] dns-class {eq c_well_known | c_val} {range c_val1 c_val2}
Where the c_well_known argument is the DNS class. The c_val arguments are arbitrary values in the DNS class field. The range keyword specifies a range and the eq keyword specifies an exact match.
f. (Optional) To match a DNS question or resource record, enter the following command:
hostname(config-cmap)# match {question | {resource-record answer | authority | any}}
Where the question keyword specifies the question portion of a DNS message. The resource-record keyword specifies the resource record portion of a DNS message. The answer keyword specifies the Answer RR section. The authority keyword specifies the Authority RR section. The additional keyword specifies the Additional RR section.
g. (Optional) To match a DNS message domain name list, enter the following command:
_Chapter 25 Configuring Application Layer Protocol Inspection |
H DNS Inspection hostname(config-cmap)# match [not] domain-name {regex regex_id | regex class class_id]
The regex regex_name argument is the regular expression you created in Step 1. The class regex_class_name is the regular expression class map you created in Step 2.
Step 4 Create a DNS inspection policy map, enter the following command:
hostname(config)# policy-map type inspect dns policy_map_name hostname(config-pmap)#
Where the policy_map_name is the name of the policy map. The CLI enters policy-map configuration mode.
Step 5 (Optional) To add a description to the policy map, enter the following command:
hostname(config-pmap)# description string
Step 6 To apply actions to matching traffic, perform the following steps.
a. Specify the traffic on which you want to perform actions using one of the following methods:
• Specify the DNS class map that you created in Step 3 by entering the following command:
hostname(config-pmap)# class class_map_name hostname(config-pmap-c)#
• Specify traffic directly in the policy map using one of the match commands described in Step 3. If you use a match not command, then any traffic that does not match the criterion in the match not command has the action applied.
b. Specify the action you want to perform on the matching traffic by entering the following command:
hostname(config-pmap-c)# {[drop [send-protocol-error] |
drop-connection [send-protocol-error]| mask | reset] [log] | rate-limit message_rate}
Not all options are available for each match or class command. See the CLI help or the Cisco Security Appliance Command Reference for the exact options available.
The drop keyword drops all packets that match.
The send-protocol-error keyword sends a protocol error message.
The drop-connection keyword drops the packet and closes the connection.
The mask keyword masks out the matching portion of the packet.
The reset keyword drops the packet, closes the connection, and sends a TCP reset to the server and/or client.
The log keyword, which you can use alone or with one of the other keywords, sends a system log message.
The rate-limit message_rate argument limits the rate of messages.
You can specify multiple class or match commands in the policy map. For information about the order of class and match commands, see the "Defining Actions in an Inspection Policy Map" section on page 21-8.
Step 7 To configure parameters that affect the inspection engine, perform the following steps:
a. To enter parameters configuration mode, enter the following command:
hostname(config-pmap)# parameters hostname(config-pmap-p)#
b. To randomize the DNS identifier for a DNS query, enter the following command:
hostname(config-pmap-p)# id-randomization c. To enable logging for excessive DNS ID mismatches, enter the following command:
hostname(config-pmap-p)# id-mismatch [count number duration seconds] action log
Where the count string argument specifies the maximum number of mismatch instances before a system message log is sent. The duration seconds specifies the period, in seconds, to monitor.
d. To require a TSIG resource record to be present, enter the following command:
hostname(config-pmap-p)# tsig enforced action {drop [log] | [log}
Where the count string argument specifies the maximum number of mismatch instances before a system message log is sent. The duration seconds specifies the period, in seconds, to monitor.
The following example shows a how to define a DNS inspection policy map.
hostname(config)# regex domain_example "exampleX.com" hostname(config)# regex domain_foo "fooX.com"
hostname(config)# ! define the domain names that the server serves hostname(config)# class-map type inspect regex match-any my_domains hostname(config-cmap)# match regex domain_example hostname(config-cmap)# match regex domain_foo hostname(config)# ! Define a DNS map for query only hostname(config)# class-map type inspect dns match-all pub_server_map hostname(config-cmap)# match not header-flag QR hostname(config-cmap)# match question hostname(config-cmap)# match not domain-name regex class my_domains hostname(config)# policy-map type inspect dns serv_prot hostname(config-pmap)# class pub_server_map hostname(config-pmap-c)# drop log hostname(config-pmap-c)# match header-flag RD hostname(config-pmap-c)# mask log hostname(config)# class-map dns_serv_map hostname(config-cmap)# match default-inspection-traffic hostname(config)# policy-map pub_policy hostname(config-pmap)# class dns_serv_map hostname(config-pmap-c)# inspect dns serv_prot hostname(config)# service-policy pub_policy interface dmz
Continue reading here: Configuring an Esmtp Inspection Policy Map for Additional Inspection Control
Was this article helpful?