Mail wenn Warteschlange größer als 10

pl-con

New Member
Hallo,

Habe meine Server getrennt nach Diensten, also nur Webhosting oder nur Mails...

Auf dem webhostingsserver sind einige Joomla-Webseiten gehostet, die hin und wieder mal gehackt werden und somit einige tausend Mails versenden wollen.

Gibt es die Möglichkeit einen Cronjob zu erstellen, der bewirkt, dass Eine Mail (oder besser SMS) versendet, wenn mehr als 10 Mails in der Warteschlange hängen. Eigentlich sollten nur wenige Mails in der Warteschlange hängen, höchstens dann, wenn mal ne Mail über ner Webseite versendet wird...

Freue mich auf konstruktive Antworten und wünsche vorab schonmal allen einen guten Rutsch...

Server: CentOS / Ubuntu
Mail: Postfix
Serververwaltung: Webmin & Plesk
Jeweils aktuelle Versionen...
 
Einfach ein Script das Kommando "mailq" ausführen lassen, die Antwort parsen und die Mails zählen. Dann im Script prüfen, ob Anzahl Mails > N ist, und etwas anzeigen.
Wenn das Script per Cron ausgeführt wird, und es eine Ausgabe bringt, dann wird Dir das normal eh als Mail an root zugestellt. Wenn Mails < N einfach im Script nichts ausgeben.

Grüsse
 
Ich würde evtl. überlegen, ob es dann nicht sinnvoller ist, statt einer Ausgabe irgendwas anzutriggern, was dann die Mail oder SMS über ein anderes System versendet. Wenn die Mail-Queue schon recht voll ist, könnte sonst die Mail an root da auch erst mal drin stecken, bevor sie abgearbeitet wird.
Sofern du eine Monitoring-Software auf deinen Servern laufen hast, kann die das evtl. auch übernehmen. Munin kann z.B. die Queue überwachen und auch Warnungen versenden.
 
Läuft Webmin oder Plesk auf dem E-Mail Server?

Falls auf dem Mail Server Plesk läuft kannst du mit den eigenen Hausmitteln dort Outgoing Limits setzen. Standardmäßig wirst du benachrichtigt via Mail.

Ansonsten beherzige die Ansätze von Joe User & traced.
 
webhostingsserver sind einige Joomla-Webseiten gehostet, die hin und wieder mal gehackt werden und somit einige tausend Mails

Wäre es nicht sinnvoller die Geschichte besser abzusichern ?:eek:
 
Hallo,

absichern alles schön und gut... Bei mehreren Hundert Domains mit verschiedene Kunden ist das nicht so einfach alle Up2Date zu halten... Ist ja auch nicht immer gewollt vom Kunden, dass meine DL durchgeführt wird.

Wenn eine gehackt wurde, dann will ich den Kunden anschreiben und Ihn darüber informieren, das dieses so ist und ich es beheben kann, falls gewünscht. Nur möchte ich informiert werden, wenn dies der Fall ist...

Für alle, die ähnliche Probleme wie ich haben:
Habe es nun mittels MSMTP (installiert) und dem folgenden Script erledigt:

Code:
#!/bin/bash
#
# Postfix queue length monitoring script (requires msmtp)
#
# This script checks the active, incoming, deferred and maildrop postfix queue directories.
#
# If the number of messages in any of these directories is more than $MAX_QUEUE_LENGTH,
# the script will generate an alert email and send it using msmtp. We use msmtp so that
# we can bypass the local postfix installation (since if the queues are getting big,
# the alert email may not be sent in time to catch the problem).
#

#########################################################
# SET SCRIPT VARS
#########################################################

# Path to msmtp binary (e.g. /usr/bin/msmtp on Debian systems)
MSMTP=/usr/bin/msmtp

# Remote mail host (this is the mail server msmtp will use to send the alert. It should NOT be the local postfix installation)
MAILHOST=backup.mailserver.com

# Remote mail port
MAILPORT=25

# Mail protocol
MAILPROTO=smtp

# Fully qualified domain name of local postfix installation
DOMAIN=primary.mailserver.com

# From address
[email protected]

# Recipient (this address should not route to the local postfix installation, for obvious reasons)
MAILTO="[email protected]"

# Email subject
MAILSUBJECT="Postfix queue length alert for ${DOMAIN}"

# MSMTP log file
LOGFILE=/var/log/msmtp.log

# Root of the postfix queue dirs (e.g. /var/spool/postfix on Debian systems). Note: no trailing slash.
QUEUEDIR_ROOT="/var/spool/postfix"

# Max queue length (if there are more messages in a queue than this number, we will send an alert)
MAX_QUEUE_LENGTH=10


#########################################################
# SCRIPT LOGIC STARTS HERE
#########################################################

# Check msmtp binary exists
if [ ! -f ${MSMTP} ]
then
        echo "Cannot find ${MSMTP}. Exiting."
        exit 1
fi

# Get the number of messages sitting in each postfix queue directory
Q_ACTIVE=$(find ${QUEUEDIR_ROOT}/active -type f | wc -l)
Q_INCOMING=$(find ${QUEUEDIR_ROOT}/incoming -type f | wc -l)
Q_DEFERRED=$(find ${QUEUEDIR_ROOT}/deferred -type f | wc -l)
Q_MAILDROP=$(find ${QUEUEDIR_ROOT}/maildrop -type f | wc -l)

# If any of these queues contain more than $MAX_QUEUE_LENGTH issue an alert
if [ ${Q_ACTIVE} -gt ${MAX_QUEUE_LENGTH} -o ${Q_INCOMING} -gt ${MAX_QUEUE_LENGTH} -o ${Q_DEFERRED} -gt ${MAX_QUEUE_LENGTH} -o ${Q_MAILDROP} -gt ${MAX_QUEUE_LENGTH} ]; then

    (
        echo "From: ${MAILFROM} "
        echo "To: ${MAILTO} "
        echo "Mime-Version: 1.0"
        echo 'Content-Type: text/plain; charset="iso-8859-1"'
        echo "Subject: ${MAILSUBJECT}"
        echo ""
        echo "One or more of the postfix queues on ${DOMAIN} has grown beyond ${MAX_QUEUE_LENGTH} messages in length."
    ) | ${MSMTP} --host=${MAILHOST} --port=${MAILPORT} --protocol=${MAILPROTO} --domain=${DOMAIN} --auth=off --tls=off --from=${MAILFROM} --logfile=${LOGFILE} --syslog=off --read-recipients

    exit 2

fi

exit 0

Dieses Script per Cron im gewünschten Intervall durchgeführt versendet über einen externen Server (z.B. Backupserver) die entsprechende Alarm Mail...

Funktioniert! und ich bin ein wenig beruhigter...

Vielen Dank für Eure Antworten...

THEMA IST ERLEDIGT

Gruß

PL
 
Warum erlaubst Du den Versand per msmtp ohne jeglichen AUTH?
Und wie überwachst Du die Queue von msmtp?


Sorry, aber wer Dritte aka Kunden auf sein System lässt, der kommt nicht drumrum sendmail zu blocken und Mails nur noch nach SMTP-AUTH zu versenden (dabei kann man dann auch gleich ein Ratelimit einrichten). Nebenbei kann man nun problemlos Massenmailer/Spamer identifizieren und abklemmen, beides so gar automatisiert. Den Rest regelt man vertraglich, fertig.
 
Port 25 (SMTP ohne SMTP AUTH) lokal auf Shared-Hosting-Systemen für Kunden als freistehenden Briefkasten offen zu lassen, grenzt an Fahrlässigkeit...
 
Back
Top