1
0
forked from ports/contrib

postfix-lmdb: new port (secure mailer)

This commit is contained in:
Steffen Nurpmeso 2021-02-11 00:43:00 +01:00
parent ab6dd0f103
commit e9b6964e9f
13 changed files with 863 additions and 0 deletions

180
postfix-lmdb/.footprint Normal file
View File

@ -0,0 +1,180 @@
drwxr-xr-x root/root etc/
drwxr-xr-x root/root etc/postfix-lmdb/
-rw-r--r-- root/root etc/postfix-lmdb/CRUX-README.txt
-rw-r--r-- root/root etc/postfix-lmdb/LICENSE
-rw-r--r-- root/root etc/postfix-lmdb/TLS_LICENSE
-rw-r--r-- root/root etc/postfix-lmdb/access
-rw-r--r-- root/root etc/postfix-lmdb/aliases
-rw-r--r-- root/root etc/postfix-lmdb/bounce.cf.default
-rw-r--r-- root/root etc/postfix-lmdb/canonical
-rw-r--r-- root/root etc/postfix-lmdb/generic
-rw-r--r-- root/root etc/postfix-lmdb/header_checks
-rw-r--r-- root/root etc/postfix-lmdb/main.cf
-rw-r--r-- root/root etc/postfix-lmdb/main.cf.default
-rw-r--r-- root/root etc/postfix-lmdb/main.cf.proto
-rw-r--r-- root/root etc/postfix-lmdb/makedefs.out
-rw-r--r-- root/root etc/postfix-lmdb/master.cf
-rw-r--r-- root/root etc/postfix-lmdb/master.cf.proto
-rw-r--r-- root/root etc/postfix-lmdb/postfix-files
drwxr-xr-x root/root etc/postfix-lmdb/postfix-files.d/
-rw-r--r-- root/root etc/postfix-lmdb/relay_clientcerts
-rw-r--r-- root/root etc/postfix-lmdb/relocated
-rw-r--r-- root/root etc/postfix-lmdb/sender_restrict
-rw-r--r-- root/root etc/postfix-lmdb/transport
-rw-r--r-- root/root etc/postfix-lmdb/virtual
drwxr-xr-x root/root etc/rc.d/
-rwxr-xr-x root/root etc/rc.d/postfix-lmdb
drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/bin/
lrwxrwxrwx root/root usr/bin/mailq -> ../../usr/sbin/sendmail
lrwxrwxrwx root/root usr/bin/newaliases -> ../../usr/sbin/sendmail
drwxr-xr-x root/root usr/lib/
drwxr-xr-x root/root usr/lib/postfix-lmdb/
-rwxr-xr-x root/root usr/lib/postfix-lmdb/anvil
-rwxr-xr-x root/root usr/lib/postfix-lmdb/bounce
-rwxr-xr-x root/root usr/lib/postfix-lmdb/cleanup
-rwxr-xr-x root/root usr/lib/postfix-lmdb/discard
-rwxr-xr-x root/root usr/lib/postfix-lmdb/dnsblog
-rwxr-xr-x root/root usr/lib/postfix-lmdb/error
-rwxr-xr-x root/root usr/lib/postfix-lmdb/flush
-rwxr-xr-x root/root usr/lib/postfix-lmdb/libpostfix-dns.so
-rwxr-xr-x root/root usr/lib/postfix-lmdb/libpostfix-global.so
-rwxr-xr-x root/root usr/lib/postfix-lmdb/libpostfix-master.so
-rwxr-xr-x root/root usr/lib/postfix-lmdb/libpostfix-tls.so
-rwxr-xr-x root/root usr/lib/postfix-lmdb/libpostfix-util.so
-rwxr-xr-x root/root usr/lib/postfix-lmdb/lmtp
-rwxr-xr-x root/root usr/lib/postfix-lmdb/local
-rwxr-xr-x root/root usr/lib/postfix-lmdb/master
-rwxr-xr-x root/root usr/lib/postfix-lmdb/nqmgr
-rwxr-xr-x root/root usr/lib/postfix-lmdb/oqmgr
-rwxr-xr-x root/root usr/lib/postfix-lmdb/pickup
-rwxr-xr-x root/root usr/lib/postfix-lmdb/pipe
-rwxr-xr-x root/root usr/lib/postfix-lmdb/post-install
-rwxr-xr-x root/root usr/lib/postfix-lmdb/postfix-script
-rwxr-xr-x root/root usr/lib/postfix-lmdb/postfix-tls-script
-rwxr-xr-x root/root usr/lib/postfix-lmdb/postfix-wrapper
-rwxr-xr-x root/root usr/lib/postfix-lmdb/postlogd
-rwxr-xr-x root/root usr/lib/postfix-lmdb/postmulti-script
-rwxr-xr-x root/root usr/lib/postfix-lmdb/postscreen
-rwxr-xr-x root/root usr/lib/postfix-lmdb/proxymap
-rwxr-xr-x root/root usr/lib/postfix-lmdb/qmgr
-rwxr-xr-x root/root usr/lib/postfix-lmdb/qmqpd
-rwxr-xr-x root/root usr/lib/postfix-lmdb/scache
-rwxr-xr-x root/root usr/lib/postfix-lmdb/showq
-rwxr-xr-x root/root usr/lib/postfix-lmdb/smtp
-rwxr-xr-x root/root usr/lib/postfix-lmdb/smtpd
-rwxr-xr-x root/root usr/lib/postfix-lmdb/spawn
-rwxr-xr-x root/root usr/lib/postfix-lmdb/tlsmgr
-rwxr-xr-x root/root usr/lib/postfix-lmdb/tlsproxy
-rwxr-xr-x root/root usr/lib/postfix-lmdb/trivial-rewrite
-rwxr-xr-x root/root usr/lib/postfix-lmdb/verify
-rwxr-xr-x root/root usr/lib/postfix-lmdb/virtual
drwxr-xr-x root/root usr/sbin/
-rwxr-xr-x root/root usr/sbin/postalias
-rwxr-xr-x root/root usr/sbin/postcat
-rwxr-xr-x root/root usr/sbin/postconf
-rwxr-xr-x root/root usr/sbin/postdrop
-rwxr-xr-x root/root usr/sbin/postfix
-rwxr-xr-x root/root usr/sbin/postkick
-rwxr-xr-x root/root usr/sbin/postlock
-rwxr-xr-x root/root usr/sbin/postlog
-rwxr-xr-x root/root usr/sbin/postmap
-rwxr-xr-x root/root usr/sbin/postmulti
-rwxr-xr-x root/root usr/sbin/postqueue
-rwxr-xr-x root/root usr/sbin/postsuper
-rwxr-xr-x root/root usr/sbin/sendmail
drwxr-xr-x root/root usr/share/
drwxr-xr-x root/root usr/share/man/
drwxr-xr-x root/root usr/share/man/man1/
-rw-r--r-- root/root usr/share/man/man1/mailq.1.gz
-rw-r--r-- root/root usr/share/man/man1/newaliases.1.gz
-rw-r--r-- root/root usr/share/man/man1/postalias.1.gz
-rw-r--r-- root/root usr/share/man/man1/postcat.1.gz
-rw-r--r-- root/root usr/share/man/man1/postconf.1.gz
-rw-r--r-- root/root usr/share/man/man1/postdrop.1.gz
-rw-r--r-- root/root usr/share/man/man1/postfix-tls.1.gz
-rw-r--r-- root/root usr/share/man/man1/postfix.1.gz
-rw-r--r-- root/root usr/share/man/man1/postkick.1.gz
-rw-r--r-- root/root usr/share/man/man1/postlock.1.gz
-rw-r--r-- root/root usr/share/man/man1/postlog.1.gz
-rw-r--r-- root/root usr/share/man/man1/postmap.1.gz
-rw-r--r-- root/root usr/share/man/man1/postmulti.1.gz
-rw-r--r-- root/root usr/share/man/man1/postqueue.1.gz
-rw-r--r-- root/root usr/share/man/man1/postsuper.1.gz
-rw-r--r-- root/root usr/share/man/man1/sendmail.1.gz
drwxr-xr-x root/root usr/share/man/man5/
-rw-r--r-- root/root usr/share/man/man5/access.5.gz
-rw-r--r-- root/root usr/share/man/man5/aliases.5.gz
-rw-r--r-- root/root usr/share/man/man5/body_checks.5.gz
-rw-r--r-- root/root usr/share/man/man5/bounce.5.gz
-rw-r--r-- root/root usr/share/man/man5/canonical.5.gz
-rw-r--r-- root/root usr/share/man/man5/cidr_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/generic.5.gz
-rw-r--r-- root/root usr/share/man/man5/header_checks.5.gz
-rw-r--r-- root/root usr/share/man/man5/ldap_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/lmdb_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/master.5.gz
-rw-r--r-- root/root usr/share/man/man5/memcache_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/mysql_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/nisplus_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/pcre_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/pgsql_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/postconf.5.gz
-rw-r--r-- root/root usr/share/man/man5/postfix-wrapper.5.gz
-rw-r--r-- root/root usr/share/man/man5/regexp_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/relocated.5.gz
-rw-r--r-- root/root usr/share/man/man5/socketmap_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/sqlite_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/tcp_table.5.gz
-rw-r--r-- root/root usr/share/man/man5/transport.5.gz
-rw-r--r-- root/root usr/share/man/man5/virtual.5.gz
drwxr-xr-x root/root usr/share/man/man8/
-rw-r--r-- root/root usr/share/man/man8/anvil.8.gz
-rw-r--r-- root/root usr/share/man/man8/bounce.8.gz
-rw-r--r-- root/root usr/share/man/man8/cleanup.8.gz
-rw-r--r-- root/root usr/share/man/man8/defer.8.gz
-rw-r--r-- root/root usr/share/man/man8/discard.8.gz
-rw-r--r-- root/root usr/share/man/man8/dnsblog.8.gz
-rw-r--r-- root/root usr/share/man/man8/error.8.gz
-rw-r--r-- root/root usr/share/man/man8/flush.8.gz
-rw-r--r-- root/root usr/share/man/man8/lmtp.8.gz
-rw-r--r-- root/root usr/share/man/man8/local.8.gz
-rw-r--r-- root/root usr/share/man/man8/master.8.gz
-rw-r--r-- root/root usr/share/man/man8/oqmgr.8.gz
-rw-r--r-- root/root usr/share/man/man8/pickup.8.gz
-rw-r--r-- root/root usr/share/man/man8/pipe.8.gz
-rw-r--r-- root/root usr/share/man/man8/postlogd.8.gz
-rw-r--r-- root/root usr/share/man/man8/postscreen.8.gz
-rw-r--r-- root/root usr/share/man/man8/proxymap.8.gz
-rw-r--r-- root/root usr/share/man/man8/qmgr.8.gz
-rw-r--r-- root/root usr/share/man/man8/qmqpd.8.gz
-rw-r--r-- root/root usr/share/man/man8/scache.8.gz
-rw-r--r-- root/root usr/share/man/man8/showq.8.gz
-rw-r--r-- root/root usr/share/man/man8/smtp.8.gz
-rw-r--r-- root/root usr/share/man/man8/smtpd.8.gz
-rw-r--r-- root/root usr/share/man/man8/spawn.8.gz
-rw-r--r-- root/root usr/share/man/man8/tlsmgr.8.gz
-rw-r--r-- root/root usr/share/man/man8/tlsproxy.8.gz
-rw-r--r-- root/root usr/share/man/man8/trace.8.gz
-rw-r--r-- root/root usr/share/man/man8/trivial-rewrite.8.gz
-rw-r--r-- root/root usr/share/man/man8/verify.8.gz
-rw-r--r-- root/root usr/share/man/man8/virtual.8.gz
drwxr-xr-x root/root var/
drwxr-xr-x root/root var/lib/
drwx------ root/root var/lib/postfix-lmdb/
drwxr-xr-x root/root var/spool/
drwxr-xr-x root/root var/spool/postfix-lmdb/
drwx------ root/root var/spool/postfix-lmdb/active/
drwx------ root/root var/spool/postfix-lmdb/bounce/
drwx------ root/root var/spool/postfix-lmdb/corrupt/
drwx------ root/root var/spool/postfix-lmdb/defer/
drwx------ root/root var/spool/postfix-lmdb/deferred/
drwx------ root/root var/spool/postfix-lmdb/flush/
drwx------ root/root var/spool/postfix-lmdb/hold/
drwx------ root/root var/spool/postfix-lmdb/incoming/
drwx-wx--- root/root var/spool/postfix-lmdb/maildrop/
drwxr-xr-x root/root var/spool/postfix-lmdb/pid/
drwx------ root/root var/spool/postfix-lmdb/private/
drwx--x--- root/root var/spool/postfix-lmdb/public/
drwx------ root/root var/spool/postfix-lmdb/saved/
drwx------ root/root var/spool/postfix-lmdb/trace/

