# SpamAssassin - URIDNSBL rules
#
# Please don't modify this file as your changes will be overwritten with
# the next update. Use @@LOCAL_RULES_DIR@@/local.cf instead.
# See 'perldoc Mail::SpamAssassin::Conf' for details.
#
# <@LICENSE>
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# </@LICENSE>
#
###########################################################################

# Requires the Mail::SpamAssassin::Plugin::URIDNSBL plugin be loaded.
# Note that this plugin defines a new config setting, 'uridnsbl',
# which lists the zones to look up in advance.  The rules will
# not hit unless each rule has a corresponding 'uridnsbl' line.

ifplugin Mail::SpamAssassin::Plugin::URIDNSBL

###########################################################################
## Spamhaus

uridnssub       URIBL_SBL        zen.spamhaus.org.       A   127.0.0.2
body            URIBL_SBL        eval:check_uridnsbl('URIBL_SBL')
describe        URIBL_SBL        Contains an URL's NS IP listed in the Spamhaus SBL blocklist
tflags          URIBL_SBL        net
reuse           URIBL_SBL

uridnssub       URIBL_CSS        zen.spamhaus.org.       A   127.0.0.3
body            URIBL_CSS        eval:check_uridnsbl('URIBL_CSS')
describe        URIBL_CSS        Contains an URL's NS IP listed in the Spamhaus CSS blocklist
tflags          URIBL_CSS        net
reuse           URIBL_CSS

# Only works correctly from 3.4.3, earlier versions basically run as URIBL_SBL duplicate
if can(Mail::SpamAssassin::Plugin::URIDNSBL::has_uridnsbl_for_a)
  uridnssub       URIBL_SBL_A      zen.spamhaus.org.       A   127.0.0.2
  body            URIBL_SBL_A      eval:check_uridnsbl('URIBL_SBL_A')
  describe        URIBL_SBL_A      Contains URL's A record listed in the Spamhaus SBL blocklist
  tflags          URIBL_SBL_A      net a
  reuse           URIBL_SBL_A

  uridnssub       URIBL_CSS_A      zen.spamhaus.org.       A   127.0.0.3
  body            URIBL_CSS_A      eval:check_uridnsbl('URIBL_CSS_A')
  describe        URIBL_CSS_A      Contains URL's A record listed in the Spamhaus CSS blocklist
  tflags          URIBL_CSS_A      net a
  reuse           URIBL_CSS_A
endif

# New blocked checks 10/2019
uridnssub URIBL_ZEN_BLOCKED_OPENDNS  zen.spamhaus.org.       A   127.255.255.254
body      URIBL_ZEN_BLOCKED_OPENDNS  eval:check_uridnsbl('URIBL_ZEN_BLOCKED_OPENDNS')
describe  URIBL_ZEN_BLOCKED_OPENDNS  ADMINISTRATOR NOTICE: The query to zen.spamhaus.org was blocked due to usage of an open resolver. See https://www.spamhaus.org/returnc/pub/
tflags    URIBL_ZEN_BLOCKED_OPENDNS  net
reuse     URIBL_ZEN_BLOCKED_OPENDNS

# New blocked checks 10/2019
uridnssub URIBL_ZEN_BLOCKED  zen.spamhaus.org.       A   127.255.255.255
body      URIBL_ZEN_BLOCKED  eval:check_uridnsbl('URIBL_ZEN_BLOCKED')
describe  URIBL_ZEN_BLOCKED  ADMINISTRATOR NOTICE: The query to zen.spamhaus.org was blocked. See https://www.spamhaus.org/returnc/vol/
tflags    URIBL_ZEN_BLOCKED  net
reuse     URIBL_ZEN_BLOCKED

if can(Mail::SpamAssassin::Conf::feature_dns_block_rule)
dns_block_rule URIBL_ZEN_BLOCKED_OPENDNS zen.spamhaus.org
dns_block_rule URIBL_ZEN_BLOCKED zen.spamhaus.org
endif


# DBL, https://www.spamhaus.org/dbl/
# changes axb 05-17-2014: as per https://www.spamhaus.org/news/article/713/
# SH changes effective 06-01-2014
if can(Mail::SpamAssassin::Plugin::URIDNSBL::has_tflags_domains_only)

urirhssub       URIBL_DBL_SPAM   	dbl.spamhaus.org.       A   127.0.1.2
body            URIBL_DBL_SPAM   	eval:check_uridnsbl('URIBL_DBL_SPAM')
describe        URIBL_DBL_SPAM   	Contains a spam URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_SPAM   	net domains_only
reuse           URIBL_DBL_SPAM

