HEX
Server: Apache/2.4.41 (FreeBSD) OpenSSL/1.0.2s mod_fcgid/2.3.9
System: FreeBSD salazo 12.0-RELEASE-p1303-ZFS hostBSD 12.0-RELEASE-p1303-ZFS DMR amd64
User: admin (1000)
PHP: 7.4.3
Disabled: NONE
Upload Files
File: /usr/iports/etc/procmailrc
#LOGFILE=/var/log/procmail.log
LOGFILE=/dev/null
#VERBOSE=NO
#LOGABSTRACT=YES
VIRUS=DEL
SPAMD=ON
PSPAM=MARK
CSPAM=DEL
SUBJ_VIRUS='*VIRUSVERDACHT*:'
SUBJ_PSPAM='*SPAMVERDACHT*:'
SUBJ_CSPAM='*SPAMERKANNT*:'
CLEVEL='\*\*\*\*\*\*\*\*\*\*\*\*'
POSTFIX='batcomdllexepif|scr|vbs'
SIZE=2560000
TIMEOUT=300


CSPORT=1783



























































###########################################
## DO NOT CHANGE ANY LINES BELOW THIS!!! ##
##  GENERALLY USE YOUR EASYTECC TOOL TO  ##
##   CHANGE ANY SPAM SETTINGS HERE !!    ##
###########################################

# prevent [t]csh...
SHELL=/bin/sh

# we deliever to boxes in the form user@domain.tld and get called
# by ..../procmail -a user@domain.tld which sets $1 to email addr
# So change LOGNAME
#LOGNAME=$1

# das ist leider nur die halbe wahrheit oder auch der ganze fehler
# LOGNAME kommt mal als -a ($1) und manchmal auch als -d ($LOGNAME)

ARG=$1

:0 
* ARG ?? ^.+@.+\..+$
{
   LOGNAME=$ARG
}

:0 fW
| formail -I "X-KSD: <$LOGNAME>";

### start global

# get msgid for log
:0 W
{
   MSGID=`formail -xMessage-Id: | sed -e 's/[< >]//g'`
   TIMESTAMP=`date +"%b %e %H:%M:%S"`
   HOSTNAME=`hostname -s`
   LONGHOST=`hostname`
   LOGTXT="$TIMESTAMP $HOSTNAME procmail[$$]: $MSGID:"
}

LOG="$LOGTXT recipient is $LOGNAME
"

# get deliver
DELIVER='/etc/deliverrc'

## start allowed senders

