# GETHEADERINFO.RC # # EXTRACT EXTERNAL IP ADDRESSES AND DOMAINS FROM EMAIL HEADERS # # This section extracts the external IP addresses and domains found in the # headers of this email, information that later recipes use. # # Extract the sending IP addresses from the Received: headers, first checking # each Received: header to be sure that the IP you're extracting is not from your # own system. Examine only the first eight Received: headers, and extract only the # first four external IP addresses, since anything beyond that is probably # forged, and email with excessive Received: headers is dealt with later in the # SpamBouncer. # CHECK FIRST RECEIVED HEADER :0 * H ?? ^(X-)?Received: from (.*$) { LOCALIP="000.000.000.000" LOCAL24="000.000.000" LOCALIPREGEXP="NULL" LOCALSENDER="host.example.com" LOCALHELO="host.example.com" LOCALNUMRCVDS="" LOCALRCVD="NULL" LOCALRECEIVER="host.example.com" # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK SECOND RECEIVED HEADER :0 * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK THIRD RECEIVED HEADER :0 * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK FOURTH RECEIVED HEADER :0 * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK FIFTH RECEIVED HEADER :0 * FOURTHEXIP ?? ^000\.000\.000\.000$ * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK SIXTH RECEIVED HEADER :0 * FOURTHEXIP ?? ^000\.000\.000\.000$ * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK SEVENTH RECEIVED HEADER :0 * FOURTHEXIP ?? ^000\.000\.000\.000$ * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK EIGHTH RECEIVED HEADER :0 * FOURTHEXIP ?? ^000\.000\.000\.000$ * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK NINTH RECEIVED HEADER :0 * FOURTHEXIP ?? ^000\.000\.000\.000$ * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK TENTH RECEIVED HEADER :0 * FOURTHEXIP ?? ^000\.000\.000\.000$ * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK ELEVENTH RECEIVED HEADER :0 * FOURTHEXIP ?? ^000\.000\.000\.000$ * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # CHECK TWELFTH RECEIVED HEADER :0 * FOURTHEXIP ?? ^000\.000\.000\.000$ * H ?? ^(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$) { LOCALIP=000.000.000.000 LOCALSENDER='host.example.com' LOCALHELO='host.example.com' LOCALNUMRCVDS='(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from(.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+(X-)?Received: from (.*$)+' LOCALRCVD=NULL LOCALRECEIVER='host.example.com' # Extract the header information. INCLUDERC=${SBDIR}/functions/extract-received-info.rc # Check extracted info for local origin. INCLUDERC=${SBDIR}/functions/checklocalrcvd.rc # Assign variable names. INCLUDERC=${SBDIR}/functions/assign-local-vars.rc } # EXTRACT THE FROM:, REPLY-TO:, AND X-ORIGINAL-IP: OR X-ORIGIN: LINE, IF ANY. # :0 * H ?? ^From: { STRING=`${FORMAIL} -xFrom:` :0 { STRING=`${ECHO} "${STRING}" | ${SED} -e '/^[^@]*$/d' -e '/^[^@]*["][^"]*["][^@]*$/d'` } :0 { STRING=`${ECHO} "${STRING}" | ${SED} -e 's/["][^"]*["][^§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z0-9]*//' -e 's/[ ]*\=\?[^?]*\?[^?]\?[^?]*\?\=[ ]*//' -e 's/^[^@]*[ ][^§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z0-9]*//' -e 's/\=\?[[^?]\?[§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z]\?[^?]*\=[cC][dD]\=[fF]8_[ ]*//' -e 's/^[^§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z0-9]*//' -e 's/, .*$//' -e 's/ (.*$//' -e 's/[^§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z]*$//' -e '2,$d'` } :0 { FROMEMAIL=`${ECHO} "${STRING}" | ${SED} -e 's/[^§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z0-9]*//'` } :0 * FROMEMAIL ?? ^$ { FROMEMAIL=noemail@example.com } } :0 * H ?? ^From: { STRING=`${FORMAIL} -xFrom:` :0 { STRING=`${ECHO} "${STRING}" | ${SED} -e '/^[^@]*$/d' -e '/^[^@]*["][^"]*["][^@]*$/d'` } :0 { STRING=`${ECHO} "${STRING}" | ${SED} -e 's/["][^"]*["][^§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z0-9]*//' -e 's/[ ]*\=\?[^?]*\?[^?]\?[^?]*\?\=[ ]*//' -e 's/^[^@]*[ ][^§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z0-9]*//' -e 's/\=\?[^?]\?[§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z]\?[^?]*\=[cC][dD]\=[fF]8_[ ]*//' -e 's/^[_§ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿA-Za-z0-9-]*