urirhssub       URIBL_DBL_PHISH  	dbl.spamhaus.org.       A   127.0.1.4
body            URIBL_DBL_PHISH	 	eval:check_uridnsbl('URIBL_DBL_PHISH')
describe        URIBL_DBL_PHISH	 	Contains a Phishing URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_PHISH  	net domains_only
reuse           URIBL_DBL_PHISH

urirhssub       URIBL_DBL_MALWARE  	dbl.spamhaus.org.       A   127.0.1.5
body            URIBL_DBL_MALWARE  	eval:check_uridnsbl('URIBL_DBL_MALWARE')
describe        URIBL_DBL_MALWARE  	Contains a malware URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_MALWARE  	net domains_only
reuse           URIBL_DBL_MALWARE

urirhssub       URIBL_DBL_BOTNETCC  	dbl.spamhaus.org.       A   127.0.1.6
body            URIBL_DBL_BOTNETCC	eval:check_uridnsbl('URIBL_DBL_BOTNETCC')
describe        URIBL_DBL_BOTNETCC	Contains a botned C&C URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_BOTNETCC	net domains_only
reuse           URIBL_DBL_BOTNETCC

urirhssub       URIBL_DBL_ABUSE_SPAM  	dbl.spamhaus.org.       A   127.0.1.102
body            URIBL_DBL_ABUSE_SPAM	eval:check_uridnsbl('URIBL_DBL_ABUSE_SPAM')
describe        URIBL_DBL_ABUSE_SPAM	Contains an abused spamvertized URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_ABUSE_SPAM	net domains_only
reuse           URIBL_DBL_ABUSE_SPAM

urirhssub       URIBL_DBL_ABUSE_REDIR  	dbl.spamhaus.org.       A   127.0.1.103
body            URIBL_DBL_ABUSE_REDIR  	eval:check_uridnsbl('URIBL_DBL_ABUSE_REDIR')
describe        URIBL_DBL_ABUSE_REDIR  	Contains an abused redirector URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_ABUSE_REDIR  	net domains_only
reuse           URIBL_DBL_ABUSE_REDIR

urirhssub       URIBL_DBL_ABUSE_PHISH  	dbl.spamhaus.org.       A   127.0.1.104
body            URIBL_DBL_ABUSE_PHISH	eval:check_uridnsbl('URIBL_DBL_ABUSE_PHISH')
describe        URIBL_DBL_ABUSE_PHISH	Contains an abused phishing URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_ABUSE_PHISH	net domains_only
reuse           URIBL_DBL_ABUSE_PHISH

urirhssub       URIBL_DBL_ABUSE_MALW  	dbl.spamhaus.org.       A   127.0.1.105
body            URIBL_DBL_ABUSE_MALW	eval:check_uridnsbl('URIBL_DBL_ABUSE_MALW')
describe        URIBL_DBL_ABUSE_MALW	Contains an abused malware URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_ABUSE_MALW	net domains_only
reuse           URIBL_DBL_ABUSE_MALW

urirhssub       URIBL_DBL_ABUSE_BOTCC  	dbl.spamhaus.org.       A   127.0.1.106
body            URIBL_DBL_ABUSE_BOTCC  	eval:check_uridnsbl('URIBL_DBL_ABUSE_BOTCC')
describe        URIBL_DBL_ABUSE_BOTCC  	Contains an abused botnet C&C URL listed in the Spamhaus DBL blocklist
tflags          URIBL_DBL_ABUSE_BOTCC  	net domains_only
reuse           URIBL_DBL_ABUSE_BOTCC


# this indicates that IP-address queries were sent to DBL, and should
# never appear; if it does, something is wrong with SpamAssassin
urirhssub       URIBL_DBL_ERROR  dbl.spamhaus.org.       A   127.0.1.255
body            URIBL_DBL_ERROR  eval:check_uridnsbl('URIBL_DBL_ERROR')
describe        URIBL_DBL_ERROR  Error: queried the Spamhaus DBL blocklist for an IP
tflags          URIBL_DBL_ERROR  net domains_only
reuse           URIBL_DBL_ERROR

# New blocked checks 10/2019
urirhssub       URIBL_DBL_BLOCKED_OPENDNS  dbl.spamhaus.org.       A   127.255.255.254
body            URIBL_DBL_BLOCKED_OPENDNS  eval:check_uridnsbl('URIBL_DBL_BLOCKED_OPENDNS')
describe        URIBL_DBL_BLOCKED_OPENDNS  ADMINISTRATOR NOTICE: The query to dbl.spamhaus.org was blocked due to usage of an open resolver. See https://www.spamhaus.org/returnc/pub/
tflags          URIBL_DBL_BLOCKED_OPENDNS  net domains_only
reuse           URIBL_DBL_BLOCKED_OPENDNS

