Problem:

Aus verschiedenen, teils unerklärten, Gründen kommt es auf bei Qmail zu extrem hoher Last des Servers und einer unnötig großen Anzahl von qmail-smtpd-Prozessen.

Symptome:

ps aux|grep qmail-smtpd|wc -l
# liefert eine hohe Zahl (ab 40 bis zu 400)

netstat -ap | grep qmail-smtpd
# listet alle Verbindungen auf. Erstaunlich hierbei:
# der Eintrag "Recv-Q" liegt meistens auf 0.

Erklärung:

1.) Es werden viele SMTP-Verbindungen zu dem Server aufgebaut, die aber gar nicht genutzt werden. Evtl. weil sie (aus irgendeinem Grund) einseitig geschlossen worden sind, oder weil es ein DOS-Angriff werden soll. Diese Verbindungen bleiben ohne sichtlichen Grund einfach bestehen.

2.) Es werden TLS-SMTP-Verbindungen aufgebaut. Qmail findet aber kein Zertifikat und bildet einfach ein 'on-the-fly', welches die hoche CPU-Last verursacht.

Lösung:

Die Lösung für beide Erklärungen ist recht einfach: Man verringert den Timeout einer SMTP-Verbindung vom Default-Wert 1200 auf 60 Sekunden und man stellt passende Zertifikate bereit. Eine Vorlage existiert bereits.

cd /var/qmail/control/
#Timeout setzten:
echo -n 60 > timeoutsmtpd

#Zertifikate (falls nicht vorhanden) umkopieren:
cp -pi dhparam1024.pem dh1024.pem
cp -pi dhparam512.pem dh512.pem

#vorhandene SMTP-Verbindungen trennt man auf die Schnelle mit:
killall qmail-smtpd

Ein Neustart von Qmail ist nicht nötig, da qmail-smtpd vom (x)inetd bei jedern eingehenden Verbindung neu aufgerufen wird. Man kann entweder warten bis alle alten Prozesse beendet sind, oder man killed sie wie oben angegeben.

Kategorien:

Stichwörter:

Qmail · mail · email · dos · last · cpu · verbindung · ddos ·