Re: [v6ops] draft-taylor-v6ops-fragdrop WGLC

"C. M. Heard" <heard@pobox.com> Fri, 30 August 2013 04:56 UTC

Return-Path: <heard@pobox.com>
X-Original-To: v6ops@ietfa.amsl.com
Delivered-To: v6ops@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id F00D821F8F6D for <v6ops@ietfa.amsl.com>; Thu, 29 Aug 2013 21:56:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.979
X-Spam-Level:
X-Spam-Status: No, score=-1.979 tagged_above=-999 required=5 tests=[AWL=-0.620, BAYES_00=-2.599, SARE_LWSHORTT=1.24]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SW6oB3l6OJ-a for <v6ops@ietfa.amsl.com>; Thu, 29 Aug 2013 21:56:46 -0700 (PDT)
Received: from shell4.bayarea.net (shell4.bayarea.net [209.128.82.1]) by ietfa.amsl.com (Postfix) with ESMTP id 21EFC11E80E8 for <v6ops@ietf.org>; Thu, 29 Aug 2013 21:56:45 -0700 (PDT)
Received: (qmail 29081 invoked from network); 29 Aug 2013 21:56:41 -0700
Received: from shell4.bayarea.net (209.128.82.1) by shell4.bayarea.net with (DHE-RSA-AES256-SHA encrypted) SMTP; 29 Aug 2013 21:56:41 -0700
Date: Thu, 29 Aug 2013 21:56:40 -0700
From: "C. M. Heard" <heard@pobox.com>
X-X-Sender: heard@shell4.bayarea.net
To: v6ops <v6ops@ietf.org>
Message-ID: <Pine.LNX.4.64.1308292058000.14585@shell4.bayarea.net>
References: <201308181800.r7II06mv003294@irp-view13.cisco.com> <20130819.104704.119047008.he@uninett.no> <2671C6CDFBB59E47B64C10B3E0BD59230439DF7A39@PRVPEXVS15.corp.twcable.com> <521E411F.9090203@bogus.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset="US-ASCII"
Subject: Re: [v6ops] draft-taylor-v6ops-fragdrop WGLC
X-BeenThere: v6ops@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: v6ops discussion list <v6ops.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/v6ops>, <mailto:v6ops-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/v6ops>
List-Post: <mailto:v6ops@ietf.org>
List-Help: <mailto:v6ops-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/v6ops>, <mailto:v6ops-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 30 Aug 2013 04:56:51 -0000

On Wed, 28 Aug 2013, joel jaeggli wrote:
> Imho this is the first of these documents in recent times. As an 
> author I don't see the goal as guidance to implementors, I see it 
> as guidance from operators.

OK, but that guidance is most helpful if finds its way into atual 
advice to implementors ("here are some things you need to improve in 
order to meet our operational needs") and to maintainers of the IPv6 
specifications ("here are some places where the protocol, as 
specified, does not meet our operational needs").


On Mon, 19 Aug 2013, Havard Eidnes wrote:
> The entire section 2.1.1. "Stateful inspection" is about problems with
> resource exhaustion in middleboxes or end-system firewalls.
> Implementations which willingly devote unlimited resources to fragment
> reassembly display a severe lack robustness, and IMHO should not be
> used as justification for why we can't use fragments.  Yes, I'm
> suggesting that one can forego the specified 60s fragmentation
> reassembly timeout in the case of resource shortage of a fixed pool.

This is true, but the other side of the coin (as is mentioned 
elsewhere in the draft) is that operators often have to deal, at 
least in the short term, with implementations that do have these 
sorts of deficiencies.  Maybe the points that should be made in this 
section are:

- If fragmented datagrams are allowed in at all, there is no way to 
  prevent a malicious party from sending an incomplete series of 
  fragments to a vctim host (or stateful middlebox).

- Such an attach can cause resource exhaustion issues on 
  unsophisticated implementations, owing in part to the 60 sec 
  timeout specified in RFC 2460.

It now becomes easy to provide actionable advice to implentors ("you 
may want to consider doing a better job of managing your resources") 
and possibly to the 6man wg ("you may want to consider revising the 
60 sec timeout, or clarifying that it is an upper bound")

In section 2.15 the draft states:

   The IETF and operators can help this effort by identifying specific
   classes of fragments that do not represent legitimate use cases and
   hence should always be dropped.

That's good, actionable advice.  However, I get great heartburn from 
this:

   However, some cases will remain where legitimate fragments are 
   discarded for legitimate reasons.

If the fragments are legitimate, it seems to me that the operator 
who discards them is shooting himself in the foot.

May I susggest that a more productive thing to say would be that the 
IETF can also help by:

- identifying applications that can be modified to avoid the use of 
  fragmentation

- identifying applications that can't live without it

The hope is that this would lead to specification changes or 
appropriate implementation advice in cases where fragmentation is 
not really needed, and where it is needed to improved middlebox 
implementations that provide smore precisely targeted filtering 
tools than the blunt instrument of indiscriminately discarding all 
fragments (for instance, a middlebox capable of parsing the entire 
header chain if it's available and sufficiently short, and having 
the abiity to discard stuff that does not conform to 
ietf-6man-oversized-header-chain).

On Mon, 19 Aug 2013, Havard Eidnes wrote:
> Under section 2.1.2. Stateless ACLs:
> 
>    Stateless load balancing schemes may
>    hash fragmented datagrams from the same flow to different paths
>    because the 5-tuple may be available on only the initial fragment.
>    While rehashing has the possibility of reordering packets in ISP
>    cores it is not disastrous.  However, in front of a stateful
>    inspection device, load balancer tier, or anycast service instance,
>    where headers other than the L3 header -- for example, the L4 header,
>    interface index (for traffic already rehashed onto different paths),
>    DS fields -- are considered as part of the hash, rehashing may result
>    in the fragments being delivered to different end-systems
> 
> AFAIK the use of a 5-tuple which includes the L4 header to compute a
> hash to make a forwarding decisions among otherwise equal paths is an
> implementation optimization only, it is not something which is
> explicitly prescribed by our standards.  Therefore, I'll claim that
> applying this logic to fragments, causing packet delivery to different
> hosts for initial and subsequent fragments (e.g. in the case of a load
> balancer) is an incorrectly applied optimization, also known as a bug.

+1 to that last sentence.

Note that the problems faced by stateless load balancers are 
discussed in Section 3 of the flow label specification (RFC 6437).

> In section 2.1.4. Other considerations you say:
> 
>    It is common practice [RFC6192] to recommend that control-plane
>    ACLs protecting routers and network devices be configured to drop
>    all fragments.
> 
> Well, there exists an informational RFC [6192] which contains an
> example policy and also some detailed discussion about handling of
> fragments.  I don't think it in sum says what is said here, though.

Agreed, and I think that the document would be improved by leaving 
out the last sentence in 2.1.4.  (The points about disproptionate 
numbers of software errors in fragment processing are on target, 
though.)

Mike Heard