Select any two versions of this STIG to compare the individual requirements
Select any old version/release of this STIG to view the previous requirements
Review the switch configuration to verify that ACLs are configured to allow or deny traffic for specific source and destination addresses as well as ports and protocols. For example, the configuration below will allow web traffic (HTTP) from the "WebServer" EPG to the "Database" EPG. tenant TENANT1 context Application filter WEB_TRAFFIC_FILTER filter ip permit source <web_server_ip_range> destination <database_ip_range> protocol tcp port 80 contract WEBACCESS filter WEB_TRAFFIC_FILTER epg WebServer contract WEBACCESS epg Database contract WEBACCESS If the switch is not configured to enforce approved authorizations for controlling the flow of information within the network based on organization-defined information flow control policies, this is a finding.
Configure "contracts" to define security policies that control traffic between different EPGs. Step 1: Navigate to the desired tenant and context to create filters. apic(config)# tenant <tenant_name> context <context_name> filter <filter_name> filter ip permit source <source_IP_range> destination <dest_IP_range> protocol <protocol> port <port_number> Step 2: Create or update an existing contract. Link the previously created filter to a named contract. apic(config)# contract <contract_name> filter <filter_name> Step 3: Assign contract to EPGs. Associate the created contract with the specific EPGs. apic(config)# epg <epg_name> contract <contract_name>
Review the switch configuration to verify it will reject routes belonging to the local AS. Step 1: Verify a prefix list has been configured containing prefixes belonging to the local AS. route-map LOCAL_AS_FILTER permit 10 match ip address prefix <local-AS-prefix> set community no-advertise Step 2: Review the route-map to the inbound BGP policy. bgp neighbor <peer-IP> address-family ipv4 unicast inbound route-map LOCAL_AS_FILTER If the switch is not configured to reject inbound route advertisements belonging to the local AS, this is a finding.
Configure the router to reject inbound route advertisements for any prefixes belonging to the local AS. Step 1: From the relevant BGP peer configuration, create a route-map to filter local AS prefixes. Route-map LOCAL_AS_FILTER permit 10 match ip address prefix <local-AS-prefix> set community no-advertise Step 2: Apply the route-map to the inbound BGP policy. Within the inbound policy, add a prefix filter rule that explicitly rejects any routes with a prefix matching the local AS number. bgp neighbor <peer-IP> address-family ipv4 unicast inbound route-map MY_LOCAL_AS_FILTER
Review the ACI configuration to verify it will reject routes belonging to the local AS. Step 1: Verify a prefix list has been configured containing prefixes belonging to the local AS. In the example below, x.13.1.0/24 is the global address space allocated to the local AS. ip prefix-list PREFIX_FILTER seq 74 deny x.13.1.0/24 le 32 Step 2: Verify the prefix list has been applied to all external BGP peers as shown in the example below: router bgp <AS_number> neighbor <peer_IP> prefix-list LOCAL_AS_PREFIX_FILTER out If the ACI is not configured to reject inbound route advertisements belonging to the local AS, this is a finding.
Configure the router to reject outbound route advertisements for any prefixes belonging to the local AS. Use a prefix list containing the local AS prefixes and apply it as an outbound filter on the BGP neighbor configuration, as shown in the following examples. Step 1: Add to the prefix filter list those prefixes belonging to the local autonomous system. apci1(config)# ip prefix-list LOCAL_AS_PREFIX_FILTER seq 70 deny <local_AS_prefixes> Step 2: Apply the prefix list filter outbound to each external BGP neighbor. apci1(config)# router bgp <AS_number> neighbor <peer_IP> prefix-list LOCAL_AS_PREFIX_FILTER out
By default, Cisco ACI enforces the first AS in the AS_PATH attribute for all route advertisements. Review the configuration to verify the default BGP configuration on the ACI fabric is does not explicitly state: no enforce first-as If the device is not configured to reject updates from peers that do not list their AS number as the first AS in the AS_PATH attribute, this is a finding.
Configure the device to deny updates received from eBGP peers that do not list their AS number as the first AS in the AS_PATH attribute. Remove the configuration item "no enforce first-as".
If this is a DODIN or JRSS system, this is not applicable. Verify the ip route-map command with specific filter criteria under the relevant BGP neighbor configuration is configured to block any unwanted multicast prefixes from being advertised as shown in the example below: router bgp 100 neighbor 10.1.1.2 remote-as 200 address-family ipv4 unicast route-map BLOCK_MULTICAST permit If the ACI is not configured to reject outbound route advertisements that do not belong to any customers or the local AS, this is a finding.
Use the ip route-map command with specific filter criteria under the relevant BGP neighbor configuration to block any unwanted multicast prefixes from being advertised. Step 1: Navigate to BGP neighbor configuration. apci1(config)# router bgp <AS number> apci1(config-router)# neighbor <peer-IP> remote-as <peer-AS> Step 2: Create a route map. apci1(config-router)# ip route-map <route-map-name> permit 10 apci1(config-router)# match ip address prefix <undesirable-multicast-prefix> exit Step 3: Apply route-map to BGP neighbor. apci1(config)# address-family ipv4 unicast apci1(config)# route-map <route-map-name> permit
If the ACI implementation does not use MSDP, this is not applicable. ip msdp sa-filter in <msdp_peer_address> list OUTBOUND_MSDP_SA_FILTER If the device is not configured with an export policy to filter local source-active multicast advertisements, this is a finding.
Configure the switch to filter source-active multicast advertisements to external MSDP peers to avoid global visibility of local-only multicast sources and groups. Step 1: Filter all SA messages coming from peer 10.1.1.2 except those for group 224.0.0.1. in the CLI, where <peer-ip> is the IP address of the external MSDP peer. apic1(config)# ip msdp sa-filter in 10.1.1.2 list OUTBOUND_MSDP_SA_FILTER Step 2: ACL definition. apic1(config)# ip access-list extended OUTBOUND_MSDP_SA_FILTER permit ip any 224.0.0.1 any
If the ACI implementation does not use MSDP, this is not applicable. Review the switch configuration to determine if it is configured to limit the amount of source-active messages it accepts on a per-peer basis. show ip msdp If the ACI is not configured to limit the source-active messages it accepts, this is a finding.
To limit the amount of SA messages a Cisco ACI switch accepts from each MSDP peer, configure the "ip msdp sa-limit" command specifying the maximum number of SA messages allowed per peer. The following is an example: api1(config)# ip msdp sa-limit 10.1.1.1 MSDP_SA_FILTER
Step 1: Review the network's multicast topology diagram. Step 2: Review the switch configuration to verify only the PIM interfaces as shown in the multicast topology diagram are enabled for PIM as shown in the example below: Example: configure terminal interface Ethernet1/1 no ip pim If an interface is not required to support multicast routing and it is enabled, this is a finding.
From the CLI, use "no ip pim" within the interface configuration on the relevant nonmulticast enabled interfaces. Example: configure terminal interface Ethernet1/1 no ip pim
Step 1: Review the network's multicast topology diagram. Step 2: Review the switch configuration to verify only the PIM interfaces as shown in the multicast topology diagram are enabled for PIM as shown in the example below: Example: configure terminal interface Ethernet1/1 ip pim If a multicast interface is required to support PIM and it is not enabled, this is a finding.
From the CLI, use "ip pim" within the interface configuration on the relevant multicast enabled interfaces. Example: configure terminal interface Ethernet1/1 ip pim
Verify the multicast routing table and troubleshoot any issues with multicast traffic flow. show ip mroute If the ACI is not configured to establish boundaries for administratively scoped multicast traffic, this is a finding.
Leverage the border leaf switches within the fabric, applying access control lists (ACLs) on the appropriate interfaces to filter multicast packets with administratively scoped addresses. Log in to the CLI of a border leaf switch within the ACI fabric. configure terminal ip multicast-routing access-list extended MULTICAST_FILTER deny ip 239.0.0.0 239.255.255.255 any permit ip any any Apply the created ACL to the outbound direction of the interface facing the external network.
If this review is for the DODIN Backbone, mark as not applicable. Verify separate routing instances in the Cisco APIC as shown in the following example: interface GigabitEthernet 0/0 ip address 10.0.0.1 255.255.255.0 no shutdown ip route-map "mgmt-routes" permit router bgp 100 // Management network routing instance interface GigabitEthernet 0/1 ip address 192.168.1.1 255.255.255.0 no shutdown ip route-map "managed-routes" permit router bgp 200 // Managed network routing instance If separate routing instances are not configured for the managed and management networks, this is a finding.
Configure separate routing instances for the managed and management networks, as shown in the example below: interface GigabitEthernet 0/0 ip address 10.0.0.1 255.255.255.0 no shutdown ip route-map "mgmt-routes" permit router bgp 100 // Management network routing instance interface GigabitEthernet 0/1 ip address 192.168.1.1 255.255.255.0 no shutdown ip route-map "managed-routes" permit router bgp 200 // Managed network routing instance
If this review is for the DODIN Backbone, mark as not applicable. Verify redistribution is disabled on the OOB routing instance: router bgp 100 // Management network routing instance redistribute static route-map deny redistribute connected route-map deny redistribute connected route-map deny If redistribute is not disabled for the OOB instance, this is a finding.
Disable redistribution on the OOB routing instance: router bgp 100 // Management network routing instance redistribute static route-map deny redistribute connected route-map deny redistribute connected route-map deny
View the configuration to check for PIM compliance. APIC1(config)#show running-configuration pim Example: ip access-list extended PIM_REGISTER_FILTER deny ip any 232.0.0.0 0.255.255.255 permit ip host 10.1.2.6 any permit ip host 10.1.2.7 any deny ip any any ip pim accept-register list PIM_REGISTER_FILTER If the RP router peering with PIM-SM routers is not configured with a policy to block registration messages for any undesirable multicast groups and sources, this is a finding.
Configure an access list on the rendezvous point (RP) to explicitly deny PIM register messages originating from specific source-group combinations, effectively blocking the propagation of those multicast streams across the network; access this configuration through the APIC's CLI using the "accept-register" command with the desired access list applied to the RP. Specify group or group and source addresses with the match ip multicast command. Perform the following for each interface that uses IP multicast: 1. Create an extended access list with the desired filter criteria. # ip access-list extended <access-list-name> permit ip <source-ip> <multicast-group> <optional: protocol and port> ... (add other allowed source-group combinations) deny ip any <undesirable-multicast-group> 2. Access the PIM configuration mode on the RP. APIC1 (config-if)# ip pim sparse-mode 3. Apply the access list. # accept-register <access-list-name>
View the configuration to verify PIM compliance. APIC1(config)#show running-configuration pim Example: ! ACL to deny specific multicast groups ip access-list extended PIM_JOIN_FILTER deny ip multicast group 224.0.0.1 deny ip multicast group 224.0.0.2 permit ip any any ! ACL to the L3Out interface on the border leaf switch interface L3Out_to_External ip access-group PIM_JOIN_FILTER in If the RP is not configured to filter join messages received from the DR for any undesirable multicast groups, this is a finding.
Configure ACLs on the border leaf switches that act as the PIM DRs, specifically targeting the multicast group addresses to be blocked. This essentially prevents unwanted multicast traffic from entering the fabric by filtering the Join messages at the entry point. Step 1: Create an ACL to deny specific multicast groups. ip access-list extended PIM_JOIN_FILTER deny ip multicast group 224.0.0.1 deny ip multicast group 224.0.0.2 permit ip any any Step 2: Apply the ACL to the L3Out interface on the border leaf switch. interface L3Out_to_External ip access-group PIM_JOIN_FILTER in
Use the APIC GUI to navigate to each tenant. Within each contract, review each rule with "Action" set to "Deny. Verify these rules have the "Directive" set to "Log". If packets being dropped at interfaces are not logged, this is a finding.
Configure ACLs to log packets that are dropped. Use the APIC GUI to navigate to each tenant: 1. Go to the contract section and either create a new contract or modify an existing one where drop logging is to be implemented. 2. Within the contract, create the necessary filter rules based on the desired criteria (e.g., source/destination IP, port, protocol) and set the "Action" to "Deny" with the "Directive" set to "Log". 3. Assign the contract to the relevant endpoint groups (EPGs) to enforce the policy on traffic between them.
Verify the Call Home feature is disabled: 1. Navigate to the "Admin" section in the GUI, then expand All >> Communication Management >> Call Home. 2. In the General tab, verify the Admin State is set to "Off". If the Call Home feature is configured to send messages to unauthorized individuals such as Cisco TAC, this is a finding.
Disable the Call Home feature: 1. Navigate to the "Admin" section in the GUI, then expand All >> Communication Management >> Call Home. 2. In the General tab, set the Admin State to "Off". 3. Click "Save".
Verify PSKs are configured: apic1(config-cloudsec)# show cloudsec summary If PSKs are not configured to use encryption for routing protocol authentication, this is a finding.
Configure one or more PSKs used to generate encryption keys for the routing protocol authentication process: apic1(config)# template cloudsec default apic1(config-cloudsec)# sakexpirytime__<duration>__ apic1(config-cloudsec)# pskindex__<psk-index>__ apic1(config-cloudsec)# pskstring__<psk-string>__
If EIGRP, RIP, and IS-IS protocols are used (these protocols only support MD5 authentication), this is a finding. Review the switch configuration using the show bgp and show ospf commands to verify BGP and OSPF. The configuration should be similar to the example below: Key-Chain bgp_keys tcp Key 1 -- text 0 "070e234f" send-id 2 recv-id 2 cryptographic-algorithm hmac-sha256 send lifetime 3600 If authentication protocols that affects the routing or forwarding tables are not configured to use key chain (TCP-AO) authentication with 180 maximum lifetime, this is a finding.
Configure authentication for every protocol that affects the routing or forwarding tables to use key chain (TCP-AO) authentication. Use the following command on all supported control plane protocols. This typically includes protocols such as BGP and OSPF. The following are examples. Step 1: Create a TCP-AO key chain. apic1(config)# ip tcp ao key chain <KEY_CHAIN_NAME> apic1(config)# key <KEY-ID> apic1(config-tcpkey chain-tcpkey)# key-string <KEY> apic1(config-tcpkey chain-tcpkey)# recv-id <ID> apic1(config-tcpkey chain-tcpkey)# send-id <ID> apic1(config-tcpkey chain-tcpkey)# send-lifetime <value in seconds> apic1(config-tcpkey chain-tcpkey)# recv-lifetime <value in seconds> apic1(config-tcpkey chain-tcpkey)# cryptographic-algorithm hmac-sha256 Step 2: Configure BGP to use the key chain for authentication. apic1(config)# router bgp <AS_NUMBER> apic1(config-router)# neighbor <peer-IP> remote-ao <KEY-CHAIN-NAME> apic1(config-router)# ao <KEY_CHAIN_NAME> Step 3: Configure OSPF to use the key chain for authentication. apic1(config)# interface Ethernet1/1 apic1(config-if)# ip address <address or range> apic1(config-if)# ip ospf authentication key-chain <OSPF_KEY_CHAIN>
If this review is for the DODIN Backbone, mark as not applicable. Review the external and internal ACLs to verify that the router is configured to only allow specific management and control plane traffic from specific sources destined to itself. 1. Navigate Tenant >> Contract >> Filter. 2. Select the "Drop Fragmented ICMP") filter. 3. Verify ICMP and Fragmented are selected to be denied. If all fragmented ICMP packets destined to itself are not dropped, this is a finding.
Ensure this deny rule is placed before any permit rules for ICMP traffic to ensure that fragmented ICMP packets are dropped first. 1. Navigate Tenant >> Contract >> Filter. 2. Create or edit a filter (e.g., "Drop Fragmented ICMP"). 3. Set Match to include: Protocol: ICMP Fragmentation: "Fragmented" 4. Set Action to "Deny".
If this review is for the DODIN Backbone, mark as not applicable. Verify the router is configured to deny router-advertisements. apic1(config-tenant-fhs-secpol)# router-advertisement-guard If the router is not configured to reject outbound route advertisements for prefixes belonging to the IP core, this is a finding.
Configure the router with FHS to suppress Router Advertisements on all external IPv6-enabled interfaces as shown in the example below. View the FHS requirement in the Layer 2 STIG. apic1(config-tenant-fhs-secpol)# router-advertisement-guard
Use the "show" command to verify the contract is attached to the management interface and that only permitted management traffic is allowed. If the router does not restrict traffic that ingresses and egresses the management interface, this is a finding. Step 1: Verify the OOB contract is configured to explicitly permit only management traffic. apic1(config)# contract MGMT_OOB apic1(config)# filter ingress apic1(config)# protocol icmp apic1(config)# protocol tcp port 22, 80, 443 apic1(config)# protocol udp port 68, 67 apic1(config)# filter egress apic1(config)# protocol icmp apic1(config)# protocol tcp port 22, 80, 443 apic1(config)# protocol udp port 68, 67 Step 2: Verify the contract attached to the OOB Interface. apic1(config)# interface <leaf_switch_name>/<oob_interface_number> apic1(config-if)# contract mgmt_oob
Create a dedicated "OOB" contract that explicitly permits necessary management protocols on the OOB subnet, then apply this contract to the relevant node management interface. Step 1: Navigate to the relevant tenant and create a new external network instance profile for the OOB subnet. apic1(config)# tenant <tenant_name> Step 2: Create the OOB contract. apic1(config)# contract MGMT_OOB apic1(config)# filter ingress apic1(config)# protocol icmp apic1(config)# protocol tcp port 22, 80, 443 apic1(config)# protocol udp port 68, 67 apic1(config)# filter egress apic1(config)# protocol icmp apic1(config)# protocol tcp port 22, 80, 443 apic1(config)# protocol udp port 68, 67 Step 3: Apply the Contract to the OOB Interface. apic1(config)# interface <leaf_switch_name>/<oob_interface_number> apic1(config-if)# contract mgmt_oob
Review the configuration. Verify the neighbor authentication keys on ACI border leaf switches use a different authentication key for each AS peer. Route maps can also show this view. ip tcp authentication key chain AS100 key 1 send-id 10 recv-id 10 key 2 send-id 20 recv-id 20 ip tcp authentication key chain AS200 key 1 send-id 30 recv-id 30 key 2 send-id 40 recv-id 40 router bgp 100 neighbor 10.0.0.1 ao AS100 router bgp 200 neighbor 10.0.1.1 ao AS200 If unique keys are not being used, this is a finding.
Configure unique keys for each AS peered by a Cisco ACI device using TCP-AO by creating separate key chains for each AS, ensuring each key chain contains unique "send-id" and "recv-id" values for the keys within it, and then associating the appropriate key chain with the BGP neighbor configuration for that specific AS. The following is an example: Step 1: Create key chain for AS100. apic1(config)# ip tcp authentication key chain AS100 apic1(config)# key 1 send-id 10 recv-id 10 apic1(config)# key 2 send-id 20 recv-id 20 Step 2: Create key chain for AS 200. apic1(config)#ip tcp authentication key chain AS200 apic1(config)# key 1 send-id 30 recv-id 30 apic1(config)# key 2 send-id 40 recv-id 40 Step 3: Configure BGP neighbor with AS100 using key chain AS100. apic1(config)# router bgp 100 apic1(config-router)# neighbor 10.0.0.1 ao AS100 Step 4: Configure BGP neighbor with AS 200 using key chain AS200. apic1(config)# router bgp 200 apic1(config-router)# neighbor 10.0.1.1 ao AS200
Review the configuration. Verify the neighbor authentication keys on ACI border leaf switches use a different authentication key for each AS peer. Route maps can also show this view. ip tcp authentication key chain AS100 key 1 send-id 10 recv-id 10 key 2 send-id 20 recv-id 20 ip tcp authentication key chain AS200 key 1 send-id 30 recv-id 30 key 2 send-id 40 recv-id 40 router bgp 100 neighbor 10.0.0.1 ao AS100 router bgp 200 neighbor 10.0.1.1 ao AS200 If unique keys are not being used, this is a finding.
Configure unique keys for each AS peered by a Cisco ACI device using TCP-AO by creating separate key chains for each AS, ensuring each key chain contains unique "send-id" and "recv-id" values for the keys within it, and then associating the appropriate key chain with the BGP neighbor configuration for that specific AS. The following is an example: Step 1: Create key chain for AS100. apic1(config)# ip tcp authentication key chain AS100 apic1(config)# key 1 send-id 10 recv-id 10 apic1(config)# key 2 send-id 20 recv-id 20 Step 2: Create key chain for AS 200. apic1(config)#ip tcp authentication key chain AS200 apic1(config)# key 1 send-id 30 recv-id 30 apic1(config)# key 2 send-id 40 recv-id 40 Step 3: Configure BGP neighbor with AS100 using key chain AS100. apic1(config)# router bgp 100 apic1(config-router)# neighbor 10.0.0.1 ao AS100 Step 4: Configure BGP neighbor with AS 200 using key chain AS200. apic1(config)# router bgp 200 apic1(config-router)# neighbor 10.0.1.1 ao AS200
If any key has a lifetime of more than 180 days (expressed in seconds), this is a finding. Review the switch configuration using the show bgp and show ospf commands to view BGP and OSPF. The configuration will be similar to the example below. Key-Chain bgp_keys tcp Key 1 -- text 0 "070e234f" send lifetime 3600 recv-lifetime 3600 If any key has a lifetime of 180 days or less, this is a finding.
For each authenticated routing protocol session, configure each key to have a lifetime of no more than 180 days. The following is an example. Step 1: Add the lifetime duration value to every TCP-AO Key ID configured. apic1(config)# ip tcp ao key chain <KEY_CHAIN_NAME> apic1(config)# key <KEY-ID> apic1(config-tcpkey chain-tcpkey)# send-lifetime <value in seconds> apic1(config-tcpkey chain-tcpkey)# recv-lifetime <value in seconds>
Review the Management Access configuration to determine if received MSDP packets are authenticated: 1. Navigate to Fabric >> Fabric Policies >> Policies >> Pod >> Management Access. 2. Verify the option for "Strict Security on APIC OOB Subnet" is selected. If the router does not require MSDP authentication, this is a finding.
Enable the "Strict Security on APIC OOB Subnet" option within the Management Access settings on the APIC: 1. On the APIC GUI, navigate to Fabric >> Fabric Policies >> Policies >> Pod >> Management Access to find the relevant settings. 2. Select "Strict Security on APIC OOB Subnet".
Review the configuration for each L3OUT Bridge Domain to determine if gratuitous ARP is disabled: 1. In the APIC GUI Navigation pane, select "Tenant" and inspect each Tenant's Bridge Domain configuration. 2. Expand "Networking" and right-click each Bridge Domain. 3. View the Layer 3 configuration tab. Verify GARP-based detection is not enabled. If GARP is enabled on any external interface, this is a finding.
Disable GARP for each L3OUT Bridge Domain: 1. In the APIC GUI navigation pane, select "Tenant" and complete the following for each tenant listed. 2. Expand "Networking", right-click, "Create Bridge Domain" to open the dialog box, and fill out the form. - In the Layer 3 Configurations tab, GARP based detection must not be enabled. 3. Click "NEXT". 4. Complete the Bridge Domain configuration. 5. Click "Finish".
Review the router configuration and verify the ip mask-reply command is not enabled on any external interfaces as shown in the example below: apic1(config)# interface Ethernet0/1 apic(config-if)# no ip icmp mask-reply If the ip mask-reply command is configured on any external interface, this is a finding.
Disable ip mask-reply on all external interfaces as shown below: apic1(config)# interface Ethernet0/1 apic(config-if)# no ip icmp mask-reply
Verify the BGP configuration for each tenant: ip route protocol BGP View the BGP peer configuration maximum prefix value: neighbor 10.0.0.1 maximum-prefix nnnnnnn If the router is not configured to control the number of prefixes received from each peer to protect against route table flooding and prefix de-aggregation attacks, this is a finding.
Configure the router to use the maximum prefixes feature to protect against route table flooding and prefix de-aggregation attacks as shown in the example below: For each BGP peer, use the command "neighbor <peer-ip> maximum-prefix <number of prefixes>" within the BGP configuration section, where <peer-ip> is the IP address of the BGP peer and <number of prefixes> is the desired maximum prefix limit to be set; the default maximum prefix limit is typically 20,000 prefixes.
Review the configuration of the RP to verify it is rate limiting the number of PIM register messages. tenant <tenant_name> prefix-list ALLOW_SUBNET ip prefix 10.0.0.0/24 permit match-rule filter_rule match prefix allow_subnet tenant <tenant_name> l3extInstP <l3extInstP_name> route-profile FILTER_PROFILE If the router is not configured to limit the prefix size on any inbound route advertisement to /24, or the least significant prefixes issued to the customer, this is a finding.
Configure the router to limit the prefix size on any route advertisement to /24 or the least significant prefixes issued to the customer. Create a "match rule" within a "route profile" by specifying a prefix list, which is then applied to the desired L3Out (external routed network) to filter BGP routes based on the prefixes defined in the list. The route profile is applied to a specific L3Out (external routed network) to control which prefixes are advertised or accepted from external networks. Step 1: Configure a prefix list to reject any prefix that is longer than /24. tenant <tenant_name> prefix-list ALLOW_SUBNET ip prefix 10.0.0.0/24 permit Step 2: Create a route profile named "filter_profile". tenant <tenant_name> route-profile FILTER_PROFILE match-rule filter_rule match prefix allow_subnet Step 3: Apply the route profile to an L3Out. tenant <tenant_name> l3extInstP <l3extInstP_name> route-profile FILTER_PROFILE
Review the PIM configuration: ip pim register-rate-limit 10 If the RP router is not configured to filter PIM register messages, rate limiting the number of PIM register messages, and accept MSDP packets only from known MSDP peers, this is a finding.
Configure the switch to filter PIM register messages, rate limiting the number of PIM register messages, and accept MSDP packets only from known MSDP peers. Use the command "ip pim register-rate-limit <rate>", where <rate> specifies the desired maximum number of register messages per second allowed to be sent. Navigate to the global configuration mode. [switch#] configure terminal [switch(config)#] ip pim register-rate-limit 10
Review the configuration of the RP to verify that it is rate limiting the number of PIM register messages: tenant <tenant-name> vrf <vrf-name> ip pim register rate limit 10 If the RP is not limiting PIM register messages, this is a finding.
Configure the RP to rate limit the number of multicast register messages: apic(config)# tenant <tenant-name> apic(config)# vrf <vrf-name> apic(config)# ip pim register rate limit 10
Review the configuration to verify it is limiting the number of mroute states via IGMP or MLD. Verify IGMP limits have been configured globally or on each host-facing interface via the ip igmp limit command as shown in the example: interface GigabitEthernet0/0 ip igmp limit nn Review the relevant Bridge Domain (BD) or interface. Verify it is configured to limit the number of multicast routes (mroute states) generated by IGMP or MLD reports. tenant <tenant_name> apic(config-tenant)# bridge-domain <BD_name> apic(config-bd)# interface <interface_name> apic(config-if)# ip mroute limit <maximum_mroute_count> If the ACI is not limiting multicast requests via IGMP or MLD on a global or interfaces basis, this is a finding.
Configure a global or interface basis to limit the number of mroute states resulting from IGMP or MLD membership reports. Navigate to the specific BD or interface settings within the APIC configuration. Use the CLI command "ip igmp limit <number>" in global configuration mode, which sets a global limit on the number of mroute states allowed across the entire fabric. This limit cannot be configured on a per interface basis in ACI. To limit the number of mroute states created on a BD or interface by MLD reports on a Cisco APIC, configure the "Maximum Multicast Entries" parameter within the BD or interface settings. apic# configure terminal apic(config)# ip igmp limit 100 or apic(config)#int g0/0 apic(config-if)#ip igmp limit 2 On the relevant BD or interface, limit the number of multicast routes (mroute states) generated by IGMP or MLD reports. Navigate to the specific BD and interface where the mroute limit is to be set. apic(config)# tenant <tenant_name> apic(config-tenant)# bridge-domain <BD_name> apic(config-bd)# interface <interface_name> apic(config-if)# ip mroute limit <maximum_mroute_count> Note: Monitor multicast traffic on the network and adjust the "ip mroute limit" value as needed to balance performance and resource usage.
Review the configuration to verify the SPT switchover threshold is not explicitly configured. If the "ip pim spt-threshold <value> command is configured for any value other than zero, this is a finding.
Remove the "ip pim spt-threshold" from the configuration. apic(config)# no ip pim spt-threshold <value>
Review the BGP configuration to verify that TTL security has been configured for each external neighbor as shown in the example below: policy BGP_Peer_Profile no neighbor 10.1.1.1 ebgp-multihop neighbor 10.1.1.1 ttl-security If the Cisco ACI is not configured to use GTSM for all Exterior BGP peering sessions, this is a finding.
Configure TTL security on all external BGP neighbors as shown in the example below: Step 1: Access the BGP Peer Connectivity Profile. policy BGP_Peer_Profile Step 2: Disable Multihop for external neighbor. no neighbor 10.1.1.1 ebgp-multihop Step 3: Enable TTL security on the neighbor. neighbor 10.1.1.1 ttl-security
This requirement is only applicable to Source Specific Multicast (SSM) implementation. This requirement is not applicable to Any Source Multicast (ASM) since the filtering is being performed by the rendezvous point switch. Review the configuration of the designated router (DR) to verify that it is filtering IGMP or MLD Membership Report messages, allowing hosts to join only those groups that have been approved. If the Cisco ACI is not filtering IGMP or MLD Membership Report messages, this is a finding.
Configure "IGMP Snooping" and create access groups that define which multicast groups are permitted on specific ports. For filtering IPv6 multicast traffic (MLD), use similar commands with the "mld" keyword instead of "igmp". Step 1: Navigate to the relevant bridge domain, interface or VLAN and enable IGMP snooping using the command. apic(config)# interface <interface_name> apic (config-if)# ip igmp snooping or apic(config)# bd BD-1 apic(config-bd-1)# ip igmp snooping Step 2: Define a new access group with a name and specify the permitted multicast groups. apic(config)# ip igmp snooping vlan <vlan_id> access-group <access_group_name> apic(config)# access-group <access_group_name> apic(config)# permit ip multicast <multicast_group_address> Step 3: Navigate to the specific port configuration where the filter is to be applied. apic(config)# ip igmp snooping access-group <group-name> to associate the created access group with the port. apic(config)# interface Ethernet1/1 apic(config-if)# ip igmp snooping access-group allowed-groups
This requirement is only applicable to Source Specific Multicast (SSM) implementation. This requirement is not applicable to Any Source Multicast (ASM) since the filtering is being performed by the rendezvous point switch. Review the configuration to verify that it is filtering IGMP or MLD Membership Report messages, allowing hosts to join only those groups that have been approved. switch BD-1 ip igmp snooping ip igmp snooping policy ApprovedSources ip igmp snooping policy ApprovedSources source-filter 10.0.0.1 interface Vlan10 ip igmp snooping policy ApprovedSources If the Cisco API is not filtering IGMP or MLD Membership Report messages, this is a finding.
Configure an IGMP snooping policy with source-based filtering, defining which IP addresses are permitted to send multicast traffic to a specific group within a VLAN. Step 1: Navigate to the relevant interface or bridge domain. [apic#] switch <bridge-name> [apic(switch-BD-1)#] ip igmp snooping Step 2: Within the IGMP Snooping Policy, specify allowed source IP addresses. [apic(switch-BD-1)#] ip igmp snooping policy<policy-name> [apic(switch-<bridge-domain-name>)#] ip igmp snooping policy <policy-name> source-filter <source-ip-address1> <source-ip-address2> Step 3: Assign the created policy to the relevant interface or VLAN. [apic(switch-BD-1)#] interface <interface-name> [apic(switch-BD-1)#] ip igmp snooping policy <policy-name>
Review the switch configuration to determine if there is a receive path or interface filter to only accept MSDP packets from known MSDP peers. Step 1: Verify that interfaces used for MSDP peering have an inbound ACL as shown in the example below: interface GigabitEthernet1/1 ip address x.1.28.8 255.255.255.0 ip access-group EXTERNAL_ACL_INBOUND in Step 2: Verify that the ACL restricts MSDP peering to only known sources. ip access-list extended EXTERNAL_ACL_INBOUND permit tcp host x.1.28.2 permit tcp host x.1.28.2 If the switch is not configured to only accept MSDP packets from known MSDP peers, this is a finding.
Configure the receive path or interface ACLs to only accept MSDP packets from known MSDP peers. Ensure the IP addresses of all intended MSDP peers have been properly identified and configured before creating the ACL. Regularly review and update ACLs to reflect changes in the network topology and security requirements. Step 1: Create an ACL allowing only permitted IP addresses. apic(config)# ip access-list extended <ACL_filter_name> apic(config)# permit ip <allowed IP address or range> any apic(config)# permit ip <allowed IP address or range> any Step 2: Apply the ACL as the receive path filter on interface. interface <interface name> ip msdp incoming filter <ACL filter name>
Review the switch configuration to verify a loopback address has been configured. tenant <tenant-name> networking l3out <l3out-name> protocol BGP neighbor 10.1.1.1 update-source Loopback0 If the switch does not use its loopback address as the source address for all iBGP sessions, this is a finding.
Configure the BGP configuration for the relevant L3Out to use the switch's loopback address as the source address for all iBGP peering. This configures the switch to use the loopback interface as the source IP for all BGP updates sent to the specified peer. tenant <tenant-name> networking l3out <l3out-name> protocol BGP neighbor <peer-ip> update-source Loopback0
Verify that the loopback interface is used as the source address for all MSDP packets generated by the router. 1. Navigate to Fabric >> Fabric Policies >> Policies >> Pod >> Management Access on the APIC GUI to find the relevant settings. 2. Verify the loopback interface IP address is used as the source address. If the router does not use its loopback address as the source address when originating MSDP traffic, this is a finding.
Configure the router to use its loopback address is used as the source address when sending MSDP packets. 1. Navigate to Fabric >> Fabric Policies >> Policies >> Pod >> Management Access to find the relevant settings. 2. Specify the loopback interface IP address as the source address.
Enter the "show ipv6 int" command on the leaf switch to verify the configuration was pushed out correctly to the leaf switch. interface Ethernet 1/1 ipv6 router advertisement hop-limit 32 If a hop limit of at least 32 is not advertised in Cisco ACI advertisement messages for IPv6 stateless auto-configuration deployments, this is a finding.
Configure the switch to advertise a hop limit of at least 32 in router advertisement messages as shown in the example. Depending on the ACI configuration, it may be necessary to specify the appropriate context (like a specific VLAN or L3Out) before issuing the command. apic1(config)# interface Ethernet 1/1 apic1(config-if)# ipv6 router advertisement hop-limit 32 Note: When configuring using a VPC interface, the ND RA prefix must be enabled for both side A and side B as both are members in the VPC configuration. Enable the ND RA prefix: 1. In the Work Pane, in the Logical Interface Profile screen, click the SVI tab. 2. Under Properties, click the check boxes to enable the ND RA Prefix for both Side A and Side B. Choose the identical ND RA Prefix Policy for Side A and Side B.
Review the router configuration to ensure FEC0::/10 IP addresses are not defined. apic1(config) show ipv6 interface gigabitethernet 0/0/0 If IPv6 site local unicast addresses are defined, this is a finding.
Delete unauthorized addresses. Configure the IPv6 addresses on the ACI fabric's leaf switches and virtual network segments (bridge domains) within the desired tenant to use site local unicast addresses. ipv6 unicast-routing interface gigabitethernet 0/0/0 ipv6 address 2001:DB8:c18:1::/64 eui-64
Review the configuration to verify logical separation using EPGs, bridge domains, and/or tenants is configured. The following is an example of an EPG: apic1(config)# leaf 1017 apic1(config-leaf)# interface ethernet 1/13 apic1(config-leaf-if)# vlan-domain member dom1 apic1(config-leaf-if)# switchport trunk allowed vlan 20 tenant t1 application AP1 epg EPG1 If subnetworks are not configured to isolate organization-defined critical system components and functions, this is a finding.
Configure logical separation using EPGs, bridge domains, and/or tenants. The following is an example of an EPG. Step 1: Configure a VLAN domain. Example: apic1(config)# vlan-domain dom1 apic1(config-vlan)# vlan 10-100 Step 2: Create a tenant. Example: apic1# configure apic1(config)# tenant t1 Step 3: Create a private network/VRF. Example: apic1(config-tenant)# vrf context ctx1 apic1(config-tenant-vrf)# exit Step 4: Create a bridge domain. Example: apic1(config-tenant)# bridge-domain bd1 apic1(config-tenant-bd)# vrf member ctx1 apic1(config-tenant-bd)# exit Step 5: Create an application profile and an application EPG. Example: apic1(config-tenant)# application AP1 apic1(config-tenant-app)# epg EPG1 apic1(config-tenant-app-epg)# bridge-domain member bd1 apic1(config-tenant-app-epg)# exit apic1(config-tenant-app)# exit apic1(config-tenant)# exit Step 6: Associate the EPG with a specific port. Example: apic1(config)# leaf 1017 apic1(config-leaf)# interface ethernet 1/13 apic1(config-leaf-if)# vlan-domain member dom1 apic1(config-leaf-if)# switchport trunk allowed vlan 20 tenant t1 application AP1 epg EPG1
Review the SSP and the ACI configuration to verify logical separation using EPGs, bridge domains, and/or tenants is configured. The following is an example of an EPG: apic1(config)# leaf 1017 apic1(config-leaf)# interface ethernet 1/13 apic1(config-leaf-if)# vlan-domain member dom1 apic1(config-leaf-if)# switchport trunk allowed vlan 20 tenant t1 application AP1 epg EPG1 If organization-defined alternate communication paths for system operations organizational command and control have not been established, this is a finding.
Configure logical separation using EPGs, bridge domains, and/or tenants in accordance with the SSP. The following is an example of an EPG: Step 1: Configure a VLAN domain. Example: apic1(config)# vlan-domain dom1 apic1(config-vlan)# vlan 10-100 Step 2: Create a tenant. Example: apic1# configure apic1(config)# tenant t1 Step 3: Create a private network/VRF. Example: apic1(config-tenant)# vrf context ctx1 apic1(config-tenant-vrf)# exit Step 4: Create a bridge domain. Example: apic1(config-tenant)# bridge-domain bd1 apic1(config-tenant-bd)# vrf member ctx1 apic1(config-tenant-bd)# exit Step 5: Create an application profile and an application EPG. Example: apic1(config-tenant)# application AP1 apic1(config-tenant-app)# epg EPG1 apic1(config-tenant-app-epg)# bridge-domain member bd1 apic1(config-tenant-app-epg)# exit apic1(config-tenant-app)# exit apic1(config-tenant)# exit Step 6: Associate the EPG with a specific port. Example: apic1(config)# leaf 1017 apic1(config-leaf)# interface ethernet 1/13 apic1(config-leaf-if)# vlan-domain member dom1 apic1(config-leaf-if)# switchport trunk allowed vlan 20 tenant t1 application AP1 epg EPG1
Review the configuration to verify Cisco ACI is configured to employ control plane protection. Step 1: Verify traffic types have been classified based on importance levels. The following is an example configuration: class-map match-all CoPP_CRITICAL match access-group name CoPP_CRITICAL class-map match-any CoPP_IMPORTANT match access-group name CoPP_IMPORTANT match protocol arp class-map match-all CoPP_NORMAL match access-group name CoPP_NORMAL class-map match-any CoPP_UNDESIRABLE match access-group name CoPP_UNDESIRABLE class-map match-all CoPP_DEFAULT match access-group name CoPP_DEFAULT Step 2: Review the Access Control Lists (ACLs) referenced by the class maps to determine if the traffic is being classified appropriately. The following is an example configuration: ip access-list extended CoPP_CRITICAL remark our control plane adjacencies are critical permit ospf host [OSPF neighbor A] any permit ospf host [OSPF neighbor B] any permit pim host [PIM neighbor A] any permit pim host [PIM neighbor B] any permit pim host [RP addr] any permit igmp any 224.0.0.0 15.255.255.255 permit tcp host [BGP neighbor] eq bgp host [local BGP addr] permit tcp host [BGP neighbor] host [local BGP addr] eq bgp deny ip any any ip access-list extended CoPP_IMPORTANT permit tcp host [TACACS server] eq tacacs any permit tcp [management subnet] 0.0.0.255 any eq 22 permit udp host [SNMP manager] any eq snmp permit udp host [NTP server] eq ntp any deny ip any any ip access-list extended CoPP_NORMAL remark we will want to rate limit ICMP traffic deny icmp any host x.x.x.x fragments permit icmp any any echo permit icmp any any echo-reply permit icmp any any time-exceeded permit icmp any any unreachable deny ip any any ip access-list extended CoPP_UNDESIRABLE remark other management plane traffic that should not be received permit udp any any eq ntp permit udp any any eq snmp permit tcp any any eq 22 permit tcp any any eq 23 remark other control plane traffic not configured on router permit eigrp any any permit udp any any eq rip deny ip any any ip access-list extended CoPP_DEFAULT permit ip any any Note: Explicitly defining undesirable traffic with ACL entries enables the network operator to collect statistics. Excessive ARP packets can potentially monopolize route processor resources, starving other important processes. Currently, ARP is the only layer 2 protocol that can be specifically classified using the match protocol command. Step 3: Review the policy-map to determine if the traffic is being policed appropriately for each classification. The following is an example configuration: policy-map CONTROL_PLANE_POLICY class CoPP_CRITICAL police 512000 8000 conform-action transmit exceed-action transmit class CoPP_IMPORTANT police 256000 4000 conform-action transmit exceed-action drop class CoPP_NORMAL police 128000 2000 conform-action transmit exceed-action drop class CoPP_UNDESIRABLE police 8000 1000 conform-action drop exceed-action drop class CoPP_DEFAULT police 64000 1000 conform-action transmit exceed-action drop Step 4: Verify that the CoPP policy is enabled. The following is an example configuration: (config)# leaf 101 (config-leaf)# int eth 1/10 (config-leaf-if)# service-policy type control-plane-if Note: Control Plane Protection (CPPr) can be used to filter as well as police control plane traffic destined to the RP. CPPr is very similar to CoPP and has the ability to filter and police traffic using finer granularity by dividing the aggregate control plane into three separate categories: (1) host, (2) transit, and (3) CEF-exception. Hence, a separate policy-map could be configured for each traffic category. If the Cisco router is not configured to protect against known types of DoS attacks by employing organization-defined security safeguards, this is a finding.
Protect against known types of DoS attacks on the route processor. Implementing a CoPP policy, as shown in the example below, is a best practice method: Step 1: Configure the ACL's specific traffic types. Apic1(config)#ip access-list extended CoPP_CRITICAL Apic1(config-ext-nacl)#remark our control plane adjacencies are critical Apic1(config-ext-nacl)#permit ospf host x.x.x.x any Apic1(config-ext-nacl)#permit ospf host x.x.x.x any Apic1(config-ext-nacl)#permit pim host x.x.x.x any Apic1(config-ext-nacl)#permit pim host x.x.x.x any Apic1(config-ext-nacl)#permit igmp any 224.0.0.0 15.255.255.255 Apic1(config-ext-nacl)#permit tcp host x.x.x.x eq bgp host x.x.x.x Apic1(config-ext-nacl)#deny ip any any Apic1(config-ext-nacl)#exit Apic1(config)#ip access-list extended CoPP_IMPORTANT Apic1(config-ext-nacl)#permit tcp host x.x.x.x eq tacacs any Apic1(config-ext-nacl)#permit tcp x.x.x.x 0.0.0.255 any eq 22 Apic1(config-ext-nacl)#permit udp host x.x.x.x any eq snmp Apic1(config-ext-nacl)#permit udp host x.x.x.x eq ntp any Apic1(config-ext-nacl)#deny ip any any Apic1(config-ext-nacl)#exit Apic1(config)#ip access-list extended CoPP_NORMAL Apic1(config-ext-nacl)#remark we will want to rate limit ICMP traffic Apic1(config-ext-nacl)#deny icmp any host x.x.x.x fragments Apic1(config-ext-nacl)#permit icmp any any echo Apic1(config-ext-nacl)#permit icmp any any echo-reply Apic1(config-ext-nacl)#permit icmp any any time-exceeded Apic1(config-ext-nacl)#permit icmp any any unreachable Apic1(config-ext-nacl)#deny ip any any Apic1(config-ext-nacl)#exit Apic1(config)#ip access-list extended CoPP_UNDESIRABLE Apic1(config-ext-nacl)#remark management plane traffic that should not be received Apic1(config-ext-nacl)#permit udp any any eq ntp Apic1(config-ext-nacl)#permit udp any any eq snmp Apic1(config-ext-nacl)#permit tcp any any eq 22 Apic1(config-ext-nacl)#permit tcp any any eq 23 Apic1(config-ext-nacl)#remark control plane traffic not configured on router Apic1(config-ext-nacl)#permit eigrp any any Apic1(config-ext-nacl)#permit udp any any eq rip Apic1(config-ext-nacl)#deny ip any any Apic1(config-ext-nacl)#exit Apic1(config)#ip access-list extended CoPP_DEFAULT Apic1(config-ext-nacl)#permit ip any any Apic1(config-ext-nacl)#exit Step 2: Configure class maps referencing each of the ACLs. Apic1(config)#class-map match-all CoPP_CRITICAL Apic1(config-cmap)#match access-group name CoPP_CRITICAL Apic1(config-cmap)#class-map match-any CoPP_IMPORTANT Apic1(config-cmap)#match access-group name CoPP_IMPORTANT Apic1(config-cmap)#match protocol arp Apic1(config-cmap)#class-map match-all CoPP_NORMAL Apic1(config-cmap)#match access-group name CoPP_NORMAL Apic1(config-cmap)#class-map match-any CoPP_UNDESIRABLE Apic1(config-cmap)#match access-group name CoPP_UNDESIRABLE Apic1(config-cmap)#class-map match-all CoPP_DEFAULT Apic1(config-cmap)#match access-group name CoPP_DEFAULT Apic1(config-cmap)#exit Step 3: Configure a policy map referencing the configured class maps and apply appropriate bandwidth allowance and policing attributes. Apic1(config)#policy-map CONTROL_PLANE_POLICY Apic1(config-pmap)#class CoPP_CRITICAL Apic1(config-pmap-c)#police 512000 8000 conform-action transmit exceed-action transmit Apic1(config-pmap-c-police)#class CoPP_IMPORTANT Apic1(config-pmap-c)#police 256000 4000 conform-action transmit exceed-action drop Apic1(config-pmap-c-police)#class CoPP_NORMAL Apic1(config-pmap-c)#police 128000 2000 conform-action transmit exceed-action drop Apic1(config-pmap-c-police)#class CoPP_UNDESIRABLE Apic1(config-pmap-c)#police 8000 1000 conform-action drop exceed-action drop Apic1(config-pmap-c-police)#class CoPP_DEFAULT Apic1(config-pmap-c)#police 64000 1000 conform-action transmit exceed-action drop Apic1(config-pmap-c-police)#exit apic(config-pmap-c)#exit apic(config-pmap)#exit Step 4: Apply the policy map applying the configuration to an interface on the leaf. apic(config)# leaf 101 (config-leaf)# int eth 1/10 (config-leaf-if)# service-policy type CONTROL-PLANE-POLICY
Review the router configuration to determine RSVP messages are rate limited. Step 1: Determine if MPLS TE is enabled globally and at least one interface. To display statistics information for all the interfaces and VRFs in the system, navigate to Tenant >> infra >> Networking >> SR-MPLS Infra L3Outs. Step 2: Verify the rsvp bandwidth is set. ip rsvp bandwidth 1000000 If the router with RSVP-TE enabled does not rate limit RSVP messages based on the link speed and input queue size of adjacent core routers, this is a finding.
Configure rate limit RSVP messages per interface, as shown in the example below: Syntax: ip rsvp bandwidth <bandwidth_value in kbps> apic(config)# ip rsvp bandwidth 1000000