Initial commit
This commit is contained in:
16
Dockerfile
Normal file
16
Dockerfile
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
|
WORKDIR /opt/postfix
|
||||||
|
|
||||||
|
RUN apt update && \
|
||||||
|
apt upgrade -y && \
|
||||||
|
apt install -y postfix curl
|
||||||
|
|
||||||
|
RUN curl -SsfL -o /usr/bin/gomplate "https://github.com/hairyhenderson/gomplate/releases/download/v3.11.5/gomplate_linux-amd64-slim" && \
|
||||||
|
chmod 755 /usr/bin/gomplate
|
||||||
|
|
||||||
|
COPY entrypoint.sh .
|
||||||
|
COPY config ./config
|
||||||
|
|
||||||
|
EXPOSE 25/tcp 465/tcp 587/tcp
|
||||||
|
CMD ["/bin/bash", "entrypoint.sh"]
|
||||||
68
README.md
68
README.md
@@ -1,3 +1,67 @@
|
|||||||
# postfix-docker
|
# Building the image
|
||||||
|
```sh
|
||||||
|
docker build --rm -t postfix:latest .
|
||||||
|
```
|
||||||
|
|
||||||
Lightweight Dockerized Postfix setup for easy deployment and mail relay configuration.
|
# Running the image
|
||||||
|
```sh
|
||||||
|
docker run -it --rm --name test -p 25:25 -p 587:587 postfix:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
These values are default and can be overriden by declaring environment variable with naother value.
|
||||||
|
```sh
|
||||||
|
# The text that follows the 220 status code in the SMTP greeting banner.
|
||||||
|
POSTFIX_SMTP_BANNER="$myhostname ESMTP $mail_name ($mail_version)"
|
||||||
|
|
||||||
|
# Enable submission running on port 587.
|
||||||
|
POSTFIX_SUBMISSION_ENABLED="yes"
|
||||||
|
|
||||||
|
# Enable standard non encrypted SMTP running on port 25.
|
||||||
|
POSTFIX_SMTP_ENABLED="yes"
|
||||||
|
|
||||||
|
# Enable SSL encrypted SMTPS running on port 465.
|
||||||
|
POSTFIX_SMTPS_ENABLED="yes"
|
||||||
|
|
||||||
|
# Opportunistic TLS: announce STARTTLS support to remote SMTP clients, but do not require that clients use TLS encryption.
|
||||||
|
POSTFIX_SMTPD_USE_TLS="no"
|
||||||
|
|
||||||
|
# When TLS encryption is optional in the Postfix SMTP server, do not announce or accept SASL authentication over unencrypted connections.
|
||||||
|
POSTFIX_SMTPD_TLS_AUTH_ONLY="yes"
|
||||||
|
|
||||||
|
# File with the Postfix SMTP server RSA certificate in PEM format.
|
||||||
|
POSTFIX_SMTPD_TLS_CERT_FILE="/etc/ssl/certs/ssl-cert-snakeoil.pem"
|
||||||
|
|
||||||
|
# File with the Postfix SMTP server RSA private key in PEM format.
|
||||||
|
POSTFIX_SMTPD_TLS_KEY_FILE="/etc/ssl/private/ssl-cert-snakeoil.key"
|
||||||
|
|
||||||
|
# The SMTP TLS security level for the Postfix SMTP server.
|
||||||
|
POSTFIX_SMTPD_TLS_SECURITY_LEVEL="may"
|
||||||
|
|
||||||
|
# Directory with PEM format Certification Authority certificates.
|
||||||
|
POSTFIX_SMTP_TLS_CAPATH="/etc/ssl/certs"
|
||||||
|
|
||||||
|
# The default SMTP TLS security level for the Postfix SMTP client.
|
||||||
|
POSTFIX_SMTP_TLS_SECURITY_LEVEL="encrypt"
|
||||||
|
|
||||||
|
# The internet hostname of this mail system.
|
||||||
|
POSTFIX_MYHOSTNAME="$(hostname --fqdn)"
|
||||||
|
|
||||||
|
# The internet hostname of this mail system.
|
||||||
|
POSTFIX_MYDOMAIN="$(hostname --fqdn)"
|
||||||
|
|
||||||
|
# The list of "trusted" remote SMTP clients that have more privileges than "strangers".
|
||||||
|
POSTFIX_MYNETWORKS="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8"
|
||||||
|
|
||||||
|
# The local network interface addresses that this mail system receives mail on.
|
||||||
|
POSTFIX_INET_INTERFACES="all"
|
||||||
|
|
||||||
|
# The Internet protocols Postfix will attempt to use when making or accepting connections.
|
||||||
|
POSTFIX_INET_PROTOCOLS="all"
|
||||||
|
|
||||||
|
# A list of Milter (mail filter) applications for new mail that arrives via the Postfix smtpd server.
|
||||||
|
POSTFIX_SMTPD_MILTERS="opendkim:port"
|
||||||
|
|
||||||
|
# A list of Milter (mail filter) applications for new mail that does not arrive via the Postfix smtpd server.
|
||||||
|
POSTFIX_NON_SMTPD_MILTERS="opendkim:port"
|
||||||
|
```
|
||||||
41
config/main.cf.tpl
Normal file
41
config/main.cf.tpl
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
biff = no
|
||||||
|
maillog_file = /dev/stdout
|
||||||
|
debug_peer_level = 1
|
||||||
|
compatibility_level=3.6
|
||||||
|
append_dot_mydomain = no
|
||||||
|
readme_directory = no
|
||||||
|
mailbox_command = procmail -a "$EXTENSION"
|
||||||
|
mailbox_size_limit = 0
|
||||||
|
recipient_delimiter = +
|
||||||
|
|
||||||
|
smtpd_banner = {{ .Env.POSTFIX_SMTPD_BANNER }}
|
||||||
|
|
||||||
|
smtpd_relay_restrictions = permit_mynetworks defer_unauth_destination
|
||||||
|
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
|
||||||
|
|
||||||
|
smtpd_use_tls = {{ .Env.POSTFIX_SMTPD_USE_TLS }}
|
||||||
|
smtpd_tls_auth_only = {{ .Env.POSTFIX_SMTPD_TLS_AUTH_ONLY }}
|
||||||
|
smtpd_tls_cert_file={{ .Env.POSTFIX_SMTPD_TLS_CERT_FILE }}
|
||||||
|
smtpd_tls_key_file={{ .Env.POSTFIX_SMTPD_TLS_KEY_FILE }}
|
||||||
|
|
||||||
|
smtp_tls_CApath={{ .Env.POSTFIX_SMTP_TLS_CAPATH }}
|
||||||
|
smtp_tls_security_level = {{ .Env.POSTFIX_SMTP_TLS_SECURITY_LEVEL }}
|
||||||
|
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||||
|
|
||||||
|
myhostname = {{ .Env.POSTFIX_MYHOSTNAME }}
|
||||||
|
mydomain = {{ .Env.POSTFIX_MYDOMAIN }}
|
||||||
|
mynetworks = {{ .Env.POSTFIX_MYNETWORKS }}
|
||||||
|
mydestination = $myhostname, localhost.$mydomain $mydomain
|
||||||
|
|
||||||
|
inet_interfaces = {{ .Env.POSTFIX_INET_INTERFACES }}
|
||||||
|
inet_protocols = {{ .Env.POSTFIX_INET_PROTOCOLS }}
|
||||||
|
|
||||||
|
milter_protocol = 6
|
||||||
|
milter_default_action = accept
|
||||||
|
|
||||||
|
{{- if .Env.POSTFIX_SMTPD_MILTERS }}
|
||||||
|
smtpd_milters = inet:{{ .Env.POSTFIX_SMTPD_MILTERS }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Env.POSTFIX_NON_SMTPD_MILTERS }}
|
||||||
|
non_smtpd_milters = inet:{{ .Env.POSTFIX_NON_SMTPD_MILTERS }}
|
||||||
|
{{- end }}
|
||||||
64
config/master.cf.tpl
Normal file
64
config/master.cf.tpl
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# ==========================================================================
|
||||||
|
# service type private unpriv chroot wakeup maxproc command + args
|
||||||
|
# (yes) (yes) (no) (never) (100)
|
||||||
|
# ==========================================================================
|
||||||
|
|
||||||
|
# SMTP configuration.
|
||||||
|
{{ if eq .Env.POSTFIX_SMTP_ENABLED "yes" }}
|
||||||
|
smtp inet n - y - - smtpd
|
||||||
|
-o syslog_name=postfix/smtp
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
# Submission configuration.
|
||||||
|
{{ if eq .Env.POSTFIX_SUBMISSION_ENABLED "yes" }}
|
||||||
|
submission inet n - y - - smtpd
|
||||||
|
-o syslog_name=postfix/submission
|
||||||
|
-o smtpd_tls_security_level=encrypt
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
# SSL encrypted SMTP configuration.
|
||||||
|
{{ if eq .Env.POSTFIX_SMTPS_ENABLED "yes" }}
|
||||||
|
smtps inet n - y - - smtpd
|
||||||
|
-o syslog_name=postfix/smtps
|
||||||
|
-o smtpd_tls_wrappermode=yes
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
# Other internal services.
|
||||||
|
pickup unix n - y 60 1 pickup
|
||||||
|
cleanup unix n - y - 0 cleanup
|
||||||
|
qmgr unix n - n 300 1 qmgr
|
||||||
|
tlsmgr unix - - y 1000? 1 tlsmgr
|
||||||
|
rewrite unix - - y - - trivial-rewrite
|
||||||
|
bounce unix - - y - 0 bounce
|
||||||
|
defer unix - - y - 0 bounce
|
||||||
|
trace unix - - y - 0 bounce
|
||||||
|
verify unix - - y - 1 verify
|
||||||
|
flush unix n - y 1000? 0 flush
|
||||||
|
proxymap unix - - n - - proxymap
|
||||||
|
proxywrite unix - - n - 1 proxymap
|
||||||
|
smtp unix - - y - - smtp
|
||||||
|
relay unix - - y - - smtp
|
||||||
|
-o smtp_helo_timeout=5 -o smtp_connect_timeout=5
|
||||||
|
showq unix n - y - - showq
|
||||||
|
error unix - - y - - error
|
||||||
|
retry unix - - y - - error
|
||||||
|
discard unix - - y - - discard
|
||||||
|
local unix - n n - - local
|
||||||
|
virtual unix - n n - - virtual
|
||||||
|
lmtp unix - - y - - lmtp
|
||||||
|
anvil unix - - y - 1 anvil
|
||||||
|
scache unix - - y - 1 scache
|
||||||
|
maildrop unix - n n - - pipe
|
||||||
|
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
|
||||||
|
uucp unix - n n - - pipe
|
||||||
|
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
|
||||||
|
ifmail unix - n n - - pipe
|
||||||
|
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
|
||||||
|
bsmtp unix - n n - - pipe
|
||||||
|
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
|
||||||
|
scalemail-backend unix - n n - 2 pipe
|
||||||
|
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
|
||||||
|
mailman unix - n n - - pipe
|
||||||
|
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
|
||||||
|
${nexthop} ${user}
|
||||||
|
postlog unix-dgram n - n - 1 postlogd
|
||||||
43
entrypoint.sh
Normal file
43
entrypoint.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Misc default variables.
|
||||||
|
export POSTFIX_SMTPD_BANNER=${POSTFIX_SMTPD_BANNER:-$myhostname ESMTP $mail_name ($mail_version)}
|
||||||
|
|
||||||
|
# Service default variables.
|
||||||
|
export POSTFIX_SUBMISSION_ENABLED=${POSTFIX_SUBMISSION_ENABLED:-yes}
|
||||||
|
export POSTFIX_SMTP_ENABLED=${POSTFIX_SMTP_ENABLED:-yes}
|
||||||
|
export POSTFIX_SMTPS_ENABLED=${POSTFIX_SMTPS_ENABLED:-yes}
|
||||||
|
|
||||||
|
# TLS default variables.
|
||||||
|
export POSTFIX_SMTPD_USE_TLS=${POSTFIX_SMTPD_USE_TLS:-no}
|
||||||
|
export POSTFIX_SMTPD_TLS_AUTH_ONLY=${POSTFIX_SMTPD_TLS_AUTH_ONLY:-yes}
|
||||||
|
export POSTFIX_SMTPD_TLS_CERT_FILE=${POSTFIX_SMTPD_TLS_CERT_FILE:-/etc/ssl/certs/ssl-cert-snakeoil.pem}
|
||||||
|
export POSTFIX_SMTPD_TLS_KEY_FILE=${POSTFIX_SMTPD_TLS_KEY_FILE:-/etc/ssl/private/ssl-cert-snakeoil.key}
|
||||||
|
export POSTFIX_SMTPD_TLS_SECURITY_LEVEL=${POSTFIX_SMTPD_TLS_SECURITY_LEVEL:-may}
|
||||||
|
|
||||||
|
export POSTFIX_SMTP_TLS_CAPATH=${POSTFIX_SMTP_TLS_CAPATH:-/etc/ssl/certs}
|
||||||
|
export POSTFIX_SMTP_TLS_SECURITY_LEVEL=${POSTFIX_SMTP_TLS_SECURITY_LEVEL:-encrypt}
|
||||||
|
|
||||||
|
# Hostname default variables.
|
||||||
|
export POSTFIX_MYHOSTNAME=${POSTFIX_MYHOSTNAME:-$(hostname --fqdn)}
|
||||||
|
export POSTFIX_MYDOMAIN=${POSTFIX_MYDOMAIN:-$(hostname --fqdn)}
|
||||||
|
|
||||||
|
# Allowed networks default variables.
|
||||||
|
export POSTFIX_MYNETWORKS=${POSTFIX_MYNETWORKS:-127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8}
|
||||||
|
|
||||||
|
# Network configuration default variables.
|
||||||
|
export POSTFIX_INET_INTERFACES=${POSTFIX_INET_INTERFACES:-all}
|
||||||
|
export POSTFIX_INET_PROTOCOLS=${POSTFIX_INET_PROTOCOLS:-all}
|
||||||
|
|
||||||
|
# DKIM milters default variables.
|
||||||
|
export POSTFIX_SMTPD_MILTERS=${POSTFIX_SMTPD_MILTERS:-}
|
||||||
|
export POSTFIX_NON_SMTPD_MILTERS=${POSTFIX_NON_SMTPD_MILTERS:-}
|
||||||
|
|
||||||
|
# Configuration templates.
|
||||||
|
gomplate -f config/main.cf.tpl > /etc/postfix/main.cf
|
||||||
|
gomplate -f config/master.cf.tpl > /etc/postfix/master.cf
|
||||||
|
|
||||||
|
# Move resolv conf to postfix spool in order to make postfix DNS lookups working.
|
||||||
|
cat /etc/resolv.conf > /var/spool/postfix/etc/resolv.conf
|
||||||
|
|
||||||
|
postfix start-fg
|
||||||
Reference in New Issue
Block a user