Script di Monitoring: Clamd + Spamd + Qmail

Gio, 06/03/2008 - 16:53

Script di Monitoring: Clamd + Spamd + Qmail

Inviato da paolo 0 commenti
Introduzione

Come da titolo, un semplice script di monitoring da usare in Cron per monitorare il funzionamento di:

* Spamassassin
* Clamav
* Qmail

Se qualcosa va storto il servizio viene riavviato e in caso viene inviata una mail all'amministratore di sistema.

Lo script per verificare il funzionamento di Spamassassin utilizza il file Eicar.txt, che potete scaricare da qui:

http://www.eicar.org/download/eicar.com.txt

Qunidi va modificata la riga:
EICAR_TEST="/pathto/eicar.txt"

Buon monitoring! Wink

#! /bin/sh
# Author: Paolo Mainardi <paolo@ildn.net>
 
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
 
 
#EMAIL
TEXT="Problema riscontrato e risolto sulla sulla macchina:"
EMAIL="alertme@domain.com"
EMAIL2="alertme2@domain.com"
 
# Active/Deactive Debugging
DEBUG=0
 
NAME="monitoring"
 
DESC="Monitoring of services: Spamd & Clamd"
SPAMD="spamd"
CLAMD="clamd"
SPAMC="spamc"
 
EICAR_TEST="/pathto/eicar.txt"
 
 
SPAMD_DAEMON=/usr/sbin/$SPAMD
SPAMC_DAEMON=/usr/bin/$SPAMC
CLAMD_DAEMON=/usr/sbin/$CLAMD
 
DAEMON_ARGS="--options args"
SPAMD_PIDFILE=/var/run/$SPAMD.pid
CLAMDD_PIDFILE=/var/run/clamav/$CLAMD.pid
 
# CODA MASSIMA QMAIL
MAX_QUEUE_QMAIL="200"
 
SCRIPTNAME=/etc/init.d/$NAME
 
# Exit if the package is not installed
#[ -x "$SPAMD_DAEMON" ] || exit 0
#[ -x "$CLAMDD_DAEMON" ] || exit 0
 
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
 
send_mail()
{
TESTO="Servizio: $1"
 
HOST=`hostname -f`
echo $TESTO | mail -s "$TEXT$HOST" $EMAIL $EMAIL2
 
}
 
check_qmail()
{
 
log_daemon_msg "Checkng qmail queue.."
QUEUE=`/var/qmail/bin/qmail-qstat | awk '{ print $4 }' | head -n 1`
 
if [ $QUEUE -gt $MAX_QUEUE_QMAIL ]; then
 
## LANCIA UN AZIONE
log_daemon_msg "Qmail queue is over the limits"
send_mail "QMAIL"
else
log_daemon_msg "Qmail queue ok..."
fi
}
 
 
check_clamd()
{
log_daemon_msg "Checking clamd..."
PROC_NUMBERS=`ps aux | grep -ic $CLAMD`
if [ $PROC_NUMBERS -gt 0 ]; then
 
RET=`/usr/bin/clamdscan $EICAR_TEST`
RETVAL=$?
 
# se torna 2 clamd non sta funzionando
if [ $RETVAL -eq 2 ] ; then
log_daemon_msg "Clamd error: Restarting"
RESTART=`/etc/init.d/clamav-daemon restart`
if [ $DEBUG -eq 1 ] ; then
echo $RESTART;
fi
 
send_mail $CLAMD
 
else
log_daemon_msg "OK"
fi
else
log_daemon_msg "Clamd error: Restarting"
RESTART=`/etc/init.d/clamav-daemon stop; /etc/init.d/clamav-daemon start;`
 
if [ $DEBUG -eq 1 ] ; then
echo $RESTART;
fi
 
## LANCIARE SERVIZIO ALERT SMS/EMAIL
send_mail $CLAMD
fi
}
 
 
check_spamd()
{
log_daemon_msg "Checking spamd..."
 
# conto il numero dei processi attivi di spamd
PROC_NUMBERS=`ps aux | grep -ic $SPAMD`
 
# se abbiamo processi attivi andiamo avanti
if [ $PROC_NUMBERS -gt 0 ]; then
# Se con il test eicar abbiamo un valore di 0/0 vuol dire che spamassasin non sta funzionando
RES=`spamc -c -U /var/run/spamd-socket < $EICAR_TEST`
 
CHECK="0/0";
 
echo $RES;
if [ $RES = $CHECK ]; then
log_daemon_msg "Spamd is blocked, restarting now.."
 
RESTART=`/etc/init.d/spamassassin restart`
 
## LANCIARE SERVIZIO ALERT EMAIL/SMS
send_mail $SPAMD
 
else
log_daemon_msg "OK"
 
fi
else
log_daemon_msg "Spamd is not running, restarting now.."
RESTART=`/etc/init.d/spamassassin restart`
 
## LANCIARE SERVIZIO ALERT EMAIL/SMS
send_mail $SPAMD
fi
}
 
 
#
# Function that starts the daemon/service
#
do_start()
{
check_spamd
check_clamd
check_qmail
}
 
 
 
#
# Function that stops the daemon/service
#
do_stop()
{
log_daemon_msg "Stop..."
}
 
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
log_daemon_msg "Reload..."
 
}
 
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
 
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
#reload|force-reload)
#
 
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
esac
 
: