rbldnsd: Small Daemon for DNSBLs

Quick links

Introduction

rbldnsd is a small and fast DNS daemon which is especially made to serve DNSBL zones. This daemon was inspired by Dan J. Bernstein's rbldns program found in the djbdns package.

rbldnsd is extremely fast - it outperforms both bind and djbdns greatly. It has very small memory footprint.

The daemon can serve both IP-based (ordb.org, dsbl.org etc) and name-based (rfc-ignorant.org) blocklists. Unlike DJB's rbldns, it has ability to specify individual values for every entry, can serve as many zones on a single IP address as you wish, and, finally, it is a real nameserver: it can reply to DNS metadata requests. The daemon keeps all zones in memory for faster operations, but its memory usage is very efficient, especially for repeated TXT values which are stored only once.

Zone File Format

Input format is very simple and far more suitable for such a task compared to one of full-featured bind. Rbldnsd may take input format of DJB's rbldns (i.e. file understood by rbldns-data program) as is, but it isn't limited to this format. Some examples of input format understood by rbldnsd:
:127.0.0.2:Open relay, see http://relays.example.com/lookup?$
# The above is a default or implicit value which is used when no value given
# for an entry.  The `$' characters will be replaced by an IP address in
# question.
127.0.0.2
# A simplest case: single IP address, with default value.
10.8.60.0/24 :127.0.0.3:Address $ is from a private IP range
# Netblock - 256 IP addresses with their own A and TXT records
224/4        Reserved multicast address
# Another netblock, with default A and explicit TXT values.
192.168	 Dialup pool, see http://dialups.example.com/lookup?$ for explanations
# IP numbers may be abbreviated, the above is the same as 192.168.0.0/16
10.10    :5:This network blocked due to massive spam issues
# A value may be abbreviated as well - :5: is the same as :127.0.0.5:.
10.10.5-129	:5:Those hosts are nasty
# repeat last octet: 10.10.5.0..10.10.129.255 inclusive
!10.10.1.2
# exclusion entry
#
# The following examples are for name-based zones.
example.com   :2:This domain has no working postmaster@ address
*.example.com :2:All subdomains of example.com lacks working abuse@ address
# Simple and wildcarded entry, both will return 127.0.0.2 A record
#
# some specials
$SOA 3000 ns1.example.com admin.example.com 0 600 300 86400 300
# Start of authority record (TTL 3000), with serial (0) computed as
# a timestamp of data file
$NS 3000 ns1.example.com ns2.example.com
# two nameservers
There are other zone formats available, including generic simplified bind-style format.

Usage

rbldnsd should be started as root user, in order to be able to bind to privileged port 53. After binding to the specified port and (optionally) changing its root to a specified directory, daemon will change its userid to specified value. Here is how rbldnsd can be used:
rbldnsd [options] zonename:type:fname,fname...
There is no config file, rbldnsd accepts all configuration in command line. The same zonename may be repeated, to form zone contents from several datasets; ditto for a dataset, one dataset may be used for several zones (data will be loaded only once). See manual page included in tarball for details.

Download

The software is released under GPL license version 2 or any later version.

Last version, 0.998, released 31 Dec 2015, can be found here. (gpg signature). Recent news are here, changelog is here. Look here for installable packages.

Note: Version 0.991 introduced some incompatibility in code handling $NS line: rbldnsd will produce a warning when loading old-format data files (but will work regardless). Please see this announce for more details.

Source code repository

Rbldnsd is maintained in git repository which can be found at git://git.corpit.ru/rbldnsd.git or, using a browser, here.


Enjoy.
 -- Michael Tokarev, mjt {at} tls {dot} msk {dot} ru.

Page last modified (except of bumping version number) Sun, 06 Jun 2004 19:11:45 +0400 by mjt.

Return to my software page.