Postfix and Linux


Host lookup issues

By default Linux /etc/hosts lookups do not support multiple IP addresses per hostname. This causes warnings from the Postfix SMTP server that "hostname XXX does not resolve to address YYY", and is especially a problem with hosts that have both IPv4 and IPv6 addresses. To fix this, turn on support for multiple IP addresses:

/etc/host.conf:
    ...
    # We have machines with multiple IP addresses.
    multi on
    ...

Alternatively, specify the RESOLV_MULTI environment variable in main.cf:

/etc/postfix/main.cf:
    import_environment = MAIL_CONFIG MAIL_DEBUG MAIL_LOGTAG TZ XAUTHORITY DISPLAY LANG=C RESOLV_MULTI=on

Berkeley DB issues

If you can't compile Postfix because the file "db.h" isn't found, then you MUST install the Berkeley DB development package (name: db???-devel-???) that matches your system library. You can find out what is installed with the rpm command. For example:

$ rpm -qf /usr/lib/libdb.so
db4-4.3.29-2

This means that you need to install db4-devel-4.3.29-2 (on some systems, specify "rpm -qf /lib/libdb.so" instead).

DO NOT download some Berkeley DB version from the network. Every Postfix program will dump core when it is built with a different Berkeley DB version than the version that is used by the system library routines. See the DB_README file for further information.

Procmail issues

On RedHat Linux 7.1 and later procmail no longer has permission to write to the mail spool directory. Workaround:

# chmod 1777 /var/spool/mail

Logging in a container

When running Postfix inside a container, you can use stdout logging as described in MAILLOG_README. Alternatives: run syslogd inside the container, or mount the host's syslog socket inside the container.

Syslogd performance

LINUX syslogd uses synchronous writes by default. Because of this, syslogd can actually use more system resources than Postfix. To avoid such badness, disable synchronous mail logfile writes by editing /etc/syslog.conf and by prepending a - to the logfile name:

/etc/syslog.conf:
    mail.*                          -/var/log/mail.log

Send a "kill -HUP" to the syslogd to make the change effective.

Other logging performance issues

LINUX systemd intercepts all logging and enforces its own rate limits before handing off requests to a backend such as rsyslogd or syslog-ng. On a busy mail server this can result in information loss. As a workaround, you can use Postfix's built-in logging as described in MAILLOG_README.