Lokaler Mailserver mit Dovecot 2.4.x

Da ich auf jedem Endgerät (vulgo: Laptop, PC) einen dezidierten Mailserver laufen habe, um dort meine Mailmassen einfach zu speichern, brachte mich die Umstellung von Dovecot 2.3.x auf 2.4.x ein wenig in Not und dovecot23 wollte ich nicht installieren.

Hier nun die Doku für einen rein lokalen Mailserver – ausdrücklich ohne jede Verbindung ins Netz!

Neu benötigt wird ein Benutzer vmail:

useradd vmail
usermod -a -G vmail dovecot
usermod -a -G vmail dirk
chown -R dirk:vmail /home/dirk/Maildir/
chmod -R 775 /home/dirk/Maildir

Die Konfigurationsdateien für den lokalen Mailserver sehen nunmehr so aus:

# /etc/pam.d/dovecot
#%PAM-1.0
auth include system-auth
account include system-auth
session include system-auth
password include system-auth

# /etc/dovecot/dovecot.conf
# Dovecot config and storage versions
dovecot_config_version = 2.4.0
dovecot_storage_version = 2.4.0
ssl = no
auth_mechanisms = plain login
auth_allow_cleartext = yes
auth_username_format = %{user | username }
userdb passwd {
use_worker = yes
}
passdb pam {
session = yes
service_name = dovecot
}
mail_driver = maildir
mail_path = /home/%{user | username}/Maildir
protocols = imap lmtp
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
mail_gid = vmail
mail_uid = vmail

# /etc/postfix/main.cf
# Postfix main.cf for dovecot 2.4.x
compatibility_level = 2
queue_directory = /var/spool/postfix
command_directory = /usr/bin
daemon_directory = /usr/lib/postfix/bin
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = localhost
mydomain =localdomain 
myorigin = $myhostname
inet_interfaces = loopback-only
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
mynetworks_style = host
alias_maps = lmdb:/etc/postfix/aliases
alias_database = $alias_maps
home_mailbox = Maildir/
mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/bin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix
inet_protocols = ipv4
meta_directory = /etc/postfix
shlib_directory = /usr/lib/postfix

Dann noch eine /etc/postfix/aliases dazu und es sollte passen.

Noble

Ich sammele hier mal, was mir beim Upgrade auf von Ubuntu 22.04 LTS auf Ubuntu 24.04 LTS so auf die Füße fiel. Die Liste wird ergänzt, bis ich meinen letzten Server auf der aktuellen LTS habe.

Upgrade bleibt stehen

Ursächlich hierfür war needrestart. Ein

ps aux | grep dpkg

zeigte

root       17007  0.0  0.3  12252  7204 pts/2    Ss+  09:37   0:00 /usr/bin/dpkg --force-overwrite --status-fd 107 --configure --pending 
root       17008  0.0  0.0   2800  1056 pts/2    S+   09:37   0:00 sh -c -- (test -x /usr/lib/needrestart/dpkg-status && /usr/lib/needrestart/dpkg-status || cat > /dev/null) 
root       17009  0.0  0.0   2800   104 pts/2    S+   09:37   0:00 sh -c -- (test -x /usr/lib/needrestart/dpkg-status && /usr/lib/needrestart/dpkg-status || cat > /dev/null) 
root       17010  0.0  0.0   2800  1116 pts/2    S+   09:37   0:00 /bin/sh /usr/lib/needrestart/dpkg-status 
root       18937  0.0  0.1   6544  2280 pts/1    S+   09:48   0:00 grep --color=auto dpkg

Vermutlich lauerte needrestart auf eine Eingabe, die aber in der Shell mit do-release-upgrade nie erschien. Weiter ging es erst nach einem

kill 17010 # also den Prozess hier: /bin/sh /usr/lib/needrestart/dpkg-status

Also: Von Anfang an zwei Shells auf einem Server offen haben, der gerade do-relase-upgrade laufen hat.

Wireguard & Namensauflösung

Unser Wireguard Server hat einen lokalen unbound für die Namensauflösung – und der wollte nach dem Upgrade nicht mehr starten. Ursächlich hierfür war, dass systemd-resolved den entsprechenden Port bereits belegt hatte – und das, obwohl der Dienst davor eigentlich disabled war. Vermutlich hatte ich das mask vergessen? Wie auch immer: die Konfiguration von unbound für 24.04 ist hier beschrieben.

Apache

Wie üblich muss nach dem Upgrade das PHP Modul für den Apache händisch deaktiviert / aktiviert werden:

a2dismod php8.1
a2enmod php8.3
systemctl restart apache2

Mehrere Seiten im PDF auf ein Blatt

