#!/bin/bash IN_REGEX='to=[^@]+@]+)[,>].*? mailer=virthostmail' IN_USER_REGEX='to=,]+).+mailer=virthostmail.*relay=\S+' OUT_REGEX='from=[^@]+@]+)[,>].*? relay=localhost' #OUT_REGEX='from=[^@]+@]+)[,>].*? relay=localhost.localdomain' RELAY_OUT_REGEX='to=(\S+)\s.+\s+mailer=esmtp.+\s+relay=(\S+)' RELAY_IN_REGEX='from=(\S+)\s.*? proto=E?SMTP, daemon=MTA.*relay=(\S+)' BLACKHOLE_REJECT_REGEX='arg1=[\[<]?([^\]>, ]+).*?reject=553' REJECTED_REGEX='reject=(\S+)' REJECT_REGEX='relay=[\[<]?([^\]>, ]+).*?reject=' STAT_REGEX='stat=(\w[\w\s]+\w)\W' ESTAT_REGEX='to=(\S+)\s?.+\smailer=(?:(?!virthostmail)\S+)\s.+relay=(\S+)\s.+\s+stat=(\w[\w\s]+\w)\W' ESTAT_LOCAL_REGEX='to=(\S+)\s?.+\smailer=virthostmail,\s.+relay=(\S+)\s.+\s+stat=(\w[\w\s]+\w)\W' DEFERRED_REGEX='to=(\S+)\s+.+stat=[Dd]eferred:\s*(.+)$' POP3_REGEX='pop3.*?Login user=(\S+)\s+host=(\S+)' IMAP_REGEX='imapd.*?Login user=(\S+)\s+host=(\S+)' DAYS="" MSG="" HIDE_DEFERRED=0 for arg do case $arg in --in) REGEX=$IN_REGEX; MSG="Local virt hosts receiving mail" ;; --in-user) REGEX=$IN_USER_REGEX; MSG="Local users receiving mail" ;; --out) REGEX=$OUT_REGEX; MSG="Local virt hosts sending mail" ;; --blackhole) REGEX=$BLACKHOLE_REJECT_REGEX; MSG="Blackholed mail hosts" ;; --stat) REGEX=$STAT_REGEX; MSG="Mail status count" ;; --estat) REGEX=$ESTAT_REGEX; MSG="Extended status (mail relayed offsite)" ;; --estat-l) REGEX=$ESTAT_LOCAL_REGEX; MSG="Extended status (virtual host deliveries)" ;; --pop3-logins) REGEX=$POP3_REGEX; MSG="POP3 logins" ;; --imap-logins) REGEX=$IMAP_REGEX; MSG="IMAP logins" ;; --deferred) REGEX=$DEFERRED_REGEX; MSG="Deferred list" ;; --rejected) REGEX=$REJECTED_REGEX; MSG="Rejected mail count/status" ;; --rejected-relays) REGEX=$REJECT_REGEX; MSG="Rejected mail relays" ;; --transactions) FULL=1;; --minutes) shift; MINS=$1; let COUNT=$1; DATE="" while [ $COUNT -gt -1 ] do D="$(date -d "-${COUNT} minutes" '+%b %e %H:%M')" if [ $COUNT -eq $MINS ] then DATE="^($D" elif [ $COUNT -gt -1 ] then DATE="$DATE|$D" fi COUNT=$((COUNT - 1)) done DATE="$DATE)" ;; --hours) shift; HOURS=$1; let COUNT=$1; DATE="" while [ $COUNT -gt -1 ] do D="$(date -d "-${COUNT} hours" '+%b %e %H')" if [ $COUNT -eq $HOURS ] then DATE="^($D" elif [ $COUNT -gt -1 ] then DATE="$DATE|$D" fi COUNT=$((COUNT - 1)) done DATE="$DATE)" ;; --days) shift; DAYS=$1; let COUNT=$1; DATE="" while [ $COUNT -gt -1 ] do D="$(date -d "-${COUNT} days" '+%b %e')" if [ $COUNT -eq $DAYS ] then DATE="^($D" elif [ $COUNT -gt -1 ] then DATE="$DATE|$D" fi COUNT=$((COUNT - 1)) done DATE="$DATE)" ;; --help) REGEX="";; --hide-deferred) HIDE_DEFERRED=1;; --relay-out) REGEX=$RELAY_OUT_REGEX ; MSG="Relayed out from virthosts" if [ "$HIDE_DEFERRED" = "1" ] then REGEX="${REGEX}.+stat=(?![Dd]eferred)" fi ;; --relay-in) REGEX=$RELAY_IN_REGEX ; MSG="Relayed in from other hosts" ;; *) DAYS="$DAYS $1" ;; esac shift done DAYS=$(echo "$DAYS" | sed -e 's/^ //') if [ -z "$DAYS" ] then DAYS="0 days" fi if [ -z "$REGEX" ] then clear cat <