[c-nsp] NPE G1, CEF and ACLs and high CPU
Alex Balashov
abalashov at evaristesys.com
Tue Sep 9 01:07:57 EDT 2008
Are you serious?
Well, I unhappily and disappointedly stand corrected, then. Indeed,
Cisco documentation appears to confirm what you and Bill are saying.
There are a variety of known algorithms for traversing hashed structures
while taking order of precedence into account. I am, quite frankly,
astonished that they are not used, or that it takes some sort of ASIC or
TCAM enhancement to make that happen.
Adrian Chadd wrote:
> Bill is practically right. The semantics for Cisco ACLs aren't "here's a set
> of IP ranges, apply this behaviour", they're a linear walk of rules from
> top to bottom applying behaviour at each step. Collapsing that into the
> smallest set of possible operations is -not- taught at first/second year
> computer science. Eg:
>
> * permit ssh 1.2.3.0/24
> * deny ssh 1.2.4.8/30
> * permit ssh 1.2.0.0/16
> * deny ssh 1.0.0.0/8
>
> Please yank the first year computer science curriculum bit which provides
> the student with the clue required to algorithmically determine the smallest
> set of permit/deny's keeping the above semantics correct. Then do some basic
> analysis to find out what the resource bounds are on determining that.
> Oh, then prove that you can evaluate it in "more or less O(1) time". Go on,
> I dare you :) (Note: I -think- the TCAM ACL rule programming in later IOSes
> can do that? Perhaps Rodney or someone else from Cisco can comment.. :)
>
> There's some rule folding (and compiling?) stuff that I've heard about in
> later software-forwarding IOSes which attempt to mitigate this somewhat but
> I've never really sat down and (ab)used it.
>
> Now, I suggest you go back and read how iptables / ipfw / pf rules
> are actually -parsed- and -handled- in the various *NIXes you speak of.
> I've done this exercise and I'll give you a hint - rules are evaluated
> much the same as they are on the Cisco, except in some cases the evaluation
> doesn't stop at first hit and there are other gotchas (like "match X goto rule
> Y"). Go figure out why.
>
> I'll give you an even bigger hint - the best way to get a speedup under
> *NIX packet filters is to build "sets" of IP addresses to apply your policies
> rather than individual rules for each network you want to allow SSH for.
> The difference between one rule w/ a 200,000 network IP set versus 200,000
> entries is pretty staggering - and the latter depends on the rule ordering.
> Just like Bill said. :)
>
>
>
>
> Adrian
>
> On Tue, Sep 09, 2008, Alex Balashov wrote:
>> Are you _sure_ that order is important in these ACLs? I ask because I
>> honestly don't know, so don't get me wrong.
>>
>> It just seems rather unlikely. Organising data like that into
>> structures where matching and access can happen at more or less an O(1)
>> formal computational complexity is a basic skill that is taught at the
>> beginning of any undergraduate curriculum in computer science. Students
>> are taught to understand that large amounts of random (non-sorted) data
>> cannot be stored in a linear structure, and that even linear structures
>> with comparatively few elements (such as an access list) can be very
>> slow if the lookup is repeated with very great frequency.
>>
>> That's why such data gets stored in multidimensional and relational data
>> structures: things like binary trees (and their innumerable
>> permutations), undirected string vector graphs for heavy lexical token
>> matching, hash tables, and various relational mechanisms for forming
>> bindings or indices from a quick and superficial glimpse at the data.
>>
>> It's how every firewall/packet filtering engine (such as Linux
>> netfilter, or the FreeBSD packet filter) is implemented, so packets are
>> matched using a hashing strategy rather than linear, iterative comparisons.
>>
>> What you appear to be suggesting in your dwelling upon the significance
>> of rules being at the bottom or top of an access list definition would
>> also imply that these basic algorithmic innovations and elements of the
>> software engineering canon have somehow managed, with great finesse, to
>> escape the notice of the people who wrote IOS. I refuse to believe that.
>>
>> bill fumerola wrote:
>>
>>> [ reading through quickly, just some ACL pointers.. ]
>>>
>>> On Mon, Sep 08, 2008 at 09:15:31PM +0100, Mateusz B?aszczyk wrote:
>>>> ! deny rogue IPs (it is interesting how many catches are here)
>>>> deny ip 10.0.0.0 .... any
>>>> deny ip 192... any
>>>> deny ip host 0.0.0.0 any
>>> this breaks PMTUD. icmp messages from poorly addressed routers still
>>> need to get back to your hosts.
>>>
>>>> etc....
>>>> ! deny spoofing us...
>>>> deny ip OURBLOCK1 any
>>>> deny ip OURBLOCK2 any
>>> move to the top.
>>>
>>>> ! pings and traceroute
>>>> permit icmp any any
>>> either permit the specific ICMPs required for end to end communication
>>> to work and permit the rest after your anti-spoof, or just move this
>>> towards the top.
>>>
>>>> permit udp any any range 32xxx 34xxx
>>> rarely used, moved towards the bottom.
>>>
>>>> ! transit providers
>>>> permit tcp host THEM1 host US1 eg bgp
>>>> permit tcp host THEM1 eq bgp host US1
>>>> ! Internet eXchanges - bgp/msdp
>>>> permit tcp THEM2 WCARD2 host US2 eg bgp
>>>> permit tcp THEM2 WCARD2 eq bgp host US2
>>>> deny ip any US1
>>>> deny ip any US2
>>> rarely used, move towards bottom. consider removing the port-specific
>>> portions and see if you can get your ISP to use the TTL hack.
>>>
>>>> ! some legacy stuff
>>>> permit ip any host XXX
>>> move towards the top.
>>>
>>>> ! deny access to infrastructure
>>>> deny ip any NETWORK_1
>>>> ...
>>>> deny ip any NETWORK_N
>>> <hack>
>>> sometimes, you can null route these blocks and use policy route-maps
>>> that set next-hop for your local device and/or management networks
>>> that allow the forwarding plane take care of discarding these
>>> </hack>
>>>
>>>> permit ip any any
>>> and here's where the majority of your traffic matches - at the bottom.
>>> this will kill performance. consider the trade-off of adding a:
>>>
>>> permit tcp any any established
>>>
>>> towards the top of your config. that rule will catch the majority of
>>> most networks' traffic. your deny rules below will still prevent SYN
>>> packets from getting through to your infrastructure space. yes, your
>>> 'infrastructure' will be open to ACK floods and other such things, but
>>> you can deploy other measures to assist with that. for example: ACLs on
>>> the interfaces facing your management network instead.
>>>
>>> also, if you run a service that represents the bulk of your traffic on
>>> that device, add a short-circuit rule for that service higher at the
>>> top, even if a rule with wider reach allows the same later.
>>>
>>>> any significant advantage over entry-level 6500/7600?
>>> 6500/7600 will be way less order dependent and you'll be able to have
>>> much longer ACLs. in my experience, on software platforms 99% of your
>>> traffic should either be permitted or denied in the first 5 or so rules
>>> or you're going to see serious performance problems.
>>>
>>> consider using 'access-list compiled' if your platform/IOS support it.
>>>
>>> distribute your ACLs as much as possible. take a multi layered approach.
>>> know your device's strengths and weaknesses when it comes to filtering
>>> and exploit those.
>>>
>>> -- bill
>>> _______________________________________________
>>> cisco-nsp mailing list cisco-nsp at puck.nether.net
>>> https://puck.nether.net/mailman/listinfo/cisco-nsp
>>> archive at http://puck.nether.net/pipermail/cisco-nsp/
>>
>> --
>> Alex Balashov
>> Evariste Systems
>> Web : http://www.evaristesys.com/
>> Tel : (+1) (678) 954-0670
>> Direct : (+1) (678) 954-0671
>> Mobile : (+1) (706) 338-8599
>> _______________________________________________
>> cisco-nsp mailing list cisco-nsp at puck.nether.net
>> https://puck.nether.net/mailman/listinfo/cisco-nsp
>> archive at http://puck.nether.net/pipermail/cisco-nsp/
>
--
Alex Balashov
Evariste Systems
Web : http://www.evaristesys.com/
Tel : (+1) (678) 954-0670
Direct : (+1) (678) 954-0671
Mobile : (+1) (706) 338-8599
More information about the cisco-nsp
mailing list