11
postfix-lmdb/.md5sum Normal file
View File

@ -0,0 +1,11 @@
24bfa6cc02af20ff1306dbdc9e9ccd72 README
991eec1333efecf3e5c5785a35f63f93 aliases
356deb2ed0a246dc67417d501384b29d lmdb-default.patch
6b5b42413a938f5e1c036a29919fc6ba main-addon.cf
349f82d9bce5df2e820edde59f0df385 master.patch
3a0783dfe97cd85620ec63dc3155c138 post-install
a4d1b2df03a500cf8f9759d5fca1c1f6 postfix-3.5.9.tar.gz
3c58426d21611dd4eb1f93e924b349a1 postfix-install.patch
74ca32d588624b357889e6d783c3aa11 postfix.rc
9e5990ceca5cd7969fe1297e02fd966d relay_clientcerts
e701ec7f1075d63c1b0cf930cce8ff9e sender_restrict

97
postfix-lmdb/Pkgfile Normal file
View File

@ -0,0 +1,97 @@
# Description: Secure and fast drop-in replacement for Sendmail (MTA)
# URL: https://www.postfix.org/
# Maintainer: Steffen Nurpmeso, steffen at sdaoden dot eu
# Depends on: libpcre lmdb openssl
rname=postfix
name=postfix-lmdb
version=3.5.9
release=1
source=(
https://de.${rname}.org/ftpmirror/official/${rname}-${version}.tar.gz
lmdb-default.patch postfix-install.patch post-install
${rname}.rc
aliases README relay_clientcerts sender_restrict
main-addon.cf master.patch
)
isinst() { pkginfo -i | grep -qE "^${1}[[:space:]]"; }
build() {
cd ${rname}-${version}
patch -p1 < "${SRC}"/lmdb-default.patch
patch -p1 < "${SRC}"/postfix-install.patch
cca='-DNO_DB -DNO_EAI -DNO_NIS -DNO_NISPLUS '
cca=${cca}' -DHAS_LMDB -DDEF_DB_TYPE=\"lmdb\" -DHAS_PCRE -DUSE_TLS'
aux=
if isinst dovecot; then # TODO UNTESTED!
cca=${cca}' -DUSE_SASL_AUTH -DDEF_SASL_SERVER=dovecot'
fi
if isinst cyrus-sasl; then # TODO UNTESTED!
cca=${cca}' -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl'
aux=${aux}' -lsasl2'
fi
make tidy
make pie=yes shared=yes \
DEBUG= \
CCARGS="${cca}" \
OPT="${CFLAGS}" \
AUXLIBS_LMDB=-llmdb \
AUXLIBS_PCRE=-lpcre \
AUXLIBS="-lssl -lcrypto" \
${aux} \
install_root="${PKG}" \
command_directory=/usr/sbin \
config_directory=/etc/${name} \
daemon_directory=/usr/lib/${name} \
data_directory=/var/lib/${name} \
html_directory=no \
mail_spool_directory=/var/spool/mail \
manpage_directory=/usr/share/man \
meta_directory=/etc/${name} \
queue_directory=/var/spool/${name} \
readme_directory=no \
shlib_directory=/usr/lib/${name} \
makefiles
make OPT="$CFLAGS"
make \
install_root="${PKG}" \
command_directory=/usr/sbin \
config_directory=/etc/${name} \
daemon_directory=/usr/lib/${name} \
data_directory=/var/lib/${name} \
html_directory=no \
mail_spool_directory=/var/spool/mail \
manpage_directory=/usr/share/man \
meta_directory=/etc/${name} \
queue_directory=/var/spool/${name} \
readme_directory=no \
shlib_directory=/usr/lib/${name} \
non-interactive-package
install -D -m 0755 "${SRC}"/${rname}.rc "${PKG}"/etc/rc.d/${name}
install -m 0644 "${SRC}"/aliases "${PKG}"/etc/${name}/aliases
install -m 0644 "${SRC}"/README "${PKG}"/etc/${name}/CRUX-README.txt
install -m 0644 "${SRC}"/relay_clientcerts \
"${PKG}"/etc/${name}/relay_clientcerts
install -m 0644 "${SRC}"/sender_restrict \
"${PKG}"/etc/${name}/sender_restrict
sed -E -i'' \
-e 's/^(setgid_group.+)$/#\1/' \
-e 's/^(inet_protocols.+)$/#\1/' \
"${PKG}"/etc/${name}/main.cf
cat "${SRC}"/main-addon.cf >> "${PKG}"/etc/${name}/main.cf
(
cd "${PKG}"/etc/${name}
patch -p0 < "${SRC}"/master.patch
)
}
# s-sh-mode

