procmail
[Top] [All Lists]

Re: DNS verification of sender?

1997-09-19 02:08:46
Robert J. Wilson writes on 17 September 1997 at 18:08:55
We are using procmail with good success but some SPAM leakage occurs
with bogus source addresses. Is there a script that rejects e-mail when
the sending domain name is invalid?

Here's what I hooked up the other day...not fully tested yet, and note
the comments.

   Dan
------------------- message is author's opinion only ------------------
J. Daniel Smith <DanS(_at_)bristol(_dot_)com>        
http://www.bristol.com/~DanS
Bristol Technology B.V.                   +31 33 450 50 50, ...51 (FAX)
Amersfoort, The Netherlands               {info,jobs}(_at_)bristol(_dot_)com
-----
spamcheck_word="[a-z0-9][-a-z0-9_.+]*[a-z0-9]+"
spamcheck_tld="(com|gov|org|edu|net|[a-z][a-z])"
spamcheck_email="\<${spamcheck_word}@(${spamcheck_word}\.)+${spamcheck_tld}\>"

# be sure the domain is valid.  In addition to this being SLOW, it's
# somewhat risky as DNS timeouts can occur.  Thus, it's done (for now)
# only if there isn't already an X-SpamCheck-Reason: header
:0
* !^X-SpamCheck-Reason:
{
  # this is how to determine if a domain is invalid.  To disable the
  # nslookup, set SPAMCHECK_INVALID_DOMAIN to /bin/false
  #SPAMCHECK_INVALID_DOMAIN=/bin/false
  SPAMCHECK_INVALID_DOMAIN=${SPAMCHECK_INVALID_DOMAIN:-'/usr/sbin/nslookup 
-query=any $SPAMCHECK_DOMAIN 2>&1 | grep -c "Non-existent domain"'}

  #SPAMCHECK_DOMAIN=`echo $SENDER | awk -F@ '{print $2}'`
  :0
  * $ SENDER ?? 
()${spamcheck_word}(_at_)\/(${spamcheck_word}\.)+${spamcheck_tld}
  { SPAMCHECK_DOMAIN=$MATCH }
  :0
  * $?$SPAMCHECK_INVALID_DOMAIN
  {
    SPAMCHECK_SPAM=yes
    :0fwh
    | formail -A "X-SpamCheck-Reason: Invalid domain: $SPAMCHECK_DOMAIN"
  }
  :E
  {
    :0
    * $ FROM_ADDRESS ?? 
()${spamcheck_word}(_at_)\/(${spamcheck_word}\.)+${spamcheck_tld}
    { SPAMCHECK_DOMAIN=$MATCH }
    :0
    * $?$SPAMCHECK_INVALID_DOMAIN
    {
      SPAMCHECK_SPAM=yes
      :0fwh
      | formail -A "X-SpamCheck-Reason: Invalid domain: $SPAMCHECK_DOMAIN"
    }
    :E
    {
      :0
      * $^TO${spamcheck_word}(_at_)\/(${spamcheck_word}\.)+${spamcheck_tld}
      { SPAMCHECK_DOMAIN=$MATCH }
      :0
      * $?$SPAMCHECK_INVALID_DOMAIN
      {
        SPAMCHECK_SPAM=yes
        :0fwh
        | formail -A "X-SpamCheck-Reason: Invalid domain: $SPAMCHECK_DOMAIN"
      }
    }
  }
}

<Prev in Thread] Current Thread [Next in Thread>