Control Plane Protection CPPr

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

Leave a Reply