104
postfix-lmdb/README Normal file
View File

@ -0,0 +1,104 @@
The CRUX postfix package
========================
* Abstract
* TLS
* SmartHost
* Relay
* DNS black lists
Abstract
--------
- Fully configured for "sailing in the wind".
- Only listens to SMTP by default, but.
- A few knobs can be turned here and there for more, see below.
Remember to run "postmap FILE" after you have updated table files,
and "newaliases" or "postalias FILE" after changing alias files.
TLS
---
tlsproxy(8) for connection tracking is running by default.
To be identifieable generate a private key with certificate, either via
openssl genpkey -algorithm ed25519 -out prv.pem
#openssl pkey -in prv.pem -pubout -out pub.pem
openssl req -x509 -key prv.pem -out crt.pem
or
openssl req -x509 -nodes -newkey ed25519 -keyout prv.pem -out crt.pem
Also create DH parameters
openssl dhparam -out dh2048.pem 2048
Move all these to a save place. Do
cat prv.pem crt.pem > /etc/postfix-lmdb/key_and_cert.pem
cp dh2048.pem /etc/postfix-lmdb/dh2048.pem
Make them root:root and 0600.
Edit main.cf: uncomment all lines marked #TLS.
Edit master.cf and ditto.
Run "/etc/rc.d/postfix-lmdb reload" (or restart).
SmartHost
---------
For laptops or hosts without their own hostname using a smart host which
does the real delivery is usually the thing.
Edit main.cf and uncomment and edit lines marked #SMART.
Run "/etc/rc.d/postfix-lmdb reload" (or restart).
Authentication to the smart host is not covered by the default
configuration, with TLS as above however it may be possible to go
via client certificates shall the relayhost allow this, see below.
I.e., just reuse key_and_cert.pem "also" for this.
Note it seems wise to go the $smtp_tls_fingerprint_cert_match approach to
verify $relayhost, because the $smtp_tls_CAfile way requires a full chain, to
the best of my knowledge.
You need to have cyrus-sasl installed otherwise (usually), and also
dovecot that drive the SASL authentication. The default configuration
contains the necessary entries, you should only need to adjust and
uncomment it. Just search #SMART.
Relay
-----
The default configuration only allows mails that address $mydestination
aka the local host, or shall be relayed to $mynetworks (set to the
IPv4 private address range).
Not covering SASL authentification of clients, the default configuration
ships support for client certificate fingerprint matching, in order to
allow clients which authenticate themselves to relay mail to anywhere.
Edit main.cf and uncomment and edit lines marked #RELAY.
Run "/etc/rc.d/postfix-lmdb reload" (or restart).
Put the fingerprints in /etc/postfix-lmdb/relay_clientcerts as shown.
Calculate them via
openssl x509 -noout -sha256 -fingerprint < CERT.pem
or
openssl x509 -outform DER -in CERT.pem | openssl dgst -sha256 -c
It seems to support public-key-only fingerprinting also.
You need to have cyrus-sasl installed otherwise (usually), and also
dovecot that drive the SASL authentication. The default configuration
contains the necessary entries, you should only need to adjust and
uncomment it. See above for SmartHost.
DNS black lists
---------------
Edit main.cf and uncomment and edit lines marked #DNSBL.
Run "/etc/rc.d/postfix-lmdb reload" (or restart).
# s-ts-mode

