Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Apr 2002 21:36:57 +0800
From:      Igor M Podlesny <poige@morning.ru>
To:        Ruslan Ermilov <ru@FreeBSD.ORG>
Cc:        Igor M Podlesny <poige@morning.ru>, net@FreeBSD.ORG, freebsd-isp@FreeBSD.ORG
Subject:   Re: patch -- An ingress filter (RFC2827)
Message-ID:  <20020426213657.D85230@mars-gw.morning.ru>
In-Reply-To: <20020426091620.GA18917@sunbay.com>; from ru@FreeBSD.ORG on Fri, Apr 26, 2002 at 12:16:20PM %2B0300
References:  <20020414180447.A93954@mars-gw.morning.ru> <20020426091620.GA18917@sunbay.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Apr 26, 2002 at 12:16:20PM +0300, Ruslan Ermilov wrote:
> On Sun, Apr 14, 2002 at 06:04:47PM +0800, Igor M Podlesny wrote:
> > 
> > Hello!
> > 
> > I'd like to know your opinion about this patch
> > 
> >   http://www.morning.ru/~poige/patchzone/ingressfiltering.patch
> > 
> > which is mine attempt to implement an ingress filter being inspired by
> > RFC2827 "Network Ingress Filtering: Defeating Denial of Service Attacks
> > which employ IP Source Address Spoofing".
> > 
> >   (http://www.ietf.org/rfc/rfc2827.txt)
> > 
> > It should be mentioned IMHO that this code makes another one in ip_input.c a
> > kind of redundant -- I mean code checking/blocking the 127/8 network "on
> > wire". BTW, I suggest if not removing it completely then adding (sys)logging
> > into, -- 127/8-spoofing certainly should be logged. :)
> > 
> > Another thing to pay an attention to: I deem it'd be better if a such filter
> > was built-in into ip_fw.c, allowing such syntax for ipfw(8):
> > 
> >   deny log ip from any to any in via fxp0 spoofed
> > 
> > But AFAIS in ip_fw.h:
> > 
> > #define IP_FW_F_IN      0x00000100
> > ...
> > #define IP_FW_F_DME     0x40000000      /* destination = me */
> > 
> > #define IP_FW_F_MASK    0x7FFFFFFF      /* All possible flag bits mask */
> > 
> > and u_int32_t       fw_flg;
> > 
> > there is no free space for any additional flags...
> > 
> > So, I was a bit unsure whether should I expand fw_flg to u_int64_t, and do
> > any other extensions. For now I decided just to wrote something like a
> > draft, test it (it seems to be working ;), and asking you, people, for your
> > comments/ideas on it.
> > 
> > P.S. A bit more info on this patch is at http://www.morning.ru/~poige/patchzone/
> > 

At first, thank you, Ruslan for your answer, it's quite fertile!

> Style comments:

I should had read the manual or just had known it by heart before writing
out the patch in case I was a commiter going to commit it into the
repository. But I'm not. Moreover, I don't suggest using _this_ code AS IS
in FreeBSD. I said before -- this is a draft. Other people also agree this
should be better done (ingress filtering I mean) at ip_fw.c not ip_input.c.

So yeah, it works someway, but again -- it's a draft. ;)

Well, thank you for time you spent telling me (us all, reading that) about
style, but I think that was done in a wrong time. And just one question
to you (if we're anyway have been talking about the style) as to a really
knowledgeable person: is the whole FreeBSD's kernel code is style(9)d from A
to Z?... :)

> 1.  There are many unnecessary whitespace changes.

(I consider using whitespaces similar to commenting, BTW. It's a good
C-style I heard. ;))

> 2.  Don't use the `register' keyword.

(Haven't found anything bout it in style(9)...)

> 3.  Double `const' doesn't do any good.  (I was once confused about this too.)

(const char *const ptr?

Why? I deem `const' can't make a code worse, only better, cause it makes an
additional description of variables/functions/code/algo...)

> 4.  ip_fw.c part of the patch has some cruft in it.

Namely what/where?

> Functional comments:
> 
> 1.  The use and externalization of ipfw_report() wasn't a good
>     idea.  Your patch makes ingressfilter dependent on `options
>     IPFIREWALL' because ip_fw.c is only compiled if this option
>     is present.

Not such a big deal cause this can be easily solved in various ways
dependent on what we want... (yeah, that's again about `draft'-approach :)

> 2.  Comment for ipf_rtaddr() is bogus -- the function returns
>     the pointer to an interface not address.

(A pointer is a value keeping an address. Am I wrong?)

> 3.  Function name is not good either, the more natural name
>     would be ip_rtifp().  I would also suggest reimplementing
>     the already existing ip_rtaddr() into ip_rtifp(), and
>     implementing ip_rtaddr() in terms of ip_rtifp().

(This'd be a good thing, I also thought about it,  but this wasn't the main
point of the patch -- the main idea stills be the same and it is ingress
filtering. :))

> General notes:
> 
> Ingress filtering in unacceptable in many cases.

And is acceptable in many others :)

Don't you agree with that?

>  For example,
> our site is connected to two ISPs, ISP-A and ISP-B.  Each ISP
> has allocated a network (NET-A and NET-B).  Both channels are
> connected to a single gateway box, and are reachable through
> interfaces IF-A and IF-B, respectively.  The `default' route
> on this box point to ISP-A through IF-A.
> 
> Now imagine that you want to ping(8) one of our addresses in
> NET-B.  This packet will appear on our gateway box through
> IF-B, but ingress filter would discard it because ip_rtifp()
> lookup would return the IF-A interface for your address
> (ip_src in the packet).
> We solve the problem with multiple default routes with `ipfw
> fwd'.  All outgoing packets with the source IP address in
> NET-B we forward through the IF-B interface.

1) in case of ip_fw.c integrated version you could easily specify
not using ingress filtering on such NICs.

2) this patch _AS_ _IS_ is already useful for both back bone routers making
up an internal network infrastructure and border gateways with single
_default_ route. I wrote about asymmetric routing incompatible with the patch,
and this point is quite similar to the situation, represented by you.

> Cheers,

P.S. I'd be very grateful if you could point out reasonable ways of
integration ingress filter with ip_fw.c... Or you consider this is not worth
doing at all?...

-- 
Igor M Podlesny a.k.a. Poige
http://WwW.MorninG.RU/~poige

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-isp" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020426213657.D85230>