<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>andi.de &#187; Linux</title>
	<atom:link href="http://www.andi.de/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andi.de</link>
	<description></description>
	<lastBuildDate>Mon, 29 Dec 2008 02:35:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Weg damit</title>
		<link>http://www.andi.de/2007/05/01/weg-damit/</link>
		<comments>http://www.andi.de/2007/05/01/weg-damit/#comments</comments>
		<pubDate>Tue, 01 May 2007 20:44:10 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Webtechnik]]></category>
		<category><![CDATA[endgültig]]></category>
		<category><![CDATA[löschen]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.andi.de/2007/05/01/weg-damit/</guid>
		<description><![CDATA[Hin und wieder ist es n&#246;tig, aber ein bisschen Respekt hat man doch jedesmal wieder davor &#8212; und checkt f&#252;nfmal, dass man es auch auf der richtigen Maschine ausf&#252;hrt&#8230;    :

dd if=/dev/zero of=/dev/sda bs=10240
dd if=/dev/zero of=/dev/sdb bs=10240

Und tsch&#252;&#223;   
]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/2007/05/ratzfatz.jpg" align="left" width="118" height="115" hspace="10" vspace="10" border="0" />Hin und wieder ist es n&#246;tig, aber ein bisschen Respekt hat man doch jedesmal wieder davor &#8212; und checkt f&#252;nfmal, dass man es auch auf der richtigen Maschine ausf&#252;hrt&#8230;  <img src="http://www.andi.de/wordpress/wp-content/plugins/more-smilies/macinacs/razz.gif" alt="razz" class="wp-smiley" />  :</p>
<div style="clear:both;"><br/>
<pre class="precode" ><code>dd if=/dev/zero of=/dev/sda bs=10240
dd if=/dev/zero of=/dev/sdb bs=10240</code></pre>
</div>
<p>Und tsch&#252;&#223;  <img src="http://www.andi.de/wordpress/wp-content/plugins/more-smilies/macinacs/laugh.gif" alt="grin" class="wp-smiley" /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.andi.de/2007/05/01/weg-damit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DoS-Angriffe erfolgreich aufhalten</title>
		<link>http://www.andi.de/2007/02/17/dos-angriffe-erfolgreich-aufhalten/</link>
		<comments>http://www.andi.de/2007/02/17/dos-angriffe-erfolgreich-aufhalten/#comments</comments>
		<pubDate>Fri, 16 Feb 2007 23:50:30 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Webtechnik]]></category>
		<category><![CDATA[angriff]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[modul]]></category>

		<guid isPermaLink="false">http://www.andi.de/2007/02/17/dos-angriffe-erfolgreich-aufhalten/</guid>
		<description><![CDATA[Immer wieder versuchen nervige Script-Kiddies, Spam-Bots oder sonstige b&#246;sgestimmte Zeitgenossen, durch viele Anfragen an Webserver in sehr kurzer Zeit deren Funktion zu beeintr&#228;chtigen und die Auslieferung der Inhalte an „normale“ Besucher dadurch zu erschweren oder gar ganz zu verhindern.
Heutzutage generieren sich viele Webprojekte aus dynamisch erzeuten Seiten; die Bildung der Inhalte ben&#246;tigt daher Rechenzeit und [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/2007/02/angriff.jpg" width="163" align="left" height="140" hspace="10" vspace="10" border="0" />Immer wieder versuchen nervige Script-Kiddies, Spam-Bots oder sonstige b&#246;sgestimmte Zeitgenossen, durch viele Anfragen an Webserver in sehr kurzer Zeit deren Funktion zu beeintr&#228;chtigen und die Auslieferung der Inhalte an „normale“ Besucher dadurch zu erschweren oder gar ganz zu verhindern.<br />
Heutzutage generieren sich viele Webprojekte aus dynamisch erzeuten Seiten; die Bildung der Inhalte ben&#246;tigt daher Rechenzeit und Speicher auf derm Webserver, was das <a href="http://de.wikipedia.org/wiki/Denial_of_Service">DoS-Problem</a> verst&#228;rkt. Durch zu viele Anfragen in zu kurzer Zeit steigt die CPU-Auslastung an und in ung&#252;nstigen Situation ist kein Seiteaufbau mehr m&#246;glich, da dem Server der RAM ausgeht.<br />
Um hier Entlastung zu bringen wurde das Apache-Modul <em><a href="http://www.nuclearelephant.com/projects/mod_evasive/">mod_evasive</a></em> entwickelt (<a href="http://huschi.net/14_182_de.html">Download-Mirror</a>), welches die maximal m&#246;glichen Verbindungen pro IP-Adresse kontrolliert und im Bedarfsfall abblockt.<span id="more-137"></span><br />
mod_evasive erstellt intern eine Liste von zugreifenden IPs und angeforderten URLs. Sobald in einer einstellbaren Zeitspanne ein festgelegter Schwellwert &#252;berschritten wird, lehnt das Modul weitere Zugriffe innerhalb einer Blacklist-Frist mit einem <a href="http://de.wikipedia.org/wiki/Fehlerseite">403-Forbidden-Fehler</a> ab &#8212; hierduch erfolgt kein rechenintensiver Aufruf von Inhalten mehr und viele DoS-Attacken laufen ins Leere.<br />
Die Installation ist einfach. Das Modul kann im Quelltext <a href="http://huschi.net/14_182_de.html">bezogen</a> werden und bei installieren Apache-dev-Quellen simpel durch Aufruf von</p>
<pre class="precode"><code>apxs -i -a -c mod_evasive20.c</code></pre>
<p>kompiliert und den Apache-Modulen zugef&#252;gt werden.<br />
Bei der Installation wird ein Eintrag in die <code>httpd.conf</code> eingef&#252;gt; zus&#228;tzlich empfiehlt sich, die Parameter von mod_evasive an die eigenen Bed&#252;rfnisse anzupassen.<br />
Hierzu f&#252;gt man in der Apache-Konfiguration einen Abschnitt ein:</p>
<pre class="precode"><code>&lt;IfModule mod_evasive20.c&gt;
    DOSHashTableSize    3096
    DOSPageCount        5
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
&lt;/IfModule&gt;</code></pre>
<p>Die Bedeutung der einzelnen Option sind in der Dokumentation erl&#228;utert.<br />
Nach einem Neustart von Apache greift der Schutz. Bei Bedarf kann bei IP-Blacklistungen eine eMail an eine beliebige Adresse geschickt werden. Hierzu kann man oben zus&#228;tzlich die Option <code>DOSEmailNotify admin@mydomain.net</code> mit passender Adresse eintragen.<br />
Anzumerken bleibt, dass mod_evasive zwar eine deutliche Lastreduktion bei Angriffen bieten kann, einen vollst&#228;ndigen Schutz leistet aber nur ein Abblocken der DoS-Pakete mittels Firewall, bevor sie Apache &#252;berhaut erreichen k&#246;nnen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andi.de/2007/02/17/dos-angriffe-erfolgreich-aufhalten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_rewrite: Variablen auf neues Ziel umleiten</title>
		<link>http://www.andi.de/2007/01/08/mod_rewrite-variablen-auf-neues-ziel-umleiten/</link>
		<comments>http://www.andi.de/2007/01/08/mod_rewrite-variablen-auf-neues-ziel-umleiten/#comments</comments>
		<pubDate>Mon, 08 Jan 2007 16:39:21 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[rewrite]]></category>

		<guid isPermaLink="false">http://www.andi.de/2007/01/08/mod_rewrite-variablen-auf-neues-ziel-umleiten/</guid>
		<description><![CDATA[Vielleicht standet ihr auch schon vor dem Problem: die URL-Struktur einer Webpr&#228;senz hat sich ge&#228;ndert, Skripte, welche Inhalte dynamisch generieren, liegen an anderen Orten und u.U. hat sich auch die Struktur der zu &#252;bergebenden GET-Variablen ge&#228;ndert.
Prinzipiell eigentlich kein Problem, schlie&#223;lich sollten die dynamischen Inhalte aus dem Gesamtkontext mit der neuen Struktur erzeugt werden; anders sieht [...]]]></description>
			<content:encoded><![CDATA[<p>Vielleicht standet ihr auch schon vor dem Problem: die URL-Struktur einer Webpr&#228;senz hat sich ge&#228;ndert, Skripte, welche Inhalte dynamisch generieren, liegen an anderen Orten und u.U. hat sich auch die Struktur der zu &#252;bergebenden GET-Variablen ge&#228;ndert.<br />
Prinzipiell eigentlich kein Problem, schlie&#223;lich sollten die dynamischen Inhalte aus dem Gesamtkontext mit der neuen Struktur erzeugt werden; anders sieht es jedoch aus, wenn es sich bei den Skript-Dateien um wichtige Inhalte handelt, die auch bei Google schon gut indiziert sind.<br />
Es w&#228;re &#228;rgerlich, wenn die bei Google gef&#252;hrten Links nicht mehr g&#252;ltig sind und ins Leere laufen &#8211; oder sogar 404-Fehler erzeugen.<br />
Um die Struktur von Web-Pr&#228;senzen auf neue Ziele „umzubiegen“ bietet sich ein Regelwerk in der sogenannten <code>.htaccess</code>-Datei an.<br />
Leider ist die Umleitung von GET-Variablen nicht ganz trivial.<br />
Der erste Gedanke w&#228;re z.B. folgende L&#246;sung, um die Parameter des Skripts <code>datei.php</code> &#8212; <code>param1</code> sowie <code>param2</code> auf die neue Location umzuleiten:</p>
<div class="precode" >
<pre><code>RewriteRule ^datei\.php\?param1=([^&amp;]+)&amp;param2([^&amp;]+) /neu/datei/$2/$1 [R=301,L]
#falsch!!
</code></pre>
</div>
<p>So klappt es leider nicht, da mod_rewrite diese Behandlung von QueryParametern nicht toleriert.<br />
Der richtige Ansatz l&#228;uft &#252;ber Analyse des QueryStrings, um die GET-Parameter zu separieren:</p>
<div class="precode" >
<pre><code>RewriteEngine On 
RewriteCond %{QUERY_STRING} ^param1=([^&amp;]+)&amp;param2=([^&amp;]+)$ 
RewriteRule ^datei\.php$ /datei/%2/%1? [R=301,L] 
</code></pre>
</div>
<p>Per <code>%n</code> wird hier auf die &#8216;Variablen&#8217; der vorigen RewriteCond zugegriffen.<br />
Nach diesem Muster lassen sich auch anspruchsvolle Umstukturierungen &#8220;google-freundlich&#8221; durchf&#252;hren. Beispiele f&#252;r weitere Rewrite-Methoden gibt es in der <a href="http://httpd.apache.org/docs/2.0/misc/rewriteguide.html">Apache-Dokumentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andi.de/2007/01/08/mod_rewrite-variablen-auf-neues-ziel-umleiten/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Spamassassin: Tests und deren Beschreibung</title>
		<link>http://www.andi.de/2006/11/24/spamassassin-tests-und-deren-beschreibung/</link>
		<comments>http://www.andi.de/2006/11/24/spamassassin-tests-und-deren-beschreibung/#comments</comments>
		<pubDate>Fri, 24 Nov 2006 21:46:45 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[beschreibung]]></category>
		<category><![CDATA[spamassassin]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.andi.de/2006/11/24/spamassassin-tests-und-deren-beschreibung/</guid>
		<description><![CDATA[Wer sich schon einmal n&#228;her mit Spamassassin besch&#228;ftigt hat wird wissen, dass dieses hilfreiche Werkzeug die durchgeleitete eMail mittels verschiedener Algorithmen bewertet und w&#228;hrend der Ausf&#252;hrung der diversen Tests bei passender Konfiguration die als positiv erkannten Spamerkennungs-Treffer durch Schlagworte im Mailheader anzeigt.
Ein Beispiel:

X-Spam-Status: No, score=-1.5 required=8.8 tests=AWL,BAYES_00,
    FORGED_RCVD_HELO,HTML_90_100,HTML_IMAGE_RATIO_02,HTML_MESSAGE,
    SPF_HELO_PASS [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/2006/11/stamp.jpg" align="left" width="190" height="154" hspace="10" vspace="10" border="0" />Wer sich schon einmal n&#228;her mit <a href="http://spamassassin.apache.org/">Spamassassin</a> besch&#228;ftigt hat wird wissen, dass dieses hilfreiche Werkzeug die durchgeleitete eMail mittels verschiedener Algorithmen bewertet und w&#228;hrend der Ausf&#252;hrung der diversen Tests bei passender Konfiguration die als positiv erkannten Spamerkennungs-Treffer durch Schlagworte im Mailheader anzeigt.<br />
Ein Beispiel:</p>
<div class="precode" style="">
<pre><code>X-Spam-Status: No, score=-1.5 required=8.8 tests=AWL,BAYES_00,
    FORGED_RCVD_HELO,HTML_90_100,HTML_IMAGE_RATIO_02,HTML_MESSAGE,
    SPF_HELO_PASS autolearn=no version=3.1.1
</code></pre>
</div>
<p>Die Stichw&#246;rter besitzen zwar einigerma&#223;en sprechende Namen, manchmal w&#228;re es aber doch hilfreich, n&#228;here Details &#252;ber den positiven Treffer zu erhalten.<br />
Hier eine Auflistung der am h&#228;ufigsten anzutreffenden Schl&#252;sselworte mit Erkl&#228;rung und Ort der Erkennung:<br />
<span id="more-72"></span></p>
<div align="center">
<table width=97% border=0 cellpadding=0 cellspacing=0>
<tr style="border-bottom:1px solid #999;background-color:#eee;">
<th>Schl&#252;sselwort</th>
<th>Erkl&#228;rung</th>
<th>Ort</th>
</tr>
<tr height=13>
<td height=13 > ACCESSDB</td>
<td > Message would have been caught by accessdb</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> ACT_NOW_CAPS</td>
<td> Talks about &#8216;acting now&#8217; with capitals</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> ADDR_FREE</td>
<td> From Address contains FREE</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> ADDRESS_IN_SUBJECT</td>
<td> To: address appears in Subject</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> ALL_NATURAL</td>
<td> Spam is 100% natural?!</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> ALL_TRUSTED</td>
<td> Passed through trusted hosts only via SMTP</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> AMATEUR_PORN</td>
<td> Possible porn &#8211; Amateur Porn</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> AMAZING_STUFF</td>
<td> Amazing Stuff</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> AS_SEEN_ON</td>
<td> As seen on national TV!</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> AWL</td>
<td> From: address is in the auto white-list</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> BAD_CREDIT</td>
<td> Eliminate Bad Credit</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAD_ENC_HEADER</td>
<td> Message has bad MIME encoding in the header</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> BANG_EXERCISE</td>
<td> Talks about exercise with an exclamation!</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BANG_GUAR</td>
<td> Something is emphatically guaranteed</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BANG_MORE</td>
<td> Talks about more with an exclamation!</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BANG_OPRAH</td>
<td> Talks about Oprah with an exclamation!</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BARGAIN_URL</td>
<td> Includes a link to a likely spammer domain</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> BAYES_00</td>
<td> Bayesian spam probability is 0 to 1%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAYES_05</td>
<td> Bayesian spam probability is 1 to 5%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAYES_20</td>
<td> Bayesian spam probability is 5 to 20%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAYES_40</td>
<td> Bayesian spam probability is 20 to 40%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAYES_50</td>
<td> Bayesian spam probability is 40 to 60%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAYES_60</td>
<td> Bayesian spam probability is 60 to 80%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAYES_80</td>
<td> Bayesian spam probability is 80 to 95%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAYES_95</td>
<td> Bayesian spam probability is 95 to 99%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BAYES_99</td>
<td> Bayesian spam probability is 99 to 100%</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BE_BOSS</td>
<td> Be your own boss</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BEST_PORN</td>
<td> Possible porn &#8211; Best, Largest, Most Porn</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BILL_1618</td>
<td> Possible mention of bill 1618 (anti-spam bill)</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BILLION_DOLLARS</td>
<td> Talks about lots of money</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BIZ_TLD</td>
<td> Contains an URL in the BIZ top-level domain</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> BLANK_LINES_70_80</td>
<td> Message body has 70-80% blank lines</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BLANK_LINES_80_90</td>
<td> Message body has 80-90% blank lines</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BLANK_LINES_90_100</td>
<td> Message body has 90-100% blank lines</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BODY_8BITS</td>
<td> Body includes 8 consecutive 8-bit characters</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BODY_ENHANCEMENT</td>
<td> Information on growing body parts</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> BODY_ENHANCEMENT2</td>
<td> Information on getting larger body parts</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> CHARSET_FARAWAY</td>
<td> Character set indicates a foreign language</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> CHARSET_FARAWAY_HEADER</td>
<td> A foreign language charset used in headers</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> CHINA_HEADER</td>
<td> Involves &#8216;china.com&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> CLICK_BELOW_CAPS</td>
<td> Asks you to click below (in capital letters)</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> CLICK_TO_REMOVE_1</td>
<td> Click to be removed</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> COMPETE</td>
<td> Compete for your business</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> CONFIDENTIAL_ORDER</td>
<td> Confidentiality on all orders</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> CONSOLIDATE_DEBT</td>
<td> Consolidate debt, credit, or bills</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> CUM_SHOT</td>
<td> Possible porn &#8211; Cum Shot</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_FUTURE_03_06</td>
<td> Date: is 3 to 6 hours after Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_FUTURE_06_12</td>
<td> Date: is 6 to 12 hours after Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_FUTURE_12_24</td>
<td> Date: is 12 to 24 hours after Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_FUTURE_24_48</td>
<td> Date: is 24 to 48 hours after Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_FUTURE_48_96</td>
<td> Date: is 48 to 96 hours after Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_FUTURE_96_XX</td>
<td> Date: is 96 hours or more after Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_PAST_03_06</td>
<td> Date: is 3 to 6 hours before Received: date</td>
<td>header</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> DATE_IN_PAST_06_12</td>
<td> Date: is 6 to 12 hours before Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_PAST_12_24</td>
<td> Date: is 12 to 24 hours before Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_PAST_24_48</td>
<td> Date: is 24 to 48 hours before Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_PAST_48_96</td>
<td> Date: is 48 to 96 hours before Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_IN_PAST_96_XX</td>
<td> Date: is 96 hours or more before Received: date</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DATE_SPAMWARE_Y2K</td>
<td> Date header uses unusual Y2K formatting</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DCC_CHECK</td>
<td> Listed in DCC (http://rhyolite.com/anti-spam/dcc/)</td>
<td>full</td>
</tr>
<tr height=13>
<td height=13> DEAR_FRIEND</td>
<td> Dear Friend? That&#8217;s not very dear!</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DEAR_SOMETHING</td>
<td> Contains &#8216;Dear (something)&#8217;</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DEEP_DISC_MEDS</td>
<td> Deep discount medications</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DIET_1</td>
<td> Lose Weight Spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DIET_2</td>
<td> Describes weight loss</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DIET_3</td>
<td> Describes body fat loss</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DISGUISE_PORN</td>
<td> Attempts to disguise porn words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DISGUISE_PORN_MUNDANE</td>
<td> Attempts to disguise mundane words used in porn</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DK_POLICY_SIGNALL</td>
<td> Domain Keys: policy says domain signs all mails</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DK_POLICY_SIGNSOME</td>
<td> Domain Keys: policy says domain signs some mails</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DK_POLICY_TESTING</td>
<td> Domain Keys: policy says domain is testing DK</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DK_SIGNED</td>
<td> Domain Keys: message has an unverified signature</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DK_VERIFIED</td>
<td> Domain Keys: signature passes verification</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DNS_FROM_AHBL_RHSBL</td>
<td> From: sender listed in dnsbl.ahbl.org</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DNS_FROM_RFC_ABUSE</td>
<td> Envelope sender in abuse.rfc-ignorant.org</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DNS_FROM_RFC_BOGUSMX</td>
<td> Envelope sender in bogusmx.rfc-ignorant.org</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DNS_FROM_RFC_DSN</td>
<td> Envelope sender in dsn.rfc-ignorant.org</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DNS_FROM_RFC_POST</td>
<td> Envelope sender in postmaster.rfc-ignorant.org</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DNS_FROM_RFC_WHOIS</td>
<td> Envelope sender in whois.rfc-ignorant.org</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DNS_FROM_SECURITYSAGE</td>
<td> Envelope sender in blackholes.securitysage.com</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> DOMAIN_4U2</td>
<td> Domain name containing a &quot;4u&quot; variant</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> DOMAIN_RATIO</td>
<td> Message body mentions many internet domains</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DRUG_DOSAGE</td>
<td> Talks about price per dose</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DRUG_ED_CAPS</td>
<td> Mentions an E.D. drug</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DRUG_ED_COMBO</td>
<td> Viagra and other drugs</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DRUG_ED_GENERIC</td>
<td> Mentions Generic Viagra</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DRUG_ED_ONLINE</td>
<td> Fast Viagra Delivery</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DRUG_ED_SILD</td>
<td> Talks about an E.D. drug using its chemical name</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> DRUGS_SMEAR1</td>
<td> Two or more drugs crammed together into one word</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EARN_PER_WEEK</td>
<td> Contains &#8216;earn (dollar) something per week&#8217;</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EM_ROLEX</td>
<td> Message puts emphasis on the watch manufacturer</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EMAIL_ROT13</td>
<td> Body contains a ROT13-encoded email address</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> ENGLISH_UCE_SUBJECT</td>
<td> Subject contains an English UCE tag</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> ENTITY_DEC_ALPHANUM</td>
<td> HTML contains needlessly encoded characters</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> EXCUSE_10</td>
<td> &quot;if you do not wish to receive any more&quot;</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EXCUSE_12</td>
<td> Nobody&#8217;s perfect</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EXCUSE_23</td>
<td> Claims you have provided permission</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EXCUSE_24</td>
<td> Claims you wanted this ad</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EXCUSE_4</td>
<td> Claims you can be removed from the list</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EXCUSE_6</td>
<td> Claims you can be removed from the list</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EXCUSE_REMOVE</td>
<td> Talks about how to be removed from mailings</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EXTRA_CASH</td>
<td> Offers Extra Cash</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> EXTRA_MPART_TYPE</td>
<td> Header has extraneous Content-type:&#8230;type= entry</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKE_HELO_EMAIL_COM</td>
<td> Host HELO did not match rDNS: email.com</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKE_HELO_EUDORAMAIL</td>
<td> Host HELO did not match rDNS: eudoramail.com</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKE_HELO_EXCITE</td>
<td> Host HELO did not match rDNS: excite.com</td>
<td>header</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> FAKE_HELO_LYCOS</td>
<td> Host HELO did not match rDNS: lycos.com</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKE_HELO_MAIL_COM</td>
<td> Host HELO did not match rDNS: mail.com</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKE_HELO_MAIL_COM_DOM</td>
<td> Relay HELO&#8217;d with suspicious hostname (mail.com)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKE_HELO_MSN</td>
<td> Host HELO did not match rDNS: msn.com</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKE_HELO_YAHOO_CA</td>
<td> Host HELO did not match rDNS: yahoo.ca</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKE_OUTBLAZE_RCVD</td>
<td> Received header contains faked &#8216;mr.outblaze.com&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FAKED_UNDISC_RECIPS</td>
<td> Faked To &quot;Undisclosed-Recipients&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FIN_FREE</td>
<td> Freedom of a financial nature</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FORGED_AOL_RCVD</td>
<td> Received forged, contains fake AOL relays</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORGED_EUDORAMAIL_RCVD</td>
<td> Forged eudoramail.com &#8216;Received:&#8217; header found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORGED_GW05_RCVD</td>
<td> Forged &#8216;by gw05&#8242; &#8216;Received:&#8217; header found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORGED_HOTMAIL_RCVD</td>
<td> Forged hotmail.com &#8216;Received:&#8217; header found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORGED_HOTMAIL_RCVD2</td>
<td> hotmail.com &#8216;From&#8217; address, but no &#8216;Received:&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORGED_JUNO_RCVD</td>
<td> &#8216;From&#8217; juno.com does not match &#8216;Received&#8217; headers</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORGED_RCVD_HELO</td>
<td> Received: contains a forged HELO</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORGED_TELESP_RCVD</td>
<td> Contains forged hostname for a DSL IP in Brazil</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORGED_YAHOO_RCVD</td>
<td><span style="mso-spacerun: yes">&nbsp;</span>&#8216;From&#8217; yahoo.com does not<br />
  match &#8216;Received&#8217; headers</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FORWARD_LOOKING</td>
<td> Stock Disclaimer Statement</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FRAGMENTED_MESSAGE</td>
<td> Partial message</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FREE_ACCESS</td>
<td> Contains &#8216;free access&#8217; with capitals</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FREE_PORN</td>
<td> Possible porn &#8211; Free Porn</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FREE_PREVIEW</td>
<td> Free Preview</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FREE_QUOTE_INSTANT</td>
<td> Free express or no-obligation quote</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FREE_SAMPLE</td>
<td> Contains &#8216;free sample&#8217; with capitals</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FROM_ALL_NUMS</td>
<td> From numeric address (except US/Canada phones)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_AND_TO_SAME</td>
<td> From and To are the same, but not exactly</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_BLANK_NAME</td>
<td> From: contains empty name</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_DOMAIN_NOVOWEL</td>
<td> From: domain has series of non-vowel letters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_ENDS_IN_NUMS</td>
<td> From: ends in many numbers</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_HAS_MIXED_NUMS</td>
<td> From: contains numbers mixed in with letters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_HAS_ULINE_NUMS</td>
<td> From: contains an underline and numbers/letters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_ILLEGAL_CHARS</td>
<td> From: has too many raw illegal characters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_LOCAL_DIGITS</td>
<td> From: localpart has long digit sequence</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_LOCAL_HEX</td>
<td> From: localpart has long hexadecimal sequence</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_LOCAL_NOVOWEL</td>
<td> From: localpart has series of non-vowel letters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_NO_LOWER</td>
<td> From address has no lower-case characters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_NO_USER</td>
<td> From: has no local-part before @ sign</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_NONSENDING_DOMAIN</td>
<td> Message is from domain that never sends email</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_OFFERS</td>
<td> From address is &quot;at something-offers&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FROM_STARTS_WITH_NUMS</td>
<td> From: starts with many numbers</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> FRONTPAGE</td>
<td> Frontpage used to create the message</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> FULL_REFUND</td>
<td> Offers a full refund</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_AFFORDABLE</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_AMBIEN</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_BILLION</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_CELEBREX</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_CPILL</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_CREDIT</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_ERECT</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_FOLLOW</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_GUARANTEE</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_MEDICATION</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_MILF</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> FUZZY_MILLION</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_MONEY</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_MORTGAGE</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_OBLIGATION</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_OFFERS</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_PHARMACY</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_PHENT</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_PLEASE</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_PRESCRIPT</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_PRICES</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_REFINANCE</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_REMOVE</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_ROLEX</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_SOFTWARE</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_THOUSANDS</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_TRAMADOL</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_VICODIN</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_VIOXX</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_VLIUM</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_VPILL</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> FUZZY_XPILL</td>
<td> Attempt to obfuscate words in spam</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> GAPPY_SUBJECT</td>
<td> Subject: contains G.a.p.p.y-T.e.x.t</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> GET_PAID</td>
<td> Get Paid</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> GTUBE</td>
<td> Generic Test for Unsolicited Bulk Email</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> GUARANTEED_100_PERCENT</td>
<td> One hundred percent guaranteed</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> GUARANTEED_STUFF</td>
<td> Guaranteed Stuff</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HABEAS_ACCREDITED_COI</td>
<td> Habeas Accredited Confirmed Opt-In or Better</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HABEAS_ACCREDITED_SOI</td>
<td> Habeas Accredited Opt-In or Better</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HABEAS_CHECKED</td>
<td> Habeas Checked</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HAIR_LOSS</td>
<td> Cures Baldness</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HARDCORE_PORN</td>
<td> Possible porn &#8211; Hardcore Porn</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HASHCASH_20</td>
<td> Contains valid Hashcash token (20 bits)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HASHCASH_21</td>
<td> Contains valid Hashcash token (21 bits)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HASHCASH_22</td>
<td> Contains valid Hashcash token (22 bits)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HASHCASH_23</td>
<td> Contains valid Hashcash token (23 bits)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HASHCASH_24</td>
<td> Contains valid Hashcash token (24 bits)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HASHCASH_25</td>
<td> Contains valid Hashcash token (25 bits)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HASHCASH_2SPEND</td>
<td> Hashcash token already spent in another mail</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HASHCASH_HIGH</td>
<td> Contains valid Hashcash token (&gt;25 bits)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HDR_ORDER_MTSRIX</td>
<td> Headers are in order found in spam (MTSRIX)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HDR_ORDER_TRIMRS</td>
<td> Headers are in order found in spam (TRIMRS)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HEAD_ILLEGAL_CHARS</td>
<td> Headers have too many raw illegal characters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HEAD_LONG</td>
<td> Message headers are very long</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HEADER_COUNT_CTYPE</td>
<td> Multiple Content-Type headers found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HEADER_SPAM</td>
<td> Bulk email fingerprint (header-based) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_ADELPHIA</td>
<td> Relay HELO&#8217;d using suspicious hostname (Adelphia)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_ATTBI</td>
<td> Relay HELO&#8217;d using suspicious hostname (ATTBI.com<span style='display:<br />
  none'>)</span></td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_CHELLO_NL</td>
<td> Relay HELO&#8217;d using suspicious hostname (Chello.nl)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_CHELLO_NO</td>
<td><span style="mso-spacerun: yes">&nbsp;</span>Relay HELO&#8217;d using<br />
  suspicious hostname (Chello.no)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_COMCAST</td>
<td> Relay HELO&#8217;d using suspicious hostname (Comcast)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_DHCP</td>
<td> Relay HELO&#8217;d using suspicious hostname (DHCP)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_DIALIN</td>
<td> Relay HELO&#8217;d using suspicious hostname (T-Dialin)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_HCC</td>
<td> Relay HELO&#8217;d using suspicious hostname (HCC)</td>
<td>header</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> HELO_DYNAMIC_HEXIP</td>
<td> Relay HELO&#8217;d using suspicious hostname (Hex IP)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_HOME_NL</td>
<td> Relay HELO&#8217;d using suspicious hostname (Home.nl)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_IPADDR</td>
<td> Relay HELO&#8217;d using suspicious hostname (IP addr 1)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_IPADDR2</td>
<td> Relay HELO&#8217;d using suspicious hostname (IP addr 2)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_NTL</td>
<td> Relay HELO&#8217;d using suspicious hostname (NTL)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_OOL</td>
<td><span style="mso-spacerun: yes">&nbsp;</span>Relay HELO&#8217;d using<br />
  suspicious hostname (OptOnline)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_ROGERS</td>
<td> Relay HELO&#8217;d using suspicious hostname (Rogers)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_RR2</td>
<td> Relay HELO&#8217;d using suspicious hostname (RR 2)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_SPLIT_IP</td>
<td> Relay HELO&#8217;d using suspicious hostname (Split IP)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_TELIA</td>
<td> Relay HELO&#8217;d using suspicious hostname (Telia)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_VELOX</td>
<td> Relay HELO&#8217;d using suspicious hostname (Veloxzone<span style='display:<br />
  none'>)</span></td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_VTR</td>
<td> Relay HELO&#8217;d using suspicious hostname (VTR)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HELO_DYNAMIC_YAHOOBB</td>
<td> Relay HELO&#8217;d using suspicious hostname (YahooBB)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> HIDDEN_CHARGES</td>
<td> Talks about Hidden Charges</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HIDE_WIN_STATUS</td>
<td> Javascript to hide URLs in browser</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> HIGH_CODEPAGE_URI</td>
<td> /^https?:\/\/[^\/]*\&amp;\#(?:\d{4,}| [3456789]\d\d);/i</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> HOT_NASTY</td>
<td> Possible porn &#8211; Hot, Nasty, Wild, Young</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_00_10</td>
<td> Message is 0% to 10% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_10_20</td>
<td> Message is 10% to 20% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_20_30</td>
<td> Message is 20% to 30% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_30_40</td>
<td> Message is 30% to 40% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_40_50</td>
<td> Message is 40% to 50% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_50_60</td>
<td> Message is 50% to 60% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_60_70</td>
<td> Message is 60% to 70% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_70_80</td>
<td> Message is 70% to 80% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_80_90</td>
<td> Message is 80% to 90% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_90_100</td>
<td> Message is 90% to 100% HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_ATTR_BAD</td>
<td> HTML has many bad attributes in tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_ATTR_UNIQUE</td>
<td> HTML appears to have random attributes in tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BACKHAIR_2</td>
<td> HTML tags used to obfuscate words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BACKHAIR_4</td>
<td> HTML tags used to obfuscate words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BACKHAIR_8</td>
<td> HTML tags used to obfuscate words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_00_10</td>
<td> HTML message is 0% to 10% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_10_20</td>
<td> HTML message is 10% to 20% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_20_30</td>
<td> HTML message is 20% to 30% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_30_40</td>
<td> HTML message is 30% to 40% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_40_50</td>
<td> HTML message is 40% to 50% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_50_60</td>
<td> HTML message is 50% to 60% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_60_70</td>
<td> HTML message is 60% to 70% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_70_80</td>
<td> HTML message is 70% to 80% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_80_90</td>
<td> HTML message is 80% to 90% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_BADTAG_90_100</td>
<td> HTML message is 90% to 100% bad tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_COMMENT_SAVED_URL</td>
<td> HTML message is a saved web page</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_COMMENT_SHORT</td>
<td> HTML comment is very short</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_EHTML2</td>
<td> HTML has doubled end HTML tag</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> HTML_EMBEDS</td>
<td> HTML with embedded plugin object</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_EVENT_UNSAFE</td>
<td> HTML contains unsafe auto-executing code</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_EXTRA_CLOSE</td>
<td> HTML contains far too many close tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_BIG</td>
<td> HTML tag for a big font size</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_FACE_BAD</td>
<td> HTML font face is not a word</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_FACE_CAPS</td>
<td> HTML font face has excess capital characters</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_INVISIBLE</td>
<td> HTML font color is same as background</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_LOW_CONTRAST</td>
<td> HTML font color similar to background</td>
<td>body</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> HTML_FONT_SIZE_HUGE</td>
<td> HTML font size is huge</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_SIZE_LARGE</td>
<td> HTML font size is large</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_SIZE_NONE</td>
<td> HTML font size is negative</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_SIZE_TINY</td>
<td> HTML font size is tiny</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FONT_TINY</td>
<td> HTML tag for a tiny font size</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_FORMACTION_MAILTO</td>
<td> HTML includes a form which sends mail</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_ONLY_04</td>
<td> HTML: images with 0-400 bytes of words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_ONLY_08</td>
<td> HTML: images with 400-800 bytes of words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_ONLY_12</td>
<td> HTML: images with 800-1200 bytes of words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_ONLY_16</td>
<td> HTML: images with 1200-1600 bytes of words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_ONLY_20</td>
<td> HTML: images with 1600-2000 bytes of words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_ONLY_24</td>
<td> HTML: images with 2000-2400 bytes of words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_ONLY_28</td>
<td> HTML: images with 2400-2800 bytes of words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_ONLY_32</td>
<td> HTML: images with 2800-3200 bytes of words</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_RATIO_02</td>
<td> HTML has a low ratio of text to image area</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_RATIO_04</td>
<td> HTML has a low ratio of text to image area</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_RATIO_06</td>
<td> HTML has a low ratio of text to image area</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_IMAGE_RATIO_08</td>
<td> HTML has a low ratio of text to image area</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_LINK_IMAGE_BUG</td>
<td> HTML link plus image plus web bug</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_LINK_OPT_OUT</td>
<td> HTML link text says &quot;opt out&quot; or similar</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_LINK_PUSH_HERE</td>
<td> HTML link text says &quot;push here&quot; or similar</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_MESSAGE</td>
<td> HTML included in message</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_00_10</td>
<td> 0% to 10% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_10_20</td>
<td> 10% to 20% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_20_30</td>
<td> 20% to 30% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_30_40</td>
<td> 30% to 40% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_40_50</td>
<td> 40% to 50% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_50_60</td>
<td> 50% to 60% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_60_70</td>
<td> 60% to 70% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_70_80</td>
<td> 70% to 80% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_80_90</td>
<td> 80% to 90% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_NONELEMENT_90_100</td>
<td> 90% to 100% of HTML elements are non-standard</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_05_10</td>
<td> Message is 5% to 10% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_10_20</td>
<td> Message is 10% to 20% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_20_30</td>
<td> Message is 20% to 30% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_30_40</td>
<td> Message is 30% to 40% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_40_50</td>
<td> Message is 40% to 50% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_50_60</td>
<td> Message is 50% to 60% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_60_70</td>
<td> Message is 60% to 70% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_70_80</td>
<td> Message is 70% to 80% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_80_90</td>
<td> Message is 80% to 90% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_OBFUSCATE_90_100</td>
<td> Message is 90% to 100% HTML obfuscation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_SHORT_LENGTH</td>
<td> HTML is extremely short</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_SHOUTING3</td>
<td> HTML has very strong &quot;shouting&quot; markup</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_SHOUTING4</td>
<td> HTML has very strong &quot;shouting&quot; markup</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_SHOUTING5</td>
<td> HTML has very strong &quot;shouting&quot; markup</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_SHOUTING6</td>
<td> HTML has very strong &quot;shouting&quot; markup</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_SHOUTING7</td>
<td> HTML has very strong &quot;shouting&quot; markup</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_TAG_BALANCE_BODY</td>
<td> HTML has unbalanced &quot;body&quot; tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_TAG_BALANCE_HEAD</td>
<td> HTML has unbalanced &quot;head&quot; tags</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_TAG_EXIST_BGSOUND</td>
<td> HTML has &quot;bgsound&quot; tag</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_TAG_EXIST_MARQUEE</td>
<td> HTML has &quot;marquee&quot; tag</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_TAG_EXIST_TBODY</td>
<td> HTML has &quot;tbody&quot; tag</td>
<td>body</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> HTML_TEXT_AFTER_BODY</td>
<td> HTML contains text after BODY close tag</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_TEXT_AFTER_HTML</td>
<td> HTML contains text after HTML close tag</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_TINY_FONT</td>
<td> body contains 1 or 0-point font</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> HTML_TITLE_EMPTY</td>
<td> HTML title contains no text</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_TITLE_UNTITLED</td>
<td> HTML title contains &quot;Untitled&quot;</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTML_WEB_BUGS</td>
<td> Image tag intended to identify you</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> HTTP_77</td>
<td> Contains an URL-encoded hostname (HTTP77)</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> HTTP_CTRL_CHARS_HOST</td>
<td> Uses control sequences inside a URL hostname</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> HTTP_ESCAPED_HOST</td>
<td> Uses %-escapes inside a URL&#8217;s hostname</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> HTTP_EXCESSIVE_ESCAPES</td>
<td> Completely unnecessary %-escapes inside a URL</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> HTTPS_IP_MISMATCH</td>
<td> IP to HTTPS link found in HTML</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> IMPOTENCE</td>
<td> Impotence cure</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> INFO_TLD</td>
<td> Contains an URL in the INFO top-level domain</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> INTERRUPTUS</td>
<td> Message looks to contain HTML-interrupted text</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> INVALID_DATE</td>
<td> Invalid Date: header (not RFC 2822)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> INVALID_DATE_TZ_ABSURD</td>
<td> Invalid Date: header (timezone does not exist)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> INVALID_TZ_CST</td>
<td> Invalid date in header (wrong CST timezone)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> INVALID_TZ_EST</td>
<td> Invalid date in header (wrong EST timezone)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> INVALID_TZ_GMT</td>
<td> Invalid date in header (wrong GMT/UTC timezone)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> INVESTMENT_ADVICE</td>
<td> Message mentions investment advice</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> INVESTMENT_EXPERT</td>
<td> Message mentions investment expert</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> IP_LINK_PLUS</td>
<td> Dotted-decimal IP address followed by CGI</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> JAPANESE_UCE_SUBJECT</td>
<td> Subject contains a Japanese UCE tag</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> JOIN_MILLIONS</td>
<td> Join Millions of Americans</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> KOREAN_UCE_SUBJECT</td>
<td> Subject: contains Korean unsolicited email tag</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> LIVE_PORN</td>
<td> Possible porn &#8211; Live Porn</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> LOCALPART_IN_SUBJECT</td>
<td> Local part of To: address appears in Subject</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> LOTS_OF_STUFF</td>
<td> Thousands or millions of pictures, movies, etc.</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> LOW_PRICE</td>
<td> Lowest Price</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MAILTO_SUBJ_REMOVE</td>
<td> mailto URI includes removal text</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> MAILTO_TO_REMOVE</td>
<td> Includes a &#8216;remove&#8217; email address</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> MAILTO_TO_SPAM_ADDR</td>
<td> Includes a link to a likely spammer email</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> MALE_ENHANCE</td>
<td> Message talks about enhancing men</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MARKETING_PARTNERS</td>
<td> Claims you registered with a partner</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MEET_SINGLES</td>
<td> Meet Singles</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MICRO_CAP_WARNING</td>
<td> SEC-mandated penny-stock warning</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MICROSOFT_EXECUTABLE</td>
<td> Message includes Microsoft executable program</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MILLION_USD</td>
<td> Talks about millions of dollars</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MIME_BAD_ISO_CHARSET</td>
<td> MIME character set is an unknown ISO charset</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MIME_BASE64_BLANKS</td>
<td> Extra blank lines in base64 encoding</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> MIME_BASE64_NO_NAME</td>
<td> base64 attachment does not have a file name</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> MIME_BASE64_TEXT</td>
<td> Message text disguised using base64 encoding</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> MIME_BOUND_DD_DIGITS</td>
<td> Spam tool pattern in MIME boundary</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MIME_BOUND_DIGITS_15</td>
<td> Spam tool pattern in MIME boundary</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MIME_BOUND_DIGITS_7</td>
<td> Spam tool pattern in MIME boundary</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MIME_BOUND_MANY_HEX</td>
<td> Spam tool pattern in MIME boundary</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MIME_BOUND_RKFINDY</td>
<td> Spam tool pattern in MIME boundary (rfkindy)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MIME_HTML_MOSTLY</td>
<td> Multipart message mostly text/html MIME</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MIME_HTML_ONLY</td>
<td> Message only has text/html MIME parts</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MIME_MISSING_BOUNDARY</td>
<td> MIME section missing boundary</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> MIME_QP_LONG_LINE</td>
<td> Quoted-printable line longer than 76 chars</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> MIME_SUSPECT_NAME</td>
<td> MIME filename does not match content</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MISSING_DATE</td>
<td> Missing Date: header</td>
<td>header</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> MISSING_HB_SEP</td>
<td> Missing blank line between message header and bod<span style='display:<br />
  none'>y</span></td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MISSING_HEADERS</td>
<td> Missing To: header</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MISSING_MIME_HB_SEP</td>
<td> Missing blank line between MIME header and body</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> ML_MARKETING</td>
<td> Multi Level Marketing mentioned</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MONEY_BACK</td>
<td> Money back guarantee</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MORE_SEX</td>
<td> Talks about a bigger drive for sex</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MORTGAGE_BEST</td>
<td> Information on mortgages</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MORTGAGE_PITCH</td>
<td> Looks like mortgage pitch</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MORTGAGE_RATES</td>
<td> Information on mortgage rates</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MPART_ALT_DIFF</td>
<td> HTML and text parts are different</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MPART_ALT_DIFF_COUNT</td>
<td> HTML and text parts are different</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> MSGID_FROM_MTA_HOTMAIL</td>
<td> Message-Id was added by a hotmail.com relay</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_FROM_MTA_ID</td>
<td> Message-Id for external message added locally</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_LONG</td>
<td> Message-ID is unusually long</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_MULTIPLE_AT</td>
<td> Message-ID contains multiple &#8216;@&#8217; characters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_NO_HOST</td>
<td> Message-Id has no hostname</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_OUTLOOK_INVALID</td>
<td> Message-Id is fake (in Outlook Express format)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_RATWARE1</td>
<td> Bulk email fingerprint found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_SHORT</td>
<td> Message-ID is unusually short</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_SPAM_99X9XX99</td>
<td> Spam tool Message-Id: (99&#215;9xx99 variant)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_SPAM_ALPHA_NUM</td>
<td> Spam tool Message-Id: (alpha-numeric variant)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_SPAM_CAPS</td>
<td> Spam tool Message-Id: (caps variant)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_SPAM_LETTERS</td>
<td> Spam tool Message-Id: (letters variant)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_SPAM_ZEROES</td>
<td> Spam tool Message-Id: (12-zeroes variant)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> MSGID_YAHOO_CAPS</td>
<td> Message-ID has ALLCAPS@yahoo.com</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> NA_DOLLARS</td>
<td> Talks about a million North American dollars</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> NASTY_GIRLS</td>
<td> Possible porn &#8211; Nasty Girls</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> NO_COST</td>
<td> No such thing as a free lunch (3)</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> NO_DNS_FOR_FROM</td>
<td> Envelope sender has no MX or A DNS records</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> NO_FORMS</td>
<td> No Claim Forms</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> NO_MEDICAL</td>
<td> No Medical Exams</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> NO_OBLIGATION</td>
<td> There is no obligation</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> NO_PRESCRIPTION</td>
<td> No prescription needed</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> NO_RDNS_DOTCOM_HELO</td>
<td> Host HELO&#8217;d as a big ISP, but had no rDNS</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> NO_REAL_NAME</td>
<td> From: does not include a real name</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> NO_RELAYS</td>
<td> Informational: message was not relayed via SMTP</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> NONEXISTENT_CHARSET</td>
<td> Character set doesn&#8217;t exist</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> NORMAL_HTTP_TO_IP</td>
<td> Uses a dotted-decimal IP address in URL</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> NOT_ADVISOR</td>
<td> Not registered investment advisor</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> NUMERIC_HTTP_ADDR</td>
<td> Uses a numeric IP address in URL</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> OBSCURED_EMAIL</td>
<td> Message seems to contain rot13ed address</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> OFFSHORE_SCAM</td>
<td> Off Shore Scams</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> ONE_TIME</td>
<td> One Time Rip Off</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> ONLINE_PHARMACY</td>
<td> Online Pharmacy</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> OPTING_OUT_CAPS</td>
<td> Talks about opting out (capitalized version)</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> ORG_MIME_TOOLS</td>
<td> Organization is MIME-tools</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> PLING_QUERY</td>
<td> Subject has exclamation mark and question mark</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> PORN_15</td>
<td> Possible porn &#8211; various types of feline</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> PORN_16</td>
<td> Possible porn &#8211; nasty, dirty, little etc.</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> PORN_URL_MISC</td>
<td> URL uses words/phrases which indicate porn (misc)</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> PORN_URL_SEX</td>
<td> URL uses words/phrases which indicate porn (sex)</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> PORN_URL_SLUT</td>
<td> URL uses words/phrases which indicate porn (slut)</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> PREST_NON_ACCREDITED</td>
<td> &#8216;Prestigious Non-Accredited Universities&#8217;</td>
<td>body</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> PREVENT_NONDELIVERY</td>
<td> Message has Prevent-NonDelivery-Report header</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> PRICES_ARE_AFFORDABLE</td>
<td> Message says that prices aren&#8217;t too expensive</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> PYZOR_CHECK</td>
<td> Listed in Pyzor (http://pyzor.sf.net/)</td>
<td>full</td>
</tr>
<tr height=13>
<td height=13> QUALIFY_FOR_THIS</td>
<td> Qualify for this special&#8230;</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> RATWARE_BOUND_PIECE</td>
<td> Bulk email fingerprint (piece boundary) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_EFROM</td>
<td> Bulk email fingerprint (envfrom) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_EGROUPS</td>
<td> Bulk email fingerprint (eGroups) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_GECKO_BUILD</td>
<td> Bulk email fingerprint (Gecko faked) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_HASH_2</td>
<td> Bulk email fingerprint (hash 2) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_HASH_2_V2</td>
<td> Bulk email fingerprint (hash 2 v2) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_HASH_DASH</td>
<td> Contains a hashbuster in Send-Safe format</td>
<td>rawbody</td>
</tr>
<tr height=13>
<td height=13> RATWARE_JPFREE</td>
<td> Bulk email fingerprint (jpfree) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_MOZ_MALFORMED</td>
<td> Bulk email fingerprint (Mozilla malformed) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_MPOP_WEBMAIL</td>
<td> Bulk email fingerprint (mPOP Web-Mail)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_NETIP</td>
<td> Bulk email fingerprint (netIP) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_OE_MALFORMED</td>
<td> X-Mailer has malformed Outlook Express version</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_RCVD_AT</td>
<td> Bulk email fingerprint (Received @) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_RCVD_LC_ESMTP</td>
<td> Bulk email fingerprint (&#8217;esmtp&#8217; Received) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_RCVD_PF</td>
<td> Bulk email fingerprint (Received PF) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RATWARE_STORM_URI</td>
<td> Bulk email fingerprint (StormPost) found</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> RAZOR2_CF_RANGE_51_100</td>
<td> Razor2 gives confidence level above 50%</td>
<td>full</td>
</tr>
<tr height=13>
<td height=13> RAZOR2_CF_RANGE_E4_51_100</td>
<td> Razor2 gives engine 4 confidence level above 50%</td>
<td>full</td>
</tr>
<tr height=13>
<td height=13> RAZOR2_CF_RANGE_E8_51_100</td>
<td> Razor2 gives engine 8 confidence level above 50%</td>
<td>full</td>
</tr>
<tr height=13>
<td height=13> RAZOR2_CHECK</td>
<td> Listed in Razor2 (http://razor.sf.net/)</td>
<td>full</td>
</tr>
<tr height=13>
<td height=13> RCVD_AM_PM</td>
<td> Received headers forged (AM/PM)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_BONUS_SPC_DATE</td>
<td> Bulk email fingerprint (bonus space) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_BY_IP</td>
<td> Received by mail server with no name</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_FAKE_HELO_DOTCOM</td>
<td> Received contains a faked HELO hostname</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_HELO_IP_MISMATCH</td>
<td> Received: HELO and IP do not match, but should</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_ILLEGAL_IP</td>
<td> Received: contains illegal IP address</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_BL_SPAMCOP_NET</td>
<td> Received via a relay in bl.spamcop.net</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_BSP_OTHER</td>
<td> Sender is in Bonded Sender Program (other relay)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_BSP_TRUSTED</td>
<td> Sender is in Bonded Sender Program (trusted relay)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_DSBL</td>
<td> Received via a relay in list.dsbl.org</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_IADB_VOUCHED</td>
<td> ISIPP IADB lists as vouched-for sender</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_MAPS_DUL</td>
<td> Relay in DUL, http://www.mail-abuse.org/dul/</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_MAPS_NML</td>
<td> Relay in NML, http://www.mail-abuse.org/nml/</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_MAPS_RBL</td>
<td> Relay in RBL, http://www.mail-abuse.org/rbl/</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_MAPS_RSS</td>
<td> Relay in RSS, http://www.mail-abuse.org/rss/</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_NJABL_CGI</td>
<td> NJABL: sender is an open formmail</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_NJABL_DUL</td>
<td> NJABL: dialup sender did non-local SMTP</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_NJABL_MULTI</td>
<td> NJABL: sent through multi-stage open relay</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_NJABL_PROXY</td>
<td> NJABL: sender is an open proxy</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_NJABL_RELAY</td>
<td> NJABL: sender is confirmed open relay</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_NJABL_SPAM</td>
<td> NJABL: sender is confirmed spam source</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_SBL</td>
<td> Received via a relay in Spamhaus SBL</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_SORBS_BLOCK</td>
<td> SORBS: sender demands to never be tested</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_SORBS_DUL</td>
<td> SORBS: sent directly from dynamic IP address</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_SORBS_HTTP</td>
<td> SORBS: sender is open HTTP proxy server</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_SORBS_MISC</td>
<td> SORBS: sender is open proxy server</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_SORBS_SMTP</td>
<td> SORBS: sender is open SMTP relay</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_SORBS_SOCKS</td>
<td> SORBS: sender is open SOCKS proxy server</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_SORBS_WEB</td>
<td> SORBS: sender is a abuseable web server</td>
<td>header</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> RCVD_IN_SORBS_ZOMBIE</td>
<td> SORBS: sender is on a hijacked network</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_WHOIS_BOGONS</td>
<td> CompleteWhois: sender on bogons IP block</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_WHOIS_HIJACKED</td>
<td> CompleteWhois: sender on hijacked IP block</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_WHOIS_INVALID</td>
<td> CompleteWhois: sender on invalid IP block</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_IN_XBL</td>
<td> Received via a relay in Spamhaus XBL</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RCVD_NUMERIC_HELO</td>
<td> Received: contains an IP address used for HELO</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RECEIVE_OFFER</td>
<td> Receive a special offer</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> REFINANCE_NOW</td>
<td> Home refinancing</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> REFINANCE_YOUR_HOME</td>
<td> Home refinancing</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> REMOVE_BEFORE_LINK</td>
<td> Removal phrase right before a link</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> REMOVE_PAGE</td>
<td> URL of page called &quot;remove&quot;</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> REMOVE_POSTAL</td>
<td> Send real mail to be unsubscribed</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> REPLICA_WATCH</td>
<td> Message talks about a replica watch</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> REPLY_TO_EMPTY</td>
<td> Reply-To: is empty</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> RESISTANCE_IS_FUTILE</td>
<td> Resistance to this spam is futile</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> REVERSE_AGING</td>
<td> Reverses Aging</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> RISK_FREE</td>
<td> Risk free. Suuurreeee&#8230;.</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> ROUND_THE_WORLD</td>
<td> Received: says mail sent around the world (DNS)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> ROUND_THE_WORLD_LOCAL</td>
<td> Received: says mail sent around the world (HELO)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SATIS_GUAR</td>
<td> Mail guarantees satisfaction</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> SAVE_THOUSANDS</td>
<td> Save big money</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> SEE_FOR_YOURSELF</td>
<td> See for yourself</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> SENT_IN_COMPLIANCE</td>
<td> Claims compliance with spam regulations</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> SOME_BREAKTHROUGH</td>
<td> Describes some sort of breakthrough</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> SOMETHING_FOR_ADULTS</td>
<td> Possible porn &#8211; Adult Web Sites</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> SORTED_RECIPS</td>
<td> Recipient list is sorted by address</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPF_FAIL</td>
<td> SPF: sender does not match SPF record (fail)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPF_HELO_FAIL</td>
<td> SPF: HELO does not match SPF record (fail)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPF_HELO_NEUTRAL</td>
<td> SPF: HELO does not match SPF record (neutral)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPF_HELO_PASS</td>
<td> SPF: HELO matches SPF record</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPF_HELO_SOFTFAIL</td>
<td> SPF: HELO does not match SPF record (softfail)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPF_NEUTRAL</td>
<td> SPF: sender does not match SPF record (neutral)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPF_PASS</td>
<td> SPF: sender matches SPF record</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPF_SOFTFAIL</td>
<td> SPF: sender does not match SPF record (softfail)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SPOOF_COM2COM</td>
<td> URI contains &quot;.com&quot; in middle and end</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> SPOOF_COM2OTH</td>
<td> URI contains &quot;.com&quot; in middle</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> SPOOF_NET2COM</td>
<td> URI contains &quot;.net&quot; or &quot;.org&quot;, then &quot;.com&quot;</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> SPOOF_OURI</td>
<td> URI has items in odd places</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> STOCK_ALERT</td>
<td> Offers a alert about a stock</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> STRONG_BUY</td>
<td> Tells you about a strong buy</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> SUB_FREE_OFFER</td>
<td> Subject starts with &quot;Free&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUB_HELLO</td>
<td> Subject starts with &quot;Hello&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_2_NUM_PARENS</td>
<td> Subject contains common spam sign (2 numbers)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_ALL_CAPS</td>
<td> Subject is all capitals</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_AS_SEEN</td>
<td> Subject contains &quot;As Seen&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_BUY</td>
<td> Subject line starts with Buy or Buying</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_CONSONANTS</td>
<td> Subject contains consecutive consonants in &quot;word&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_DOLLARS</td>
<td> Subject starts with dollar amount</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_FOR_ONLY</td>
<td> Subject contains &quot;For Only&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_FREE_CAP</td>
<td> Subject contains &quot;FREE&quot; in CAPS</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_GUARANTEED</td>
<td> Subject GUARANTEED</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_HAS_SPACES</td>
<td> Subject contains lots of white space</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_HAS_UNIQ_ID</td>
<td> Subject contains a unique ID</td>
<td>header</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> SUBJ_ILLEGAL_CHARS</td>
<td> Subject: has too many raw illegal characters</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_LIFE_INSURANCE</td>
<td> Subject includes &quot;life insurance&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_YOUR_DEBT</td>
<td> Subject contains &quot;Your Bills&quot; or similar</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_YOUR_FAMILY</td>
<td> Subject contains &quot;Your Family&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJ_YOUR_OWN</td>
<td> Subject contains &quot;Your Own&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_DIET</td>
<td> Subject talks about losing pounds</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_DRUG_GAP_C</td>
<td> Subject contains a gappy version of &#8216;cialis&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_DRUG_GAP_L</td>
<td> Subject contains a gappy version of &#8216;levitra&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_DRUG_GAP_P</td>
<td> Subject contains a gappy version of &#8216;phentermine&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_DRUG_GAP_S</td>
<td> Subject contains a gappy version of &#8217;soma&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_DRUG_GAP_VA</td>
<td> Subject contains a gappy version of &#8216;valium&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_DRUG_GAP_VIC</td>
<td> Subject contains a gappy version of &#8216;vicodin&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_DRUG_GAP_X</td>
<td> Subject contains a gappy version of &#8216;xanax&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUBJECT_SEXUAL</td>
<td> Subject indicates sexually-explicit content</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> SUSPICIOUS_RECIPS</td>
<td> Similar addresses in recipient list</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> TERRA_ES</td>
<td> Contains URI to a document hosted at &#8216;terra.es&#8217;</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> TO_ADDRESS_EQ_REAL</td>
<td> To: repeats address as real name</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> TO_EMPTY</td>
<td> To: is empty</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> TO_MALFORMED</td>
<td> To: has a malformed address</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> TO_NO_USER</td>
<td> To: has no local-part before @ sign</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> TO_RECIP_MARKER</td>
<td> To header contains &#8216;recipient&#8217; marker</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> TO_TXT</td>
<td> Sent to a text file</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> TRACKER_ID</td>
<td> Incorporates a tracking ID number</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> UNCLAIMED_MONEY</td>
<td> People just leave money laying around</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> UNCLOSED_BRACKET</td>
<td> Headers contain an unclosed bracket</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> UNDISC_RECIPS</td>
<td> Valid-looking To &quot;undisclosed-recipients&quot;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> UNIQUE_WORDS</td>
<td> Message body has many words used only once</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> UNPARSEABLE_RELAY</td>
<td> Informational: message has unparseable relay lines</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> UNRESOLVED_TEMPLATE</td>
<td> Headers contain an unresolved template</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> UNWANTED_LANGUAGE_BODY</td>
<td> Message written in an undesired language</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> URG_BIZ</td>
<td> Contains urgent matter</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> URI_4YOU</td>
<td> Message has URI 4you</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> URI_AFFILIATE</td>
<td> Contains a URI with an affiliate ID code</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> URI_DIGITS</td>
<td> URI hostname has long digit sequence</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> URI_HEX</td>
<td> URI hostname has long hexadecimal sequence</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> URI_UPPER_LOWER</td>
<td> URI contains capitalized hostname parts (&quot;Abcde&quot;)</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> URIBL_AB_SURBL</td>
<td> Contains an URL listed in the AB SURBL blocklist</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> URIBL_JP_SURBL</td>
<td> Contains an URL listed in the JP SURBL blocklist</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> URIBL_OB_SURBL</td>
<td> Contains an URL listed in the OB SURBL blocklist</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> URIBL_PH_SURBL</td>
<td> Contains an URL listed in the PH SURBL blocklist</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> URIBL_SBL</td>
<td> Contains an URL listed in the SBL blocklist</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> URIBL_SC_SURBL</td>
<td> Contains an URL listed in the SC SURBL blocklist</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> URIBL_WS_SURBL</td>
<td> Contains an URL listed in the WS SURBL blocklist</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> US_DOLLARS_3</td>
<td><span style="mso-spacerun: yes">&nbsp;</span>Mentions millions of<br />
  (dollar) ((dollar) NN,NNN,NNN.NN)</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> USER_IN_ALL_SPAM_TO</td>
<td> User is listed in &#8216;all_spam_to&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> USER_IN_BLACKLIST</td>
<td> From: address is in the user&#8217;s black-list</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> USER_IN_BLACKLIST_TO</td>
<td> User is listed in &#8216;blacklist_to&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> USER_IN_DEF_SPF_WL</td>
<td> From: address is in the default SPF white-list</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> USER_IN_DEF_WHITELIST</td>
<td> From: address is in the default white-list</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> USER_IN_MORE_SPAM_TO</td>
<td> User is listed in &#8216;more_spam_to&#8217;</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> USER_IN_SPF_WHITELIST</td>
<td> From: address is in the user&#8217;s SPF whitelist</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> USER_IN_WHITELIST</td>
<td> From: address is in the user&#8217;s white-list</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> USER_IN_WHITELIST_TO</td>
<td> User is listed in &#8216;whitelist_to&#8217;</td>
<td>header</td>
</tr>
<tr height=13 style='page-break-before:always'>
<td height=13> USERPASS</td>
<td> URL contains username and (optional) password</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> VIA_GAP_GRA</td>
<td> Attempts to disguise the word &#8216;viagra&#8217;</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> WE_HONOR_ALL</td>
<td> Claims to honor removal requests</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> WEIRD_PORT</td>
<td> Uses non-standard port number for HTTP</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> WEIRD_QUOTING</td>
<td> Weird repeated double-quotation marks</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> WHILE_YOU_SLEEP</td>
<td> While you Sleep</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> WHY_PAY_MORE</td>
<td> Why Pay More?</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> WHY_WAIT</td>
<td> What are you waiting for</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> WITH_LC_SMTP</td>
<td> Received line contains spam-sign (lowercase smtp)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> WRINKLES</td>
<td> Removes Wrinkles</td>
<td>body</td>
</tr>
<tr height=13>
<td height=13> X_AUTH_WARN_FAKED</td>
<td> X-Authentication-Warning header looks faked</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_IP</td>
<td> Message has X-IP header</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_LIBRARY</td>
<td> Message has X-Library header</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_MAILER_SPAM</td>
<td> X-Mailer: header is bulk email fingerprint</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_MESSAGE_FLAG_ODD</td>
<td> Message has X-Message-flag header (odd case)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_MESSAGE_INFO</td>
<td> Bulk email fingerprint (X-Message-Info) found</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_MIME_AUTOCONVERTED</td>
<td> Message has X-MIME-Autoconverted &quot;Yes&quot; header</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_MSMAIL_PRIORITY_HIGH</td>
<td> Sent with &#8216;X-Msmail-Priority&#8217; set to high</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_ORIG_IP_NOT_IPV4</td>
<td> X-Originating-IP doesn&#8217;t look like IPv4 address</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_PRIORITY_CC</td>
<td> Cc: after X-Priority: (bulk email fingerprint)</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> X_PRIORITY_HIGH</td>
<td> Sent with &#8216;X-Priority&#8217; set to high</td>
<td>header</td>
</tr>
<tr height=13>
<td height=13> YAHOO_DRS_REDIR</td>
<td> Has Yahoo Redirect URI</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> YAHOO_RD_REDIR</td>
<td> Has Yahoo Redirect URI</td>
<td>uri</td>
</tr>
<tr height=13>
<td height=13> YOU_CAN_SEARCH</td>
<td> You can search for anyone</td>
<td>body</td>
</tr>
</table>
</div>
<p>Die vollst&#228;ndige Auflistung aller Test der aktuellen Spamassassin-Version und fr&#252;herer Versionen finden sich bei <a href="http://spamassassin.apache.org/tests.html">Spamassassin</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andi.de/2006/11/24/spamassassin-tests-und-deren-beschreibung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajaxified Webmail-Zugriff</title>
		<link>http://www.andi.de/2006/11/20/ajaxified-webmail-zugriff/</link>
		<comments>http://www.andi.de/2006/11/20/ajaxified-webmail-zugriff/#comments</comments>
		<pubDate>Mon, 20 Nov 2006 22:58:33 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[roundcube]]></category>
		<category><![CDATA[webmail]]></category>

		<guid isPermaLink="false">http://www.andi.de/2006/11/20/ajaxified-webmail-zugriff/</guid>
		<description><![CDATA[Schon vor gut 1 1/2 Jahren startete das Projekt roundcube mit der Umsetzung eines Webmail-Clients, der die einfachen Zugriff &#252;ber jeden Webbrowser mit dem Komfort &#038; den Features einer Offline-eMail-Anwendung kombiniert.
M&#246;glich macht dies der konsequente Einsatz von AJAX-Technologie, wodurch das bei &#228;lteren Vertretern (wie z.B. Horde) &#252;bliche andauernde Neuladen kompletter Seiten und den damit verz&#246;gerten [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/2006/11/roundc.jpg" align="left" width="220" height="177" hspace="10" vspace="10" border="0" />Schon vor gut 1 1/2 Jahren startete das Projekt <a href="http://www.roundcube.net/">roundcube</a> mit der Umsetzung eines Webmail-Clients, der die einfachen Zugriff &#252;ber jeden Webbrowser mit dem Komfort &#038; den Features einer Offline-eMail-Anwendung kombiniert.<br />
M&#246;glich macht dies der konsequente Einsatz von AJAX-Technologie, wodurch das bei &#228;lteren Vertretern (wie z.B. <a href="http://www.horde.org/">Horde</a>) &#252;bliche andauernde Neuladen kompletter Seiten und den damit verz&#246;gerten Arbeitsablauf ausgleicht.<br />
Obwohl die Versionsnummer mit 0.1-beta2 noch sehr niedrig angesiedelt ist, und sich das Team mit der Ver&#246;ffentlichung neuer Meilensteine einige Zeit l&#228;sst, lohnt sich vor allem der Blick auf den aktuellen Entwicklersnapshot per <a href="http://trac.roundcube.net/trac.cgi/wiki/Dev_SVN">SVN</a>.<br />
Hier finden sich zumeist wesentlich mehr implementierte Funktionen als in den mit &#8217;stable&#8217; deklarierten Versionen &#8211; und trotz Dev-Status lassen sich die SVN-Versionen meist ohne Probleme einsetzen.<br />
<em>roundcube</em> eignet sich f&#252;r alle Server, die Zugriff &#252;ber IMAP bieten und stellt dem Nutzer bisher u.a. Ordnermanipulationen, MIME-Unterst&#252;tzung, Adressbuch, Drag&#8217;n'Drop, Suche, Rechtschreibpr&#252;fung etc. an.<br />
Nach der Installation kann z.B. die Webmail-Funktion von <em><a href="http://www.swsoft.com/plesk/">Plesk</a></em> von Horde auf <em>roundcube</em> „umgebogen“ werden. Der einfachste Weg besteht in einer Anpassung der Apache-Konfiguration von Plesk. Bei Debian befinden sich die Eintr&#228;ge in <code>/etc/apache/conf.d/zz010_psa_httpd.conf</code><br />
Dort finden sich sowohl f&#252;r http- als auch f&#252;r https-Zugriff auf <code>webmail.domain.de</code> Eintr&#228;ge, die auf Horde verweisen: <code>DocumentRoot /usr/share/psa/horde</code>, sowie die Freigaben des PHP-openBaseDir. Diese Verweise m&#252;ssen einfach auf den Ordner von <em>roundcube</em> ge&#228;ndert werden (z.B. <code>/usr/share/roundcube</code>), und schon kann der &#252;bliche Webmail-Account von Plesk mit <em>roundcube</em> genutzt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andi.de/2006/11/20/ajaxified-webmail-zugriff/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>NiX-Spam in Spamassassin einbinden</title>
		<link>http://www.andi.de/2006/11/16/nix-spam-in-spamassassin-einbinden/</link>
		<comments>http://www.andi.de/2006/11/16/nix-spam-in-spamassassin-einbinden/#comments</comments>
		<pubDate>Thu, 16 Nov 2006 22:19:51 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[nixspam]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://www.andi.de/2006/11/16/nix-spam-in-spamassassin-einbinden/</guid>
		<description><![CDATA[Neben der Erkennung von Spam &#252;ber die herk&#246;mmlichen Regelsets von Spamassassin, dem Selbsttraining mittels Bayes und dem Abgleich bei bekannten Anti-Spam-Netzwerken wie razor2 oder pyzor, bietet es sich an, den Mailverkehr auch gegen die NiX-Spam-Liste des iX-Teams aus dem Hause Heise abzupr&#252;fen.
NiX-Spam bietet eine st&#228;ndig erweiterte Hash-Datenbank alter und neuer Spaminhalte. Mittels eines einfachen Plugins [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/2006/11/spamass.jpg" align="left" width="183" height="131" hspace="10" vspace="10" border="0" />Neben der Erkennung von Spam &#252;ber die herk&#246;mmlichen Regelsets von <a href="http://spamassassin.apache.org/">Spamassassin</a>, dem Selbsttraining mittels Bayes und dem Abgleich bei bekannten Anti-Spam-Netzwerken wie <em>razor2</em> oder <em>pyzor</em>, bietet es sich an, den Mailverkehr auch gegen die <em>NiX-Spam</em>-Liste des iX-Teams aus dem Hause <a href="http://www.heise.de/">Heise</a> abzupr&#252;fen.<br />
<a href="http://www.heise.de/ix/nixspam/">NiX-Spam</a> bietet eine st&#228;ndig erweiterte Hash-Datenbank alter und neuer Spaminhalte. Mittels eines einfachen Plugins k&#246;nnen wir aus Mails, die Spamassassin durchlaufen, einen Hash-Abgleich mit der online verf&#252;gbaren NiX-Spam-Liste durchf&#252;hren lassen.<span id="more-52"></span></p>
<p>Zur Installation (Spamassassin 3.1 aufw&#228;rts unter Linux):</p>
<ul>
<li>
Den Inhalt von <em>ixhash.pm</em> per copy-paste in eine Datei <em>ixhash.pm</em> &#252;berf&#252;hren, diese laden wir in ein f&#252;r Spamassassin zugreifbares Verzeichnis auf dem Server (der Einfachhalt halber nehmen wir /etc/mail/spamassassin)
</li>
<li>
Die Eintr&#228;ge aus <em>ixhash.cf</em> in eine Datei <em>ixhash.cf</em> &#252;bernehmen und diese auf dem Server in /etc/mail/spamassassin ablegen.
</li>
<li>
Die erste Zeile von <em>ixhash.cf</em> an die lokalen Gegebenheiten (Pfad) anpassen.
</li>
<li>
Soweit war&#8217;s das, zum Testen <code>spamassassin -D &lt; /eine/nachricht</code> ausf&#252;hren (eine/nachricht sollte ein eMail-File sein). Wenn alles korrekt l&#228;uft sollten auf STDERR einige Nachrichten mit <em>IXHASH</em> auftauchen, die anzeigen, dass das Plugin aktiv ist.
</li>
</ul>
<p>Mit diesen wenigen Schritten kann die Erkennungsrate von Spamassassin nochmals gesteigert werden; die NiX-Spam-Liste ist ferner gegen deutsche Spam-Angriffe besser ausger&#252;stet, als manche andere Hash-Liste.</p>
<p><strong>Die Dateien:</strong></p>
<p><em>ixhash.cf</em>:</p>
<div class="precode" >
<pre><code>
  loadplugin    Mail::SpamAssassin::Plugin::iXhash /path/to/iXhash.pm
# This makes DNS queries time out after 10 seconds (2x default)
  ixhash_timeout    10

# This list uses iX Magazine's spam as datasource.
  body          IXHASH eval:ixhashtest('ix.dnsbl.manitu.net')
  describe      IXHASH This mail has been classified as spam @ iX Magazine, Germany
  tflags        IXHASH net
  score         IXHASH 1.5

# This list comes in @ spamtraps run by LogIn &amp; Solutions AG, Germany
# Manually verified stuff
  body          LOGINHASH1 eval:ixhashtest('nospam.login-solutions.de')
  describe      LOGINHASH1 mail has been classified as spam @ LogIn&amp;Solutions AG, Germany
  tflags        LOGINHASH1 net
  score         LOGINHASH1 1.5

# This list contains hashes from Mails classified as spam at a larger company based in Germany
# Lots of stuff, but automatically categorized and contributed
  body          LOGINHASH2 eval:ixhashtest('nospam.login-solutions.ag')
  describe      LOGINHASH2 mail has been classified as spam @ unknown company, Germany
  tflags        LOGINHASH2 net
  score         LOGINHASH2 1.5
</code></pre>
</div>
<p><em>ixhash.pm</em>:</p>
<div class="precode" >
<pre><code>
=head1 NAME

Mail::SpamAssassin::Plugin::iXhash - compute fuzzy checksums from mail bodies and compare to known spam ones via DNS

=head1 SYNOPSIS
  loadplugin    Mail::SpamAssassin::Plugin::iXhash /path/to/iXhash.pm
  ixhash_timeout        10
  body          IXHASH eval:ixhashtest('ix.dnsbl.manitu.net')
  describe      IXHASH This mail has been classified as spam @ iX Magazine, Germany
  tflags        IXHASH net
  score         IXHASH 1.5

=head1 DESCRIPTION

iXhash.pm is a plugin for SpamAssassin 3.1.0 and up. It takes the body of a mail, strips parts from it and then computes a hash value from the rest.
These values will then be looked up via DNS. 
This plugin is based on parts of the procmail-based project 'NiX Spam', developed by Bert Ungerer.(un@ix.de)
For more information see http://www.heise.de/ix/nixspam/. The procmail code producing the hashes only can be found here:
ftp://ftp.ix.de/pub/ix/ix_listings/2004/05/checksums

Parts of the code were submitted via heise forum by 'kungfuhasi'
See http://www.heise.de/ix/foren/go.shtml?read=1&amp;msg_id=7246759&amp;forum_id=48292.

Martin Blapp (mb@imp.ch) found and solved a problem occuring on Perl 5.8.7. Thanks a lot!

Further improvements (DNS timeouts) by Dallas Engelken (dallase@uribl.com) - see comments for details. 

=cut

package Mail::SpamAssassin::Plugin::iXhash;
use strict;
use Mail::SpamAssassin;
use Mail::SpamAssassin::Plugin;
use Mail::SpamAssassin::Util;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Net::DNS;
use Net::DNS::Resolver;
# Locale - this was on Bert's wishlist
use POSIX qw(locale_h);
setlocale(LC_CTYPE, "de_DE.ISO8859-1");
# LC_CTYPE now "Deutsch, Deutschland, codeset ISO 8859-1"
# Maybe not appropriate for spam that is neither German nor English

use vars qw(@ISA);
@ISA = qw(Mail::SpamAssassin::Plugin);
sub dbg { Mail::SpamAssassin::dbg (@_); }
sub new {
        my ($class, $mailsa, $server) = @_;
        $class = ref($class) || $class;
        my $self = $class-&gt;SUPER::new($mailsa);
        bless ($self, $class);
        $self-&gt;set_config($mailsa-&gt;{conf});
        $self-&gt;register_eval_rule ("ixhashtest");
        return $self;
}


sub set_config {
        my ($self, $conf) = @_;
        my @cmds = ();
        # implements ixhash_timeout config option - by dallase@uribl.com
        push(@cmds, {
                setting =&gt; 'ixhash_timeout',
                default =&gt; 5,
                type =&gt; $Mail::SpamAssassin::Conf::CONF_TYPE_NUMERIC,
        });
        $conf-&gt;{parser}-&gt;register_commands(\@cmds);
}


sub ixhashtest {
        my ($self, $permsgstatus,$muell,$dnsserver) = @_;
        dbg("IXHASH: IxHash querying Server $dnsserver");
        my ($digest,$answer,$ixdigest,$body) = "";
        my @body = $permsgstatus-&gt;{msg}-&gt;get_body();
        my $resolver = Net::DNS::Resolver-&gt;new;
        my $body_copy = "";
        foreach (@body) {
                $body .= join "", @$_;
        }
        my $rr;
        my $hits = 0;
        # alarm the dns query - dallase@uribl.com
        # --------------------------------------------------------------------------
        # here we implement proper alarms, ala Pyzor, Razor2 plugins. 
        # keep the alarm as $oldalarm, so we dont loose the timeout-child alarm
        # see http://issues.apache.org/SpamAssassin/show_bug.cgi?id=3828#c123
        my $oldalarm = 0;
        my $timeout = $permsgstatus-&gt;{main}-&gt;{conf}-&gt;{'ixhash_timeout'} || 5;
        eval {
                Mail::SpamAssassin::Util::trap_sigalrm_fully(sub { die "ixhash timeout reached"; });
        $oldalarm = alarm($timeout);
        
        #-----------------------------------------------------------------------
        # Creation of hash # 1 if following conditions are met:
        # - mail contains at least 16 spaces or tabs 
        # - mail consists of at least 2 lines
      # NB:  Edit this if you want to minimize FPs at the cost of not checking shorter mails.
      # FP ratio will be the higher the shorter the mails are 
        if (($body =~ /([\s\t].+?){16,}/ ) &amp;&amp; ($body =~ /.*$.*/)){
                # Copy $body into $body_copy - thanks to J. Stehle for pointing this out
                $body_copy = $body;
                # All space class chars just one time
                # Do this in two steps to avoid Perl segfaults
                # if there are more than 2.600 identical chars to be replaced
                # Step One
                $body_copy =~ s/([[:space:]]{100})(?:\1+)/$1/g;
                # Step Two
                $body_copy =~ s/([[:space:]])(?:\1+)/$1/g;
                # remove graph class chars and some specials
                $body_copy =~ s/[[:graph:]]+//go;
                # Create actual digest
                $digest = md5_hex($body_copy);
                dbg ("IXHASH: Computed hash-value $digest via method 1");
                dbg ("IXHASH: Now checking $digest.$dnsserver");
                # Now check via DNS query
                $answer = $resolver-&gt;search($digest.'.'.$dnsserver, "A", "IN");
                if ($answer) {
                        foreach $rr ($answer-&gt;answer) {
                                next unless $rr-&gt;type eq "A";
                                dbg ("IXHASH: Received reply from $dnsserver:". $rr-&gt;address);
                                $hits = 1 if $rr-&gt;address;
                        }
                }
        }
        # End of computing hash #1 
        #---------------------------------------------------------------------
        
        
        #---------------------------------------------------------------------
        # Creation of hash # 1 if mail contains at least 3 of the following characters:
        # '[&lt;&gt;()|@*'!?,]' or the combination of ':/'
        # (To match something like "Already seen?  http:/host.domain.tld/")
        # edit this if you want to minimize FPs (i.e. make sure that short emails are not checked)
        # 
        if ($body =~ /((([&lt;&gt;\(\)\|@\*'!?,])|(:\/)).*?){3,}/m ) {
                $body_copy = $body;
                # remove redundant stuff
                $body_copy =~ s/[[:cntrl:][:alnum:]%&amp;#;=]+//g;
                # replace '_' with '.'
                $body_copy =~ tr/_/./;
                # replace duplicate chars. This too suffers from a bug in perl
                # so we do it in two steps
                # Step One
                $body_copy =~ s/([[:print:]]{100})(?:\1+)/$1/g;
                # Step Two
                $body_copy =~ s/([[:print:]])(?:\1+)/$1/g;
                # Computing hash...
                $digest = md5_hex($body_copy);
                dbg ("IXHASH: Computed hash-value $digest via method 2");
                dbg ("IXHASH: Now checking $digest.$dnsserver");
                # Now check via DNS query
                $answer = $resolver-&gt;search($digest.'.'.$dnsserver, "A", "IN");
                if ($answer) {
                        foreach $rr ($answer-&gt;answer) {
                                next unless $rr-&gt;type eq "A";
                                dbg ("IXHASH: Received reply from $dnsserver:". $rr-&gt;address);
                                $hits = 1 if $rr-&gt;address;
                        }
                }
        }

        # End of computing hash #2 
        #-----------------------------------------------------------------------
        
        
        #-----------------------------------------------------------------------
        # Compute hash # 3 if 
        # - there are at least 8 non-empty characters in the body
        # - neither hash #1 nor hash #2 have been computed
        if (($body =~ /[\S]{8,}/) and (length($digest) &lt; 32)) {
                $body_copy = $body;
                $body_copy =~ s/[[:cntrl:][:space:]=]+//g;
                # replace duplicate chars. This too suffers from a bug in perl
                # so we do it in two steps
                # Step One
                $body_copy =~ s/([[:print:]]{100})(?:\1+)/$1/g;
                # Step Two
                $body_copy =~ s/([[:graph:]])(?:\1+)/$1/g;
                # Computing actual hash
                $digest = md5_hex($body_copy);
                dbg ("IXHASH: Computed hash-value $digest via method 3");
                dbg ("IXHASH: Now checking $digest.$dnsserver");
                # Check via DNS
                $answer = $resolver-&gt;search($digest.'.'.$dnsserver, "A", "IN");
                if ($answer) {
                        foreach $rr ($answer-&gt;answer) {
                                next unless $rr-&gt;type eq "A";
                                dbg ("IXHASH: Received reply from $dnsserver:". $rr-&gt;address);
                                $hits = 1 if $rr-&gt;address;
                        }
                }
        }
        if (defined $oldalarm) {
                alarm $oldalarm;  $oldalarm = undef;
        }
}; # End of sub ixhashtest

# Error handling - parto of Dallas' code
if ($@ =~ m/timeout/) {
        dbg("IXHASH: $timeout second timeout exceeded while checking $digest.$dnsserver");
}

return $hits;

}
1;
</code></pre>
</div>
<p>Mehr Hinweise finden sich im <a href="http://wiki.apache.org/spamassassin/iXhash">Spamassassin-Wiki</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andi.de/2006/11/16/nix-spam-in-spamassassin-einbinden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
