#!/bin/sh # # greylisting for qmail-qfilter # # Author: Joerg Backschues # # settings # # GREYLISTINGDATA - greylisting data # GREYLISTINGDELAY - greylisting delay (in minutes) # NOGREYLISTING - disable greylisting # NOGREYWHITELISTING - disable whitelisting after passing greylisting challenge # # disable greylisting, if environment variable NOGREYLISTING is set EXIST_NOGREYLISTING=${NOGREYLISTING+1} test -z "$EXIST_NOGREYLISTING" || { echo "qmail-qfilter: greylisting disabled due to NOGREYLISTING from $QMAILUSER@$QMAILHOST to $QMAILRCPTS at $TCPREMOTEIP" | /var/qmail/bin/splogger qmail ; exit 0; } # settings GREYLISTINGDB="/var/greylisting/" # path to greylisting db # standard settings, if environment variables are not set test -n "$GREYLISTINGDATA" || GREYLISTINGDATA="$TCPREMOTEIP $QMAILUSER@$QMAILHOST $QMAILRCPTS" # greylisting data test -n "$GREYLISTINGDELAY" || GREYLISTINGDELAY=5 # greylisting delay (in minutes) # disable greylisting for SMTP AUTH users EXIST_TCPREMOTEINFO=${TCPREMOTEINFO+1} test -z "$EXIST_TCPREMOTEINFO" || { echo "qmail-qfilter: greylisting disabled due to SMTP AUTH from $QMAILUSER@$QMAILHOST to $QMAILRCPTS at $TCPREMOTEIP" | /var/qmail/bin/splogger qmail ; exit 0; } # check greylisting db test -f "$GREYLISTINGDB$GREYLISTINGDATA" || touch "$GREYLISTINGDB$GREYLISTINGDATA" for i in $(find "$GREYLISTINGDB" -name "$GREYLISTINGDATA" -type f ! -mmin +"$GREYLISTINGDELAY"); do echo "qmail-qfilter: greylisting from $QMAILUSER@$QMAILHOST to $QMAILRCPTS at $TCPREMOTEIP" | /var/qmail/bin/splogger qmail; echo -n "Zmessage temporary rejected. Please try again later." >&2; exit 82; done # pass greylisting challenge EXIST_NOGREYWHITELISTING=${NOGREYWHITELISTING+1} if [ -z $EXIST_NOGREYWHITELISTING ] ; then # extend greylisting expiration test -s "$GREYLISTINGDB$GREYLISTINGDATA" || echo -n "1" > "$GREYLISTINGDB$GREYLISTINGDATA" touch -t `date -d "\`expr $GREYLISTINGDELAY + 1\` minute ago" +%y%m%d%H%M.%S` "$GREYLISTINGDB$GREYLISTINGDATA" echo "qmail-qfilter: greylisting expiration extended from $QMAILUSER@$QMAILHOST to $QMAILRCPTS at $TCPREMOTEIP" | /var/qmail/bin/splogger qmail exit 0 else # pass greylisting challenge without greylisting expiration rm -f "$GREYLISTINGDB$GREYLISTINGDATA" echo "qmail-qfilter: pass greylisting challenge without greylisting expiration from $QMAILUSER@$QMAILHOST to $QMAILRCPTS at $TCPREMOTEIP" | /var/qmail/bin/splogger qmail exit 0 fi