Debian: How to build & install a recent OpenSMTPd release on Buster with LibreSSL
NB: The information in this post is outdated and dates back to Debian Buster when a recent OpenSMTPD version with proper feature support wasn’t included in the distribution. Nowadays, this has changed and installing is as simple as sudo apt install opensmtpd -y
.
Build & Install LibreSSL
apt update
apt install git nano wget
nano /etc/apt/sources.list
Make sure deb-src is enabled
deb-src http://deb.debian.org/debian buster main
apt update
apt build-dep openssl
git clone https://github.com/libressl-portable/portable.git libressl
cd libressl
git tag
git checkout v3.4.1
sh autogen.sh
./configure --prefix="/opt/libressl"
make -j4
make install
echo '/opt/libressl/lib' | tee /etc/ld.so.conf.d/libressl.conf
ldconfig
cd ~
Build & Install OpenSMTPD
apt build-dep opensmtpd
wget https://www.opensmtpd.org/archives/opensmtpd-6.8.0p2.tar.gz
tar xf opensmtpd-*.tar.gz
cd opensmtpd-6.8.0p2
LDFLAGS="-L/opt/libressl/lib" CFLAGS="-I/opt/libressl/include" ./configure \
--with-gnu-ld \
--with-auth-pam \
--with-libssl="/opt/libressl/lib" \
--with-path-CAfile="/etc/ssl/certs/ca-certificates.crt" \
--with-path-empty="/var/lib/opensmtpd/empty" \
--sysconfdir="/etc/smtpd" \
--sbindir="/usr/sbin" \
--libexecdir="/usr/lib/opensmtpd" \
--with-path-mbox="/var/mail" \
--with-table-db \
--with-user-smtpd="smtpd" \
--with-user-queue="smtpq" \
--with-group-queue="smtpq"
make -j4
make install
cd /usr/sbin
ln -s /usr/sbin/smtpctl /usr/sbin/sendmail
ln -s /usr/sbin/smtpctl /usr/sbin/makemap
ln -s /usr/sbin/smtpctl /usr/sbin/newaliases
ln -s /usr/sbin/smtpctl /usr/sbin/mailq
cat <<EOF >> /etc/aliases
# Enter mail aliases below in the format described by aliases(5)
# RFC 2142 NETWORK OPERATIONS MAILBOX NAMES
abuse: root
noc: root
security: root
# RFC 2142 SUPPORT MAILBOX NAMES FOR SPECIFIC INTERNET SERVICES
postmaster: root
hostmaster: root
# usenet: root
# news: usenet
webmaster: root
www: webmaster
# uucp: root
ftp: root
EOF
mkdir -p /var/lib/opensmtpd/empty
for name in smtpd smtpq; do
id -g ${name} > /dev/null 2>&1 || addgroup --system ${name}
done
# Based on postfix.postinst:
id smtpd > /dev/null 2>&1 || \
adduser --system --home /var/lib/opensmtpd/empty \
--no-create-home --disabled-password \
--gecos "OpenSMTP Daemon" \
--ingroup smtpd smtpd
id smtpq > /dev/null 2>&1 || \
adduser --system --home /var/lib/opensmtpd/empty \
--no-create-home --disabled-password \
--gecos "OpenSMTPd queue user" \
--ingroup smtpq smtpq
systemctl edit --full --force smtpd
[Unit]
Description=OpenSMTPD SMTP server
Documentation=man:smtpd(8)
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/smtpd
ExecStop=/bin/kill -15 $MAINPID
[Install]
WantedBy=multi-user.target
systemctl enable smtpd
systemctl start smtpd
systemctl status smtpd
This will show that smtpd failed to start. We need to enter some configuration first.
cat <<EOF > /etc/smtpd/smtpd.conf
# $OpenBSD: smtpd.conf,v 1.10 2018/05/24 11:40:17 gilles Exp $
# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.
table aliases file:/etc/aliases
# To accept external mail, replace with: listen on all
#
listen on localhost
action "local" mbox alias <aliases>
action "relay" relay
# Uncomment the following to accept external mail for domain "example.org"
#
# match from any for domain "example.org" action "local"
match for local action "local"
match from local for any action "relay"
EOF
systemctl restart smtpd
systemctl status smtpd
Refer to the OpenSMTPd man pages https://opensmtpd.org/manual.html for more information on how to configure the software to match your needs.
Updates
- 2020-06-27: Update article to latest software versions.
- 2020-12-22: Update article to latest software versions.
- 2021-02-04: Update article to latest software versions.
- 2021-05-27: Update article to latest software versions.
- 2021-10-17: Update libressl 3.3.3 -> 3.4.1.