Re: questions on allow-query

2018-02-20 Thread Evan Hunt
On Tue, Feb 20, 2018 at 11:41:37PM +, Darcy Kevin (FCA) wrote:
> Call me a contrarian, but I've never really signed onto the conventional
> wisdom that recursive and authoritative roles should never be mixed, even
> as I've transitioned into the InfoSec realm, where, generally speaking,
> we are quite wary of mixing roles within a single service (more software
> complexity leads to higher probability of defects, a bigger attack
> surface, and so on).

I agree with this. There are circumstances when it's convenient.  For one
example, adding an empty authoritative zone to your resolver is a handy
way to stop certain classes of DDoS attack from eating up your recursive
server resources.

Many years ago BIND could leak cache information when set up this way.
The allow-recursion ACL would prevent unauthorized clients from causing
named to recurse to look up information, but if the information was
already cached, it would return it just fine. The introduction of the
allow-query-cache ACL put a stop to that, back in 9.4 I think.

I was one of the early authors of the late lamented BIND10/Bundy, and my
recollection is we decided to separate the auth and recursive functions for
reasons of code simplicity and performance, not security. Most other
DNS implementations have done the same, and I suspect it was for the
same reasons, not because there's anything really wrong with mixing
them..

One thing to keep in mind, though, is that the two services will share each
other's fates.  If I were deploying a really big high-traffic server, I
might consider whether I wanted my recursive service to have to wait for
all the zones to load before it could function, or whether I wanted to have
to update my authoritative server because it was vulnerable to a crash bug
in the recursive code.

-- 
Evan Hunt -- e...@isc.org
Internet Systems Consortium, Inc.
___
Please visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe 
from this list

bind-users mailing list
bind-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/bind-users


RE: questions on allow-query

2018-02-20 Thread Darcy Kevin (FCA)
Call me a contrarian, but I've never really signed onto the conventional wisdom 
that recursive and authoritative roles should never be mixed, even as I've 
transitioned into the InfoSec realm, where, generally speaking, we are quite 
wary of mixing roles within a single service (more software complexity leads to 
higher probability of defects, a bigger attack surface, and so on).

Other than the master server(s), where there is no choice but to be 
authoritative, at one end of the spectrum, and border resolvers, for which 
there is no choice but to be non-authoritative (since it's not practical to 
replicate data for the vast diversity of namespaces on the Internet in which to 
resolve queries), at the other end of the spectrum, there is a middle ground, 
where there is a real *choice* as to whether to be authoritative (i.e. a slave, 
possibly a "stealth slave") for internal zones or not. The decision of whether 
to be authoritative or not, is driven by a number of factors, such as 
worst-case-query-performance sensitivity, availability requirements, 
query-frequency-versus-refresh-overhead, available bandwidth, DNSSEC, etc. It 
is perfectly reasonable, architecturally, for a given DNS instance to be a 
stealth slave for some zones and to either delegate, stub and/or forward for 
other zones, or for the default to be one or the other (auth-server as default 
implies having an internal root). Different zones have different requirements, 
different use cases, query patterns, etc. so why wouldn't a choice of different 
configurations for different zones be appropriate?

Now, as a matter of *implementation*, it might be useful, and arguably more 
secure, for these -- auth-server versus resolver -- to be separate software 
modules. But the modules should be able to co-exist on the same listener. 
Whether a given request gets dispatched to a different process or thread, 
depending on whether it is to be satisfied from authoritative data, or if 
iterative resolution (or forwarding) is required, is, again, a matter of 
implementation. But the choice to mix authoritative and non-authoritative on 
the same listener, should IMO remain available. Otherwise, you're forcing 
inappropriate choices on people -- e.g. slaving when it isn't really needed and 
could be considered overkill, or iterative/recursive resolution where slaving 
would be preferable from a performance, availability or other perspective.

As for BIND 10, it looks pretty dead, to me. According to ISC's website, they 
concluded work on it, including an authoritative server module, and handed it 
off to the Open Source community, where it became "Bundy". But 
http://bundy-dns.de/ doesn't seem to have been updated since 2014. So, I 
wouldn't hold my breath on a full-featured BIND 10 or "Bundy" DNS 
implementation any time soon...


- Kevin



-Original Message-
From: bind-users [mailto:bind-users-boun...@lists.isc.org] On Behalf Of Mark 
Elkins
Sent: Tuesday, February 20, 2018 2:58 AM
To: bind-users@lists.isc.org
Subject: Re: questions on allow-query

Reading between the lines - it sounds like you may be mixing nameserver roles, 
recursion with authoritative.

This is not a good idea and is why other Nameserver software (NSD, UNBOUND and 
others) either perform one role or the other. I understand that BIND-10 was 
also designed like this - separate software modules for the two separate roles.

Then your "access list" is simple.


Recursive: Starts with knowing next to nothing, can be asked for anything and 
serves a restrictive population acl "trusted" {
    127.0.0.0/8;
    ::1/128;
    192.X.X.0/24;
    2001:::::/48;
  };
allow-query { trusted; };
allow-recursion { trusted; };


Authoritative: Starts with knowing everything about just a few Domains, can 
only be asked about what it knows and serves the World.
allow-query { any; };
allow-recursion { none; };

You'll otherwise find that things like DNSSEC don't work as expected.


On 20/02/2018 00:51, @lbutlr wrote:
> If I set
>
> allow-query { 127.0.0.1; [myipblock]; }
>
> Then my DNS doesn't respond to any other servers, right? This would be bad 
> for being authoritative. so, should I set that and then set allow-query { 
> any; }; in each zone?
>
> Is that better than simply setting the IPs that are allowed recursion?
>
>
>
> ___
> Please visit https://lists.isc.org/mailman/listinfo/bind-users to 
> unsubscribe from this list
>
> bind-users mailing list
> bind-users@lists.isc.org
> https://lists.isc.org/mailman/listinfo/bind-users

--
Mark James ELKINS  -  Posix Systems - (South) Africa
m...@posix.co.za   Tel: +27.128070590  Cell: +27.826010496
For fast, reliable, low cost Internet in ZA: https://ftth.posix.co.za