96
postfix-lmdb/aliases Normal file
View File

@ -0,0 +1,96 @@
#
# Sample aliases file. Install in the location as specified by the
# output from the command "postconf alias_maps". Typical path names
# are /etc/aliases or /etc/mail/aliases.
#
# >>>>>>>>>> The program "newaliases" must be run after
# >> NOTE >> this file is updated for any changes to
# >>>>>>>>>> show through to Postfix.
#
# Person who should get root's mail. Don't receive mail as root!
#root: you
# Basic system aliases -- these MUST be present
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts
bin: root
daemon: root
named: root
nobody: root
uucp: root
www: root
ftp-bugs: root
postfix: root
# Put your local aliases here.
# Well-known aliases
manager: root
dumper: root
operator: root
abuse: postmaster
# trap decode to catch security attacks
decode: root
# ALIASES(5) ALIASES(5)
# o An alias definition has the form
#
# name: value1, value2, ...
#
# o Empty lines and whitespace-only lines are ignored,
# as are lines whose first non-whitespace character
# is a `#'.
#
# o A logical line starts with non-whitespace text. A
# line that starts with whitespace continues a logi-
# cal line.
#
# The name is a local address (no domain part). Use double
# quotes when the name contains any special characters such
# as whitespace, `#', `:', or `@'. The name is folded to
# lowercase, in order to make database lookups case insensi-
# tive.
# The value contains one or more of the following:
#
# address
# Mail is forwarded to address, which is compatible
# with the RFC 822 standard.
#
# /file/name
# Mail is appended to /file/name. See local(8) for
# details of delivery to file. Delivery is not lim-
# ited to regular files. For example, to dispose of
# unwanted mail, deflect it to /dev/null.
#
# |command
# Mail is piped into command. Commands that contain
# special characters, such as whitespace, should be
# enclosed between double quotes. See local(8) for
# details of delivery to command.
#
# When the command fails, a limited amount of command
# output is mailed back to the sender. The file
# /usr/include/sysexits.h defines the expected exit
# status codes. For example, use "|exit 67" to simu-
# late a "user unknown" error, and "|exit 0" to
# implement an expensive black hole.
#
# :include:/file/name
# Mail is sent to the destinations listed in the
# named file. Lines in :include: files have the same
# syntax as the right-hand side of alias entries.
#
# A destination can be any destination that is
# described in this manual page. However, delivery to
# "|command" and /file/name is disallowed by default.
# To enable, edit the allow_mail_to_commands and
# allow_mail_to_files configuration parameters.
# SEE ALSO
# local(8), local delivery agent
# newaliases(1), create/update alias database
# postalias(1), create/update alias database
# postconf(5), configuration parameters

