scripts: improve custom user-supplied Postfix configuration (#2598)

Co-authored-by: Brennan Kinney <5098581+polarathene@users.noreply.github.com>
This commit is contained in:
Georg Lauterbach 2022-06-06 09:30:10 +02:00 committed by GitHub
parent 1f3e672018
commit 0010786d18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 34 deletions

View file

@ -2,33 +2,34 @@
title: 'Override the Default Configs | Postfix' title: 'Override the Default Configs | Postfix'
--- ---
The Postfix default configuration can easily be extended by providing a `docker-data/dms/config/postfix-main.cf` in postfix format. [Our default Postfix configuration](https://github.com/docker-mailserver/docker-mailserver/blob/master/target/postfix/main.cf) can easily be extended to add parameters or modify existing ones by providing a `docker-data/dms/config/postfix-main.cf`. This file uses the same format as Postfix `main.cf` does ([See official docs](http://www.postfix.org/postconf.5.html) for all parameters and syntax rules).
This can also be used to add configuration that is not in our default configuration.
For example, one common use of this file is for increasing the default maximum message size: !!! example "Example"
```cf One can easily increase the [backwards-compatibility level](http://www.postfix.org/postconf.5.html#compatibility_level) and set new Postscreen options:
# increase maximum message size
message_size_limit = 52428800 ```cf
``` # increase the compatibility level from 2 (default) to 3
compatibility_level = 3
That specific example is now supported and can be handled by setting `POSTFIX_MESSAGE_SIZE_LIMIT`. # set a threshold value for Spam detection
postscreen_dnsbl_threshold = 4
!!! note ```
[Postfix documentation](http://www.postfix.org/documentation.html) remains the best place to find configuration options.
!!! help "How are your changes applied?"
Each line in the provided file will be loaded into postfix.
The custom configuration you supply is appended to the default configuration located at `/etc/postfix/main.cf`, and then `postconf -nf` is run to remove earlier duplicate entries that have since been replaced. This happens early during container startup before Postfix is started.
In the same way it is possible to add a custom `docker-data/dms/config/postfix-master.cf` file that will override the standard `master.cf`. Each line in the file will be passed to `postconf -P`. The expected format is `<service_name>/<type>/<parameter>`, for example:
---
Similarly, it is possible to add a custom `docker-data/dms/config/postfix-master.cf` file that will override the standard `master.cf`. **Note**: Each line in this file will be passed to `postconf -P`, i.e. **the file is not appended as a whole** to `/etc/postfix/master.cf` like `docker-data/dms/config/postfix-main.cf`! The expected format is `<service_name>/<type>/<parameter>`, for example:
```cf ```cf
# adjust the submission "reject_unlisted_recipient" option
submission/inet/smtpd_reject_unlisted_recipient=no submission/inet/smtpd_reject_unlisted_recipient=no
``` ```
Run `postconf -P` in the container without arguments to see the active master options. !!! attention
!!! note
There should be no space between the parameter and the value. There should be no space between the parameter and the value.
Have a look at the code for more information. Run `postconf -Mf` in the container without arguments to see the active master options.

View file

@ -731,20 +731,15 @@ function _setup_postfix_virtual_transport
function _setup_postfix_override_configuration function _setup_postfix_override_configuration
{ {
_log 'trace' 'Setting up Postfix Override configuration' _log 'debug' 'Overriding / adjusting Postfix configuration with user-supplied values'
if [[ -f /tmp/docker-mailserver/postfix-main.cf ]] if [[ -f /tmp/docker-mailserver/postfix-main.cf ]]
then then
while read -r LINE cat /tmp/docker-mailserver/postfix-main.cf >>/etc/postfix/main.cf
do # do not directly output to 'main.cf' as this causes a read-write-conflict
# all valid postfix options start with a lower case letter postconf -n >/tmp/postfix-main-new.cf 2>/dev/null
# http://www.postfix.org/postconf.5.html mv /tmp/postfix-main-new.cf /etc/postfix/main.cf
if [[ ${LINE} =~ ^[a-z] ]] _log 'trace' "Adjusted '/etc/postfix/main.cf' according to '/tmp/docker-mailserver/postfix-main.cf'"
then
postconf -e "${LINE}"
fi
done < /tmp/docker-mailserver/postfix-main.cf
_log 'trace' "Loaded '/tmp/docker-mailserver/postfix-main.cf'"
else else
_log 'trace' "No extra Postfix settings loaded because optional '/tmp/docker-mailserver/postfix-main.cf' was not provided" _log 'trace' "No extra Postfix settings loaded because optional '/tmp/docker-mailserver/postfix-main.cf' was not provided"
fi fi
@ -758,7 +753,7 @@ function _setup_postfix_override_configuration
postconf -P "${LINE}" postconf -P "${LINE}"
fi fi
done < /tmp/docker-mailserver/postfix-master.cf done < /tmp/docker-mailserver/postfix-master.cf
_log 'trace' "Loaded '/tmp/docker-mailserver/postfix-master.cf'" _log 'trace' "Adjusted '/etc/postfix/master.cf' according to '/tmp/docker-mailserver/postfix-master.cf'"
else else
_log 'trace' "No extra Postfix settings loaded because optional '/tmp/docker-mailserver/postfix-master.cf' was not provided" _log 'trace' "No extra Postfix settings loaded because optional '/tmp/docker-mailserver/postfix-master.cf' was not provided"
fi fi