xenial (1) mxallowd.1.gz

Provided by: mxallowd_1.9-2_amd64 bug

NAME

       mxallowd - dynamically whitelist your Mail eXchanger

SYNOPSIS

       mxallowd  [-d]  [-c  configfile] [-t whitelist-time] [-p pflog-interface] [-l pcap-filter] [-F] [-s] [-q]
       [-p] -f fake-mailserver -r real-mailserver -n queue-num

DESCRIPTION

       mxallowd is a daemon which uses libnetfilter_queue (on Linux) or pf and pflog (on BSD) to allow (or deny)
       connections to a mailserver (or similar application) if the remote host hasn't connected to a fake daemon
       before.

       This is an improved version of the so-called nolisting (see http://www.nolisting.org/). The assumption is
       that  spammers  are  not  using  RFC  2821-compatible  SMTP-clients  and are sending fire-and-forget spam
       (directly to the first or second MX-entry without retrying on error). This direct access is blocked  with
       mxallowd, you'll only get a connection if you retry.

       NOTE: It is highly recommended to install nscd (nameserver caching daemon) or a similar software in order
       to speed-up DNS lookups. Since version 1.3, DNS lookups are done in a thread (so  they  don't  block  the
       main  process),  however,  on  very-high-traffic-sites,  mxallowd  may  show significantly better overall
       performance in combination with nscd.

OPTIONS

       -b, --no-rdns-whitelist
              Disable whitelisting all IP-addresses that have the same RDNS as the connecting one (necessary for
              google mail)

       -c, --config
              Specifies an alternative configuration file (instead of /etc/mxallowd.conf)

       -t, --whitelist-time
              Specify the amount of time (in seconds) until an IP-address will be removed from the whitelist

       -s, --stdout
              Log to stdout, not to syslog

       -q, --quiet
              Don't log anything but errors.

       -f, --fake-mailserver
              Specify which IP-address the fake mailserver has (connecting to it will whitelist you for the real
              mailserver)

       -r, --real-mailserver
              Specify which IP-address the real mailserver has

       -F, --foreground
              Do not fork into background, stay on console

       -n, --queue-num (only available when compiled for netfilter_queue)
              Specify the queue number which will be used for the netfilter_queue-link. This has to be the  same
              which is specified in the iptables-rule and it has to be specified, there is no default.

       -p, --pflog-interface (only available when compiled for pf)
              Specify  the pflog(4) interface which you configured in pf(4). The default is pflog0. Also see the
              pcap-filter-option if you use an interface which does not only get smtp-traffic.

       -l, --pcap-filter (only available when compiled for pf)
              Specify the filter for pcap. The default is "port 25". See tcpdump(8) for more information on  the
              filters.

FILES

       /etc/mxallowd.conf
              System-wide  configuration  file.  Use  the  long  options  without  the beginning two dashes. For
              example:

                   stdout
                   fake-mailserver 192.168.1.3
                   fake-mailserver 192.168.1.4
                   real-mailserver 192.168.1.5
                   queue-num 23

EXAMPLES FOR NETFILTER

       The machine has two IP-addresses. The mailserver only listens on 192.168.1.4, the nameserver returns  the
       mx-records  mx1.domain.com  (192.168.1.3)  with priority 5 and mx2.domain.com (192.168.1.4) with priority
       10.

       # modprobe nfnetlink_queue
       # iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j NFQUEUE --queue-num 23
       # mxallowd -s -F -f 192.168.1.3 -r 192.168.1.4 -n 23

       Then open a separate terminal and connect via telnet on your real mailserver. You'll see  the  connection
       attempt  being  dropped.  Now  connect  to  the  fake mailserver and watch mxallowd's output. Afterwards,
       connect to the real mailserver to verify your mailserver is still working.

EXAMPLES FOR PF

       The machine has two IP-addresses. The mailserver only listens on 192.168.1.4, the nameserver returns  the
       mx-records  mx1.domain.com  (192.168.1.3)  with priority 5 and mx2.domain.com (192.168.1.4) with priority
       10.

       Create a pf.conf like this:

            table <mx-white> persist

            real_mailserver="192.168.1.4"
            fake_mailserver="192.168.1.3"

            real_mailserver6="2001:dead:beef::1"
            fake_mailserver6="2001:dead:beef::2"

            pass in quick log on fxp0 proto tcp from <mx-white> to $real_mailserver port smtp
            pass in quick log on fxp0 inet6 proto tcp from <mx-white> to $real_mailserver6 port smtp
            block in log on fxp0 proto tcp to { $fake_mailserver $real_mailserver } port smtp
            block in log on fxp0 inet6 proto tcp to { $fake_mailserver6 $real_mailserver6 } port smtp

       Afterwards, load it and start mxallowd using the following commands:

       # pfctl -f /etc/pf.conf
       # mxallowd -s -F -f 192.168.1.3 -r 192.168.1.4

       Then open a separate terminal and connect via telnet on your real mailserver. You'll see  the  connection
       attempt  being  dropped.  Now  connect  to  the  fake mailserver and watch mxallowd's output. Afterwards,
       connect to the real mailserver to verify your mailserver is still working.

       The ruleset for pf is actually longer because pf does more than netfilter on linux  --  netfilter  passes
       the packets and lets mxallowd decide whether to drop/accept whilst pf blocks/passes before even "passing"
       to mxallowd.

SEE ALSO

       iptables(8), pf(4), pflog(4), tcpdump(8)

AUTHOR

       Michael Stapelberg <michael+mxallowd at stapelberg dot de>