View File

@ -0,0 +1,27 @@
Upstream: Not applicable
Reason: Make LMDB the default configuration
Author: Duncan Bellamy <dunk@denkimushi.com>
diff --git a/src/global/mail_params.h b/src/global/mail_params.h
index a6119f1..9639c60 100644
--- a/src/global/mail_params.h
+++ b/src/global/mail_params.h
@@ -2826,7 +2826,7 @@ extern int var_vrfy_pend_limit;
extern char *var_verify_service;
#define VAR_VERIFY_MAP "address_verify_map"
-#define DEF_VERIFY_MAP "btree:$data_directory/verify_cache"
+#define DEF_VERIFY_MAP "lmdb:$data_directory/verify_cache"
extern char *var_verify_map;
#define VAR_VERIFY_POS_EXP "address_verify_positive_expire_time"
@@ -3594,7 +3594,7 @@ extern char *var_multi_cntrl_cmds;
* postscreen(8)
*/
#define VAR_PSC_CACHE_MAP "postscreen_cache_map"
-#define DEF_PSC_CACHE_MAP "btree:$data_directory/postscreen_cache"
+#define DEF_PSC_CACHE_MAP "lmdb:$data_directory/postscreen_cache"
extern char *var_psc_cache_map;
#define VAR_SMTPD_SERVICE "smtpd_service_name"

