Subject: Re: restricting NFS (and associated services) to one IP address
To: Chuck Swiger <cswiger@mac.com>
From: Steven M. Bellovin <smb@cs.columbia.edu>
List: netbsd-users
Date: 10/09/2006 14:40:42
On Mon, 9 Oct 2006 11:05:40 -0700, Chuck Swiger <cswiger@mac.com> wrote:

> On Oct 9, 2006, at 10:37 AM, Steven M. Bellovin wrote:
> > On Mon, 9 Oct 2006 10:21:57 -0700, Chuck Swiger <cswiger@mac.com>  
> > wrote:
> >> With regard to NFS and RFC services involving portmap, please
> >> understand that these services predated the notions of network
> >> security and firewalls needed today, and that these services are
> >> basically completely insecure.
> >
> > Given how long I've been working on network security and firewalls --
> > close to 20 years -- I think I understand that *very* well.  (I also
> > understand that many modern protocols aren't really any better, but  
> > that's
> > a separate rant.)
> 
> I've seen a post or two from you on Bugtraq, firewall-wizards and  
> elsewhere, agreed; but your question about "default deny" surprised  
> me enough to discard prior assumptions about any specific level of  
> knowledge you might have.  More to the point, other readers of this  
> mailing list are going to have a wide range of knowledge and might  
> benefit from understanding the intrinsic lack of security found in  
> NFS/portmap/etc.

I also co-authored the first book on firewalls, in 1994...  But your point
point about others' knowledge is well taken.

As for 'default deny' -- it's certainly the proper policy for a firewall.
It's much less clear that hosts should be configured to drop all incoming
packets not matchable to an outbound packet.  (Yes, I know that that's what
Windows XP SP2 does.  See Section 4.7 of Richard Clayton's dissertation,
at http://www.cl.cam.ac.uk/TechReports/UCAM-CL-TR-653.html, for one
example of the problems this can cause.)

In any event, my machine effectively does do 'default deny', in that it
returns a TCP RST or an ICMP Port Unreachable for packets addressed to
services that aren't running.
> 
> >> It is not prudent or advisable to try
> >> to combine routing/firewall functionality and filesharing on the same
> >> machine; if your multihomed system is being used to route or NAT
> >> traffic, then, if at all possible, you should not configure it to
> >> operate as a fileserver as well.
> >>
> > Who said anything about routing, firewalls, or NAT?  Not I.
> 
> You stated that you had a multihomed machine which you wanted to use  
> for filesharing but over only one interface.  You also stated "An  
> obvious approach is to use pf or ipf....", which certainly appears to  
> mean that you did say something something about using firewalls.

The purpose of a firewall is two-fold: to protect machines that can't
protect themselves, and to provide protection at scale.  I have a small
number of similar machines, so scale isn't the issue.  The question is
whether or not the machine can protect itself.  We've already established,
I think, that most of the services I mentioned have no access control, let
alone a more sophisticated way of ignoring packets from unwanted sources.
I was contemplating using pf or ipf -- as I frequently do -- for host
security.  For example, my preferred IM client (psi) listens on port 8010
for file transfer.  That's not a service I need or want, but there's no
way to disable it that I've found.  Instead, I use a packet filter to
block it.  That's a lot harder to do with RPC services, for reasons we
both understand.
> 
> Or did someone else write Message-id:  
> <20061009002448.c893eefd.smb@cs.columbia.edu>...?

I didn't explain all the steps in my reasoning.
> 
> > The situation is more like this.  I have several machines A, B, and C
> > that are exposed to the Internet.  They also need to share files among
> > themselves via NFS, on a separate LAN.  I want to make sure that nasty
> > packets don't get to the NFS-related services on these machines.
> 
> I would not want to run NFS filesharing on an machine directly  
> connected to the Internet without having a firewall in the way.

Ah -- but why?  I agree that one shouldn't run NFS without *something*
blocking those services.  Must it be an external box?  Or does NetBSD have
the ability to do it itself?
> 
> > I could, I suppose, create machine D, which is only on the back end  
> > LAN; it
> > could be the common file server.  For various reasons, that's not an
> > ideal solution, though I may resort to it.
> 
> That's probably the best solution in terms of security, however.

It may be the best answer today.  I'm still looking for a better answer
for tomorrow...
> 
> > It also leaves open the question of keeping fake responses away  
> > from the NFS clients on A, B, and C.
> 
> Use a firewall to block IP loose and strict source routing, as well  
> as the (presumably) RFC-1918 subnet being used for your LAN, so that  
> traffic on your internal LAN cannot be spoofed from outside.
> 
Presumably, setting net.inet.ip.forwsrcrt=0 will accomplish that.  There's
also net.inet.ip.checkinterface.

We seem to be talking past each other, and the tone has turned a bit
unpleasant.  Let's both calm down and assume that each of us knows what
we're talking about.


		--Steven M. Bellovin, http://www.cs.columbia.edu/~smb