# New blocked checks 10/2019
urirhssub       URIBL_DBL_BLOCKED  dbl.spamhaus.org.       A   127.255.255.255
body            URIBL_DBL_BLOCKED  eval:check_uridnsbl('URIBL_DBL_BLOCKED')
describe        URIBL_DBL_BLOCKED  ADMINISTRATOR NOTICE: The query to dbl.spamhaus.org was blocked. See https://www.spamhaus.org/returnc/vol/
tflags          URIBL_DBL_BLOCKED  net domains_only
reuse           URIBL_DBL_BLOCKED

endif

###########################################################################
## SURBL

#MERGED INTO BIT 64 per bug 7279
#urirhssub       URIBL_SC_SURBL  multi.surbl.org.        A   2
#body            URIBL_SC_SURBL  eval:check_uridnsbl('URIBL_SC_SURBL')
#describe        URIBL_SC_SURBL  Contains an URL listed in the SC SURBL blocklist
#tflags          URIBL_SC_SURBL  net
#reuse           URIBL_SC_SURBL

urirhssub       URIBL_WS_SURBL  multi.surbl.org.        A   4
body            URIBL_WS_SURBL  eval:check_uridnsbl('URIBL_WS_SURBL')
describe        URIBL_WS_SURBL  Contains an URL listed in the WS SURBL blocklist
tflags          URIBL_WS_SURBL  net
reuse           URIBL_WS_SURBL

urirhssub       URIBL_PH_SURBL  multi.surbl.org.        A   8
body            URIBL_PH_SURBL  eval:check_uridnsbl('URIBL_PH_SURBL')
describe        URIBL_PH_SURBL  Contains an URL listed in the PH SURBL blocklist
tflags          URIBL_PH_SURBL  net
reuse           URIBL_PH_SURBL

urirhssub       URIBL_MW_SURBL  multi.surbl.org.        A   16
body            URIBL_MW_SURBL  eval:check_uridnsbl('URIBL_MW_SURBL')
describe        URIBL_MW_SURBL  Contains a URL listed in the MW SURBL blocklist
tflags          URIBL_MW_SURBL  net
reuse           URIBL_MW_SURBL

urirhssub       URIBL_CR_SURBL  multi.surbl.org.        A   128
body            URIBL_CR_SURBL  eval:check_uridnsbl('URIBL_CR_SURBL')
describe        URIBL_CR_SURBL  Contains an URL listed in the CR SURBL blocklist
tflags          URIBL_CR_SURBL  net
reuse           URIBL_CR_SURBL

#MERGED INTO BIT 64 per bug 7279
#urirhssub       URIBL_AB_SURBL  multi.surbl.org.        A   32
#body            URIBL_AB_SURBL  eval:check_uridnsbl('URIBL_AB_SURBL')
#describe        URIBL_AB_SURBL  Contains an URL listed in the AB SURBL blocklist
#tflags          URIBL_AB_SURBL  net
#reuse           URIBL_AB_SURBL

#JP MOVED INTO ABUSE AS WELL AND BIT REUSED  per bug 7279
urirhssub       URIBL_ABUSE_SURBL  multi.surbl.org.        A   64
body            URIBL_ABUSE_SURBL  eval:check_uridnsbl('URIBL_ABUSE_SURBL')
describe        URIBL_ABUSE_SURBL  Contains an URL listed in the ABUSE SURBL blocklist
tflags          URIBL_ABUSE_SURBL  net
reuse           URIBL_ABUSE_SURBL

#SURBL BLOCK RULES - Bit 1 means your DNS has been blocked and this rule should be triggered to notify you.
urirhssub       SURBL_BLOCKED   multi.surbl.org.        A   1
body            SURBL_BLOCKED   eval:check_uridnsbl('SURBL_BLOCKED')
describe        SURBL_BLOCKED   ADMINISTRATOR NOTICE: The query to SURBL was blocked.  See http://wiki.apache.org/spamassassin/DnsBlocklists\#dnsbl-block for more information.
tflags          SURBL_BLOCKED   net noautolearn
reuse           SURBL_BLOCKED

if can(Mail::SpamAssassin::Conf::feature_dns_block_rule)
dns_block_rule SURBL_BLOCKED multi.surbl.org
endif

###########################################################################
## URIBL

