<?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>Atomic Playboy&#187; spam</title>
	<atom:link href="http://atomicplayboy.net/blog/tag/spam/feed/" rel="self" type="application/rss+xml" />
	<link>http://atomicplayboy.net</link>
	<description>All hail the mushroom cloud</description>
	<lastBuildDate>Tue, 08 May 2012 13:19:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Today in Emails</title>
		<link>http://atomicplayboy.net/blog/2008/04/25/today-in-emails/</link>
		<comments>http://atomicplayboy.net/blog/2008/04/25/today-in-emails/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 10:49:33 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/?p=444</guid>
		<description><![CDATA[Some email about making custom smileys arrives from MSN Live. I don&#8217;t even use the &#8220;official&#8221; MSN client since I refuse to use anything that shoves ads in my face in an intrusive manner. I do use the MSN Messenger service though, so it might be prudent to just unsubscribe to their marketing spam rather [...]]]></description>
			<content:encoded><![CDATA[<p>Some email about making custom smileys arrives from <span class="caps">MSN</span> Live. I don&#8217;t even use the &#8220;official&#8221; MSN client since I refuse to use anything that shoves ads in my face in an intrusive manner.</p>
<p>I do use the <span class="caps">MSN</span> Messenger service though, so it might be prudent to just unsubscribe to their marketing spam rather than flag it spam and miss potential emails about the actual service. So I click the unsubscribe link at the bottom of the mail, log in, select &#8220;I don&#8217;t want this stuff&#8221; at three different places, click submit, and&#8230; a red-colored text that says &#8220;Error 500&#8243; appears.</p>
<p>I try to submit two more times. More error 500.</p>
<p>This is where I sigh, go back to Gmail, and click &#8220;report spam&#8221;.</p>
<p>Here&#8217;s some helpful hints from an email user: I can report your mail as spam with a single click. If you can&#8217;t add a one-click unsubscribe link (also, it helps if it actually works), then <em>I can report your mail as spam with a single click</em>. I don&#8217;t want to have to jump through hoops to do this. There&#8217;s no need for me to have to log in and navigate the site to find my account preferences.</p>
<p>It&#8217;s all a cost/benefit calculation. This cost me time. The benefit was that I might still want to get things like password reminders (in case I suffer from sudden brain trauma) and information about service changes.</p>
<p>Had this been a web shop I would most likely have clicked &#8220;report as spam&#8221; right away. I can accept having to provide a password, but after that it should opt me out instantly.</p>
<p>The worst offender I&#8217;ve seen here is CD-WOW. After logging in the user preferences had <em>two</em> places where you needed to deselect your spamming preferences &#8212; under separate tabs with nearly identical names. I only spotted one of them, and logically assumed that it would work. Then I got more marketing trash from them, got annoyed since I had already declared my preferences, and now their mails go straight to the spamcan.</p>
<p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2008/04/25/today-in-emails/" type="text/javascript" charset="utf-8"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2008/04/25/today-in-emails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spam of the Year</title>
		<link>http://atomicplayboy.net/blog/2006/05/18/spam-of-the-year/</link>
		<comments>http://atomicplayboy.net/blog/2006/05/18/spam-of-the-year/#comments</comments>
		<pubDate>Thu, 18 May 2006 10:22:16 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/blog/2006/05/18/spam-of-the-year/</guid>
		<description><![CDATA[This spam to my Gmail account had me laughing out loud. Subject: Ihre Domain www.gmail.com ist nicht bei Google gelistet! It&#8217;s a German spammer trying to tell me that &#8220;my&#8221; domain, gmail.com, isn&#8217;t listed in Google! So yeah, you stupid spammer dudes at Finke Marketing. Thanks for the chuckles.]]></description>
			<content:encoded><![CDATA[<p>This spam to my Gmail account had me laughing out loud.</p>

<blockquote><p><strong>Subject:</strong> Ihre Domain www.gmail.com ist nicht bei Google gelistet!</p></blockquote>

<p>It&#8217;s a German spammer trying to tell me that &#8220;my&#8221; domain, gmail.com, isn&#8217;t listed in Google!</p>

<p>So yeah, you stupid spammer dudes at <a href="http://www.google.com/search?q=%22finke+marketing%22">Finke Marketing</a>. Thanks for the chuckles.</p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2006/05/18/spam-of-the-year/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2006/05/18/spam-of-the-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Snailmail Spam</title>
		<link>http://atomicplayboy.net/blog/2006/03/20/snailmail-spam/</link>
		<comments>http://atomicplayboy.net/blog/2006/03/20/snailmail-spam/#comments</comments>
		<pubDate>Mon, 20 Mar 2006 21:00:35 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Atomic Playboy]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/blog/2006/03/20/snailmail-spam/</guid>
		<description><![CDATA[I had a letter waiting for me when I got home after watching V For Vendetta, of which I might rant later. US air mail, eh? I rip it open. Some silly domain registrar, Domain Registry of America (who in the fine print state they are not affiliated with or endorsed by the government of [...]]]></description>
			<content:encoded><![CDATA[<p>I had a letter waiting for me when I got home after watching <em>V For Vendetta</em>, of which I might rant later. US air mail, eh? I rip it open.</p>

<p>Some silly domain registrar, Domain Registry of America (who in the fine print state they are not affiliated with or endorsed by the government of the United States) wants me to host this very domain, and what a fancy name said domain has, at them instead of <a href="http://gandi.net/">Gandi</a>, my current registrar.</p>

<p>I would consider it if their yearly fee wasn&#8217;t <strong>216%</strong> of what I&#8217;m paying right now. €26 per year? I pay €12 now. That pricing has no attachment whatsoever to reality.</p>

<p>And why does your spam look so much like a bill? Hidden deep in a paragraph you say that it isn&#8217;t, yet you do your best to make it look like one. Add some <span class="caps"><span class="caps">FUD </span></span>about &#8220;losing your online identity&#8221; and I put you on my shit list.</p>

<p>Well, thanks for sending me something to light the fireplace with.</p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2006/03/20/snailmail-spam/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2006/03/20/snailmail-spam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SNAFU</title>
		<link>http://atomicplayboy.net/blog/2005/02/22/snafu/</link>
		<comments>http://atomicplayboy.net/blog/2005/02/22/snafu/#comments</comments>
		<pubDate>Tue, 22 Feb 2005 00:36:09 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Movable Type]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[trackbacks]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/blog/2005/02/22/snafu/</guid>
		<description><![CDATA[The front page was b0rked for a couple of hours. I still had Movable Type installed, and it looks like someone managed to send a trackback (I had deleted mt-comments.cgi to prevent spam, since I don&#8217;t even use MT any more), which caused the front page to be overwritten by MT. I took this as [...]]]></description>
			<content:encoded><![CDATA[<p>The front page was b0rked for a couple of hours. I still had Movable Type installed, and it looks like someone managed to send a trackback (I had deleted mt-comments.cgi to prevent spam, since I don&#8217;t even use MT any more), which caused the front page to be overwritten by <span class="caps"><span class="caps">MT.</span></span></p>

<p>I took this as a sign that it was time to upgrade to WordPress 1.5. So I did. All is well again.</p>

<p><strong>Later:</strong> Surprise surprise, it was trackback spam.</p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2005/02/22/snafu/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2005/02/22/snafu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An introduction to mod_security</title>
		<link>http://atomicplayboy.net/blog/2005/01/30/an-introduction-to-mod-security/</link>
		<comments>http://atomicplayboy.net/blog/2005/01/30/an-introduction-to-mod-security/#comments</comments>
		<pubDate>Sun, 30 Jan 2005 20:38:03 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Noteworthy]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[mod_security]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/blog/2005/01/16/an-introduction-to-mod_security/</guid>
		<description><![CDATA[An introduction to mod_security and how it can stomp comment spam and referral spam into the ground.]]></description>
			<content:encoded><![CDATA[<p>Inspired by <a href="http://cavlec.yarinareth.net/archives/2005/01/11/killing-referrer-spam/">this article</a> I decided to make a similar article that shows the advantages of <a href="http://modsecurity.org/">mod_security</a> over stopping spam by using <a href="http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html">mod_rewrite</a>.</p>

<p>I started using <a href="http://www.textdrive.com/">TextDrive</a> in June 2004. When comment spam became a very large problem for <a href="http://movabletype.org/">Movable Type</a> users due to poor programming in mt-comments.cgi, a mailing list was set up to figure out a way to fight back against spam. And mod_security was our weapon of choice.</p>

<p><strong>Addition:</strong> I should mention that other TextDrive users usually won&#8217;t have to bother blocking the common spam; we spot attacks very quickly on the aforementioned mailing list and add a global rule to block it across all TextDrive servers.</p>

<p>This is what mod_security has to say about itself in a single paragraph:</p>

<blockquote><p>ModSecurity is an open source intrusion detection and prevention engine for web applications. Operating as an Apache Web server module, the purpose of ModSecurity is to increase web application security, protecting web applications from known and unknown attacks.</p></blockquote>

<p>While mod_rewrite is good at rewriting <span class="caps"><span class="caps">URL</span></span>s, it&#8217;s a very poor choice for fighting spam. It requires quite a lot of obscure commands to block a single <span class="caps"><span class="caps">URL. </span></span>mod_security, on the other hand, can block an <span class="caps"><span class="caps">URL </span></span>with a single line in your .htaccess file.</p>

<p>I won&#8217;t explain how you install mod_security, so let&#8217;s pretend we already covered that part. Now for the good stuff.</p>

<h2>Configuring mod_security</h2>

<p>This is how you start mod_security, either in your global Apache configuration, or in a .htaccess file:</p>



<pre><code>SecFilterEngine DynamicOnly
SecFilterScanPOST On
SecAuditLog logs/audit_log</code></pre>



<p>The first line tells Apache to run mod_security, but only on dynamic pages (PHP, <span class="caps"><span class="caps">CGI </span></span>scripts, whathaveyou). You can also set it to <kbd>On</kbd> instead of <kbd>DynamicOnly</kbd>, if you want to scan all requests for all pages.</p>

<p>The second line is where mod_security really starts to trounce mod_rewrite: enable scanning of <span class="caps"><span class="caps">POST </span></span>headers. This is something that mod_rewrite is unable to do.</p>

<p>The <span class="caps"><span class="caps">POST </span></span>data is the actual data that gets submitted to a web server, such as comment forms. This means that mod_security can filter based on content in the comments, and even in specific fields, if you only want to make a rule based on the author of a comment.</p>

<p>The third line tells Apache where to store the audit log from mod_security. This log file contains everything that mod_security catches, if you have configured it to log that particular rule.</p>

<p>Let&#8217;s add a fourth line before we begin the actual block rules: the default action.</p>



<pre><code>SecFilterDefaultAction &amp;quot;deny,log,status:412&amp;quot;</code></pre>



<p>This set the default action for rules that have no action defined, so that you don&#8217;t have to re-type the action for every rule. This line sets the default mode to &#8220;block the request, log it, and give the client an Error 412.&#8221;</p>

<p>I prefer Error 412 (Precondition Failed) over Error 403 (Access Denied). 403 is &#8220;You&#8217;re not allowed to be here,&#8221; while 412 is &#8220;We don&#8217;t serve your kind here.&#8221; 403 is the &#8220;Staff only&#8221; sign; 412 is the bouncer at the door checking his list of misbehaving persons.</p>

<h2>Let&#8217;s start blocking!</h2>

<p>Now, let&#8217;s build some rules. The basic rules have two formats:</p>



<pre><code>SecFilter PATTERN [ACTION]</code></pre>



<p>This scans the request for <span class="caps"><span class="caps">PATTERN, </span></span>and uses the default action if it matches <span class="caps"><span class="caps">PATTERN.</span></span> It also accepts an optional <span class="caps"><span class="caps">ACTION </span></span>argument, which uses the same format as the <kbd>SecFilterDefaultAction </kbd> above. If you have lots of spam to block, it&#8217;s easier to define a default action and only use the first version to block spam.</p>

<p>However, it doesn&#8217;t scan the <span class="caps"><span class="caps">POST </span></span>headers unless we told mod_security to do so. Which we did above. So you could create a rule to stop viagra spam like this:</p>



<pre><code>SecFilter &amp;quot;viagra&amp;quot;</code></pre>



<p>This will block referral spam containing &#8220;viagra&#8221; in the <span class="caps"><span class="caps">URL </span></span>or in a comment (since we enabled <span class="caps"><span class="caps">POST </span></span>scans). But since SecFilter scans the entire request, it also checks for it in the user agent field. While I don&#8217;t know about any browsers called &#8220;Viagra&#8221; we can never be sure that they really do exist, and that&#8217;s why I prefer to be very specific about what part of the request should be scanned. We really don&#8217;t want to block legitimate users by accident, like comments containing &#8220;Hey, I get tons of Viagra spam too!&#8221;</p>

<p>You can also use regular expressions in the rules:</p>



<pre><code>SecFilter &amp;quot;(viagra|mortgage|herbal)&amp;quot;</code></pre>



<p>If we want to use an action different than the default action, we can do it like this:</p>



<pre><code>SecFilter &amp;quot;viagra&amp;quot; &amp;quot;allow,nolog&amp;quot;</code></pre>



<p>This will allow anything containing &#8220;viagra&#8221; to pass the filter, and it won&#8217;t be logged in the audit log.</p>

<h2>Selective blocking</h2>

<p>To do a more specific scan, we can use <kbd>SecFilterSelective</kbd> instead. It takes the following arguments:</p>



<pre><code>SecFilterSelective LOCATION PATTERN [ACTION]</code></pre>



<p>Now we can define what part of the request we want to scan in, by supplying the <span class="caps"><span class="caps">LOCATION </span></span>argument before the <span class="caps"><span class="caps">PATTERN </span></span>argument. Let&#8217;s say we get tons of referral spam by someone pimping his &#8220;buyviagra.com&#8221; site. We can scan in the referral header only and block his entire domain from ever referring us:</p>



<pre><code>SecFilterSelective &amp;quot;HTTP_REFERER&amp;quot; &amp;quot;buyviagra.com&amp;quot;</code></pre>



<p><strong><span class="caps"><span class="caps">NOTE</span></span>:</strong> As of mod_security 1.8, there is no need to escape dots in domain names. This is managed automatically by mod_security.</p>

<p>Presto! We never see referral spam from that domain again. Note that I did not supply the <span class="caps"><span class="caps">ACTION </span></span>argument, since it saves me some typing to let the default action trickle down from the settings above. It also makes it easier to read the rules.</p>

<p>Note, however, that this only blocks referrals from that specific domain. There&#8217;s nothing stopping him from referral spamming with &#8220;buymyviagradamnit.com&#8221; instead. We can of course use regular expressions here as well:</p>



<pre><code>SecFilterSelective &amp;quot;HTTP_REFERER&amp;quot; &amp;quot;(viagra|mortgage|texasholdem)&amp;quot;</code></pre>



<p>There are many fields you can scan selectively, and you can also define several fields to scan on the same line. Just separate them by commas in the <span class="caps"><span class="caps">LOCATION </span></span>argument. For a list of all fields you can scan selectively, please see <a href="http://www.modsecurity.org/documentation/">the reference manual</a>.</p>

<h2>Blocking IP addresses</h2>

<p>If there&#8217;s a specific IP address that hits you especially hard, you can block it by scanning the <span class="caps"><span class="caps">REMOTE</span></span>_ADDR header:</p>



<pre><code>SecFilterSelective &amp;quot;REMOTE_ADDR&amp;quot; &amp;quot;^83.142.57.250$&amp;quot;</code></pre>



<p>Note that I begin the pattern with <sup> and end it with $. These are regular expression special characters that tell it to only match from the beginning of the line, as well as the end of the line. If I didn&#8217;t have the starting </sup>, I would not only block 83.142.57.250, but also 183.142.57.250 since it contains the same pattern. Using them both means &#8220;match the entire line.&#8221;</p>

<h2>Scanning <span class="caps"><span class="caps">POST </span></span>payloads</h2>

<p>So far we&#8217;ve done the same things that we can do with mod_rewrite, and the only advantage has been that it saved us some typing and resulted in more readable lines. Now for something that mod_rewrite cannot do: scanning <span class="caps"><span class="caps">POST </span></span>content!</p>

<p>The <span class="caps"><span class="caps">POST </span></span>headers contain the contents of forms that are submitted to the server from the browser. Scanning this means you can scan the contents of comments, and find attempted spam even there. Use the <span class="caps"><span class="caps">POST</span></span>_PAYLOAD location to scan:</p>



<pre><code>SecFilterSelective &amp;quot;POST_PAYLOAD&amp;quot; &amp;quot;(mortgage|viagra)&amp;quot;</code></pre>



<p>And now nobody can post comments containing <kbd>mortgage</kbd> or <kbd>viagra</kbd> any more.</p>

<p>But it doesn&#8217;t stop there! You can also scan inside specific arguments in the <span class="caps"><span class="caps">POST </span></span>payload. Let&#8217;s say we want to allow people to talk about viagra and other spammy words, but disallow those words in the <span class="caps"><span class="caps">URL </span></span>field in Movable Type and WordPress. In both of these, the <span class="caps"><span class="caps">URL </span></span>field is called <kbd>url</kbd>.</p>



<pre><code>SecFilterSelective &amp;quot;ARG_url&amp;quot; &amp;quot;(mortgage|viagra)&amp;quot;</code></pre>



<h2>Closing statements</h2>

<p>That was a brief introduction to the most useful features of mod_security. Remember to always think about what it is you will <em>really</em> block with the rule you just wrote, and figure out a way to be specific enough without trapping legitimate users.</p>

<p>Mark Pilgrim once <a href="http://diveintomark.org/archives/2003/11/15/more-spam">wrote an entry</a> about the futility of blocking specific domains, and I agree completely.</p>

<blockquote><p>Savor this moment, folks. You can tell your children stories of how, back in the early days of weblogging, you could print out the entire spam blacklist on a single sheet of paper. Maybe with two or three columns and a smallish font, but still. Boy, those were the days.</p>

<p>And they won&#8217;t last. They absolutely won&#8217;t last. They won&acirc;€™t last a month. The domain list will grow so unwieldy so quickly, you won&#8217;t know what hit you. It&#8217;ll get so big that it will take real bandwidth just to host it. Keeping it a free download will make you go broke. Code is free, but bandwidth never will be. Do you have a business plan? You&#8217;ll need one within 6 months. <cite>Mark Pilgrim</cite></p></blockquote>

<p>This is why it will be very tiresome to block specific domains. Right now there is a spammer who has bought expired domains, and use them for referral and comment spam. There&#8217;s nothing spammy about these domain names; no &#8220;viagra&#8221; or &#8220;mortgage&#8221; that you can scan for. As the master of your own domain, there&#8217;s not really much you can do about attacks like these except for blocking the individual domains.</p>

<p>The real battle here must be fought at a server-wide level. There are Apache modules in the works that can scan hits across entire web servers and all the domains hosted there, and find patterns in these hits. Unless it&#8217;s the Google bot doing a drive-by, 200 domains hosted by the same company are very unlikely to be hit by the same comment spam within 24 hours, and here you can find a pattern and block it.</p>

<p>There is already a module originally designed to fight <a href="http://searchsecurity.techtarget.com/sDefinition/0,,sid14_gci557336,00.html">DDoS attacks</a>. By modifying the thresholds on this module, it can be used to block IP addresses that try to flood with comments or referrals too fast.</p>

<p>But it will almost always be the spammer that chooses the battlefield. The spammers just have to open the floodgate on their spam tools; it is us normal users that have to bother about verifying the visitors and comments so we don&#8217;t block the genuine stuff by accident. There are good countermeasures against comment spam, but the only 100% certain method is to disable comments completely.</p>

<p>It wouldn&#8217;t be too hard to script a browser to make it a spam tool, and I have reason to suspect that spammers already do this. Imagine a worm that infects Windows computers around the world (not too taxing on the imagination), and then sits hidden and uses Internet Explorer to act, sound and smell like a genuine browser, including calculacing <a href="http://www.hashcash.org/">hash cash</a> and other popular spam/DDoS countermeasures. The spammers don&#8217;t care; they have all the time in the world and aren&#8217;t even using their own computers for the calculations.</p>

<p>Imagine 500,000 of these computers, all able to be remotely controlled by spammers who then pay for access to their network of distributed zombie machines with real browsers doing the work as to better look like a genuine commenter. Even if a zombie only sends one spam comment per minute to avoid detection by flood countermeasures, that&#8217;s still 100,000 comments in a minute from the entire zombie net. 360,000,000 comments in a day.</p>

<p>The hash cash and other checksum systems will say that these are genuine comments. That&#8217;s why a good spam countermeasure uses several methods to scan the incoming comment. Again, the spammers put the burden of using resources on their victims.</p>

<h2>Further reading</h2>

<ul>
<li><a href="http://www.modsecurity.org/documentation/">ModSecurity documentation</a></li>
<li><a href="http://www.modsecurity.org/documentation/modsecurity-manual.pdf">ModSecurity reference manual</a> (PDF)</li>
<li><a href="http://www.fornax.net/regex/">A Whirlwind Guide to Regular Expressions</a></li>
</ul>

<p><strong>060517:</strong> Closed comments on this article due to the tons of spam it gets. It&#8217;s pretty popular with spammers.</p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2005/01/30/an-introduction-to-mod-security/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2005/01/30/an-introduction-to-mod-security/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>200:1</title>
		<link>http://atomicplayboy.net/blog/2005/01/10/ratio/</link>
		<comments>http://atomicplayboy.net/blog/2005/01/10/ratio/#comments</comments>
		<pubDate>Mon, 10 Jan 2005 07:03:21 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Movable Type]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/blog/2005/01/10/ratio/</guid>
		<description><![CDATA[Since I switched from Movable Type to WordPress, I&#8217;ve had one (1) legit comment. And 200 attempted spam comments that Spam Karma shot on sight. Addendum: 11 days later, and I&#8217;ve passed 900.]]></description>
			<content:encoded><![CDATA[<p>Since I switched from Movable Type to WordPress, I&#8217;ve had one (1) legit comment.</p>

<p>And 200 attempted spam comments that Spam Karma shot on sight.</p>

<p><strong>Addendum:</strong> 11 days later, and I&#8217;ve passed 900.</p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2005/01/10/ratio/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2005/01/10/ratio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I should really stop doing this</title>
		<link>http://atomicplayboy.net/blog/2004/12/12/wordpress-2/</link>
		<comments>http://atomicplayboy.net/blog/2004/12/12/wordpress-2/#comments</comments>
		<pubDate>Sun, 12 Dec 2004 19:58:58 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/blog/2004/12/12/wordpress/</guid>
		<description><![CDATA[The change should have been completely transparent and invisible to you, so here&#8217;s the info: I&#8217;m running WordPress now. So that&#8217;s the fourth time I&#8217;ve switched blog CMS this year. Movable Type &#8594; WordPress &#8594; Textpattern &#8594; MT again &#8594; WordPress. The main reason for switching is that the comment spam problem for Movable Type [...]]]></description>
			<content:encoded><![CDATA[<p>The change <em>should</em> have been completely transparent and invisible to you, so here&#8217;s the info: I&#8217;m running <a href="http://wordpress.org/">WordPress</a> now.</p>

<p>So that&#8217;s the fourth time I&#8217;ve switched blog <span class="caps"><span class="caps">CMS </span></span>this year. Movable Type &rarr; WordPress &rarr; Textpattern &rarr; MT again &rarr; WordPress.</p>

<p>The main reason for switching is that the comment spam problem for Movable Type has become <a href="http://photodude.com/article/2592/mt-plus-comment-spam-equals-dead-site">completely unbearable</a>. It can quite literally <em>kill</em> a server. MT-Blacklist helps, but has a flaw that allows some comment spam to pass right through it.</p>

<p>And then there&#8217;s the whole &#8220;rebuild on every comment&#8221; aspect. If MT gets hit with 50 spams in 10 seconds, that&#8217;s 50 mt-comments.cgi processes that are all rebuilding a page. Sometimes the same page.</p>

<p>The TextDrive servers can easily push 20,000,000 hits per day. Yet mt-comments.cgi can effectively push the server load up into the 300s. <a href="http://forum.textdrive.com/viewtopic.php?id=1544">This data</a> speaks for itself &#8212; 94% of the hits are to mt-comments.cgi. 3-400 of them are proper comments, the rest is spam.</p>

<p>WordPress and Textdrive are dynamic. There&#8217;s no page to generate every time a comment hits.</p>

<p>I still get spam, though. Spammers monitor web services like <a href="http://www.weblogs.com/">Weblogs.com</a> and go spam them as soon as they see an updated blog there. I get some spam every time I write a new entry.</p>

<p>Enter <a href="http://unknowngenius.com/blog/wordpress/spam-karma/">Spam Karma</a>. So far it&#8217;s stopped spam dead in its tracks, and this far more <span class="caps"><span class="caps">CPU </span></span>efficient than MT-Blacklist. It works great, and the focus is to require as little interaction as possible from the blog owner.</p>

<p>In closing, WordPress has matured immensely since I last tried it. This will be my weapon of choice for quite some time now.</p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2004/12/12/wordpress-2/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2004/12/12/wordpress-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Nasty crawlers</title>
		<link>http://atomicplayboy.net/blog/2004/12/11/nasty-crawlers/</link>
		<comments>http://atomicplayboy.net/blog/2004/12/11/nasty-crawlers/#comments</comments>
		<pubDate>Sat, 11 Dec 2004 15:03:52 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[mod_security]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/blog/2004/12/11/nasty-crawlers/</guid>
		<description><![CDATA[There&#8217;s a discussion on the TextDrive forums about how the MSN spider bot behaves. And it&#8217;s quite rude. Microsoft wanted to be able to boast with a large page index when their new MSN Search went public beta. So they released the leash on the MSN crawler and let it index at full speed, saturating [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s <a href="http://forum.textdrive.com/viewtopic.php?id=1289">a discussion</a> on the TextDrive forums about how the <span class="caps"><span class="caps">MSN </span></span>spider bot behaves. And it&#8217;s quite rude.</p>

<p>Microsoft wanted to be able to boast with a large page index when their new <span class="caps"><span class="caps">MSN</span></span> Search went public beta. So they released the leash on the <span class="caps"><span class="caps">MSN </span></span>crawler and let it index at full speed, saturating the bandwidth of the victim site if necessary.</p>

<p>That equals about $150 of bandwidth bills in two weeks for TextDrive, or $4000 yearly. So it was banned for a while until it behaved properly. Paying $4000 per year just to be in a search engine is madness.</p>

<p><span class="caps"><span class="caps">MSN</span></span> Search isn&#8217;t very smart either. Quite frankly, it&#8217;s <em>stupid</em>. It wasn&#8217;t <em>quite</em> banned from TextDrive servers; it actually got a redirect via <a href="http://www.modsecurity.org/">mod_security</a> to the <a href="http://search.msn.com/webmasters/default.aspx"><span class="caps"><span class="caps">MSN</span></span> Bot info page</a>. It then parsed the info on <em>that</em> page as if it was the result from the pages it was denied access to, and added it as a search result for those pages.</p>

<p>Stupid, stupid, stupid.</p>

<p>I also had a visit from the <a href="http://www.popdex.com/">Popdex</a> crawler today.</p>

<p>My definition of rude and abusive bots is as follows: if it leaves a referrer without the referring page actually containing a link to my site, it is considered fraudulent behavior. If it gorges and gobbles pages at a rapid pace, it is considered abuse of my site.</p>

<p>The Popdex crawler did both. It crawled 350 pages in two minutes. Twice per page, for 700 requests in two minutes. And it filled my logs with fake referrals to popdex.com.</p>

<p>Bam. Banned.</p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2004/12/11/nasty-crawlers/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2004/12/11/nasty-crawlers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Corporate retards</title>
		<link>http://atomicplayboy.net/blog/2003/08/31/corporate-retards/</link>
		<comments>http://atomicplayboy.net/blog/2003/08/31/corporate-retards/#comments</comments>
		<pubDate>Sun, 31 Aug 2003 22:41:29 +0000</pubDate>
		<dc:creator>Johan Svensson</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://atomicplayboy.net/blog/2003/08/31/corporate-retards/</guid>
		<description><![CDATA[precisionintelligence.com. Referral spam. Killfile. I also noted that my old pal globoads.com made a visit. Same treatment. It won&#8217;t make them stop, but at least I don&#8217;t have to see them in my log files. Yes, I&#8217;m on a crusade.]]></description>
			<content:encoded><![CDATA[<p>precisionintelligence.com. Referral spam. Killfile. I also noted that my old pal globoads.com made a visit. Same treatment.</p>

<p>It won&#8217;t make them stop, but at least I don&#8217;t have to see them in my log files.</p>

<p>Yes, I&#8217;m on a crusade.</p><script src="http://feeds.feedburner.com/~s/AtomicPlayboy?i=http://atomicplayboy.net/blog/2003/08/31/corporate-retards/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://atomicplayboy.net/blog/2003/08/31/corporate-retards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: atomicplayboy.net @ 2012-05-24 19:59:34 -->