:0 W
{
   RECEIVED=`formail -X "Received:" | tr "\n" " " | tr "\t" " " | sed -e "s/[ ]\{1,\}/ /g ; s/^ //g ; s/^[0-9]\{1,\}/&:/"`

   # allowed ips 
   :0
   * RECEIVED ?? ^Received: from .*\(.*\[\/[0-9.]+
   {
      SOURCEIP=$MATCH
      LOG="$LOGTXT using $SOURCEIP for ip checks
"

      :0 W
      {
         SOURCEIPREGEX=`echo "$SOURCEIP" | sed -e "s/\./\\\./g"`
      }

      # own ip
      :0 W
      {
         MYIP=`resolveip -s $LONGHOST`
         :0
         * $ MYIP ?? ^$SOURCEIPREGEX$
         {
            LOG="$LOGTXT won't filter mail from myself
"
            INCLUDERC=$DELIVER         
         }
      }

      # webserver
      :0
      * HOST ?? ^*.-mail\.
      {
         :0 W
         {
            WEBHOST=`echo "$HOST" | sed -e "s/-mail\./\./g"`
            :0
            * $ RECEIVED ?? ^Received[: ]*from[: ]$WEBHOST
            * SOURCEIP ?? ^83\.138\.
            {
               LOG="$LOGTXT won't filter mail from webserver
"
               INCLUDERC=$DELIVER
            }
         }
      }

      # relays
      :0 W
      {
         RELAYS=`grep -E '^[^ *#].*RELAY$' /etc/mail/access | sed -e "s/[ ]*RELAY//g" | tr "\n\t" " " | tr -s " "`
         :0
         * $ RELAYS ?? ^$SOURCEIPREGEX$
         {
            LOG="$LOGTXT won't filter mail from relay
"
            INCLUDERC=$DELIVER
         }
      }
   }

   :0 E
   {
      LOG="$LOGTXT failed to find ip in header
"
      
      :0 W
      {
         RETURNPATH=`formail -xReturn-Path: | sed -e "s/[<>]//g"`
      }

      # mailer daemon
      :0
      * RECEIVED ?? ^Received: from localhost
      * RETURNPATH ?? ^MAILER-DAEMON$ 
      {
         LOG="$LOGTXT won't filter mail from mailer daemon
"
         INCLUDERC=$DELIVER
      }
   }
}

## end allowed senders

### end global

### start user

## start whitelist / blacklist independant from spamproc (cascading)

# get whitelist
:0 W
* ? test -s /home/$LOGNAME/.white.lst
{
   WHITELIST=/home/$LOGNAME/.white.lst
}

:0 E
{
   :0 W
   * DOMAIN ?? ^$
   {
      # domain from LOGNAME
      DOMAIN=`echo "$LOGNAME" | sed -e 's/.*@// ; s/>.*$//g'`

      :0 W
      * DOMAIN ?? ^$
      {	
         # domain from recipients
         DOMAIN=`formail -c -xTo: -xCC: | sed 's/,/\n/g ; s/ //g ; s/.*@//g ; s/>.*$//g' | tr -s '\n' | awk '{domains[$1]=$1} END {if (length(domains) == 1) for (domain in domains) print domain}'`

         :0 W
         * DOMAIN ?? ^$
         {
            # domain from passwd
            DOMAIN=`grep -E "^$LOGNAME:.* - POP:.*" /etc/passwd | awk -F ':' '{print $5}' | sed -e 's/ .*//g'`
         }
      }
   }

   :0 W
   * ! DOMAIN ?? ^$
   * ? test -s /home/$DOMAIN/.white.lst
   {
      WHITELIST=/home/$DOMAIN/.white.lst
   }

   :0 WE
   * ? test -s /home/spamdef/.white.lst
   {
      WHITELIST=/home/spamdef/.white.lst
   }
}

# check whitelist
:0
* ! WHITELIST ?? ^$
{
   LOG="$LOGTXT using whitelist $WHITELIST
"
   
   # get from
   :0 W
   {
      FROM=`formail -XFrom: | formail -r -xTo: | tr -d ' '`
      LOCALPART=`echo $FROM | sed -e 's/\@[^\@]*$//'`
      DOMAINPART=`echo $FROM | sed -e 's/^.*\@// ; s/\.[^\.]*$// ; s/\.*[^\.]*/(&)?/g'`
      TLDPART=`echo $FROM | sed -e 's/^.*\.//'`
      FROMREGEX="(($LOCALPART@)?$DOMAINPART)?.$TLDPART"
   }

   :0 W
   * ? egrep -qixe "$FROMREGEX" $WHITELIST
   {
      LOG="$LOGTXT $FROM whitelisted in $WHITELIST
"
      INCLUDERC=$DELIVER
   }
}

:0 E
{
   LOG="$LOGTXT no whitelist defined
"
}

# get blacklist
:0 W
* ? test -s /home/$LOGNAME/.black.lst
{
   BLACKLIST=/home/$LOGNAME/.black.lst
}

:0 E
{
   :0 W
   * DOMAIN ?? ^$
   {
      # domain from LOGNAME
      DOMAIN=`echo "$LOGNAME" | sed -e 's/.*@// ; s/>.*$//g'`

      :0 W
      * DOMAIN ?? ^$
      {	
         # domain from recipients
         DOMAIN=`formail -c -xTo: -xCC: | sed 's/,/\n/g ; s/ //g ; s/.*@//g ; s/>.*$//g' | tr -s '\n' | awk '{domains[$1]=$1} END {if (length(domains) == 1) for (domain in domains) print domain}'`

         :0 W
         * DOMAIN ?? ^$
         {
            # domain from passwd
            DOMAIN=`grep -E "^$LOGNAME:.* - POP:.*" /etc/passwd | awk -F ':' '{print $5}' | sed -e 's/ .*//g'`
         }
      }
   }

   :0 W
   * ! DOMAIN ?? ^$
   * ? test -s /home/$DOMAIN/.black.lst
   {
      BLACKLIST=/home/$DOMAIN/.black.lst
   }

   :0 WE
   * ? test -s /home/spamdef/.black.lst
   {
      BLACKLIST=/home/spamdef/.black.lst
   }
}

# check blacklist
:0
* ! BLACKLIST ?? ^$
{
   LOG="$LOGTXT using blacklist $BLACKLIST
"
   
   # get from
   :0 W
   * FROM ?? ^$
   {
      FROM=`formail -XFrom: | formail -r -xTo: | tr -d ' '`
      LOCALPART=`echo $FROM | sed -e 's/\@[^\@]*$//'`
      DOMAINPART=`echo $FROM | sed -e 's/^.*\@// ; s/\.[^\.]*$// ; s/\.*[^\.]*/(&)?/g'`
      TLDPART=`echo $FROM | sed -e 's/^.*\.//'`
      FROMREGEX="(($LOCALPART@)?$DOMAINPART)?.$TLDPART"
   }

   :0 W
   * ? egrep -qixe "$FROMREGEX" $BLACKLIST
   {
      LOG="$LOGTXT $FROM blacklisted in $BLACKLIST. message deleted.
"
      :0
      /dev/null
      HOST
   }
}

:0 E
{
   LOG="$LOGTXT no blacklist defined.
"
}

## end whitelist / blacklist

## start get config



:0 W
* ? test -s /home/$LOGNAME/.spamproc
{
   SPAMPATH=$LOGNAME
}

:0 E
{
   :0 W
   * DOMAIN ?? ^$
   {
      # domain from LOGNAME
      DOMAIN=`echo "$LOGNAME" | sed -e 's/.*@// ; s/>.*$//g'`

      :0 W
      * DOMAIN ?? ^$
      {	
         # domain from recipients
         DOMAIN=`formail -c -xTo: -xCC: | sed 's/,/\n/g ; s/ //g ; s/.*@//g ; s/>.*$//g' | tr -s '\n' | awk '{domains[$1]=$1} END {if (length(domains) == 1) for (domain in domains) print domain}'`

         :0 W
         * DOMAIN ?? ^$
         {
            # domain from passwd
            DOMAIN=`grep -E "^$LOGNAME:.* - POP:.*" /etc/passwd | awk -F ':' '{print $5}' | sed -e 's/ .*//g'`
         }
      }
   }

   :0 W
   * ! DOMAIN ?? ^$
   * ? test -s /home/$DOMAIN/.spamproc
   {
      SPAMPATH=$DOMAIN
   }
}

:0 W
* ! SPAMPATH ?? ^$
{
   LOG="$LOGTXT using config for $SPAMPATH
"
   CONFIG=`head -20 /home/$SPAMPATH/.spamproc | sed -e "/^ *$/d ; /^#/d ; s/'$//g"`
}

:0 E
{
   LOG="$LOGTXT using global config.
"
   SPAMPATH="spamdef"
}

## end get config

## start virus extension

:0
* CONFIG ?? ^VIRUS=\/.*
{
   VIRUS=$MATCH
}

:0 W
* ! VIRUS ?? ^OFF$
{
   :0
   * CONFIG ?? ^POSTFIX='\/.+
   {
      POSTFIX=$MATCH
   }

   :0
   * CONFIG ?? ^SUBJ_VIRUS='\/.+
   {
      SUBJ_VIRUS=$MATCH
   }

   :0 WHB
   * ! POSTFIX ?? ^$
   * $ ^.*name=\"?.*\.($POSTFIX)\"?$
   {
      LOG="$MATCH
"
      SUBJ_=`formail -xSubject: | expand | sed -e 's/^[ ]*//g ; s/[ ]*$//g'`
      
      :0 fW
      | formail -i "Subject: $SUBJ_VIRUS $SUBJ_";
    
      :0
      * VIRUS ?? ^DEL$ 
      {
         LOG="$LOGTXT forbidden extension ($POSTFIX) found. message deleted.
"
         :0
         /dev/null
         HOST
      }
      
      :0 E
      * VIRUS ^MARK$
      {
	     JUNK="YES"
         LOG="$LOGTXT forbidden extension ($POSTFIX) found
"
      }
   }
}

## end virus extension

## start clamav+spamasassin

:0
{
   CLAMCONF=`cat /etc/sysconfig/clamav-milter`

   :0
   * CLAMCONF ?? ^MILTER_ON=\/.*
   {
      CLAMAV=$MATCH
   }

}

:0
* CLAMAV ?? ^YES$
* ? test -s /etc/sysconfig/clamav-whitelist
{
   VIRUSWHITELIST=/etc/sysconfig/clamav-whitelist
   
   # get from
   :0 W
   * FROM ?? ^$
   {
      FROM=`formail -XFrom: | formail -r -xTo: | tr -d ' '`
      LOCALPART=`echo $FROM | sed -e 's/\@[^\@]*$//'`
      DOMAINPART=`echo $FROM | sed -e 's/^.*\@// ; s/\.[^\.]*$// ; s/\.*[^\.]*/(&)?/g'`
      TLDPART=`echo $FROM | sed -e 's/^.*\.//'`
      FROMREGEX="(($LOCALPART@)?$DOMAINPART)?.$TLDPART"
   }
   
   # virus whitelist
   :0 W
   * ? egrep -qixe "$FROMREGEX" $VIRUSWHITELIST
   {
      LOG="$LOGTXT $FROM whitelisted in $VIRUSWHITELIST
"
      CLAMAV="WHITELISTED"
   }
}

:0 E
{
   LOG="$LOGTXT no virus whitelist defined
"
}

# cshost
:0 W
* ? test -s /etc/cshost
{
   CSHOST=`cat -e /etc/cshost | sed -e 's/\$$//g'`
}

:0 E
{
   CONFIG=""
   SPAMD="OFF"
   CLAMAV="NO"
}

# get config
:0
* CONFIG ?? ^SPAMD=\/.*
{
   SPAMD=$MATCH
}
   
:0 W
* ! SPAMD ?? ^OFF$
{

   :0
   * CONFIG ?? ^PSPAM=\/.*
   {
      PSPAM=$MATCH
   }

   :0
   * CONFIG ?? ^SUBJ_PSPAM='\/.*
   {
      SUBJ_PSPAM=$MATCH
   }

   :0
   * CONFIG ?? ^CSPAM=\/.*
   {
      CSPAM=$MATCH
   }

   :0
   * CONFIG ?? ^SUBJ_CSPAM='\/.*
   {
      SUBJ_CSPAM=$MATCH
   }

   :0
   * CONFIG ?? ^CLEVEL='\/.*
   {
      CLEVEL=$MATCH
   }
}

# spamd and clamav disabled
:0  
* SPAMD ?? ^OFF$  
{  
   LOG="$LOGTXT spam test disabled
"
   :0  
   * CLAMAV ?? ^YES$  
   {  
      LOG="$LOGTXT virus test disabled implicitly
"
   }  
}

:0 WE
{
   VS=`hostname | sed -e 's/\..*$//g'`
      
   :0 fW
   * < $SIZE
   | /usr/sbin/spamc -u "$SPAMPATH@$VS" -t 20 -d $CSHOST -s $SIZE -p $CSPORT

   #virus
   :0 W
   * ^X-Spam-Virus: Yes
   * CLAMAV ?? ^YES$
   {
      VIRNAME=`formail -xX-Spam-Virus: | sed -e 's/ Yes (//g ; s/)//g'`
      LOG="$LOGTXT virus '$VIRNAME' found
"

      :0
      * CLAMCONF ?? ^NOXHEADER=\/.*
      {
         NOXHEADER=$MATCH
      }

      :0 fW
      * NOXHEADER ?? ^YES$
      | formail -I X-Spam-Virus:; 

      :0
      * CLAMCONF ?? ^TEMPLATE=\/.*
      {
         TEMPLATE=$MATCH
      }

      :0 W
      * TEMPLATE ?? ^YES$	
      {
         CLAMTEMPLATE=`cat /etc/sysconfig/clamav-template`
         SUBJ_=`formail -xSubject: | expand | sed -e 's/^[ ]*//g ; s/[ ]*$//g'`
         VIRSUBJ=`echo "$CLAMTEMPLATE" | grep -e "^Subject:" | sed -e "s/^Subject: //g ; s/%s/$SUBJ_/g"`
         VIRFROM=`formail -XFrom: | formail -r -xTo: | tr -d ' '`
         VIRTO=`echo "$LOGNAME" | sed -e 's/^[ ]*//g ; s/[ ]*<[ ]*//g ; s/[ ]*>[ ]*//g'`
         VIRBODY=`echo "$CLAMTEMPLATE" | grep -v "^Subject:.*$" | sed -e "/^[ ]*$/d ; s/%f/$VIRFROM/g ; s/%t/$VIRTO/g ; s/%v/$VIRNAME/g"`

         :0
         * CLAMCONF ?? ^FROM=\/.*
         {
            VIRSENDER=$MATCH
         }

         :0 fW
         * ! VIRSENDER ?? ^$
         | formail -i "From: $VIRSENDER";

         :0 fW
         * ! $VIRSUBJ ?? ^$
         | formail -i "Subject: $VIRSUBJ" 

         :0 fW : $MSGID.lock
         | formail -I "Content-Type: text/plain";

         :0 fbW
         | echo "$VIRBODY";
      }
      JUNK="YES"
      INCLUDERC=$DELIVER
   }

   #spam
   :0 W
   * ^X-Spam-Status: Yes
   {
      SUBJ_=`formail -xSubject: | expand | sed -e 's/^[ ]*//g ; s/[ ]*$//g'`

      #sure spam
      :0
      * $ ^X-Spam-Level: $CLEVEL
      {
             
         :0 
         * CSPAM ?? ^DEL$
	 {
            LOG="$LOGTXT spam found. message deleted.
"
            :0
            /dev/null
            HOST
	 }

	 :0 E
         * CSPAM ?? ^MARK$
         {
            LOG="$LOGTXT spam message marked in subject
"
            :0 fW
            | formail -i "Subject: $SUBJ_CSPAM $SUBJ_";
         }

         :0 E
         * CSPAM ?? ^HEADER$
         {
            LOG="$LOGTXT spam message marked in header
"
            :0 fW
            | formail -A "X-Spam-Info: $SUBJ_CSPAM";
         }
      }

      #probably spam
      :0 E
      {

         :0 W
         * PSPAM ?? ^MARK$
         {
            LOG="$LOGTXT probably spam message marked in subject
"
            :0 fW
            | formail -i "Subject: $SUBJ_PSPAM $SUBJ_";
         }
  
         :0 E 
         * PSPAM ?? ^HEADER$
         {
            LOG="$LOGTXT probably spam message marked in header
"
            :0 fW
            | formail -A "X-Spam-Info: $SUBJ_PSPAM";
         }
      }

      JUNK="YES"
      INCLUDERC=$DELIVER

   }
}

INCLUDERC=$DELIVER

# we should never reach here

# fixing (F)rom
:0
* ^^rom[ ]
{
  :0 fhW
  | sed -e '1s/^/F/'
}