224
postfix-lmdb/main-addon.cf Normal file
View File

@ -0,0 +1,224 @@
### CRUX-ADDON
default_privs = _postfix_xlocal
setgid_group = _postfix_queue
mail_spool_directory = /var/spool/mail
alias_database = lmdb:/etc/postfix-lmdb/aliases
alias_maps = $alias_database
# all # or ipv4, ipv6 or ipv4 or ipv6
inet_protocols = all
#myhostname = arch-2020 # default: gethostname
#mydomain = localdomain # default: $myhostname less one component
#myorigin = $mydomain
# , lists.$myhostname
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks_style = host
# One class A, 16 class B, 256 class C networks; loopback
# Dunno how to specify IPv6 link-local and site-local
mynetworks = 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.0/8
#inet_interfaces = localhost
#inet_interfaces = $myhostname, localhost
inet_interfaces = all
#debug_peer_list = 10.0.0.1
smtputf8_enable = no
disable_vrfy_command = yes
default_verp_delimiters = -=
verp_delimiter_filter = -=
recipient_delimiter = +
# Only localhost for mailing-lists etc.; maybe $mynetworks?
smtpd_authorized_verp_clients = 127.0.0.1
default_process_limit = 8
anvil_rate_time_unit = 60s
anvil_status_update_time = 3600s
#n_flow_delay = 1s
body_checks_size_limit = 102400
bounce_size_limit = 50000
#header_size_limit = 102400
mailbox_size_limit = 100000000
message_size_limit = 442000
# Calculate:
# openssl x509 -noout -sha256 -fingerprint < CERT.pem
# OR
# openssl x509 -outform DER -in CERT.pem | openssl dgst -sha256 -c
# Put the hash only in relay_clientcerts, right hand value is not inspected:
# FINGERPRINT-HERE whatever value
# Search #RELAY for this, uncomment
#RELAY relay_clientcerts = lmdb:/etc/postfix-lmdb/relay_clientcerts
# relay_domains <-> reject_unauth_destination,permit_auth_destination
# eg lmdb:/etc/postfix-lmdb/transport
transport_maps =
relay_domains = $mynetworks,$transport_maps
# Clients which are allowed to invoke commands
smtpd_client_restrictions =
# permit_tls_clientcerts,
# permit_sasl_authenticated,
permit_mynetworks,
# in case you want reject DNS blacklists rather than greylist them
# with gross, exchange sleep (maybe) and uncomment the lines below
sleep 1,
#reject_rbl_client cbl.abuseat.org,
#reject_rbl_client sbl.spamhaus.org,
#DNSBL reject_rbl_client zen.spamhaus.org,
#DNSBL reject_rbl_client dnsbl.sorbs.net,
#reject_rbl_client bl.spamcop.net,
#reject_rbl_client list.dsbl.org,
reject_unauth_pipelining,
#reject
permit
smtpd_data_restrictions =
reject_unauth_pipelining,
permit
smtpd_helo_restrictions =
#RELAY permit_tls_clientcerts,
# permit_sasl_authenticated,
permit_mynetworks,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname
# RCPT TO checks, spam blocking policy
# Match fast for $mynetworks and authenticated clients.
smtpd_recipient_restrictions =
#RELAY permit_tls_clientcerts,
# permit_sasl_authenticated,
permit_mynetworks,
reject_unknown_sender_domain,
reject_unknown_reverse_client_hostname,
reject_unknown_recipient_domain,
reject_unauth_destination,
# better not reject_unverified_sender,
#check_policy_service inet:127.0.0.1:5525,
permit
# RCPT TO checks, relay policy
# Local clients and authenticated clients may specify any destination domain
smtpd_relay_restrictions =
#RELAY permit_tls_clientcerts,
# permit_sasl_authenticated,
permit_mynetworks,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
#permit_auth_destination,
#reject
reject_unauth_destination,
permit
# MAIL FROM Checks
smtpd_sender_restrictions =
#RELAY permit_tls_clientcerts,
# permit_sasl_authenticated,
permit_mynetworks,
# Eg: qq.com reject
lmdb:/etc/postfix-lmdb/sender_restrict,
reject_unknown_sender_domain,
permit
# i would turn that on..
#smtpd_delay_reject = no
smtpd_helo_required = yes
smtpd_hard_error_limit = 1
smtpd_soft_error_limit = 1
smtpd_per_record_deadline = yes
smtpd_timeout = 15s
smtpd_starttls_timeout = 15s
smtpd_junk_command_limit = 5
smtpd_log_access_permit_actions = 1
smtpd_client_connection_rate_limit = 20
smtpd_client_connection_count_limit = 2
# TLS see CRUX-README.txt for this
tls_append_default_CA = no
# That one is for client certificates!
#smtpd_tls_CAfile = /etc/dovecot/cert.pem
#TLS smtpd_tls_chain_files = /etc/postfix-lmdb/key_and_cert.pem
#TLS smtpd_tls_dh1024_param_file = /etc/postfix-lmdb/dh2048.pem
#TLS smtpd_tls_security_level = may
#TLS comment out next; see master.cf, too!
smtpd_tls_security_level = none
#RELAY smtpd_tls_ask_ccert = yes
smtpd_tls_ask_ccert = no
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_fingerprint_digest = sha256
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = $smtpd_tls_mandatory_protocols
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_mandatory_exclude_ciphers =
aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH,
EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDB3-SHA, KRB5-DES, CBC3-SHA
smtpd_tls_ciphers = $smtpd_tls_mandatory_ciphers
smtpd_tls_exclude_ciphers = $smtpd_tls_mandatory_exclude_ciphers
smtpd_tls_connection_reuse = yes
#TLS smtp_tls_security_level = $smtpd_tls_security_level
#TLS comment out next
smtp_tls_security_level = may
#smtp_tls_wrappermode = yes
smtp_tls_fingerprint_digest = $smtpd_tls_fingerprint_digest
smtp_tls_mandatory_protocols = $smtpd_tls_mandatory_protocols
smtp_tls_protocols = $smtpd_tls_protocols
smtp_tls_mandatory_ciphers = $smtpd_tls_mandatory_ciphers
smtp_tls_mandatory_exclude_ciphers = $smtpd_tls_mandatory_exclude_ciphers
smtp_tls_ciphers = $smtpd_tls_ciphers
smtp_tls_exclude_ciphers = $smtpd_tls_exclude_ciphers
smtp_tls_connection_reuse = $smtpd_tls_connection_reuse
smtp_tls_session_cache_database = lmdb:/var/lib/postfix-lmdb/smtp_scache
smtp_tls_session_cache_timeout = 3600s
#smtpd_sasl_auth_enable = yes
smtpd_sasl_auth_enable = no
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
#smtp_sasl_auth_enable = $smtpd_sasl_auth_enable
#smtp_sasl_type = $smtpd_sasl_type
#smtp_sasl_path = $smtpd_sasl_path
#smtp_sasl_mechanism_filter = !external
#smtp_sasl_security_options = $smtpd_sasl_security_options
#smtp_sasl_tls_security_options = $smtpd_sasl_tls_security_options
#smtp_sasl_mechanism_filter = plain, login
# For laptops etc, rely on smarthost to do real delivery.
# One or more destinations in the form of a domain name, hostname,
# hostname:port, [hostname]:port, [hostaddress] or [hostaddress]:port,
# separated by comma or whitespace. The form [hostname] turns off MX lookups
#SMART relayhost = [HOST]:submissions
#SMART smtp_tls_wrappermode = yes
#SMART smtp_tls_chain_files = $smtpd_tls_chain_files
#SMART smtp_tls_security_level = verify
# This requires a full chain, otherwise look around verify_depth
#SMART smtp_tls_CAfile = /etc/ssl/cert.pem
#SMART therefore OR (better, maybe)
#SMART smtp_tls_security_level = fingerprint
#SMART smtp_tls_fingerprint_cert_match = FINGERPRINT
# The following is not tested, really, and may not work with default config
#SMART disable_dns_lookups = yes
#SMART Authentication like that not tried, this from postfix SASL_README:
#smtp_sasl_auth_enable = yes
#smtp_sasl_tls_security_options = noanonymous
#smtp_sasl_password_maps = lmdb:/etc/postfix-lmdb/sasl_passwd
# /etc/postfix-lmdb/sasl_passwd:
# # destination credentials
# #user1@example.com username1:password1
# #user2@example.net username2:password2
# [mail.isp.example] username:password
# # Alternative form:
# # [mail.isp.example]:submission username:password
#SMART Even sender-specific, uncomment the user1 user2 entries above then
# sender_dependent_relayhost_maps = lmdb:/etc/postfix/sender_relay
# /etc/postfix/sender_relay:
# # Per-sender provider; see also /etc/postfix/sasl_passwd.
# user1@example.com [mail.example.com]:submission
# user2@example.net [mail.example.net]

