Showing results for 
Search instead for 
Did you mean: 
Cisco Community November 2020 Spotlight Award Winners

Control Plane Protection


I was browsing through the security docs the other day and came across CPPr. For detailed info go here.

This is a feature for securing devices. I used to work for a company that adhered to DISA security standards. One of things that was a pain was restricting what interfaces could be used for management. We only wanted certain interfaces to allow management protocols. There were ways to get creative, but it's a lot easier now.

ROUTER#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

ROUTER(config)#control-plane host

ROUTER(config-cp-host)#management-interface vlan13 allow ?

  beep    Beep Protocol

  ftp     File Transfer Protocol

  http    HTTP Protocol

  https   HTTPS Protocol

  snmp    Simple Network Management Protocol

  ssh     Secure Shell Protocol

  telnet  Telnet Protocol

  tftp    Trivial File Transfer Protocol

  tl1     Transaction Language Session Protocol


We can now (easily) restrict which interfaces can use what management protocol! My only complaint is that we can't use this on loopbacks which is where most/all management protocols live.

The second part I found useful is the ability to drop packets BEFORE they hit the CPU. Nice!

First let's look to see what "daemons" are running on the router.

ROUTER#show control-plane host open-ports

Active internet connections (servers and established)

Prot               Local Address             Foreign Address                  Service    State

tcp                        *:22                         *:0               SSH-Server   LISTEN

tcp                        *:23                         *:0                   Telnet   LISTEN

udp                       *:123                         *:0                      NTP   LISTEN

Telnet is there by default. SSH and NTP showed up once I configured them. We should disable telnet. There never really was a way to disable telnet, all we could do is not use it and configure SSH and permit it. Telnet was still running though. Even though we still can't disable telnet, this is the next best thing. First we create the class map. In this example we're dropping packets that are destined to the router for ports that are not open [match closed-ports]. That certainly makes sense. Let's also drop all telnet connects too [match port tcp 23]. Now this may be belt-and-suspenders when also configuring transport under the VTY's, but I like the idea of being able to "firewall" my control plane.

class-map type port-filter match-any CLOSED_PORTS

  match closed-ports

  match port tcp 23

Next we create the policy map. In the real world you probably don't want the log keyword, but it's helpful when learning stuff in the lab.

policy-map type port-filter FILTER_CLOSED_PORTS




We apply it to the control plane and then test.

control-plane host

  service-policy type port-filter input FILTER_CLOSED_PORTS

I tried to telnet from a neighboring router and I was denied. On the host router I had the following in the buffer log.

*Nov  8 18:33:03.089: %CP-6-TCP: DROP TCP/UDP Portfilter ->

Awesome. One thing to note is that you may want to completely configure your router before applying this. There may be things running you were not expecting. I didn't allow DHCP and that broke my home network since my router is running DHCP


I'm trying to wrap my head around why it is useful to detect and drop packets destined for ports that aren't open anyways.  It seems like an exercise in futility.  and a waste of CPU cycles.


I have to be missing something.

Content for Community-Ad