urirhssub       URIBL_BLACK     multi.uribl.com.        A   2
body            URIBL_BLACK     eval:check_uridnsbl('URIBL_BLACK')
describe        URIBL_BLACK     Contains an URL listed in the URIBL blacklist
tflags          URIBL_BLACK     net
reuse           URIBL_BLACK

urirhssub       URIBL_GREY      multi.uribl.com.        A   4
body            URIBL_GREY      eval:check_uridnsbl('URIBL_GREY')
describe        URIBL_GREY      Contains an URL listed in the URIBL greylist
tflags          URIBL_GREY      net
reuse           URIBL_GREY

urirhssub       URIBL_RED       multi.uribl.com.        A   8
body            URIBL_RED       eval:check_uridnsbl('URIBL_RED')
describe        URIBL_RED       Contains an URL listed in the URIBL redlist
tflags          URIBL_RED       net
reuse           URIBL_RED

#URIBL BLOCK RULES - Bit 1 means your DNS has been blocked and this rule should be triggered to notify you.
urirhssub       URIBL_BLOCKED   multi.uribl.com.        A   1
body            URIBL_BLOCKED   eval:check_uridnsbl('URIBL_BLOCKED')
describe        URIBL_BLOCKED   ADMINISTRATOR NOTICE: The query to URIBL was blocked.  See http://wiki.apache.org/spamassassin/DnsBlocklists\#dnsbl-block for more information.
tflags          URIBL_BLOCKED   net noautolearn
reuse           URIBL_BLOCKED

if can(Mail::SpamAssassin::Conf::feature_dns_block_rule)
dns_block_rule URIBL_BLOCKED multi.uribl.com
endif

###########################################################################
## DOMAINS TO SKIP (KNOWN GOOD)

# Linting
uridnsbl_skip_domain taint.org

# Don't bother looking for example domains as per RFC 2606.
uridnsbl_skip_domain example.com example.net example.org

uridnsbl_skip_domain local.cf

# MUA CSS class definitions
uridnsbl_skip_domain div.tk p.tk li.tk no.tk

# (roughly) top 200 domains not blacklisted by SURBL
uridnsbl_skip_domain 126.com 163.com 2o7.net 4at1.com
uridnsbl_skip_domain 5iantlavalamp.com about.com adelphia.net adobe.com addthis.com
uridnsbl_skip_domain agora-inc.com agoramedia.com akamai.net
uridnsbl_skip_domain akamaitech.net amazon.com ancestry.com aol.com
uridnsbl_skip_domain apache.org apple.com arcamax.com astrology.com apple.news
uridnsbl_skip_domain atdmt.com att.net bbc.co.uk
uridnsbl_skip_domain bcentral.com bellsouth.net bfi0.com
uridnsbl_skip_domain bridgetrack.com cafe24.com charter.net
uridnsbl_skip_domain citibank.com citizensbank.com cjb.net
uridnsbl_skip_domain classmates.com clickbank.net cnet.com
uridnsbl_skip_domain cnn.com com.com com.ne.kr comcast.net
uridnsbl_skip_domain corporate-ir.net cox.net cs.com
uridnsbl_skip_domain custhelp.com daum.net dd.se debian.org
uridnsbl_skip_domain dell.com directtrack.com directnic.com domain.com
uridnsbl_skip_domain dsbl.org earthlink.net ebay.co.uk ebay.com
uridnsbl_skip_domain ebayimg.com ebaystatic.com edgesuite.net ediets.com
uridnsbl_skip_domain egroups.com emode.com excite.com f-secure.com
uridnsbl_skip_domain free.fr freebsd.org
uridnsbl_skip_domain gentoo.org geocities.com gmail.com gmx.net
uridnsbl_skip_domain go.com google.com googleadservices.com grisoft.com
uridnsbl_skip_domain hallmark.com hinet.net hotbar.com hotmail.com
uridnsbl_skip_domain hotpop.com hp.com ibm.com incredimail.com
uridnsbl_skip_domain investorplace.com ivillage.com joingevalia.com
uridnsbl_skip_domain juno.com kernel.org livejournal.com lycos.com
uridnsbl_skip_domain m7z.net mac.com macromedia.com
uridnsbl_skip_domain mail.com mail.ru mailscanner.info marketwatch.com
uridnsbl_skip_domain mcafee.com mchsi.com messagelabs.com
uridnsbl_skip_domain microsoft.com military.com mindspring.com mit.edu
uridnsbl_skip_domain monster.com msn.com nate.com
uridnsbl_skip_domain netflix.com netscape.com netscape.net netzero.net
uridnsbl_skip_domain norman.com nytimes.com optonline.net osdn.com
uridnsbl_skip_domain overstock.com pacbell.net pandasoftware.com
uridnsbl_skip_domain paypal.com peoplepc.com plaxo.com
uridnsbl_skip_domain prodigy.net radaruol.com.br
uridnsbl_skip_domain real.com redhat.com regions.com regionsnet.com
uridnsbl_skip_domain rogers.com rr.com sbcglobal.net sec.gov sf.net
uridnsbl_skip_domain shaw.ca shockwave.com smithbarney.com
uridnsbl_skip_domain sourceforge.net spamcop.net speedera.net sportsline.com
uridnsbl_skip_domain sun.com suntrust.com sympatico.ca t-online.de
uridnsbl_skip_domain tails.nl telus.net terra.com.br ticketmaster.com
uridnsbl_skip_domain tinyurl.com tiscali.co.uk tom.com
uridnsbl_skip_domain tone.co.nz tux.org uol.com.br
uridnsbl_skip_domain ups.com verizon.net w3.org usps.com
uridnsbl_skip_domain wamu.com wanadoo.fr washingtonpost.com weatherbug.com
uridnsbl_skip_domain web.de webshots.com webtv.net wsj.com
uridnsbl_skip_domain yahoo.ca yahoo.co.kr yahoo.co.uk
uridnsbl_skip_domain yahoo.com yahoo.com.br yahoogroups.com yimg.com
uridnsbl_skip_domain yopi.de yoursite.com zdnet.com
uridnsbl_skip_domain openxmlformats.org passport.com xmlsoap.org
uridnsbl_skip_domain abc.xyz avast.com schema.org