16
postfix-lmdb/master.patch Normal file
View File

@ -0,0 +1,16 @@
--- master.cf 2021-02-10 01:28:29.091526626 +0100
+++ master.cf.new 2021-02-10 01:30:19.998198603 +0100
@@ -10,6 +10,13 @@
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
+#TLS -o smtpd_tls_security_level=none
+#TLS -o smtpd_sasl_auth_enable=no
+#TLS submission inet n - n - - smtpd
+#TLS -o smtpd_tls_security_level=encrypt
+#TLS submissions inet n - n - - smtpd
+#TLS -o smtpd_tls_wrappermode=yes
+tlsproxy unix - - n - 0 tlsproxy
#smtp inet n - n - 1 postscreen
#smtpd pass - - n - - smtpd
#dnsblog unix - - n - 0 dnsblog

55
postfix-lmdb/post-install Normal file
View File

@ -0,0 +1,55 @@
#!/bin/sh -
name=postfix-lmdb
# owner
usr=postfix
usrgrp=${usr}
# group for mail submission and queue
queuegrp=_postfix_queue
# Default rights used by the local delivery agent for delivery
# to external file, used in absence of a recipient user context.
# DO NOT SPECIFY A PRIVILEGED USER OR THE POSTFIX OWNER.
defusr=_postfix_xlocal
defgrp=${defusr}
getent group mail >/dev/null || groupadd -r mail
getent group ${usrgrp} >/dev/null || groupadd -r ${usrgrp}
getent passwd ${usr} >/dev/null 2>&1 || {
useradd -r -g ${usrgrp} -d /var/spool/${usr} -s /bin/false ${usr}
passwd -l ${usr}
}
getent group ${queuegrp} >/dev/null || groupadd -r ${queuegrp}
getent group ${defgrp} >/dev/null || groupadd -r ${defgrp}
getent passwd ${defusr} >/dev/null 2>&1 || {
useradd -r -g ${defgrp} -d /var/spool/mail -s /sbin/nologin ${defusr}
passwd -l ${defusr}
}
p_i() {
/usr/lib/${name}/post-install \
install_root= \
command_directory=/usr/sbin \
config_directory=/etc/${name} \
daemon_directory=/usr/lib/${name} \
data_directory=/var/lib/${name} \
html_directory=no \
mail_spool_directory=/var/spool/mail \
manpage_directory=/usr/share/man \
meta_directory=/etc/${name} \
queue_directory=/var/spool/${name} \
readme_directory=no \
shlib_directory=/usr/lib/${name} \
"${@}"
}
p_i create-missing
p_i upgrade-permissions
/usr/sbin/postalias /etc/${name}/aliases
/usr/sbin/postmap lmdb:/etc/${name}/sender_restrict
/usr/sbin/postmap lmdb:/etc/${name}/relay_clientcerts

