qpsmtpd/docs/config.md
Matt Simerson a1823c8f50 convert docs/* from POD to Markdown
1. easier to update
2. it's readable on github
2014-09-18 09:15:02 -07:00

184 lines
6.3 KiB
Markdown

# Qpsmtpd configuration
The default way of setting config values is placing files with the
name of the config variable in the config directory `config/`, like
qmail's `/var/qmail/control/` directory. NB: `/var/qmail/control` (or
`$ENV{QMAIL}/control`) is used if a file does not exist in `config/`.
The location of the `config/` directory can be set via the
`QPSMTPD_CONFIG` environment variable and defaults to the current
working directory.
Any empty line or lines starting with `#` are ignored. You may use a
plugin which hooks the `config` hook to store the settings in some other
way. See ["plugins.pod" in docs](https://metacpan.org/pod/docs#plugins.pod) and ["hooks.pod" in docs](https://metacpan.org/pod/docs#hooks.pod) for more info on this.
Some settings still have to go in files, because they are loaded before
any plugin can return something via the `config` hook: `me`, `logging`,
`plugin_dirs` and of course `plugins`.
## Core settings
These settings are used by the qpsmtpd core. Any other setting is (hopefully)
documented by the corresponding plugin. Some settings of important plugins
are shown below in ["Plugin settings"](#plugin-settings).
- plugins
The main config file, where all used plugins and their arguments are listed.
- me
Sets the hostname which is used all over the place: in the greeting message,
the _Received: _header, ...
Default is whatever Sys::Hostname's hostname() returns.
- plugin\_dirs
Where to search for plugins (one directory per line), defaults to `./plugins`.
- logging
Sets the primary logging destination, see `plugins/logging/*`. Format
is the same as it's used for the `plugins` config file. __NOTE:__ only
the first non empty line is used (lines starting with `#` are counted
as empty).
- loglevel
This is not used anymore, _only_ if no `logging/` plugin is in use. Use a
logging plugin.
- databytes
Maximum size a message may be. Without this setting, there is no limit on the
size. Should be something less than the backend MTA has set as it's maximum
message size (if there is one).
- size\_threshold
When a message is greater than the size given in this config file, it will be
spooled to disk. You probably want to enable spooling to disk for most virus
scanner plugins and `spamassassin`.
- smtpgreeting
Override the default SMTP greeting with this string.
- spool\_dir
Where temporary files are stored, defaults to `~/tmp/`.
- spool\_perms
Permissions of the _spool\_dir_, default is `0700`. You probably have to
change the defaults for some scanners (e.g. the `clamdscan` plugin).
- timeout
- timeoutsmtpd
Set the timeout for the clients, `timeoutsmtpd` is the qmail smtpd control
file, `timeout` the qpsmtpd file. Default is 1200 seconds.
- tls\_before\_auth
If set to a true value, clients will have to initiate an SSL secured
connection before any auth succeeds, defaults to `0`.
## Plugin settings files
- rcpthosts, morercpthosts
Plugin: `rcpt_ok`
Domains listed in these files will be accepted as valid local domains,
anything else is rejected with a `Relaying denied` message. If an entry
in the `rcpthosts` file starts with a `.`, mails to anything ending with
this string will be accepted, e.g.:
example.com
.example.com
will accept mails for `user@example.com` and `user@something.example.com`.
The `morercpthosts` file is just checked for exact (case insensitive)
matches.
- `hosts_allow`
Plugin: `hosts_allow`.
Don't use this config file. The plugin itself is required to set the
maximum number of concurrent connections. This config setting should
only be used for some extremly rude clients: if list is too big it will
slow down accepting new connections.
- relayclients
- morerelayclients
Plugin: `check_relay`
Allow relaying for hosts listed in this file. The `relayclients` file accepts
IPs and CIDR entries. The `morercpthosts` file accepts IPs and `prefixes`
like `192.168.2.` (note the trailing dot!). With the given example any host
which IP starts with `192.168.2.` may relay via us.
- `dnsbl_zones`
Plugin: `dnsbl`
This file specifies the RBL zones list, used by the dnsbl plugin. Ihe IP
address of each connecting host will be checked against each zone given.
A few sample DNSBLs are listed in the sample config file, but you should
evaluate the efficacy and listing policies of a DNSBL before using it.
See also `dnsbl_allow` and `dnsbl_rejectmsg` in the documentation of the
`dnsbl` plugin
- `resolvable_fromhost`
Plugin: `resolvable_fromhost`
Reject sender addresses where the MX is unresolvable, i.e. a boolean value
is the only value in this file. If the MX resolves to something, reject the
sender address if it resolves to something listed in the
`invalid_resolvable_fromhost` config file. The _invalid\_resolvable\_fromhost_
expects IP addresses or CIDR (i.e. `network/mask` values) one per line, IPv4
only currenlty.
## Plugin settings arguments
These are arguments that can be set on the config/plugins line, after the name
of the plugin. These config options are available to all plugins.
- loglevel
Adjust the quantity of logging for the plugin. See docs/logging.pod
- reject
plugin reject [ 0 | 1 | naughty ]
Should the plugin reject mail?
The special 'naughty' case will mark the connection as a naughty. Most plugins
skip processing naughty connections. Filtering plugins can learn from them.
Naughty connections are terminated up by the __naughty__ plugin.
Plugins that use $self->get\_reject() or $self->get\_reject\_type() will
automatically honor this setting.
- `reject_type`
plugin reject_type [ perm | temp | disconnect | temp_disconnect ]
Default: perm
Values with temp in the name return a 4xx code and the others return a 5xx
code.
The `reject_type` argument and the corresponding `get_reject_type()` method
provides a standard way for plugins to automatically return the selected
rejection type, as chosen by the config setting, the plugin author, or the
`get_reject_type()` method.
Plugins that are updated to use the `$self->get_reject()` or
`$self->get_reject_type()` methods will automatically honor this setting.