Saslauthd funktioniert nicht zuverlässig

Hallo zusammen,

wir haben seit einiger Zeit Probleme mit saslauthd im Zusammenspiel mit der SMTP-Authentifizierung.

Dabei scheint sich saslauthd irgendwie aufzuhängen, obwohl der Daemon und das Log keine Probleme anzeigen. Das einzige Indiz liefert /var/log/mail.log:

Dec  6 16:56:14 ucs02 postfix/smtpd[23627]: warning: SASL authentication failure: cannot connect to saslauthd server: Connection refused
Dec  6 16:56:14 ucs02 postfix/smtpd[23627]: warning: SASL authentication failure: Password verification failed

Den Workaround die saslauthd/Threads auf 0 zu setzen haben wir bereits getestet. Leider ohne Erfolg. Ich habe hier im Forum zum Thema jetzt schon viel gefunden und gelesen, aber mir scheint es als wäre das noch ein nicht vollständig gelöstes Thema.

Für uns ist es momentan etwas unglücklich, da auf diesem System eigentlich schon knapp hundert User arbeiten sollten. Aber in diesem Zustand lässt sich der alte Mailserver nicht ablösen.

Mir wurde vom Support nochmal bestätigt, was ich schon vermutet habe. Aktuell gibt keine andere Lösung als den saslauthd neuzustarten, falls Probleme auftreten. Das Problem gibt es seit 2018, aber das scheint mir ein Upstream-Problem zu sein, bei dem Univention nicht viel tun kann.

Ich behelfe mir in der Zwischenzeit mit einem Script über Cron das /var/log/mail.log checkt und bei Bedarf saslauthd.service neustartet.

Falls wer Interesse oder Verbesserungsvorschläge hat:

#!/bin/bash

# set variables
log="logger $0:"
failString="SASL authentication failure: cannot connect to saslauthd server: Connection refused"
logFile=/var/log/mail.log
statusFile=/tmp/logErrStatus
lockFile=/tmp/restartDaemonFromLog.lock

#check if script is already running
if [ -e $lockFile ]; then
    $log "restart script for saslauthd already running. Exiting ..."
    exit
else
    touch $lockFile
fi

#check if counter can be saved in $statusFile
if [[ ! -f "$statusFile" ]]; then
    touch $statusFile
fi

#count errors in log
countErr=$(grep -i "$failString" $logFile | wc -l)

#read errors from previous run
prevCountErr=$(cat "$statusFile")

#check if daemon restart is necessary
if [[ $countErr > $prevCountErr ]]; then
    $log "Restarting saslauthd: $countErr errors counted ($prevCountErr previous)"
    systemctl restart saslauthd.service
else
    $log "saslauthd running: $countErr errors counted ($prevCountErr previous); this is fine"
fi

#write new value in $statusFile
echo $countErr > $statusFile

#delete lockFile
rm $lockFile

exit
1 Like
Mastodon