View File

@ -0,0 +1,11 @@
--- a/postfix-install
+++ b/postfix-install
@@ -832,7 +832,7 @@
# the wrong place when Postfix is being upgraded.
case "$mail_version" in
-"") mail_version="`bin/postconf -dhx mail_version`" || exit 1
+"") mail_version="`bin/postconf -c $CONFIG_DIRECTORY -dhx mail_version`" || exit 1
esac
# Undo MAIL_VERSION expansion at the end of a parameter value. If

38
postfix-lmdb/postfix.rc Executable file
View File

@ -0,0 +1,38 @@
#!/bin/sh
#@ /etc/rc.d/postfix: start/stop postfix daemon
PROG=/usr/sbin/postfix
OPTS=
case "${1}" in
check)
exec ${PROG} ${OPTS} check
;;
start)
exec ${PROG} ${OPTS} start
;;
stop)
exec ${PROG} ${OPTS} stop
;;
restart)
"${0}" stop
exec "${0}" start
;;
reload)
exec ${PROG} ${OPTS} reload
;;
abort)
exec ${PROG} ${OPTS} abort
;;
flush)
exec ${PROG} ${OPTS} flush
;;
status)
exec ${PROG} ${OPTS} status
;;
*)
echo "usage: ${0} check|start|stop|restart|reload|abort|flush|status"
;;
esac
# s-sh-mode

View File

@ -0,0 +1 @@
# FINGERPRINT any value

View File

@ -0,0 +1,3 @@
# See access(5) for format
qq.com reject