# wtogami's most frequent known good URIDNSBL lookups (1/1/2011)
uridnsbl_skip_domain alexa.com ask.com baidu.com bing.com craigslist.org
uridnsbl_skip_domain doubleclick.com ebay.de facebook.com flickr.com godaddy.com
uridnsbl_skip_domain google.co.in google.it mozilla.com myspace.com rediff.com
uridnsbl_skip_domain twitter.com wordpress.com yahoo.co.jp youtube.com

# axb's frequent known good URIDNSBL lookups

uridnsbl_skip_domain fedex.com
uridnsbl_skip_domain openoffice.org
uridnsbl_skip_domain vk.com

# pointless footer noise
uridnsbl_skip_domain security.cloud
uridnsbl_skip_domain yac.mx

# Microsoft on ns1.msedge.net
uridnsbl_skip_domain microsofttranslator.com office.com microsoftonline.com bing.com msedge.net

# Some frequent known good URIDNSBL lookups 3.10.2018 -hk
uridnsbl_skip_domain aka.ms akamaihd.net alibaba.com alicdn.com amazon.co.uk
uridnsbl_skip_domain amazon.de amazonaws.com amazonses.com bandcamp.com
uridnsbl_skip_domain booking.com cdninstagram.com cloudfront.net dhl.com
uridnsbl_skip_domain dhl.fi dna.fi domain.fi dpd.de dropbox.com ebay.fr
uridnsbl_skip_domain elisa.fi elisanet.fi emltrk.com fbcdn.net ficora.fi
uridnsbl_skip_domain gappssmtp.com github.com goo.gl google-analytics.com
uridnsbl_skip_domain google.de google.fi googleapis.com googleusercontent.com
uridnsbl_skip_domain gstatic.com hotels.com ikea.com images-amazon.com
uridnsbl_skip_domain inet.fi instagram.com kolumbus.fi licdn.com linkedin.com
uridnsbl_skip_domain media-amazon.com mtasv.net mzstatic.com nebula.fi
uridnsbl_skip_domain nic.fi onmicrosoft.com oracle.com paypalobjects.com
uridnsbl_skip_domain pinimg.com pinterest.com posti.com posti.fi pstmrk.it
uridnsbl_skip_domain skype.com soundcloud.com ssl-images-amazon.com
uridnsbl_skip_domain suomi24.fi t.co telia.com telia.fi tnt.com tori.fi
uridnsbl_skip_domain tripadvisor.com twimg.com youtu.be
# Some more frequent known good URIDNSBL lookups 10.4.2020 -hk
uridnsbl_skip_domain docs.google.com etuovi.com iki.fi nflxext.com nflximg.com
uridnsbl_skip_domain nflximg.net outlook.com postnord.com postnord.fi postnord.no
uridnsbl_skip_domain saunalahti.fi

endif   # Mail::SpamAssassin::Plugin::URIDNSBL
