IOS Zone-based Firewall Configuration Overview
A zone-based firewall configuration starts with a review of the different security zones which exist within the network architecture. These defined security zones are then configured on the zone-based firewall in order to enforce policies both between and within zones (if needed). Once these security zones are defined, the next step is to figure out the direction that traffic flows between these defined zones. Once these are calculated, policies can then be created and assigned based on the direction and security requirements.
The direction and policies for these flows between the different zones is configured using zone-pairs. Each of the zone-pairs is unidirectional and allows different policies to be assigned depending on the source and destination zone, the exception to this is return traffic which is allowed by default. By default, if no zone-pair is created between zones then no traffic is allowed.
In order to ensure a solid understanding of the zone-based firewall configuration, a common zone-based firewall implementation will be used and configured using the required commands through this article. This common configuration includes three configured zones, a private zone (inside), a public zone (outside), and a DMZ zone. The private zone contains all devices on the internal organizational network. The public zone would commonly be the Internet and the DMZ zone would commonly contain the public servers for the organization including the web and mail servers. An illustration of this configuration is shown in Figure 1.
Figure 1 Basic Zone Example
Once the zones configuration has been completed, the next step is to figure out the zone-pairs that will be required to enforce the traffic policies defined. When using this sample configuration, the common zone-pair configurations are shown in Figure 2 and detailed below:
Figure 2 Basic Zone Configuration Example
- Between the private and public zones: Typically this would only require one zone-pair as return traffic is allowed by default and no traffic should be directly allowed into the inside of the organizational network.
- Between the private and the DMZ zones: This would be a limited connection in order to allow connections back to secondary database or management servers. In this case, the number of zone-pairs configured would depend on what zone traffic would be initiated from. If traffic was only initiated from the DMZ zone to these secondary servers then only one zone-pair would be required as the return traffic would again be allowed by default. In this example the configuration will use this scenario.
- Between the public and the DMZ zones: This would be the main connection between the outside world and the public organization servers. In this case it is common for a single zone-pair to be configured from the public into the DMZ zone.
When configuring the policy onto the zone-pairs, there are three main actions which can be used:
- Pass: When configured to pass, traffic that is matched by the configuration is allowed without inspection.
- Drop: When configured to drop, traffic that is matched by the configuration is dropped
- Inspect: When configured to inspect, traffic is put through a stateful packet inspection. While inspected, traffic flows will be defined and recorded in order to keep track of expected return traffic.
IOS Zone-based Firewall Configuration
The first thing that must be configured when setting up a zone-based firewall configuration are the different firewall policies. These policies are then associated to their respective zone-pair in a later step. When configuring zone-based firewall policy, the Cisco Common Classification Policy Language (C3PL) is used that closely resembles the Modular QoS CLI (MQC) structure. When using C3PL, the following general steps are followed:
- Traffic match criteria are configured with a class-map statement.
- Actions are associated with these match criteria using the policy-map statement.
- Policy maps are attached to a zone-pair using the service-policy statement.
In order to create and configure a class map, the traffic matching criteria must be known. The main methods of matching traffic include:
- Matching based on a previously configured ACL
- Matching based on the traffic protocol
The following steps are followed in order to create a class-map and match criteria:
- Enter global configuration mode:
- Configure the class-map:
- Configure a matching statement based on a previously configured ACL (optional):
- Configure a matching statement based on the traffic protocol (optional):
router#configure terminal
router(config)#class-map type inspect [match-any | match-all] class-map-name
router(config-cmap)#match access-group {access-group | name access-group-name}
router(config-cmap)# match protocol protocol-name
The next part involves the configuration of a policy map. The policy map matches traffic based on a configured class map and then associates a specific action to the matched traffic.
The following steps are followed in order to create a policy-map, match traffic with a configured class-map, and assign a specific policy action.
- Enter global configuration mode:
- Configure the policy-map:
- Configure a matching class-map:
- Configure the use of Cisco IOS stateful packet inspection (action) on matched traffic (optional):
- Configure the pass action on matched traffic (optional):
- Configure the drop action on matched traffic (optional):
router#configure terminal
router(config)#policy-map type inspect policy-map-name
router(config-pmap)#class type inspect class-name
router(config-pmap-c)#inspect [parameter-map-name]
router(config-pmap-c)#pass
router(config-pmap-c)#drop
When setting up a zone-based firewall configuration, the zones must be configured next. The configuration of the zones is rather simple and is shown below:
- Enter global configuration mode:
- Configure the zone:
- Configure a description for the zone (optional):
router#configure terminal
router(config)#zone security zone-name
router(config-sec-zone)#description line-of-description
Once all of the zones have been configured, the next step is to configure the required zone-pairs and their associated policies (policy-maps). The configuration of zone-pairs is shown below:
- Enter global configuration mode:
- Configure the zone-pair:
- Configure a description for the zone-pair (optional):
- Attach a firewall policy map to the zone-pair:
router#configure terminal
router(config)#zone-pair security zone-pair name [source source-zone-name | self] destination [self | destination-zone-name]
router(config-sec-zone-pair)#description line-of-description
router(config-sec-zone-pair)# service-policy type inspect policy-map-name
The last step is to assign the interfaces on the router into their respective zones; this configuration is shown below:
- Enter global configuration mode:
- Enter interface configuration mode for the interface:
- Assign a zone onto the interface:
router#configure terminal
router(config)#interface type number
router(config-if)#zone-member security zone-name
In order to solidify a basic understanding of zone-based firewall configuration, the following commands would be used to configure the example shown in Figure 2 above (this configuration assumes HTTP as a matching protocol on each zone-pair):
- Configure the class-map (multiple can be configured):
- Configure the policy-map (multiple can be configured):
- Configure the zones:
- Configure the zone-pairs:
- Assign a zone onto the interface:
router(config)#class-map type inspect sample-class
router(config-cmap)#match protocol http
router(config)#policy-map type inspect sample-policy
router(config-pmap)# class type inspect sample-class
router(config-pmap-c)#inspect
router(config)# zone security DMZ
router(config)# zone security Public
router(config)# zone security Private
router(config)# zone-pair security private-pubic-pair source Private destination Public
router(config-sec-zone-pair)# service-policy type inspect sample-policy
router(config)# zone-pair security private-DMZ-pair source Private destination DMZ
router(config-sec-zone-pair)# service-policy type inspect sample-policy
router(config)# zone-pair security Public-DMZ-pair source Public destination DMZ
router(config-sec-zone-pair)# service-policy type inspect sample-policy
router(config)#interface F0/0
router(config-if)#zone-member security Private
router(config)#interface F0/1
router(config-if)#zone-member security Public
router(config)#interface F0/2
router(config-if)#zone-member security DMZ