postfix
This commit is contained in:
parent
e0587508a7
commit
12e996003e
28
postfix/Dockerfile
Normal file
28
postfix/Dockerfile
Normal file
@ -0,0 +1,28 @@
|
||||
FROM alpine:3
|
||||
|
||||
RUN apk add --update --no-cache \
|
||||
bash \
|
||||
nano \
|
||||
curl \
|
||||
postfix \
|
||||
postfix-ldap \
|
||||
postfix-pcre \
|
||||
postfix-policyd-spf-perl \
|
||||
ca-certificates
|
||||
|
||||
RUN update-ca-certificates && \
|
||||
mkdir /cert && \
|
||||
chown 100:101 /cert
|
||||
|
||||
COPY --chown=root:root start.sh config /
|
||||
|
||||
VOLUME /config
|
||||
VOLUME /cert
|
||||
VOLUME /var/spool/postfix
|
||||
|
||||
EXPOSE 10025/tcp
|
||||
EXPOSE 10465/tcp
|
||||
|
||||
USER root
|
||||
|
||||
CMD ["/start.sh"]
|
0
postfix/config/header_checks.pcre
Normal file
0
postfix/config/header_checks.pcre
Normal file
9
postfix/config/ldap_aliases.cf
Normal file
9
postfix/config/ldap_aliases.cf
Normal file
@ -0,0 +1,9 @@
|
||||
server_host = ldaps://ldap.balsillie.net:636
|
||||
version = 3
|
||||
bind = yes
|
||||
bind_dn = cn=bind,dc=balsillie,dc=net
|
||||
bind_pw = $ldap_bind_pw
|
||||
search_base = ou=users,dc=balsillie,dc=net
|
||||
scope = sub
|
||||
query_filter = (&(objectClass=mailAccount)(mailEnabled=TRUE)(|(mailAlias=%s)(mail=%s)))
|
||||
result_attribute = mail
|
9
postfix/config/ldap_senders.cf
Normal file
9
postfix/config/ldap_senders.cf
Normal file
@ -0,0 +1,9 @@
|
||||
server_host = ldaps://ldap.balsillie.net:636
|
||||
version = 3
|
||||
bind = yes
|
||||
bind_dn = cn=bind,dc=balsillie,dc=net
|
||||
bind_pw = $ldap_bind_pw
|
||||
search_base = ou=users,dc=balsillie,dc=net
|
||||
scope = sub
|
||||
query_filter = (&(objectClass=mailAccount)(mailEnabled=TRUE)(|(mailAlias=%s)(mail=%s)))
|
||||
result_attribute = mail,uid
|
111
postfix/config/main.cf
Normal file
111
postfix/config/main.cf
Normal file
@ -0,0 +1,111 @@
|
||||
myhostname = smtp.balsillie.net
|
||||
mydomain = balsillie.net
|
||||
myorigin = $mydomain
|
||||
mynetworks = 127.0.0.0/8 10.64.0.0/12 10.96.10.0/24
|
||||
mydestination = $myhostname localhost
|
||||
|
||||
biff = no
|
||||
bounce_queue_lifetime = 1d
|
||||
broken_sasl_auth_clients = no
|
||||
compatibility_level = 3.6
|
||||
|
||||
header_checks = pcre:/config/header_checks.pcre
|
||||
|
||||
inet_interfaces = all
|
||||
inet_protocols = ipv4
|
||||
|
||||
lmtp_tls_loglevel = 1
|
||||
lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
|
||||
lmtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
|
||||
lmtp_tls_security_level = none
|
||||
lmtp_tls_wrappermode = no
|
||||
lmtp_use_tls = no
|
||||
|
||||
local_recipient_maps =
|
||||
local_transport = local:$myhostname
|
||||
|
||||
mailbox_size_limit = 51200000
|
||||
maillog_file = /dev/stdout
|
||||
maximal_queue_lifetime = 1d
|
||||
message_size_limit = 51200000
|
||||
mime_header_checks = $header_checks
|
||||
|
||||
# Milters
|
||||
milter_protocol = 6
|
||||
milter_default_action = accept
|
||||
dkim_milter = inet:127.0.0.1:8891
|
||||
# dmarc_milter = inet:localhost:8893
|
||||
# smtpd_milters = $dkim_milter,$dmarc_milter
|
||||
smtpd_milters = $dkim_milter
|
||||
non_smtpd_milters = $dkim_milter
|
||||
|
||||
postscreen_access_list =
|
||||
postscreen_denylist_action = drop
|
||||
postscreen_dnsbl_action = enforce
|
||||
postscreen_dnsbl_allowlist_threshold = -1
|
||||
postscreen_dnsbl_sites =
|
||||
zen.spamhaus.org=127.0.1.[2..254]*3,
|
||||
ix.dnsbl.manitu.net*3,
|
||||
bl.spamcop.net,
|
||||
b.barracudacentral.org,
|
||||
safe.dnsbl.sorbs.net,
|
||||
swl.spamhaus.org*-10,
|
||||
postscreen_dnsbl_threshold = 3
|
||||
postscreen_greet_action = ignore
|
||||
postscreen_greet_banner =
|
||||
postscreen_upstream_proxy_protocol =
|
||||
|
||||
# proxy_interfaces = x.x.x.x # Set with postconf during startup
|
||||
recipient_delimiter = +
|
||||
relay_domains =
|
||||
relayhost =
|
||||
sender_dependent_relayhost_maps =
|
||||
|
||||
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
|
||||
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
|
||||
smtp_tls_note_starttls_offer = yes
|
||||
smtp_tls_policy_maps =
|
||||
smtp_tls_protocols = !SSLv2, !SSLv3
|
||||
smtp_tls_security_level = dane
|
||||
|
||||
smtpd_banner = $myhostname ESMTP
|
||||
|
||||
# SASL - SMTPS sasl settings specified in master.cf
|
||||
|
||||
smtpd_sasl_auth_enable = no
|
||||
|
||||
# SMTPD restrictions
|
||||
|
||||
smtpd_helo_required = yes
|
||||
smtpd_delay_reject = yes
|
||||
smtpd_client_restrictions = reject_unknown_client_hostname
|
||||
smtpd_helo_restrictions = reject_unknown_helo_hostname, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname
|
||||
smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain
|
||||
smtpd_relay_restrictions = permit_auth_destination, reject_unauth_destination
|
||||
smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unlisted_recipient
|
||||
smtpd_data_restrictions = reject_unauth_pipelining, reject_multi_recipient_bounce
|
||||
|
||||
# client , reject_rbl_client zen.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org
|
||||
# helo , reject_rhsbl_helo dbl.spamhaus.org
|
||||
# sender , reject_rhsbl_sender dbl.spamhaus.org
|
||||
|
||||
smtpd_tls_cert_file=/cert/tls.crt
|
||||
smtpd_tls_key_file=/cert/tls.key
|
||||
smtpd_tls_dh1024_param_file = /cert/dhparams.pem
|
||||
smtpd_tls_loglevel = 1
|
||||
smtpd_tls_mandatory_ciphers = medium
|
||||
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
|
||||
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
|
||||
smtpd_tls_security_level = encrypt
|
||||
|
||||
tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
|
||||
tls_preempt_cipherlist = no
|
||||
tls_ssl_options = NO_COMPRESSION
|
||||
|
||||
unverified_recipient_reject_code = 577
|
||||
|
||||
virtual_alias_maps = ldap:/config/ldap_users.cf
|
||||
virtual_mailbox_base =
|
||||
virtual_mailbox_domains = $mydomain
|
||||
virtual_mailbox_maps = $virtual_alias_maps
|
||||
virtual_transport = lmtp:unix:private/dovecot-lmtp
|
63
postfix/config/master.cf
Normal file
63
postfix/config/master.cf
Normal file
@ -0,0 +1,63 @@
|
||||
# ======================================================================================
|
||||
# service type private unpriv chroot wakeup maxproc command + args
|
||||
# ======================================================================================
|
||||
|
||||
# Inputs
|
||||
10025 inet n - n - 1 postscreen
|
||||
10465 inet n - n - 1 smtpd
|
||||
-o smtpd_tls_wrappermode=yes
|
||||
-o smtpd_sasl_auth_enable=yes
|
||||
-o smtpd_sasl_authenticated_header=yes
|
||||
-o smtpd_sasl_local_domain=$mydomain
|
||||
-o smtpd_sasl_type=dovecot
|
||||
-o smtpd_sasl_path=inet:127.0.0.1:12345
|
||||
-o smtpd_sasl_security_options=noanonymous,noplaintext
|
||||
-o smtpd_sasl_tls_security_options=noanonymous
|
||||
-o smtpd_sender_login_maps=ldap:/config/ldap_senders.cf
|
||||
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
|
||||
-o smtpd_helo_restrictions=
|
||||
-o smtpd_sender_restrictions=reject_non_fqdn_sender,reject_sender_login_mismatch
|
||||
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
|
||||
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient
|
||||
-o smtpd_data_restrictions=
|
||||
-o smtpd_tls_auth_only=yes
|
||||
-o cleanup_service_name=scleanup
|
||||
smtpd pass - - n - - smtpd
|
||||
|
||||
# Processing
|
||||
qmgr unix n - n 300 1 qmgr
|
||||
bounce unix - - n - 0 bounce
|
||||
defer unix - - n - 0 bounce
|
||||
verify unix - - n - 1 verify
|
||||
pickup unix n - n 60 1 pickup
|
||||
-o receive_override_options=no_header_body_checks
|
||||
|
||||
# Outputs
|
||||
error unix - - n - - error
|
||||
retry unix - - n - - error
|
||||
discard unix - - n - - discard
|
||||
relay unix - - n - - smtp
|
||||
rewrite unix - - n - - trivial-rewrite
|
||||
local unix - n n - - local
|
||||
lmtp unix - - n - - lmtp
|
||||
smtp unix - - n - - smtp
|
||||
scache unix - - n - 1 scache
|
||||
|
||||
# Logging
|
||||
postlog unix-dgram n - n - 1 postlogd
|
||||
anvil unix - - n - 1 anvil
|
||||
|
||||
# Helpers
|
||||
dnsblog unix - - n - 0 dnsblog
|
||||
tlsproxy unix - - n - 0 tlsproxy
|
||||
trace unix - - n - 0 bounce
|
||||
tlsmgr unix - - n 1000? 1 tlsmgr
|
||||
showq unix n - n - - showq
|
||||
cleanup unix n - n - 0 cleanup
|
||||
scleanup unix n - - - 0 cleanup
|
||||
-o header_checks=pcre:/config/sender_header_checks.pcre
|
||||
|
||||
# Other
|
||||
flush unix n - n 1000? 0 flush
|
||||
proxymap unix - - n - - proxymap
|
||||
proxywrite unix - - n - 1 proxymap
|
10
postfix/config/sender_header_checks.pcre
Normal file
10
postfix/config/sender_header_checks.pcre
Normal file
@ -0,0 +1,10 @@
|
||||
/^\s*Received:.*with ESMTPSA/ IGNORE
|
||||
/^\s*Received:.*amavisd-new/ IGNORE
|
||||
/^\s*X-Originating-IP:/ IGNORE
|
||||
/^\s*X-Mailer:/ IGNORE
|
||||
/^\s*Mime-Version: 1.0.*/ REPLACE Mime-Version: 1.0
|
||||
/^\s*User-Agent/ IGNORE
|
||||
/^\s*X-Enigmail/ IGNORE
|
||||
/^\s*X-Mailer/ IGNORE
|
||||
/^\s*X-Originating-IP/ IGNORE
|
||||
/^\s*Received: from.*127.0.0.1/ IGNORE
|
26
postfix/start.sh
Executable file
26
postfix/start.sh
Executable file
@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
# --- 2023 Old ---
|
||||
|
||||
# # Add ENV vars to postfix config
|
||||
# # postconf -e -c /config myhostname=$HOSTNAME
|
||||
|
||||
# /usr/sbin/postconf compatibility_level=3.6
|
||||
|
||||
# # Upgrade postfix config
|
||||
# postfix -c /config upgrade-configuration
|
||||
|
||||
# # Config check
|
||||
# postfix -c /config check
|
||||
|
||||
# # Start postfix
|
||||
# /usr/sbin/postfix -vvvv -c /config start-fg
|
||||
|
||||
# --- 2024-12-18 ---
|
||||
|
||||
IP=$(curl https://ipv4.icanhazip.com)
|
||||
/usr/sbin/postconf proxy_interfaces="$IP"
|
||||
/usr/sbin/postconf ldap_bind_pw="$LDAP_BIND_PW"
|
||||
|
||||
# Start postfix
|
||||
/usr/sbin/postfix -v -c /config start-fg
|
Loading…
x
Reference in New Issue
Block a user