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.