Mehrere Seiten in einem PDF auf ein einzelnes DIN A4 Blatt drucken geht teilweise auch mit Viewern / Editoren wie z.B. Master PDF Editor. Schneller geht es auf der Shell:

pdfjam --nup 2x1 --landscape --a4paper in.pdf --outfile out.pdf

Das Programm pdfjam ist Teil von texlive-binextra.

Ada & Zangemann

… ist nun als Film über den Peertube der FSFE zu haben. Das macht die etwas holzschnittartige Geschichte nicht besser, ist aber trotzdem ganz lieb gemacht.

Seitenleistengedöhns

Nachdem ich gerade 10 Minuten brauchte, um eine aus Versehen in Libreoffice gelöste rechte Seitenleiste wieder anzudocken:

Wer den Desktop unter KDE über mehrere Monitore hinweg liegen hat, kann wohl so oft Strg Umschalten F10 drücken, wie er will – es passiert schlicht gar nix. Also darauf achten, dass

  1. nur noch ein Libreoffice Fenster offen ist (also alle Dialogfenster geschlossen sind)
  2. für den Andockvorgang das Hauptfenster von Libreoffce auf den Monitor legen, von dem aus es nicht „weiter nach rechts“ geht.

Und schwupp sitzt sie nach Strg Umschalten F10 wieder am rechten Rand, wo sie auch hingehört.

Fettwanne

Nachdem die Fettwanne für unseren Kontaktgrill verschwand … ein schneller Nachdruck derselben. OpenSCAD Datei dazu hat es hier:

https://codeberg.org/dowel/fettwanne

Dreamweaver Gefrickel

Falls das gerade auch jemandem so geht, dass der Dreamweaver unter XFCE, Cinnamon oder Gnome einige Felder bei der Konfiguration nicht vollständig anzeigt: viele Optionen aus den nicht angezeigten Feldern können in die user.reg direkt eingetragen werden.

Ein

sudo updatedb
locate user.reg

sollte den lokalen Pfad aufzeigen. Dann ist ein wenig Rumprobieren und auch Raten angesagt. Im konkreten Fall verschluckte die Dreamweaver-GUI das Feld Passiven FTP verwenden und alle folgenden Felder:

"PASV FTP"=dword:00000001

Die 00000001 setzt den Haken; lauter Nullen zeigen an, dass der Haken nicht gesetzt ist.

Schaut man mit einem KDE drauf, ist zu sehen, dass dieser Umweg wirkte:
Screenshot aus Dreamweaver Site-Definition, Karteikarte Erweitert, Rubrik Remote-Informationen.

Nicht schön so – aber es funktioniert.

Besuch

Endlich ist das Kreuz wieder in einem Zustand, dass ich mir Hoffnungen auf Löcher machen könnte. Gestern also nach „meinem Loch“ gesucht und nach vielen Schrammen auch gefunden. Der Wald sieht verheerend aus: viel Totholz, lauter umgestürzte Bäume.

Vollgummi

Vollgumireifen

Der Velix E-Kick 20 hatte hier Dauerplatten – also musste ein Vollgummireifen her. Unsicherheit bestand, welcher denn passen würde – und das tat der hier [ebay.de]:

Monuary E Scooter Reifen 8 1/2 X2, Vollgummireifen 50/75-6.1, 8,5 Zoll

Die Montage überließen wir unserem Autoschraub, der ganz hübsch fluchte. Gut in der Pfanne warm machen half aber. Das Fahrverhalten hat sich erst mal nicht groß geändert; ein klein wenig härter vielleicht.

LDAPs via HAProxy

Situation: LDAPs Verbindungen sollen via pfSense und dem dortigen HAProxy an den LD-Server ge-proxied werden, um mehr Kontrolle über die zulässigen LDAP-Hosts zu haben als mit plain LD-Server.

Problem: Obwohl die LDAPs Verbindung vom Client via pfSense und HAProxy zum lokalen LDAP-Server klappt, geht keine Antwort vom LDAP-Server nach Außen.

Lösung: TLS1.3 verbieten – mit TLS1.2 funktioniert es. Das Feld im Frontend nennt sich „Advanced ssl options“ und braucht den folgenden Eintrag:

no-tlsv13

Dann ist es im übrigen auch auf der pfSense einstellbar, dass es Wurst sein soll, dass das LDAP-Zertifikat auf dem LD-Server self signed ist. Hauptsache das Zertifikat in Richtung Internet ist sauber (z.B. Let’sEncrypt-Certificate mit ACME Plugin für pfSense), damit sich z.B. ein Moodle verbinden kann.

Tools zum Debuggen: tcpdump, Apache directory Studio