<?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>NANO ZEN</title>
	<atom:link href="http://nanozen.info/feed/" rel="self" type="application/rss+xml" />
	<link>http://nanozen.info</link>
	<description>Enlightenment by small measures</description>
	<lastBuildDate>Fri, 04 May 2012 14:26:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Uncle Chauncey</title>
		<link>http://nanozen.info/2012/05/uncle-chauncey/</link>
		<comments>http://nanozen.info/2012/05/uncle-chauncey/#comments</comments>
		<pubDate>Fri, 04 May 2012 14:26:01 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Poetry]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1984</guid>
		<description><![CDATA[drops fall to tongue as ground mind bends as leaf gardener&#8217;s hands guide water and soil clear many ways clouds part eyes clear soil dries balance regained For Steve S. who has been a supportive friend and colleague. No bugs, &#8230; <a href="http://nanozen.info/2012/05/uncle-chauncey/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
drops fall<br />
to tongue as ground<br />
mind bends as leaf<br/><br />
gardener&#8217;s hands<br />
guide water and soil<br />
clear many ways<br/><br />
clouds part<br />
eyes clear soil dries<br />
balance regained
</p></blockquote>
<p>For Steve S. who has been a supportive friend and colleague. No bugs, no spam, all heart.</p>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2012/05/uncle-chauncey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kiss Lips Goodbye</title>
		<link>http://nanozen.info/2012/04/kiss-lips-goodbye/</link>
		<comments>http://nanozen.info/2012/04/kiss-lips-goodbye/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 12:05:16 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Poetry]]></category>
		<category><![CDATA[haiku]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1970</guid>
		<description><![CDATA[Well spring is well under way here in Cannes. The long Easter weekend has come and gone. May is just around the corner with its many holidays, May Day, 1945 Armistice, Ascension, and Pentec&#244;te. Almost one a week. Add to &#8230; <a href="http://nanozen.info/2012/04/kiss-lips-goodbye/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Well spring is well under way here in <a href="http://en.wikipedia.org/wiki/Cannes" target="_blank">Cannes</a>. The long Easter weekend has come and gone. May is just around the corner with its many holidays, May Day, 1945 Armistice, Ascension, and Pentec&ocirc;te. Almost one a week. Add to that the mayhem of the <a href="http://en.wikipedia.org/wiki/Cannes_Film_Festival" target="_blank">Cannes Film Festival</a> (<a href="http://www.festival-cannes.com/" target="_blank">offical</a>) and <a href="https://en.wikipedia.org/wiki/Monaco_Grand_Prix" target="_blank">Monaco Grand Prix</a> being held at the same time. The airports and roads will be chaos!</p>
<p>And after May, I say my final goodbyes to the French Riviera and move to Montreal, Canada for a new job; still writing code, still fighting <a href="https://en.wikipedia.org/wiki/Email_spam" target="_blank">junk email (spam)</a>. A return to my city of birth. Should prove very different. I&#8217;ve visited Montreal many a time, but never lived there. Parents moved to Toronto when I was but three weeks old. It will be nice. I&#8217;ll be a little closer (physically) to my parents and brother, much closer to my aunt and cousins. Once more the wheel turns to bring with it new possibilities.</p>
<p>This early morning run and those till I depart carry the strong fragrant smells of spring: <a href="http://en.wikipedia.org/wiki/Wisteria" target="_blank">wisteria</a> and <a href="http://en.wikipedia.org/wiki/Jasmine" target="_blank">jasmine</a>. One the fond memories I&#8217;ll carry away.</p>
<ul id="fav_20120417_1" class="tweet_view tweet_list">
<script type="text/javascript">
quoteTweets("fav_20120417_1", true, "http://nanozen.info/wp-content/uploads/2012/04/fav_20120417_1.json");
</script>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2012/04/kiss-lips-goodbye/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two For One Sales</title>
		<link>http://nanozen.info/2011/11/two-for-one-sales/</link>
		<comments>http://nanozen.info/2011/11/two-for-one-sales/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 17:36:21 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Humour]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1950</guid>
		<description><![CDATA[Capitalism Buy one, get one free. Socialism Both are half price. Communism First is free, second you pay for, provided they have stock. Dictatorship If you buy one, you will buy a second one at gun point. Anarchy What?! You &#8230; <a href="http://nanozen.info/2011/11/two-for-one-sales/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<table>
<tr>
<td><strong>Capitalism</strong></td>
<td>Buy one, get one free.</td>
</tr>
<tr>
<td><strong>Socialism</strong></td>
<td>Both are half price.</td>
</tr>
<tr>
<td><strong>Communism</strong></td>
<td>First is free, second you pay for, provided they have stock.</td>
</tr>
<tr>
<td><strong>Dictatorship</strong></td>
<td>If you buy one, you <em>will</em> buy a second one at gun point.</td>
</tr>
<tr>
<td><strong>Anarchy</strong></td>
<td>What?! You want more than one?! Go out and take it.</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/11/two-for-one-sales/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Browser Utility Comparision</title>
		<link>http://nanozen.info/2011/11/browser-utility-comparision/</link>
		<comments>http://nanozen.info/2011/11/browser-utility-comparision/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 07:56:20 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Humour]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1942</guid>
		<description><![CDATA[Personally I think Firefox and Chrome should trade places, but as for the reset, its pretty spot on.]]></description>
			<content:encoded><![CDATA[<p>Personally I think <a href="http://www.mozilla.org/" target="_blank">Firefox</a> and <a href="http://www.google.com/chrome/" target="_blank">Chrome</a> should trade places, but as for the reset, its pretty spot on.</p>
<p><a href="http://nanozen.info/wp-content/uploads/2011/11/browser-chart.png" rel="lightbox[1942]"><img src="http://nanozen.info/wp-content/uploads/2011/11/browser-chart-500x1024.png" alt="" title="browser-chart" width="500" height="1024" class="aligncenter size-large wp-image-1941" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/11/browser-utility-comparision/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protected: Acceptance</title>
		<link>http://nanozen.info/2011/11/acceptance/</link>
		<comments>http://nanozen.info/2011/11/acceptance/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 08:10:44 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1934</guid>
		<description><![CDATA[There is no excerpt because this is a protected post.]]></description>
			<content:encoded><![CDATA[<form action="http://nanozen.info/wp-pass.php" method="post">
<p>This post is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-1934">Password:<br />
<input name="post_password" id="pwbox-1934" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="Submit" /></p></form>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/11/acceptance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Misty Moon Shine</title>
		<link>http://nanozen.info/2011/09/misty-moon-shine/</link>
		<comments>http://nanozen.info/2011/09/misty-moon-shine/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 08:20:35 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Poetry]]></category>
		<category><![CDATA[gods]]></category>
		<category><![CDATA[greeks]]></category>
		<category><![CDATA[haiku]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1916</guid>
		<description><![CDATA[Well its my birthday today! Shortly I&#8217;ll go take Baka for a mid-morning walk to get a croissant and pain-au-chocolate to treat myself. OK, so I live in France and that might not be so much of a special treat, &#8230; <a href="http://nanozen.info/2011/09/misty-moon-shine/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Well its my birthday today! Shortly I&#8217;ll go take Baka for a mid-morning walk to get a croissant and pain-au-chocolate to treat myself. OK, so I live in France and that might not be so much of a special treat, but its not something I eat everyday. </p>
<p>On <a href="http://news.sky.com/" target="_blank">Sky News</a> Sunrise show this morning, they had a promo interview with <a href="http://www.hayleywestenra.com/" target="_blank">Hayley Westenra</a> for her new album <a href="http://www.amazon.co.uk/gp/product/B004VPHPQ2/ref=nosim/?tag=deccacouk16860-21" target="_blank">Paradiso</a> in collaboration with <a href="http://en.wikipedia.org/wiki/Ennio_Morricone" target="_blank">Ennio Morricone</a> (think Clint Eastwood and spaghetti western fame and many other great films). Wow! Just blew me away. This is my birthday gift to myself.</p>
<p>Anyway, here&#8217;s another collection of haiku tweets plus a couple of non-haiku comments I kept. </p>
<ul id="fav_20110908_1" class="tweet_view tweet_list">
<script type="text/javascript">
quoteTweets("fav_20110908_1", true, "http://nanozen.info/wp-content/uploads/2011/09/fav_20110908_1.json");
</script>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/09/misty-moon-shine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protected: God or No God</title>
		<link>http://nanozen.info/2011/08/god-or-no-god/</link>
		<comments>http://nanozen.info/2011/08/god-or-no-god/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 20:46:49 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[gods]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1888</guid>
		<description><![CDATA[There is no excerpt because this is a protected post.]]></description>
			<content:encoded><![CDATA[<form action="http://nanozen.info/wp-pass.php" method="post">
<p>This post is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-1888">Password:<br />
<input name="post_password" id="pwbox-1888" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="Submit" /></p></form>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/08/god-or-no-god/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Looking? Found someone you have I would say, mm?&#8221;</title>
		<link>http://nanozen.info/2011/07/looking-found-someone-you-have-i-would-say-mm/</link>
		<comments>http://nanozen.info/2011/07/looking-found-someone-you-have-i-would-say-mm/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 07:50:51 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Humour]]></category>
		<category><![CDATA[Poetry]]></category>
		<category><![CDATA[haiku]]></category>
		<category><![CDATA[yoda]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1868</guid>
		<description><![CDATA[Last year I had some fun writing Yoda stylised haiku. This past weekend I was in a silly mood (again) and got it in my head to write more Yoda styled haiku tagged with #haiku #yoda.]]></description>
			<content:encoded><![CDATA[<p><a href="http://nanozen.info/wp-content/uploads/2011/07/yoda460_796746c.jpg" rel="lightbox[1868]"><img src="http://nanozen.info/wp-content/uploads/2011/07/yoda460_796746c-300x187.jpg" alt="" title="yoda460_796746c" width="300" height="187" class="aligncenter size-medium wp-image-1872"  style="margin: 0px 0px 0px 50px;" /></a></p>
<p>Last year I had some fun writing <a href="http://nanozen.info/?p=1692#yoda">Yoda stylised haiku</a>. This past weekend I was in a silly mood (again) and got it in my head to write more Yoda styled haiku tagged with #haiku #yoda.</p>
<ul id="fav_20110704_1_yoda" class="tweet_view tweet_list">
<script type="text/javascript">
quoteTweets("fav_20110704_1_yoda", true, "http://nanozen.info/wp-content/uploads/2011/07/fav_20110704_1_yoda.json");
</script>
</ul>
<p><a href="http://nanozen.info/wp-content/uploads/2011/07/yoda_reflective_468x265.jpg" rel="lightbox[1868]"><img src="http://nanozen.info/wp-content/uploads/2011/07/yoda_reflective_468x265-300x169.jpg" alt="" title="yoda_reflective_468x265" width="300" height="169" class="aligncenter size-medium wp-image-1873"  style="margin: 0px 0px 0px 50px;" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/07/looking-found-someone-you-have-i-would-say-mm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>dream reality, bring it to life</title>
		<link>http://nanozen.info/2011/07/dream-reality-bring-it-to-life/</link>
		<comments>http://nanozen.info/2011/07/dream-reality-bring-it-to-life/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 10:19:02 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Poetry]]></category>
		<category><![CDATA[gods]]></category>
		<category><![CDATA[greeks]]></category>
		<category><![CDATA[haiku]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1864</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<ul id="fav_20110704_1" class="tweet_view tweet_list">
<script type="text/javascript">
quoteTweets("fav_20110704_1", true, "http://nanozen.info/wp-content/uploads/2011/07/fav_20110704_1.json");
</script>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/07/dream-reality-bring-it-to-life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Red Glasses</title>
		<link>http://nanozen.info/2011/07/red-glasses/</link>
		<comments>http://nanozen.info/2011/07/red-glasses/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 12:11:06 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[esterel]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1843</guid>
		<description><![CDATA[Last night I was up late watching a film, enjoying some red wine at the same time. Towards the end of the film and the end of the glass, the glass slipped from hand and shattered on the tile floor. &#8230; <a href="http://nanozen.info/2011/07/red-glasses/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last night I was up late watching a film, enjoying some red wine at the same time. Towards the end of the film and the end of the glass, the glass slipped from hand and shattered on the tile floor. Bit miffed by that, since it was one of those glasses you get to keep after you finish the Dijon mustard it once contained (useful recycling; now I need to buy more Dijon).</p>
<p>Today, while reflecting on last night&#8217;s events, I remembered the dark red acrylic plastic glasses we had at the chalet in l&#8217;Esterel. How they were pretty much indestructible and ideal for growing kids. How I used to drink orange juice, 7-Up, and &#8220;Snow White&#8221; cream soda from them on summer afternoons. Drink hot chocolate from them in the morning. How they were a part of my life for 40 years. They never wore out, never broke. They were always there, ready for the next beverage.</p>
<p>The chalet is gone, sold now, as too the red glasses. But not broken.</p>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/07/red-glasses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zen In All</title>
		<link>http://nanozen.info/2011/04/zen-in-all/</link>
		<comments>http://nanozen.info/2011/04/zen-in-all/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 15:55:20 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1839</guid>
		<description><![CDATA[There can be no god or gods without creating pain and war. For belief in deities creates nothing but division in men. There does exist Good and Evil, but only as a result of the actions of man helping men &#8230; <a href="http://nanozen.info/2011/04/zen-in-all/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There can be no god or gods without creating pain and war. For belief in deities creates nothing but division in men. </p>
<p>There does exist Good and Evil, but only as a result of the actions of man helping men or man helping himself.</p>
<p>Man must look into himself and the nature of fellow men. Ignore divining the divine, for claiming to understand divine thought leads to human misery.</p>
<p>There can be no one Faith, for otherwise we are all pagans and heretics to one another, for there will always be difference of opinion and interpretations of words and meaning, even among those of the same professed Faith.</p>
<p>If there be deity, would such expect prayer, worship, or sacrifice? Or would they more likely to be content that their mortal creations live, discover, and explore life.</p>
<p>If there be no deity, then a man claiming their existence wastes his life in the pursuit of nothing.</p>
<p>Whether deity be or not is of no matter, as neither answer can be clearly proved. Faith in either concept is wasted.</p>
<p>Best to understand our own nature and thoughts. How to balance the needs of ourself with those of many. Find Faith then in the good within ourself and in the nobility of man.</p>
<p>No man can be told what to believe or how to act, only learn informed choices, and thus left to his own mind in belief and action.<br />
<!--<br />
Man be equal to woman and woman equal to man. Regardless of their differences, only together as equals will they be stronger.<br />
--></p>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/04/zen-in-all/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LEXX</title>
		<link>http://nanozen.info/2011/04/lexx/</link>
		<comments>http://nanozen.info/2011/04/lexx/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 07:38:12 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://nanozen.info/2011/04/lexx/</guid>
		<description><![CDATA[Yo way yo Home va ray Yo way ra Jerhume Brunnen G]]></description>
			<content:encoded><![CDATA[<p>    Yo way yo<br />
    Home va ray<br />
    Yo way ra<br />
    Jerhume Brunnen G</p>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/04/lexx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>As Eos Smiles</title>
		<link>http://nanozen.info/2011/02/as-eos-smiles/</link>
		<comments>http://nanozen.info/2011/02/as-eos-smiles/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 09:07:49 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Poetry]]></category>
		<category><![CDATA[gods]]></category>
		<category><![CDATA[greeks]]></category>
		<category><![CDATA[haiku]]></category>
		<category><![CDATA[rain]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1861</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<ul id="fav_20110704_2" class="tweet_view tweet_list">
<script type="text/javascript">
quoteTweets("fav_20110704_2", true, "http://nanozen.info/wp-content/uploads/2011/07/fav_20110704_2.json");
</script>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/02/as-eos-smiles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greylisting&#8230; Revisited</title>
		<link>http://nanozen.info/2011/02/greylisting-revisited/</link>
		<comments>http://nanozen.info/2011/02/greylisting-revisited/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 09:03:03 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1806</guid>
		<description><![CDATA[Reprinted here with permission of Steve Freegard of Fort Systems Ltd. (Original article) Greylisting&#8230; Revisited &#160;&#160;by Steve Freegard Our BarricadeMX products have supported greylisting since they were first released. From the beginning, our greylisting used custom modifications to make it &#8230; <a href="http://nanozen.info/2011/02/greylisting-revisited/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Reprinted here with permission of Steve Freegard of <a href="http://www.fsl.com/">Fort Systems Ltd.</a> (<a href="http://www.fsl.com/index.php/resources/whitepapers/99">Original article</a>)</p>
<h2>Greylisting&#8230; Revisited</h2>
<p>&nbsp;&nbsp;by Steve Freegard</p>
<p class="c0">
<span class="c1">Our </span><span class="c10"><a href="http://www.fsl.com/" target="_blank">BarricadeMX</a></span><span class="c1"> products have supported greylisting since they were first released. From the beginning, our greylisting used custom modifications to make it more acceptable to businesses and to address some of the original method&rsquo;s shortcomings.</span>
</p>
<p class="c0">
<span class="c1">As we have started working on what will become the 3rd version of the BarricadeMX SMTP engine; I started by looking back at support issues over the past few years to see what we could do better and decide what should and should not be present in the new version.</span>
</p>
<p class="c0">
<span class="c1">As part of that review process I started looking again at greylisting; should we keep it or should it go? &nbsp;I had found a number of tickets where we had advised customers to whitelist servers because they did not handle greylisting at all. &nbsp;But was this reason enough to get rid of it completely? &nbsp;Is it still effective?</span>
</p>
<p class="c0">
<span class="c1">For the purpose of this paper, it is assumed that the reader has an understanding of the Simple Mail Transfer Protocol (SMTP), the Domain Name System (DNS), and related terminology.</span>
</p>
<h2>Background</h2>
<p class="c0">
<span class="c1">Greylisting has been around since 2003 when Evan Harris wrote the original </span><br />
<span class="c10"><a href="http://www.greylisting.org/articles/whitepaper.shtml" target="_blank">whitepaper</a></span><span class="c1"> on it as a spam filtering mechanism. </span>
</p>
<p class="c0">
<span class="c1">The basic premise was that during the SMTP connection for each connecting IP address, sender, and recipient a tuple is created in a database and the recipients deferred (with a temporary failure) for a fixed period of time. &nbsp;If the same tuple comes back after that period of time had passed, then the recipients are passed and the message accepted. &nbsp;The idea being that if the sending system implements a retry-queue it would pass the greylisting after a period of time, while spam engines would not because they do not implement retry queues, but instead work in a fire-and-forget fashion.</span>
</p>
<p class="c0">
<span class="c1">The issues with this approach were that using the proposed tuple of IP, sender, and recipient caused mail to be delayed excessively for a period of time until the greylisting system had &lsquo;learnt&rsquo; who are the regular correspondents. &nbsp;Worse still, SMTP servers can have wildly varying timeouts meaning some will retry after a few seconds, others might take hours to retry meaning that genuine mail can be delayed for very long periods.</span>
</p>
<p class="c0">
<span class="c1">The other issue was with SMTP implementations that use a shared spool for the retry-queue; this means that while one host might send the initial message, another host on a different IP might send the retry; therefore the greylist tuple will not match this retry again causing severe delays.</span>
</p>
<p class="c0">
<span class="c1">Many implementations were created with various workarounds for these shortcomings. &nbsp;</span>
</p>
<p class="c0">
<span class="c1">Many people have spoken out against greylisting and have speculated that like all anti-spam mechanisms it will become less effective over time, because the spammers will adapt to it. &nbsp; So in 2011, eight years after the original whitepaper was published, has this happened?</span>
</p>
<h2>Testing</h2>
<p class="c0">
<span class="c1">Because traditional greylisting sends a temporary failure to each recipient, quantifying how many messages this actually equates to is impossible. &nbsp; So for the purposes of this test I will be sending the temporary failure at the end of DATA so that I may count unique messages and track the retries of each message. &nbsp;This comes with a big caveat &#8211; bitter experience with SMTP implementations tells me that greylisting a message at the end-of-data phase instead of each recipient can and probably will cause different results in the real world, because some SMTP implementations handle retries differently depending where the deferral is done and what deferral code was used.</span>
</p>
<p class="c0">
<span class="c1">As noted in the &lsquo;background&rsquo; section above, using the IP address as part of the tuple causes problems with shared-spools. &nbsp;Many greylisting implementations therefore only use the first 3 octets of the IPv4 address to treat a single /24 as one entry. &nbsp;The problem with this approach is that some shared spools might use more than one /24 or there might be multiple unrelated hosts in that same /24; either way this could also cause some undesired results. &nbsp;To overcome the issues with shared spools I will use a different approach:</span>
</p>
<p class="c0">
<span class="c1">The full IPv4 or IPv6 address will be used if:</span>
</p>
<ul class="c19">
<li class="c16" value="1">
<span class="c1">The connecting host has no PTR record, a.k.a. reverse DNS (rDNS).</span>
</li>
<li class="c16">
<span class="c1">The rDNS record contains the first two or last two octets of the IP address.</span>
</li>
<li class="c16">
<span class="c1">The rDNS record contains the &lsquo;short&rsquo;, decimal, or hex representation of the full IP address.</span>
</li>
<li class="c16">
<span class="c1">Multiple rDNS records are returned.</span>
</li>
<li class="c16">
<span class="c1">The rDNS record cannot be verified by forward confirmation (e.g. </span><br />
<span class="c10"><a href="http://en.wikipedia.org/wiki/Forward-confirmed_reverse_DNS" target="_blank">FCrDNS</a></span><span class="c1">).</span>
</li>
<li class="c16">
<span class="c1">The top-level-domain (TLD) used is not valid.</span>
</li>
</ul>
<p class="c0">
<span class="c1">Otherwise the first label, host part, of the rDNS is stripped, but only until the domain boundary will be used. &nbsp;For example:</span>
</p>
<table cellpadding="0" cellspacing="0" class="c6" align="center" border="1" width="80%">
<tbody>
<tr>
<td class="c8">
<p class="c9">
<span class="c1 c12">rDNS</span>
</p>
</td>
<td class="c27">
<p class="c9">
<span class="c1 c12">Greylist key used</span>
</p>
</td>
</tr>
<tr>
<td class="c8">
<p class="c9">
<span class="c1">host.sub.domain.com</span>
</p>
</td>
<td class="c27">
<p class="c9">
<span class="c1">sub.domain.com</span>
</p>
</td>
</tr>
<tr>
<td class="c8">
<p class="c9">
<span class="c1">host.domain.com</span>
</p>
</td>
<td class="c27">
<p class="c9">
<span class="c1">.domain.com</span>
</p>
</td>
</tr>
<tr>
<td class="c8">
<p class="c9">
<span class="c1">domain.com</span>
</p>
</td>
<td class="c27">
<p class="c9">
<span class="c1">domain.com</span>
</p>
</td>
</tr>
</tbody>
</table>
<p class="c0">
<span class="c1">For the remainder of this paper I will refer to this hybrid IP / rDNS key as the &lsquo;hostid&rsquo;.</span>
</p>
<p class="c0">
<span class="c1">This method presumes that shared spool hosts will always have valid rDNS and that the pool of hosts will also either share a common sub-domain or domain. &nbsp;Experience of using this method in our BarricadeMX products has proven this to be the case. &nbsp;</span>
</p>
<p class="c0">
<span class="c1">Here is an example of this from the results, this shows a single message being received and greylisted and each of the retries showing the time difference between the last retry and the IP address of the host sending the message &nbsp;In this case the hostid is &lsquo;.obsmtp.com&rsquo; (Outblaze):</span>
</p>
<table cellpadding="0" cellspacing="0" class="c6" align="center" border="1" width="80%">
<tbody>
<tr>
<td class="c23">
<p class="c9">
<span class="c1 c12">Retry</span>
</p>
</td>
<td class="c13">
<p class="c9">
<span class="c1 c12">Time Diff.</span>
</p>
</td>
<td class="c20">
<p class="c9">
<span class="c1 c12">IP address</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">1</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">0</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.98</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">2</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">68</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.98</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">3</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">67</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.86</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">4</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">65</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.88</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">5</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">65</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.88</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">6</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">66</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.36</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">7</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">68</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.36</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">8</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">65</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.22</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">9</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">65</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.26</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">10</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">66</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.90</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">11</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">66</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.100</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">12</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">66</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.32</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">13</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">67</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.24</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1">14</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1">65</span>
</p>
</td>
<td class="c20">
<p class="c2">
<span class="c1">64.18.3.86</span>
</p>
</td>
</tr>
<tr>
<td class="c23">
<p class="c9">
<span class="c1 c12">TOTAL</span>
</p>
</td>
<td class="c13">
<p class="c2">
<span class="c1 c12">859</span>
</p>
</td>
<td class="c20">
<p class="c9">
<span class="c1">&nbsp;</span>
</p>
</td>
</tr>
</tbody>
</table>
<p class="c0">
<span class="c1">As can be seen, multiple retries from a pool of hosts sharing a spool are easily handled by one greylist &lsquo;hostid&rsquo; with a total greylist delay for this message of 859 seconds. &nbsp;My only comment regarding this is that the retry interval used here is rather short with no back-off.</span>
</p>
<p class="c0">
<span class="c1">The greylist tuple I am going to use for the purposes of this paper and so that I can track unique messages and their retries will be:</span>
</p>
<table cellpadding="0" cellspacing="0" class="c6" align="center" border="1" width="80%">
<tbody>
<tr>
<td class="c14" width="35%">
<p class="c9">
<span class="c1">hostid</span>
</p>
</td>
<td class="c14" width="65%">
<p class="c9">
<span class="c1">As described above</span>
</p>
</td>
</tr>
<tr>
<td class="c14">
<p class="c9">
<span class="c1">sender</span>
</p>
</td>
<td class="c14">
<p class="c9">
<span class="c1">The envelope sender as sent in MAIL FROM:</span>
</p>
</td>
</tr>
<tr>
<td class="c14">
<p class="c9">
<span class="c1">recipients</span>
</p>
</td>
<td class="c14">
<p class="c9">
<span class="c1">All envelope recipients as sent in RCPT TO:</span>
</p>
</td>
</tr>
<tr>
<td class="c14">
<p class="c9">
<span class="c1">message ID</span>
</p>
</td>
<td class="c14">
<p class="c9">
<span class="c1">The Message ID header if present. &nbsp;If missing the &lsquo;md5&rsquo; field will be used and &lsquo;@my.hostname.tld&rsquo; suffixed to the end.</span>
</p>
</td>
</tr>
<tr>
<td class="c14">
<p class="c9">
<span class="c1">md5</span>
</p>
</td>
<td class="c14">
<p class="c9">
<span class="c1">The md5 of the message body.</span>
</p>
</td>
</tr>
</tbody>
</table>
<p class="c0">
<span class="c1">The other deviation from the original paper is to prevent excessive delays for each hostid. &nbsp;All that greylisting proves is that a host (or group of hosts) correctly implements a retry-queue. &nbsp;Once that has been proven then that &lsquo;hostid&rsquo; is exempted from further greylisting for 40 days since it was last seen. &nbsp;This is done to reduce the impact and delays that greylisting can cause. &nbsp;Although I have not done so in this test I also recommend that hosts listed on the public DNS whitelists such as the DNS Whitelist (</span><span class="c10"><a href="http://www.dnswl.org/" target="_blank">DNSWL</a></span><span class="c1">) be exempted from greylisting for the same reason.</span>
</p>
<p class="c0">
<span class="c1">To prevent spammers from exploiting this exemption by continuously cycling through their sender, recipient, and template lists in a effort to defeat greylisting and/or be exempted, a &lsquo;hostid&rsquo; must retry either the first or the last message that has been seen from that given &lsquo;hostid&rsquo; (this is to handle last-in-first-out and first-in-first-out queue strategies), until that time any other messages will be greylisted.</span>
</p>
<p class="c0">
<span class="c1">I also had to choose what timeout periods I would use:</span>
</p>
<p class="c0">
<span class="c1">850 seconds for the greylist deferral period. This was chosen because a </span> <span class="c10"><a href="http://en.wikipedia.org/wiki/Greylisting" target="_blank">Wikipedia</a></span> <span class="c1">article on greylisting shows the default retry times for various MTAs with the average 1st retry being around the 15 minute mark, 850 seconds prevents a host retrying every minute from passing before this.</span>
</p>
<p class="c0">
<span class="c1">I also believe that 15 minutes is a good margin for a DNS blacklist (DNSBL) to see the message from an IP (e.g. infected, malicious, hacked or other), list it, sync the list with any mirrors and allow for a negative cache TTL to expire. &nbsp;The theory being that if host is greylisted and is not already listed on a DNSBL, then prior to accepting mail from them, they could be subsequently black listed. &nbsp;This theory maybe the subject of a future article.</span>
</p>
<p class="c0">
<span class="c1">25 hours before greylist deferral records are removed. This was chosen in case someone had set their queue retry timer to 24 hours, unlikely, but you never know. &nbsp;I just wanted to pick an arbitrarily big number. I can revisit this choice based on the results in my conclusions.</span>
</p>
<p class="c0">
<span class="c1">Based on the 25 hours before any greylist records are removed, I decided that the test would run for a total of 50 hours. &nbsp;The first 25 hours would allow any messages through as normal subject to the rules of greylisting, after which I would only allow through messages for hosts that had outstanding greylist records to give them the chance to pass the test, no other messages would be allowed or tracked after this time to allow the test to finish gracefully.</span>
</p>
<p class="c0">
<span class="c1">I should also mention the mail stream that I am running this test on: it&rsquo;s an old 3-letter domain that was first registered in 1989, but has been out of use for the past 10 years or so and has no real users present on it. &nbsp;I spent a lot of time generating addresses that were harvested and sold on a few years ago, so it gets a quite a lot of </span><span class="c10"><a href="http://en.wikipedia.org/wiki/Botnet" target="_blank">botnet</a></span><span class="c1"> spew, </span><span class="c10"><a href="http://mainsleazespam.com/" target="_blank">mainsleaze</a></span><span class="c1"> and the occasional bit of misdirected mail.</span>
</p>
<h2>Results</h2>
<table cellpadding="0" cellspacing="0" class="c6" align="center" border="1" width="80%">
<tbody>
<tr>
<td class="c26">
<p class="c2">
<span class="c1 c12">&nbsp;</span>
</p>
</td>
<td class="c24">
<p class="c2">
<span class="c1 c12">Messages</span>
</p>
</td>
<td class="c25">
<p class="c2">
<span class="c1 c12">%</span>
</p>
</td>
</tr>
<tr>
<td class="c26">
<p class="c9">
<span class="c1">Rejected</span>
</p>
</td>
<td class="c24">
<p class="c2">
<span class="c1">71,638</span>
</p>
</td>
<td class="c25">
<p class="c2">
<span class="c1 c12 c22">98.5</span>
</p>
</td>
</tr>
<tr>
<td class="c26">
<p class="c9">
<span class="c1">Lost</span>
</p>
</td>
<td class="c24">
<p class="c2">
<span class="c1">34</span>
</p>
</td>
<td class="c25">
<p class="c2">
<span class="c1">0.04</span>
</p>
</td>
</tr>
<tr>
<td class="c26">
<p class="c9">
<span class="c1">Accepted</span>
</p>
</td>
<td class="c24">
<p class="c2">
<span class="c1">1,041</span>
</p>
</td>
<td class="c25">
<p class="c2">
<span class="c1">1.43</span>
</p>
</td>
</tr>
<tr>
<td class="c26">
<p class="c9">
<span class="c1 c12">TOTAL</span>
</p>
</td>
<td class="c24">
<p class="c2">
<span class="c1">72,713</span>
</p>
</td>
<td class="c25">
<p class="c9">
<span class="c1">&nbsp;</span>
</p>
</td>
</tr>
</tbody>
</table>
<p class="c0">
<span class="c1">Lost is the count of the number of messages that were not retried after the hostid that sent them had passed the greylisting test.</span>
</p>
<p class="c0">
<span class="c1">These results were quite a surprise to me. &nbsp;Prior to starting this test I expected the numbers to be considerably lower. &nbsp;With this in mind I decided to analyse the results further to verify the outcome.</span>
</p>
<p class="c0">
<span class="c1">I started by analysing the number of retries seen for each message for all messages that had been seen during the test. &nbsp;The graph speaks for itself:</span>
</p>
<p><a href="http://nanozen.info/wp-content/uploads/2011/02/image4.png" rel="lightbox[1806]"><img src="http://nanozen.info/wp-content/uploads/2011/02/image4-300x196.png" alt="" title="image4" width="300" height="196" class="aligncenter size-medium wp-image-1820" /></a></p>
<p class="c0">
<span class="c1">It shows that nearly all messages that failed greylisting made only a single delivery attempt.</span>
</p>
<p class="c0">
<span class="c1">For comparison &#8211; here is the same graph, but showing only messages that passed greylisting:</span>
</p>
<p><a href="http://nanozen.info/wp-content/uploads/2011/02/image5.png" rel="lightbox[1806]"><img src="http://nanozen.info/wp-content/uploads/2011/02/image5-300x196.png" alt="" title="image5" width="300" height="196" class="aligncenter size-medium wp-image-1815" /></a></p>
<p class="c0">
<span class="c1">And here is a graph that shows the maximum delay caused by greylisting:</span>
</p>
<p><a href="http://nanozen.info/wp-content/uploads/2011/02/image1.png" rel="lightbox[1806]"><img src="http://nanozen.info/wp-content/uploads/2011/02/image1-300x196.png" alt="" title="image1" width="300" height="196" class="aligncenter size-medium wp-image-1817" /></a></p>
<p><span class="c1">This shows the vast majority of messages were initially delayed for less than an hour.</span>
</p>
<h2>Extremes</h2>
<p class="c0">
<span class="c1">The graphs above show some big numbers at the extremes. &nbsp;I decided to investigate these.</span>
</p>
<ul class="c19">
<li class="c16">
<span class="c1">61 failed retry attempts. &nbsp;All of the retries counts over 17 were caused by a single group of hosts with a hostid of &lsquo;newsletter.m6.fr&rsquo;. &nbsp;It would appear to be a pool of hosts with a shared-spool and a retry interval of 10 seconds.</span>
</li>
<li class="c16">
<span class="c1">17 retry attempts for a message that passed greylisting. This was a pool of hosts with a hostid of &lsquo;.xraybot.com&rsquo; running a shared-pool that appear to be running the Lyris ListManager 10 software (verified by visiting </span><br />
<span class="c10"><a href="http://www.xraybot.com/" target="_blank">www.xraybot.com</a></span><span class="c1"> and the SMTP banners). &nbsp;</span></p>
<p class="c0 c21">
<span class="c1">In this case there are 16 hosts in the pool and each host retried 1 second after the previous host, then once all of the hosts in the pool had attempted to send the message &#8211; the first host in the pool retried an hour later therefore passing the greylisting.</span>
</p>
<li class="c16">
<span class="c1">A message that was delayed for almost 24 hours. This was from a single host with a hostid of &lsquo;.built2go.com&rsquo; and an envelope from &lsquo;root@unknown.scnet.net&rsquo;, but the From header shows &lsquo;updates@boxedartupdates.com&rsquo;. &nbsp;It scored 1 in the SpamAssassin mass-checks and appears to be a non-spam newsletter. &nbsp;According to the headers, the message was delivered by Sendmail, so it was simply configured with a very long retry.</span>
</li>
<li class="c16">
<span class="c1">Not shown on the graph, but in the greylist database I found a single case where the retried message was over 25 hours old and the greylist record had been deleted. &nbsp;The message was a lottery scam message relayed through host </span><br />
<span class="c10"><a href="http://dormant.esatclear.ie/" target="_blank">dormant.esatclear.ie</a></span><span class="c1"> via authenticated SMTP from a host in the Czech Republic and was retried after 28.9 hours. &nbsp;According to the received header the host was running Exim 4.14. &nbsp;The message would have passed greylisting had the record expiry time have been higher. &nbsp;I the only explanation I have for the very long retry timer is that the host is under heavy load and is not running its queues due to that load.</span>
</li>
</ul>
<h2>SpamAssassin Mass Checks</h2>
<p class="c0">
<span class="c1">I ran a SpamAssassin mass-check for each message class that I had collected from the test. &nbsp;This produced some interesting results, but it should be noted that the mass-checks were run after the test was complete. &nbsp;That means that some of the messages checked could have been over 50 hours old and would most likely have scored lower at the time the message was received.</span>
</p>
<p class="c0">
<span class="c1"> I started with all the messages that had failed to greylist properly:</span>
</p>
<p><a href="http://nanozen.info/wp-content/uploads/2011/02/image3.png" rel="lightbox[1806]"><img src="http://nanozen.info/wp-content/uploads/2011/02/image3-300x196.png" alt="" title="image3" width="300" height="196" class="aligncenter size-medium wp-image-1819" /></a></p>
<p class="c0">
<span class="c1">This shows 0.6% of the messages were underneath the SpamAssassin threshold of 5. &nbsp;I manually inspected these messages and found only two that I would consider a false-positive, the rest were all false-negatives.</span>
</p>
<p class="c0">
<span class="c1">Both of the false-positives were a newsletter from the New York Post (Subject: Daily Newsletter). &nbsp;Upon inspection both of these messages were only attempted to be delivered once. &nbsp;The Received header shows that Postfix was the MTA used to deliver the message, so it must have been configured to do this is not the default behaviour. &nbsp;The messages were sent from IP 209.73.248.15, which is listed on the DNSWL.</span>
</p>
<p class="c0">
<span class="c1">The mass-check results also show a high overlap with DNSBL / URIBL services:</span>
</p>
<table cellpadding="0" cellspacing="0" class="c6" align="center" border="1" width="80%">
<tbody>
<tr>
<td class="c18">
<p class="c9">
<span class="c1 c12">Rule</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1 c12">%</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">RCVD_IN_BRBL_LASTEXT</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">98.160</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">RCVD_IN_XBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">95.977</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">URIBL_DBL_SPAM</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">90.352</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">URIBL_JP_SURBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">89.991</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">URIBL_WS_SURBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">89.873</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">URIBL_AB_SURBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">84.937</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">RCVD_IN_PSBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">76.349</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">RCVD_IN_RP_RNBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">69.914</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">URIBL_SBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">68.271</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">RCVD_IN_PBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">68.152</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">URIBL_SC_SURBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">55.040</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">RCVD_IN_BL_SPAMCOP_NET</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">52.021</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">RCVD_IN_SORBS_DUL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">22.286</span>
</p>
</td>
</tr>
<tr>
<td class="c18">
<p class="c9">
<span class="c1">URIBL_PH_SURBL</span>
</p>
</td>
<td class="c7">
<p class="c2">
<span class="c1">12.720</span>
</p>
</td>
</tr>
</tbody>
</table>
<p class="c0">
<span class="c1">Here is the score distribution of messages that were not retried after the host sending the messages had passed the greylisting test with another message. &nbsp;As there were only 34 of these I manually looked at all of them and found them all to be spam.</span>
</p>
<p><a href="http://nanozen.info/wp-content/uploads/2011/02/image2.png" rel="lightbox[1806]"><img src="http://nanozen.info/wp-content/uploads/2011/02/image2-300x196.png" alt="" title="image2" width="300" height="196" class="aligncenter size-medium wp-image-1818" /></a></p>
<p class="c0">
<span class="c1">I would speculate that some of these messages were not retried as the hosts were found to be compromised and the messages were subsequently deleted from the queues. &nbsp;On previous trial runs of this test I found evidence that Google did this when it shut down compromised accounts.</span>
</p>
<p class="c0">
<span class="c1">Again I found a significant overlap with DNSBL / URIBL services in the mass-check results:</span>
</p>
<table cellpadding="0" cellspacing="0" class="c6" align="center" border="1" width="80%">
<tbody>
<tr>
<td class="c4">
<p class="c9">
<span class="c1 c12">Rule</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1 c12">%</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">RCVD_IN_BRBL_LASTEXT</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">87.879</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">URIBL_DBL_SPAM</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">81.818</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">URIBL_RHS_DOB</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">39.394</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">RCVD_IN_RP_RNBL</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">39.394</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">URIBL_JP_SURBL</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">36.364</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">URIBL_AB_SURBL</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">21.212</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">RCVD_IN_PSBL</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">15.152</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">URIBL_OB_SURBL</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">12.121</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">RCVD_IN_XBL</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">12.121</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">URIBL_WS_SURBL</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">12.121</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">RCVD_IN_BL_SPAMCOP_NET</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">9.091</span>
</p>
</td>
</tr>
<tr>
<td class="c4">
<p class="c9">
<span class="c1">URIBL_SBL</span>
</p>
</td>
<td class="c17">
<p class="c2">
<span class="c1">9.091</span>
</p>
</td>
</tr>
</tbody>
</table>
<p class="c0">
<span class="c1">&nbsp;</span>
</p>
<p class="c0">
<span class="c1">And finally here is the score distribution of the messages that passed greylisting:</span>
</p>
<p><a href="http://nanozen.info/wp-content/uploads/2011/02/image0.png" rel="lightbox[1806]"><img src="http://nanozen.info/wp-content/uploads/2011/02/image0-300x196.png" alt="" title="image0" width="300" height="196" class="aligncenter size-medium wp-image-1816" /></a></p>
<p class="c0">
<span class="c1">As the mail stream I&rsquo;m testing this on predominantly receives spam, it was not much of a surprise that a high proportion of these messages were considered to be spam. &nbsp;Here is the overlap with the DNSBL / URIBL services from the mass-check results:</span>
</p>
<table align="center" cellpadding="0" cellspacing="0" class="c6" border="1" width="80%">
<tbody>
<tr>
<td class="c3">
<p class="c9">
<span class="c1 c12">Rule</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1 c12">%</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">RCVD_IN_BRBL_LASTEXT</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">64.808</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">URIBL_DBL_SPAM</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">52.692</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">URIBL_RHS_DOB</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">25.673</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">RCVD_IN_PSBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">25.192</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">URIBL_WS_SURBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">20.000</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">URIBL_JP_SURBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">14.712</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">RCVD_IN_RP_RNBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">12.500</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">URIBL_OB_SURBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">11.827</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">URIBL_AB_SURBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">7.115</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">URIBL_SBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">6.346</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">RCVD_IN_BL_SPAMCOP_NET</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">5.577</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">RCVD_IN_XBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">5.385</span>
</p>
</td>
</tr>
<tr>
<td class="c3">
<p class="c9">
<span class="c1">RCVD_IN_SBL</span>
</p>
</td>
<td class="c5">
<p class="c2">
<span class="c1">4.712</span>
</p>
</td>
</tr>
</tbody>
</table>
<h2>Overheads</h2>
<p class="c0">
<span class="c1">The database that I used for this test recorded a single greylisting record for each greylist tuple which corresponds to a unique message, and a separate table tracked the retries for that tuple. &nbsp;This allowed me to track the bandwidth overhead associated with greylisting at the end-of-data in this way.</span>
</p>
<p class="c0">
<span class="c1">If all messages greylisted during this test were allowed through without being greylisted, the total size of the message data accepted would have been 151 MB excluding any protocol overheads. &nbsp;With greylisting this rose to 210 MB which is a 39% increase. &nbsp;However greylisting prevented 130 MB of traffic from being content scanned, an intensive activity, which is an 89% decrease in volume.</span>
</p>
<h2>Queue strategies</h2>
<p class="c0">
<span class="c1">In the &lsquo;Testing&rsquo; section above, I mentioned the requirement that a hostid should not be able to pass greylisting until it had retried the first or last message (e.g. LIFO or FIFO) that it had sent to prevent spammers from passing the greylisting via a &lsquo;brute force&rsquo; retry method. &nbsp;This would also allow an optimisation to reduce the amount of bandwidth used by moving the greylisting deferral back to the RCPT TO: or DATA stage if the sender and recipients do not match either the first or last greylist tuple for that hostid.</span>
</p>
<p class="c0">
<span class="c1">However, while doing initial testing and removing any bugs from my greylist plug-in, I observed that several messages from free-mail hosts were &lsquo;lost&rsquo; and never retried after the hostid had passed the test. &nbsp;Upon investigation, these messages were all spam and I concluded that they were never retired because the abuse was detected and the accounts that sent them were either disabled or deleted and any messages in the queues for these accounts were de-queued.</span>
</p>
<p class="c0">
<span class="c1">If one of these messages deleted from the queue had been either the first or the last message seen by the greylisting plug-in, then all mail from that hostid would have been delayed considerably as the hostid would not be able to pass the test for over 25 hours (in the case of a FIFO queue strategy). &nbsp;I also realised that I commonly ran Sendmail queues on overloaded systems with &lsquo;sendmail -qp -OMinQueueAge=15m -OQueueSortOrder=random&rsquo; which would also fall foul of this requirement.</span>
</p>
<p class="c0">
<span class="c1">The data collected for this paper showed that only 6 messages were rejected because of this requirement that would otherwise have been accepted. &nbsp;All of the messages were considered to be spam by me and by SpamAssassin.</span>
</p>
<p class="c0">
<span class="c1">Based upon these observations I would not recommend making the queue strategy a requirement to pass greylisting at this time.</span>
</p>
<h2>Conclusion</h2>
<p class="c0">
<span class="c1">The numbers I think speak for themselves, even after eight years greylisting is still effective. &nbsp;With modifications to the greylist tuple used, such as the hostid, exempting hosts that finally pass greylisting, and skipping greylisting for hosts on DNS whitelists it can be effective without adversely delaying genuine mail.</span>
</p>
<p class="c0">
<span class="c1">It can also significantly reduce the amount of external network look-ups required and reduce the CPU cost of content filtering until a host has passed greylisting allowing greater scalability at the expense of extra bandwidth.</span>
</p>
<p class="c0">
<span class="c1">Critics of greylisting as an anti-spam technique would say that it can cause valid mail to be lost, I would counter this argument and say that any e-mail server or web application that cannot correctly handle temporary failures as required by the </span><span class="c10"><a href="http://tools.ietf.org/html/rfc5321#section-4.5.4.1" target="_blank">RFC</a></span><span class="c1"> is going to be terminally unreliable anyway.</span>
</p>
<p class="c0">
<span class="c1">While it might not be for everyone and it will still require some hosts to be manually exempted. Based on these results greylisting will definitely be in the next version of </span><span class="c10"><a href="http://www.fsl.com/" target="_blank">BarricadeMX</a></span><span class="c1"> and our customers can choose for themselves if they want to enable it or not.</span>
</p>
<h2>Thanks</h2>
<p class="c0">
<span class="c1">The original idea for greylisting using part of the PTR record was made by Anthony Howe. &nbsp;My thanks to Stephen Swaney, Randolph Langley and Anthony Howe for editing and contributing changes to this paper. </span>
</p>
<p><br/></p>
<p class="copyright">
<span class="c1">Copyright 2011 by Fort Systems Ltd. All rights reserved.<br />
May not be reprinted without permission.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2011/02/greylisting-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spamhaus under DDOS from AnonOps (Wikileaks.info)</title>
		<link>http://nanozen.info/2010/12/spamhaus-under-ddos-from-anonops-wikileaks-info/</link>
		<comments>http://nanozen.info/2010/12/spamhaus-under-ddos-from-anonops-wikileaks-info/#comments</comments>
		<pubDate>Sat, 18 Dec 2010 14:39:33 +0000</pubDate>
		<dc:creator>Anthony Howe</dc:creator>
				<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://nanozen.info/?p=1794</guid>
		<description><![CDATA[Sent to a private anti-spam list I&#8217;m a member of&#8230; From: Steve Linford at Spamhaus Date: Sat, 18 Dec 2010 12:39:18 +0000 For speaking out about the crime gangs located at the wikileaks.info mirror IP, Spamhaus is now under ddos &#8230; <a href="http://nanozen.info/2010/12/spamhaus-under-ddos-from-anonops-wikileaks-info/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sent to a private anti-spam list I&#8217;m a member of&#8230;</p>
<p><strong>From: Steve Linford at Spamhaus<br />
Date: Sat, 18 Dec 2010 12:39:18 +0000<br />
</strong><br />
For speaking out about the <strong>crime gangs located at the wikileaks.info mirror IP</strong>, Spamhaus is now under ddos by AnonOps.</p>
<p>As our site can&#8217;t be reached now, we can not continue to warn Wikileaks users not to load things from the Heihachi IP. If you know journalists who would get this message out, please forward this message (entire) to them.</p>
<p>AnonOps did not like our article update, here&#8217;s what we said and what brought the ddos on us:</p>
<p>&#8212;-</p>
<p>In a statement released today on wikileaks.info entitled &#8220;Spamhaus&#8217; False Allegations Against wikileaks.info&#8221;, the person running the wikileaks.info site (which is not connected with Julian Assange or the real Wikileaks organization) called Spamhaus&#8217;s information on his infamous cybercrime host &#8220;false&#8221; and &#8220;none of our business&#8221; and called on people to contact Spamhaus and &#8220;voice your opinion&#8221;. Consequently Spamhaus has now received a number of emails some asking if we &#8220;want to be next&#8221;, some telling us to stop blacklisting Wikileaks (obviously they don&#8217;t understand that we never did) and others claiming we are &#8220;a pawn of US Government Agencies&#8221;.</p>
<p>None of the people who contacted us realised that the &#8220;Wikileaks press release&#8221; published on wikileaks.info was not written by Wikileaks and not issued by Wikileaks &#8211; but by the person running the wikileaks.info site only &#8211; the very site we are warning about. The site data, disks, connections and visitor traffic, are all under the control of the Heihachi cybercrime gang. There are more than 40 criminal-run sites operating on the same IP address as wikileaks.info, including carder-elite.biz, h4ck3rz.biz, elite-crew.net, and bank phishes paypal-securitycenter.com and postbank-kontodirekt.com.</p>
<p>Because they are using a Wikileaks logo, many people thought that the &#8220;press release&#8221; was issued &#8220;by Wikileaks&#8221;. In fact there has been no press release about this by Wikileaks and none of the official Wikileaks mirrors sites even recognise the wikileaks.info mirror. We wonder how long it will be before Wikileaks supporters wake up and start to question why wikileaks.info is not on the list of real Wikileaks mirrors at <a href="http://wikileaks.ch/mirrors.html" target="_blank">wikileaks.ch</a>.</p>
<p>Currently wikileaks.info is serving highly sensitive leaked documents to the world, from a server fully controlled by Russian malware cybercriminals, to an audience that faithfully believes anything with a &#8216;Wikileaks&#8217; logo on it.</p>
<p>Spamhaus continues to warn Wikileaks readers to make sure they are viewing and downloading documents only from an official Wikileaks mirror site. We&#8217;re not saying &#8220;don&#8217;t go to Wikileaks&#8221; we&#8217;re saying &#8220;Use the wikileaks.ch server instead&#8221;.</p>
<p>&#8212;-</p>
<p>Steve Linford<br />
The Spamhaus Project<br />
<a href="http://www.spamhaus.org/" target="_blank">http://www.spamhaus.org</a></p>
<p><strong>Update:</strong> The full Spamhaus warning concerning wikileaks.info is <a href="http://www.spamhaus.org/news.lasso?article=665" target="_blank">here</a>. A similar warning made by Trend Micro is <a href="http://blog.trendmicro.com/wikileaks-in-a-dangerous-internet-neighborhood/" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nanozen.info/2010/12/spamhaus-under-ddos-from-anonops-wikileaks-info/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

