<?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"
	>

<channel>
	<title>Latest Posts / News</title>
	<atom:link href="http://www.microdevsys.com/WordPress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.microdevsys.com/WordPress</link>
	<description>Microcomputers - Development - Systems</description>
	<pubDate>Fri, 03 Jul 2009 05:07:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>WordPress: Dealing with Comment and User Registration Spam.</title>
		<link>http://www.microdevsys.com/WordPress/2009/07/01/wordpress-dealing-with-comment-and-user-registration-spam/</link>
		<comments>http://www.microdevsys.com/WordPress/2009/07/01/wordpress-dealing-with-comment-and-user-registration-spam/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 20:27:17 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=1160</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/07/01/wordpress-dealing-with-comment-and-user-registration-spam/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'WordPress: Dealing with Comment and User Registration Spam.';
digg_bodytext = 'This is a fine one.&nbsp; Anyone who uses WordPress may need to deal with this.&nbsp; Unfortunately, despite using reCAPTCHA, Akismet still picks up tons of span on my blog.&nbsp; So why am I getting spam comments when I&nbsp;have reCAPTCHA?&nbsp;I&nbsp;really...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
This is a fine one.&#160; Anyone who uses WordPress may need to deal with this.&#160; Unfortunately, despite using reCAPTCHA, Akismet still picks up tons of span on my blog.&#160; So why am I getting spam comments when I&#160;have reCAPTCHA?&#160;
I&#160;really had no idea, but it turned out reCAPTCHA&#160;is marking those that come in as spam and [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/07/01/wordpress-dealing-with-comment-and-user-registration-spam/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'WordPress: Dealing with Comment and User Registration Spam.';
digg_bodytext = 'This is a fine one.&nbsp; Anyone who uses WordPress may need to deal with this.&nbsp; Unfortunately, despite using reCAPTCHA, Akismet still picks up tons of span on my blog.&nbsp; So why am I getting spam comments when I&nbsp;have reCAPTCHA?&nbsp;I&nbsp;really...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p>This is a fine one.&nbsp; Anyone who uses WordPress may need to deal with this.&nbsp; Unfortunately, despite using reCAPTCHA, Akismet still picks up tons of span on my blog.&nbsp; <strong>So why am I getting spam comments when I&nbsp;have reCAPTCHA?</strong>&nbsp;<span id="more-1160"></span></p>
<p>I&nbsp;really had no idea, but it turned out <strong>reCAPTCHA</strong>&nbsp;is marking those that come in as spam and putting them in the <strong>Akismet</strong> spam folder making it <em><strong>appear</strong></em> that <strong>Akismet</strong> caught them. I&nbsp;would imagine spammers are not breaking through the CAPTCHA box but have been reading online that either:</p>
<ol>
<li>CAPTCHA&#8217;s are potentially breakable by software.</li>
<li>Some foreigh workers get payed to do that sort of spam to make CAPTCHA look breakable.</li>
</ol>
<p>I really don&#8217;t know or would like to believe they are unbreakable.&nbsp; I&nbsp;do know I&#8217;m getting spam and I&nbsp;don&#8217;t want it.&nbsp; So off I go seeing how I can deal with this because:</p>
<ol>
<li>I&nbsp;won&#8217;t read, buy or visit any link in a message I feel is spam</li>
<li>The only thing I&#8217;ll do with it is to try to prevent it when I&nbsp;see it.</li>
<li>I really don&#8217;t want these things hitting my site generating extra bandwidth to begin with.</li>
</ol>
<p>I&#8217;ve decided to deal with this from the database side using phpMyAdmin of my provider (<span style="color: rgb(255, 0, 0);"><strong>WORD&nbsp;OF&nbsp;CAUTION</strong></span>:&nbsp;If you haven&#8217;t done any sort of SQL before, I recommend you take caution, even though we&#8217;re not deleting or modifying anything):</p>
<p style="margin-left: 40px;"><span style="color: rgb(51, 153, 102);">SELECT distinct comment_author_IP, count(comment_author_IP) as Occurrance <br />
FROM `wp_comments` <br />
WHERE comment_approved LIKE &#8216;%spam%&#8217; <br />
GROUP BY comment_author_IP <br />
ORDER BY Occurrance DESC <br />
LIMIT 0, 500</span></p>
<p>So with a rather simple query I tried to mimick the results Akismet reports it on the WordPress Dashboard, I get this list of offending IP&#8217;s:&nbsp;</p>
<table cellspacing="1" cellpadding="2" border="0" id="table_results">
<tbody>
<tr>
<th>comment_author_IP</th>
<th>Occurrance</th>
</tr>
<p>        <!-- Results table body --></p>
<tr style="cursor: default;" onmouseover="setPointer(this, 0, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 0, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 0, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete0');">194.8.75.141</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete0');" class="nowrap">178</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 1, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 1, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 1, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete1');">194.8.74.171</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete1');" class="nowrap">53</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 2, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 2, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 2, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete2');">212.117.176.186</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete2');" class="nowrap">30</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 3, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 3, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 3, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete3');">91.214.44.201</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete3');" class="nowrap">10</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 4, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 4, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 4, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete4');">194.8.75.161</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete4');" class="nowrap">4</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 5, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 5, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 5, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete5');">86.122.164.46</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete5');" class="nowrap">4</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 6, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 6, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 6, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete6');">70.70.10.78</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete6');" class="nowrap">2</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 7, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 7, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 7, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete7');">114.127.246.36</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete7');" class="nowrap">2</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 8, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 8, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 8, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete8');">194.8.75.159</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete8');" class="nowrap">2</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 9, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 9, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 9, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete9');">194.8.74.133</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete9');" class="nowrap">2</td>
</tr>
<tr onmouseover="setPointer(this, 10, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 10, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 10, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete10');">212.95.54.40</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete10');" class="nowrap">2</td>
</tr>
<tr onmouseover="setPointer(this, 11, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 11, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 11, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete11');">209.162.3.99</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete11');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 12, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 12, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 12, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete12');">76.125.194.28</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete12');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 13, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 13, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 13, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete13');">188.16.124.183</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete13');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 14, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 14, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 14, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete14');">85.13.138.96</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete14');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 15, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 15, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 15, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete15');">69.42.209.2</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete15');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 16, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 16, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 16, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete16');">211.141.86.152</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete16');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 17, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 17, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 17, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete17');">220.199.184.27</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete17');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 18, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 18, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 18, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete18');">194.8.75.153</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete18');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 19, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 19, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 19, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete19');">189.202.11.120</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete19');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 20, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 20, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 20, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete20');">62.175.249.249</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete20');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 21, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 21, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 21, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete21');">208.115.135.106</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete21');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 22, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 22, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 22, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete22');">212.117.187.10</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete22');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 23, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 23, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 23, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete23');">79.142.207.54</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete23');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 24, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 24, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 24, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete24');">90.198.135.211</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete24');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 25, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 25, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 25, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete25');">202.239.242.75</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete25');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 26, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 26, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 26, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete26');">67.234.218.99</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete26');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 27, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 27, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 27, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete27');">188.16.118.12</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete27');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 28, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 28, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 28, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete28');">24.44.166.244</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete28');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 29, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 29, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 29, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete29');">94.142.128.140</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete29');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 30, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 30, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 30, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete30');">94.181.233.87</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete30');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 31, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 31, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 31, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete31');">220.72.71.220</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete31');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 32, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 32, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 32, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete32');">98.130.2.75</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete32');" class="nowrap">1</td>
</tr>
<tr onmouseover="setPointer(this, 33, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 33, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 33, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete33');">92.113.234.71</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete33');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 34, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 34, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 34, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete34');">70.38.38.164</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete34');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 35, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 35, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 35, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#bfd4f1" onmousedown="setCheckboxColumn('id_rows_to_delete35');">217.170.53.71</td>
<td valign="top" bgcolor="#bfd4f1" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete35');" class="nowrap">1</td>
</tr>
<tr style="cursor: pointer;" onmouseover="setPointer(this, 36, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 36, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 36, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete36');">92.112.50.231</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete36');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 37, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 37, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 37, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete37');">201.76.212.243</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete37');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 38, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 38, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 38, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete38');">79.116.143.11</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete38');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 39, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 39, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 39, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete39');">193.231.72.188</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete39');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 40, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 40, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 40, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete40');">83.233.30.77</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete40');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 41, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 41, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 41, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete41');">188.16.117.72</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete41');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 42, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 42, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 42, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete42');">86.108.136.123</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete42');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 43, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 43, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 43, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete43');">124.173.195.8</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete43');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 44, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 44, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 44, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete44');">115.124.102.182</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete44');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 45, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 45, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 45, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete45');">96.9.170.124</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete45');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 46, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 46, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 46, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete46');">95.133.64.118</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete46');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 47, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 47, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 47, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete47');">190.38.153.184</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete47');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 48, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 48, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 48, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete48');">62.147.192.173</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete48');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 49, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 49, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 49, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete49');">58.185.196.82</td>
<td valign="top" bgcolor="#ffffff" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete49');" class="nowrap">1</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 50, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 50, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 50, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete50');">69.133.77.123</td>
<td valign="top" bgcolor="#e9f0fa" align="right" onmousedown="setCheckboxColumn('id_rows_to_delete50');" class="nowrap">1</td>
</tr>
</tbody>
</table>
<p>&nbsp;<br />
So what does someone do with a list like this.&nbsp; In my case, as I have no access to the firewall on my host so I&#8217;m going to use <strong>.htaccess</strong> file for this but before I&nbsp;just plug all the IP&#8217;s there, I&#8217;m going to check on some of the less frequently noted IP&#8217;s above with this query and omit the ones that have one occurrance.&nbsp;&nbsp; This should prevent a couple of things:</p>
<ol>
<li>In case a comment within one of the single occurrances is not really spam.</li>
<li>I&#8217;ll use a rule of thumb and say everything around five occurrances and that is already marked as spam by Akismet is really Spam.</li>
<li>I don&#8217;t want to get overly complicated and keep a large <strong>.htaccess</strong> file.</li>
</ol>
<p>So I use this query to check on a few of the less often ones just to see if they are spam or not:</p>
<p style="margin-left: 40px;"><span style="color: rgb(51, 153, 102);"><span class="syntax"><span class="syntax_alpha syntax_alpha_reservedWord">SELECT</span>  <span class="syntax_punct">*</span> <br />
<span class="syntax_alpha syntax_alpha_reservedWord">FROM</span> <span class="syntax_alpha syntax_alpha_identifier">wp_comments</span><br />
<span class="syntax_alpha syntax_alpha_reservedWord">WHERE</span> <span class="syntax_alpha syntax_alpha_identifier">comment_author_IP</span><br />
<span class="syntax_alpha syntax_alpha_reservedWord">IN</span> <span class="syntax_punct syntax_punct_bracket_open_round">(</span> </span><span class="syntax"><span class="syntax_quote syntax_quote_single">&#8216;194.8.75.161&#8242;</span><span class="syntax_punct syntax_punct_listsep">,</span>  <span class="syntax_quote syntax_quote_single"><br />
&#8216;86.122.164.46&#8242;</span><span class="syntax_punct syntax_punct_listsep">,</span> <br />
<span class="syntax_quote syntax_quote_single">&#8216;70.70.10.78&#8242;</span><span class="syntax_punct syntax_punct_listsep">,</span> <br />
<span class="syntax_quote syntax_quote_single">&#8216;114.127.246.36&#8242;</span><span class="syntax_punct syntax_punct_listsep">,</span> <br />
<span class="syntax_quote syntax_quote_single">&#8216;194.8.75.159&#8242;</span><span class="syntax_punct syntax_punct_listsep">,</span> <br />
<span class="syntax_quote syntax_quote_single">&#8216;194.8.74.133&#8242;</span><span class="syntax_punct syntax_punct_listsep">,</span> <br />
<span class="syntax_quote syntax_quote_single">&#8216;212.95.54.40&#8242;</span><span class="syntax_punct syntax_punct_bracket_close_round">)</span><br />
</span><span class="syntax"> <span class="syntax_alpha syntax_alpha_reservedWord">LIMIT</span> <span class="syntax_digit syntax_digit_integer">0</span> <span class="syntax_punct syntax_punct_listsep">,</span> <span class="syntax_digit syntax_digit_integer">500</span></span></span></p>
<p>Going over the list quickly, I&nbsp;see it&#8217;s all spam.&nbsp; So everything with two or more occurrances, get&#8217;s a spot in my .htaccess file.&nbsp; I decide to use this query to automate some of the labour:</p>
<p style="margin-left: 40px;"><span style="color: rgb(51, 153, 102);">SELECT CONCAT(&quot;deny from&quot;, &quot; &quot;, comment_author_IP) as Action<br />
FROM wp_comments <br />
WHERE comment_approved LIKE &#8216;%spam%&#8217;<br />
GROUP BY comment_author_IP<br />
HAVING COUNT(comment_author_IP) &gt;= 2<br />
LIMIT 0, 500</span></p>
<table cellspacing="1" cellpadding="2" border="0" id="table_results">
<tbody>
<tr>
<th>Action</th>
</tr>
<p>        <!-- Results table body --></p>
<tr style="cursor: default;" onmouseover="setPointer(this, 0, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 0, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 0, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete0');">deny from 114.127.246.36</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 1, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 1, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 1, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete1');">deny from 194.8.74.133</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 2, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 2, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 2, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete2');">deny from 194.8.74.171</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 3, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 3, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 3, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete3');">deny from 194.8.75.141</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 4, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 4, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 4, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete4');">deny from 194.8.75.159</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 5, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 5, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 5, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete5');">deny from 194.8.75.161</td>
</tr>
<tr style="cursor: pointer;" onmouseover="setPointer(this, 6, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 6, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 6, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete6');">deny from 212.117.176.186</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 7, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 7, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 7, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete7');">deny from 212.95.54.40</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 8, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 8, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 8, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#e9f0fa" onmousedown="setCheckboxColumn('id_rows_to_delete8');">deny from 70.70.10.78</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 9, 'over', '#FFFFFF', '', '#BFD4F1');" onmouseout="setPointer(this, 9, 'out', '#FFFFFF', '', '#BFD4F1');" onmousedown="setPointer(this, 9, 'click', '#FFFFFF', '', '#BFD4F1');">
<td valign="top" bgcolor="#ffffff" onmousedown="setCheckboxColumn('id_rows_to_delete9');">deny from 86.122.164.46</td>
</tr>
<tr style="cursor: default;" onmouseover="setPointer(this, 10, 'over', '#E9F0FA', '', '#BFD4F1');" onmouseout="setPointer(this, 10, 'out', '#E9F0FA', '', '#BFD4F1');" onmousedown="setPointer(this, 10, 'click', '#E9F0FA', '', '#BFD4F1');">
<td valign="top" bgcolor="#bfd4f1" onmousedown="setCheckboxColumn('id_rows_to_delete10');">deny from 91.214.44.201</td>
</tr>
</tbody>
</table>
<p>
<strong>&nbsp;.htaccess</strong> relevant code</p>
<p>.<br />
.<br />
.<br />
&lt;Limit GET POST&gt;<br />
order deny,allow<br />
# Old Entries<br />
deny from 209.47.94.52<br />
deny from 72.20.4.30<br />
deny from 92.48.193.55<br />
deny from 87.118.104.158</p>
<p># New Entries<br />
deny from 114.127.246.36<br />
deny from 194.8.74.133<br />
deny from 194.8.74.171<br />
deny from 194.8.75.141<br />
deny from 194.8.75.159<br />
deny from 194.8.75.161<br />
deny from 212.117.176.186<br />
deny from 212.95.54.40<br />
deny from 70.70.10.78<br />
deny from 86.122.164.46<br />
deny from 91.214.44.201<br />
&lt;/Limit&gt;<br />
.<br />
.<br />
.</p>
<p>And that is that.&nbsp; The only thing that&#8217;s left now is to save and upload the new <strong>.htaccess</strong> file to your web root and see if there is any improvement.</p>
<p>The baffling thing for me is user registrations.&nbsp; I&#8217;ll use a combination of LINUX&nbsp;and SQL here.&nbsp; I&#8217;m interested in all the user names I&#8217;m getting that have registered but are listed as spam bots.&nbsp; I also want to know the IP&#8217;s of the registrations but really I&nbsp;would prefer a CAPTCHA style code to filter stuff like this.&nbsp; So the first thing I&nbsp;get is a list of users that have been registered recently:</p>
<p style="margin-left: 40px;"><span style="color: rgb(51, 153, 102);"><span class="syntax"><span class="syntax_alpha syntax_alpha_reservedWord">SELECT</span> <span class="syntax_alpha syntax_alpha_identifier">user_email</span><span class="syntax_punct syntax_punct_listsep">,</span> <span class="syntax_alpha syntax_alpha_identifier">user_registered</span><span class="syntax_punct syntax_punct_listsep">,</span> <span class="syntax_alpha syntax_alpha_identifier">user_nicename</span><br />
<span class="syntax_alpha syntax_alpha_reservedWord">FROM</span> <span class="syntax_alpha syntax_alpha_identifier">wp_users</span><br />
<span class="syntax_alpha syntax_alpha_reservedWord">WHERE</span> <span class="syntax_alpha syntax_alpha_identifier">user_login</span> <span class="syntax_alpha syntax_alpha_reservedWord">NOT</span>  <span class="syntax_alpha syntax_alpha_reservedWord">LIKE</span>  <span class="syntax_quote syntax_quote_single">&#8216;%admin%&#8217;</span><br />
<span class="syntax_alpha syntax_alpha_reservedWord">LIMIT</span> <span class="syntax_digit syntax_digit_integer">0</span> <span class="syntax_punct syntax_punct_listsep">,</span> <span class="syntax_digit syntax_digit_integer">100</span></span></span></p>
<p>This gives me something like this:</p>
<p>which I then stick it in some file on my UNIX&nbsp;box called:</p>
<p><strong># cat ureg.txt</strong><br />
fdghjweudyf@konversia-aero.ru&nbsp;&nbsp; 2009-04-20 06:16:04&nbsp;&nbsp;&nbsp;&nbsp; analia<br />
draimacleroic@gmail.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009-04-20 21:16:31&nbsp;&nbsp;&nbsp;&nbsp; sopssheerce<br />
changfuuu@gmail.com&nbsp;&nbsp;&nbsp;&nbsp; 2009-04-21 02:08:15&nbsp;&nbsp;&nbsp;&nbsp; anavoinkemi<br />
actichziniunc@gmail.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009-04-21 11:32:10&nbsp;&nbsp;&nbsp;&nbsp; joannahopkin<br />
katyai4857@atlaskit.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009-04-21 13:25:08&nbsp;&nbsp;&nbsp;&nbsp; hewatmom<br />
qapocahemiekid12763@gmail.com&nbsp;&nbsp; 2009-04-23 06:27:04&nbsp;&nbsp;&nbsp;&nbsp; kesenasikacusa<br />
.<br />
.<br />
.<br />
<strong>#</strong></p>
<p>Now that I&nbsp;have this file, I&nbsp;would like to check if these are legitimate users or spammers:</p>
<p><a href="http://www.stopforumspam.com" rel="nofollow">http://www.stopforumspam.com</a><br />
<a href="http://www.botscout.com" rel="nofollow">http://www.botscout.com</a></p>
<p>I&#8217;ll then use that network and the below tiny script to find out which ones are legitimate and which ones I&nbsp;should get rid of:</p>
<blockquote>
<p>&nbsp;#!/bin/bash</p>
<p># Short code for checking forum spam user registrations:</p>
<p>currdate=$(date +%d_%m_%Y-%H_%M_%S);<br />
tmpfile=ureg.tran.$currdate.dat;<br />
ipfile=ureg.ip.$currdate.dat;</p>
<p>&gt;$tmpfile;<br />
&gt;$ipfile;<br />
for email in $(cat $1|awk &#8216;{ print $1 }&#8217;); do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lwp-request &quot;http://www.stopforumspam.com/search?q=$email&amp;export=xml&quot; &gt; $tmpfile;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [[ $(cat $tmpfile|egrep &quot;no results found.&quot;) != &quot;&quot; ]]; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf &quot;%50s%-30s\n&quot; $email &quot; : &quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf &quot;%50s%-30s\n&quot; $email &quot;: LISTED&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ipv in $(cat $tmpfile|egrep &quot;&lt;ip&gt;&quot;|sed -e &quot;s/[&lt;&gt;]/ /g&quot;|awk &#8216;{ print $2 }&#8217;|sort|uniq); do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;$ipv&quot; &gt;&gt; $ipfile;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 2;<br />
done</p>
<p>echo -ne &quot;UNIQUE IP&#8217;S\n&quot;;<br />
cat $ipfile|sort|uniq -c;<br />
/bin/rm $tmpfile</p>
</blockquote>
<p>This will give something like:</p>
<p style="text-align: left;">fdghjweudyf@konversia-aero.ru: LISTED<br />
draimacleroic@gmail.com: LISTED<br />
changfuuu@gmail.com: LISTED<br />
actichziniunc@gmail.com: LISTED<br />
katyai4857@atlaskit.com: LISTED<br />
qapocahemiekid12763@gmail.com: LISTED<br />
payomacon@gmail.com :<br />
rackflinciatt@gmail.com: LISTED</p>
<p>The code also generates an IP&nbsp;file called something like <strong>ureg.ip.&lt;DATE&gt;.dat</strong>.&nbsp; The unfortunate thing is that the IP&#8217;s are all varied with only a few with the same subnets so it made it impractical to block these with <strong>.htaccess</strong> files.&nbsp; So it turned out it simply wasn&#8217;t worth blocking them though the method did tell me which ones are valid and which ones are not.&nbsp; This was the main thing I&nbsp;wanted.&nbsp; The effort simply outweighed the benefit.</p>
<p>Least but not last, I&#8217;ll add a plugin here called:&nbsp;<a href="http://wordpress.org/extend/plugins/wp-recaptcha/" rel="nofollow">WP-reCAPTCHA</a> to help handle these when they come in so I don&#8217;t have to repeat this procedure too often.&nbsp; <span style="color: rgb(255, 153, 0);"><strong><br />
</strong></span></p>
<p>Good Luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2009/07/01/wordpress-dealing-with-comment-and-user-registration-spam/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Linux / Akonadi: The QtSQL driver &#8216;QMYSQL&#8217; is required by your current Akonadi server configuration.</title>
		<link>http://www.microdevsys.com/WordPress/2009/03/29/linux-akonadi-the-qtsql-driver-qmysql-is-required-by-your-current-akonadi-server-configuration/</link>
		<comments>http://www.microdevsys.com/WordPress/2009/03/29/linux-akonadi-the-qtsql-driver-qmysql-is-required-by-your-current-akonadi-server-configuration/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 16:31:24 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=1121</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/03/29/linux-akonadi-the-qtsql-driver-qmysql-is-required-by-your-current-akonadi-server-configuration/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Linux / Akonadi: The QtSQL driver &#8216;QMYSQL&#8217; is required by your current Akonadi server configuration.';
digg_bodytext = 'PROBLEMAnother day brings another bug. This time it&#8217;s with the Akonadi server failing or unable to start.&nbsp; This error followed a recent update I&#8217;ve done on my Fedora box.&nbsp; This is what greeted me each time I&nbsp;started up KDE:The...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
PROBLEM
Another day brings another bug. This time it&#8217;s with the Akonadi server failing or unable to start.&#160; This error followed a recent update I&#8217;ve done on my Fedora box.&#160; This is what greeted me each time I&#160;started up KDE:

The QtSQL driver &#8216;QMYSQL&#8217; is required by your current Akonadi server configuration.
The following drivers are installed: QSQLITE, [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/03/29/linux-akonadi-the-qtsql-driver-qmysql-is-required-by-your-current-akonadi-server-configuration/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Linux / Akonadi: The QtSQL driver &#8216;QMYSQL&#8217; is required by your current Akonadi server configuration.';
digg_bodytext = 'PROBLEMAnother day brings another bug. This time it&#8217;s with the Akonadi server failing or unable to start.&nbsp; This error followed a recent update I&#8217;ve done on my Fedora box.&nbsp; This is what greeted me each time I&nbsp;started up KDE:The...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p><strong>PROBLEM</strong></p>
<p>Another day brings another bug. This time it&#8217;s with the Akonadi server failing or unable to start.&nbsp; This error followed a recent update I&#8217;ve done on my Fedora box.&nbsp; This is what greeted me each time I&nbsp;started up KDE:</p>
<blockquote>
<p>The QtSQL driver &#8216;QMYSQL&#8217; is required by your current Akonadi server configuration.<br />
The following drivers are installed: QSQLITE, QMYSQL3, QMYSQL.<br />
Make sure the required driver is installed.</p>
</blockquote>
<p>Personally, I don&#8217;t like uninvited guests, especially the ones that crash the party.&nbsp; So off I&nbsp;went to see what broke.&nbsp; The error gave some clues where I should look which included MySQL, akonadi and QtSQL.&nbsp; Here&#8217;s how I went about resolving this one.</p>
<p><strong>SOLUTION</strong><br />
<span id="more-1121"></span></p>
<p>The solution to this one was fairly straightforward.&nbsp; it followed these steps:</p>
<ol>
<li>Open command console such as <strong>konsole</strong></li>
<li>Check if you have the config file, run:<strong> ls -al /root/.config/akonadi/mysql-local.conf</strong></li>
<li>Run <strong>echo &quot;user=root&quot; &gt; /root/.config/akonadi/mysql-local.conf</strong></li>
<li>Either type <strong>kcmshell4 kcm_akonadi</strong> on the command line to start <strong>Akonadi configuration</strong> panel or follow steps <strong>4</strong> &amp; <strong>5</strong> below.</li>
<li>Go to <strong>KDE&nbsp;Start</strong> -&gt; <strong>System Settings</strong></li>
<li>Under <strong>System Settings</strong> dialog click the&nbsp; <strong>Advanced</strong> tab then <strong>Akonadi configuration</strong>.</li>
<li>Click the <strong>Akonadi Server Configuration</strong> tab then the <strong>Restart</strong> button.<br />
    &nbsp;</li>
</ol>
<p><strong>THE PROCESS</strong></p>
<p>Getting to the solution was another matter alltogether.&nbsp; The first order of business was to check the akonadi server logs to narrow down the problem:</p>
<blockquote>
<p>/root/.local/share/akonadi/akonadiserver.error</p>
<p>Database process existed unexpectedly during intial connection!<br />
executable: &quot;/usr/libexec/mysqld&quot;<br />
arguments: (&quot;&#8211;defaults-file=/root/.local/share/akonadi//mysql.conf&quot;, &quot;&#8211;datadir=/root/.local/share/akonadi/db_data/&quot;, &quot;&#8211;socket=/root/.local/share/akonadi/db_misc/mysql.socket&quot;)<br />
stdout: &quot;&quot;<br />
stderr: &quot;090322 23:25:47 [Warning] option &#8216;max_join_size&#8217;: unsigned value 18446744073709551615 adjusted to 4294967295<br />
090322 23:25:47 [Warning] option &#8216;max_join_size&#8217;: unsigned value 18446744073709551615 adjusted to 4294967295<br />
<span style="color: rgb(255, 0, 0);">090322 23:25:47 [ERROR] Fatal error: Please read &quot;Security&quot; section of the manual to find out how to run mysqld as root!</span></p>
<p><span style="color: rgb(255, 0, 0);">090322 23:25:47 [ERROR] Aborting</span></p>
<p>090322 23:25:47 [Note] /usr/libexec/mysqld: Shutdown complete</p>
<p>&quot;<br />
exit code: 1<br />
process error: &quot;Unknown error&quot;<br />
&quot;[<br />
0: akonadiserver(_Z10kBacktracev+0x35) [0x8051f75]<br />
1: akonadiserver [0x8052456]<br />
2: [0xc62400]<br />
3: [0xc62416]<br />
4: /lib/libc.so.6(gsignal+0&#215;50) [0x1dd460]<br />
5: /lib/libc.so.6(abort+0&#215;188) [0x1dee28]<br />
6: /usr/lib/libQtCore.so.4(_Z17qt_message_output9QtMsgTypePKc+0&#215;95) [0x5886855]<br />
7: akonadiserver(_ZN15FileDebugStream9writeDataEPKcx+0xc4) [0x8053164]<br />
8: /usr/lib/libQtCore.so.4(_ZN9QIODevice5writeEPKcx+0&#215;9e) [0x59143ce]<br />
9: /usr/lib/libQtCore.so.4 [0x592139e]<br />
10: /usr/lib/libQtCore.so.4(_ZN11QTextStreamD1Ev+0&#215;68) [0x5921698]<br />
11: akonadiserver(_ZN6QDebugD1Ev+0&#215;44) [0x804d674]<br />
12: /usr/lib/libakonadiprivate.so.1(_ZN7Akonadi13AkonadiServer20startDatabaseProcessEv+0&#215;1a8e) [0x3f9e9e]<br />
13: /usr/lib/libakonadiprivate.so.1(_ZN7Akonadi13AkonadiServerC1EP7QObject+0&#215;72) [0x3fbc02]<br />
14: /usr/lib/libakonadiprivate.so.1(_ZN7Akonadi13AkonadiServer8instanceEv+0&#215;56) [0x3fcd06]<br />
15: akonadiserver(main+0&#215;398) [0x804c9e8]<br />
16: /lib/libc.so.6(__libc_start_main+0xe5) [0x1c86e5]<br />
17: akonadiserver [0x804c581]<br />
&nbsp;</p>
</blockquote>
<p>So that error narrowed down the problem alot.&nbsp; We now know Akonadi wants to run as the root user.&nbsp; Or at least is trying to run as root in an unsupported manner.&nbsp; First I&nbsp;checked with MySQL to see what they say about this even though it&#8217;s an Akonadi related problem.&nbsp; Here&#8217;s what MySQL&nbsp;has to say about all of this:</p>
<p>http://dev.mysql.com/doc/refman/5.0/en/changing-mysql-user.html</p>
<p>Further down the page we see that to run MySQL as root we need to set:</p>
<p>user=user_name</p>
<p>in <strong>/etc/my.cnf</strong> which for us would amount to <strong>user=root</strong> in <strong>/etc/my.cnf</strong>.&nbsp; The problem with this is that also according to the above MySQL&nbsp;page, you should never run the MySQL server as root.&nbsp; It&#8217;s also fairly common knowledge that MySQL runs as the <em><strong>mysql</strong></em> user on Fedora Linux installations at least .&nbsp; So let&#8217;s see what the Akonadi folks say about this I&nbsp;visit <a rel="nofollow" href="http://pim.kde.org/">http://pim.kde.org/</a>.&nbsp; Then choose the <span style="color: rgb(0, 0, 255);">Akonadi</span> link when I get there.&nbsp; Sadly nothing searchable could be dug up.&nbsp; Let&#8217;s try plan <strong>B</strong>.&nbsp; Configuration files for applications ran from a user account, typically exist within the users home directory.&nbsp; So in this case let&#8217;s check your ID (Assuming <strong>root</strong> here).&nbsp; So we run this command:</p>
<blockquote>
<p><strong>#</strong> <strong>cd ~;find ./ -name *akonadi*</strong><br />
./.kde/share/config/akonadiconsolerc<br />
./.local/share/akonadi<br />
./.local/share/akonadi/db_data/akonadi<br />
./.local/share/akonadi/akonadiserver.error.old<br />
./.local/share/akonadi/akonadiserver.socket<br />
./.config/akonadi<br />
./.config/akonadi/akonadiconnectionrc<br />
./.config/akonadi/akonadiserverrc<br />
#</p>
</blockquote>
<p>So looks like we have some Akonadi stuff inside our user account.&nbsp; Great.&nbsp; Since Akonadi is giving MySQL&nbsp;errors it should be related.&nbsp; Let&#8217;s dig deeper to see what we can find inside above folders:</p>
<blockquote>
<p><strong># cd ~/.config/akonadi/<br />
# find ./ -iname *mysql*</strong><br />
<span style="color: rgb(51, 153, 102);"><strong>./mysql-local.conf</strong></span><br />
<strong># cd ~/.local/share/akonadi/<br />
# find ./ -iname *mysql*</strong><br />
<span style="color: rgb(51, 153, 102);"><strong>./mysql.conf</strong></span><br />
<strong>#</strong></p>
</blockquote>
<p>So looks like Akonadi has it&#8217;s own mysql configuration files, which is good, and perhaps for it&#8217;s own purposes it needs to run as root for a local instance of mysql (What other reason is there for another MySQL config file).&nbsp; That would be safer.&nbsp; But which one of the above do I&nbsp;put <strong>user=root</strong> under.&nbsp; Checking my system, it was empty of any sort of documentation for Akonadi.&nbsp; So I try the RPM:</p>
<blockquote>
<p><strong># rpm -aq|grep akonadi</strong><br />
akonadi-1.1.1-1.fc10.i386<br />
<strong># rpm -lq akonadi-1.1.1-1.fc10.i386</strong><br />
.<br />
.<br />
/etc/akonadi/mysql-global.conf<br />
.<br />
.</p>
</blockquote>
<p>But all we get is another mysql config file, which isn&#8217;t helpful.&nbsp; We need to know which one we need to set <strong>user=root</strong> in.&nbsp;</p>
<blockquote>
<p><strong>#</strong> <strong>vi /root/.local/share/akonadi/mysql.conf</strong><br />
<strong>#</strong> <strong>cat /root/.local/share/akonadi/mysql.conf|head</strong><br />
#<br />
# Global Akonadi MySQL server settings,<br />
# <strong><span style="color: rgb(51, 153, 102);">These settings can be adjusted using $HOME/.config/akonadi/mysql-local.conf</span></strong><br />
#<br />
# Based on advice by Kris K&Atilde;&para;hntopp &lt;kris@mysql.com&gt;<br />
#<br />
[mysqld]<br />
skip_grant_tables<br />
skip_networking</p>
<p>#</p>
</blockquote>
<p>Which gives us the answer (green above) which we were looking for.&nbsp; Doing the above but for /etc/akonadi/mysql-global.conf instead says the same thing (files are copies of each other).&nbsp; Hence the <strong>SOLUTION</strong> above.&nbsp; <img src='http://www.microdevsys.com/WordPress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Cheers and Good Luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2009/03/29/linux-akonadi-the-qtsql-driver-qmysql-is-required-by-your-current-akonadi-server-configuration/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Thunderbird / Firefox / Linux: Error showing url: Failed to execute child process</title>
		<link>http://www.microdevsys.com/WordPress/2009/03/17/thunderbird-firefox-linux-error-showing-url-failed-to-execute-child-process/</link>
		<comments>http://www.microdevsys.com/WordPress/2009/03/17/thunderbird-firefox-linux-error-showing-url-failed-to-execute-child-process/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 02:51:16 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=1113</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/03/17/thunderbird-firefox-linux-error-showing-url-failed-to-execute-child-process/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Thunderbird / Firefox / Linux: Error showing url: Failed to execute child process';
digg_bodytext = 'PROBLEMOn Linux, you receive this error when trying to open up links from inside Thunderbird emails:Error showing url: Failed to execute child process &quot;/usr/lib/firefox-3.0.5/firefox&quot; (No such file or directory)SOLUTIONThe solution to this was...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
PROBLEM
On Linux, you receive this error when trying to open up links from inside Thunderbird emails:

Error showing url: Failed to execute child process &#34;/usr/lib/firefox-3.0.5/firefox&#34; (No such file or directory)


SOLUTION

The solution to this was fairly simple.&#160; Just create the link to firefox binary in the folder it was looking in for firefox

cd /usr/lib/firefox-3.0.5
    [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/03/17/thunderbird-firefox-linux-error-showing-url-failed-to-execute-child-process/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Thunderbird / Firefox / Linux: Error showing url: Failed to execute child process';
digg_bodytext = 'PROBLEMOn Linux, you receive this error when trying to open up links from inside Thunderbird emails:Error showing url: Failed to execute child process &quot;/usr/lib/firefox-3.0.5/firefox&quot; (No such file or directory)SOLUTIONThe solution to this was...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p><strong>PROBLEM</strong></p>
<p>On Linux, you receive this error when trying to open up links from inside Thunderbird emails:</p>
<blockquote>
<p>Error showing url: Failed to execute child process &quot;/usr/lib/firefox-3.0.5/firefox&quot; (No such file or directory)</p>
</blockquote>
<p>
<strong>SOLUTION</strong></p>
<p><span id="more-1113"></span><br />
The solution to this was fairly simple.&nbsp; Just create the link to firefox binary in the folder it was looking in for firefox</p>
<ol>
<li><strong>cd /usr/lib/firefox-3.0.5<br />
    </strong></li>
<li><strong>which firefox<br />
    </strong>/usr/bin/firefox<strong><br />
    </strong></li>
<li><strong>ln -s /usr/bin/firefox firefox</strong></li>
<li><strong>ll</strong><br />
    total 236<br />
    4669475 lrwxrwxrwx&nbsp;&nbsp; 1 root root&nbsp;&nbsp;&nbsp;&nbsp; 16 2009-03-17 22:41 firefox -&gt; /usr/bin/firefox*<br />
    4669742 drwxr-xr-x&nbsp;&nbsp; 3 root root&nbsp;&nbsp; 4096 2008-12-27 20:02 updates/<br />
    4669550 drwxr-xr-x&nbsp;&nbsp; 3 root root&nbsp;&nbsp; 4096 2009-03-17 22:41 ./<br />
    4456449 drwxr-xr-x 291 root root 225280 2009-02-27 04:07 ../</li>
<li><strong>#</strong></li>
</ol>
<p>
This resolved the issue in Thunderbird and links could be launched from within emails.<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2009/03/17/thunderbird-firefox-linux-error-showing-url-failed-to-execute-child-process/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Firefox:  Firefox could not install the file at &#8216;URL&#8217; because: Signing could not be verified</title>
		<link>http://www.microdevsys.com/WordPress/2009/02/16/firefox-firefox-could-not-install-the-file-at-because-signing-could-not-be-verified/</link>
		<comments>http://www.microdevsys.com/WordPress/2009/02/16/firefox-firefox-could-not-install-the-file-at-because-signing-could-not-be-verified/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 06:10:18 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=1053</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/02/16/firefox-firefox-could-not-install-the-file-at-because-signing-could-not-be-verified/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Firefox:  Firefox could not install the file at &#8216;URL&#8217; because: Signing could not be verified';
digg_bodytext = 'PROBLEMJust today an issue came up for me installing the google toolbar.&nbsp; (This Google toolbar has been in Beta for a while now, which caught my attention and may or should catch yours: Beta releases are buggy.&nbsp; That may be beside the point...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
PROBLEM
Just today an issue came up for me installing the google toolbar.&#160; (This Google toolbar has been in Beta for a while now, which caught my attention and may or should catch yours: Beta releases are buggy.&#160; That may be beside the point though since I don&#8217;t care as long as it does it&#8217;s job [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/02/16/firefox-firefox-could-not-install-the-file-at-because-signing-could-not-be-verified/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Firefox:  Firefox could not install the file at &#8216;URL&#8217; because: Signing could not be verified';
digg_bodytext = 'PROBLEMJust today an issue came up for me installing the google toolbar.&nbsp; (This Google toolbar has been in Beta for a while now, which caught my attention and may or should catch yours: Beta releases are buggy.&nbsp; That may be beside the point...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p><strong>PROBLEM</strong></p>
<p>Just today an issue came up for me installing the google toolbar.&nbsp; (This Google toolbar has been in Beta for a while now, which caught my attention and may or should catch yours: Beta releases are buggy.&nbsp; That may be beside the point though since I don&#8217;t care as long as it does it&#8217;s job well since some company&#8217;s betas are better then other companies official releases.&nbsp; :)&nbsp;&nbsp;&nbsp; )</p>
<p>I got this cryptic error:</p>
<blockquote>
<p>Firefox could not install the file at</p>
<p>http://dl.google.com/firefox/google-toolbar-beta-linux.xpi</p>
<p>because: Signing could not be verified<br />
-260</p>
</blockquote>
<p><span id="more-1053"></span>Below are a number of possible solutions for this issue.&nbsp; If one doesn&#8217;t work, give another a try:<br />
&nbsp;</p>
<p><strong>SOLUTION 1<br />
</strong></p>
<p>A required certificate or all of your certificates have the &quot;<strong>This certificate can identify software makers.</strong>&quot; option disabled / unchecked.&nbsp; Here&#8217;s how to go about determening which one you need to check off.</p>
<p><span style="color: rgb(51, 153, 102);"><strong>DETERMINE THE CERTIFICATE</strong></span></p>
<p>First you need to determine which certificate your <strong>.xpi</strong> file uses.&nbsp; In this case we will look at the <strong>google-toolbar-beta-linux.xpi</strong> file:</p>
<ol>
<li>Make a temporary folder such as <strong>/tmp/workingonit</strong></li>
<li>Get the extension: <br />
    $ <strong>wget http://dl.google.com/firefox/google-toolbar-beta-linux.xpi</strong></li>
<li>Check that it&#8217;s there:<br />
    <strong>ll google-toolbar-beta-linux.xpi</strong><br />
    932082 -rw-r&#8211;r&#8211; 1 root root 1280456 Jan 28 19:00 google-toolbar-beta-linux.xpi</li>
<li>Extensions are <strong>zip</strong> files.&nbsp; So we unzip them:<br />
    <strong>$ unzip </strong><strong>google-toolbar-beta-linux.xpi</strong></li>
<li>Find the file with the certificates (Something named <strong>.rsa</strong> should be it.):<br />
    $ <strong>find ./ -name *.rsa</strong><br />
    ./META-INF/zigbert.rsa<br />
    $</li>
<li>Use strings command to print printable characters in file (Take note, what we highlighted below in orange will make sense a bit later on):<br />
    <strong>$</strong> <strong>/usr/bin/strings META-INF/zigbert.rsa|egrep -i &quot;sign|cert&quot;</strong><br />
    VeriSign, Inc.1<br />
    VeriSign Trust Network1;09<br />
    2Terms of use at https://www.verisign.com/rpa (c)041.0,<br />
    %VeriSign Class 3 Code Signing 2004 CA0<br />
    ,Digital ID Class 3 - Netscape Object Signing1<br />
    /http://CSC3-2004-crl.verisign.com/CSC3-2004.crl0D<br />
    https://www.verisign.com/rpa0<br />
    http://ocsp.verisign.com0?<br />
    3http://CSC3-2004-aia.verisign.com/CSC3-2004-aia.cer0<br />
    VeriSign, Inc.1705<br />
    .Class 3 Public Primary Certification Authority0<br />
    VeriSign, Inc.1<br />
    VeriSign Trust Network1;09<br />
    2Terms of use at https://www.verisign.com/rpa (c)041.0,<br />
    %VeriSign Class 3 Code Signing 2004 CA0<br />
    https://www.verisign.com/rpa01<br />
    &nbsp;http://crl.verisign.com/pca3.crl0<br />
    VeriSign, Inc.1705<br />
    <span style="color: rgb(255, 153, 0);"><strong>.Class 3 Public Primary Certification Authority</strong></span><br />
    VeriSign, Inc.1<br />
    VeriSign Trust Network1;09<br />
    2Terms of use at https://www.verisign.com/rpa (c)041.0,<br />
    %VeriSign Class 3 Code Signing 2004 CA<br />
    <strong>$</strong></li>
<li>Above tells us that the xpi file is signed with <strong>VeriSign</strong> and gives a few other details on it.&nbsp; Now you have your info.&nbsp; On to the second half of instructions.</li>
</ol>
<p><span style="color: rgb(51, 153, 102);"><strong>ENABLE THE VERFICATION ON </strong></span><span style="color: rgb(51, 153, 102);"><span><strong>CER</strong></span><strong><span>T</span>IFICATE</strong></span></p>
<ol>
<li>Start <strong>Firefox</strong> (if it isn&#8217;t already).&nbsp; This assumes FireFox version 3+ so menu item names below may differ for other FireFox versions but you should be able to browse to something that has a list of certificates (See image below).</li>
<li>Go to <strong>Edit</strong> -&gt; <strong>Preferences</strong>.&nbsp; New panel appears.</li>
<li>On the new panel, click <strong>Advanced</strong> category followed by the <strong>Encryption</strong> tab then <strong>View Certificates</strong> button.</li>
<li>Browse down to <strong>VeriSign</strong> certificates.&nbsp; You may see something similar to the below:<br />
    <img align="middle" src="http://www.microdevsys.com/wordpressimages/firefox-security-devices-config-2.jpg" alt="FireFox Security Devices Config - Master Password" /></li>
<li>Notice in the above image the highlighted certificate &quot;<strong>Verisign Class 3 Public Primary Certification Authority</strong>&quot; I&#8217;ve chosen. &nbsp;It matches exactly what we got highlighted in orange earlier in step <strong>6</strong> from first part above.</li>
<li>Click <strong>Edit</strong> on the highlighted.&nbsp; You should be presented with three choices:<br />
    This certificate can identify web sites.<br />
    This certificate can identify mail users.<br />
    This certificate can identify software makers.</li>
<li>Check off &quot;<strong>This certificate can identify software makers.</strong>&quot;</li>
<li>Click <strong>Ok</strong> to save then <strong>Ok</strong> on other open panels or Save as the case may be and restart <strong>FireFox</strong>.&nbsp;</li>
<li>Try to download your extension again.&nbsp; The error should be gone.</li>
<li>You&#8217;re done!<br />
    &nbsp;</li>
</ol>
<p><strong><br />
SOLUTION 2<br />
</strong></p>
<p>Another possibility is to try to disable OCSP (Online Certificate Status Protocol).&nbsp; Here&#8217;s how to go about this:</p>
<ul>
<li>Select <strong>Edit</strong> -&gt; <strong>Preferences</strong> (Config panel should appear)</li>
<li>Click <strong>Advanced</strong> (Tab / Option )</li>
<li>Click <strong>Encryption</strong> sub Tab.</li>
<li>Click <strong>Validation</strong> button.</li>
<li>Uncheck &quot;<strong>Use the Online Certificate Status Protocol (OCSP) to confirm the current validity of certificates</strong>&quot;</li>
</ul>
<p>Download your file.&nbsp; All should be well.</p>
<p>Repeat above to reenable OCSP again for other plugins, themes, etc.</p>
<p>Now if I&nbsp;could only remember what I&nbsp;wanted this crazy toolbar for anyway.&nbsp; <img src='http://www.microdevsys.com/WordPress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Hope you Enjoy!&nbsp; Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2009/02/16/firefox-firefox-could-not-install-the-file-at-because-signing-could-not-be-verified/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creating associative or hash arrays in bash using sed and strings without the use of arrays, looping and conditionals.</title>
		<link>http://www.microdevsys.com/WordPress/2009/02/06/creating-associative-or-hash-arrays-in-bash-using-sed-and-strings-without-the-use-of-arrays-looping-and-conditionals/</link>
		<comments>http://www.microdevsys.com/WordPress/2009/02/06/creating-associative-or-hash-arrays-in-bash-using-sed-and-strings-without-the-use-of-arrays-looping-and-conditionals/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 09:13:00 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=995</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/02/06/creating-associative-or-hash-arrays-in-bash-using-sed-and-strings-without-the-use-of-arrays-looping-and-conditionals/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Creating associative or hash arrays in bash using sed and strings without the use of arrays, looping and conditionals.';
digg_bodytext = 'Hashes are a certainly very important part of any language.&nbsp; If you&#8217;re not used to hashes, you may not see their potential at first.&nbsp; However, having used them in several languages now, hashes always ended up reducing my code significantly...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
Hashes are a certainly very important part of any language.&#160; If you&#8217;re not used to hashes, you may not see their potential at first.&#160; However, having used them in several languages now, hashes always ended up reducing my code significantly especially when only complex solutions would only do otherwise.&#160; However, bash or ksh for that [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/02/06/creating-associative-or-hash-arrays-in-bash-using-sed-and-strings-without-the-use-of-arrays-looping-and-conditionals/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Creating associative or hash arrays in bash using sed and strings without the use of arrays, looping and conditionals.';
digg_bodytext = 'Hashes are a certainly very important part of any language.&nbsp; If you&#8217;re not used to hashes, you may not see their potential at first.&nbsp; However, having used them in several languages now, hashes always ended up reducing my code significantly...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p>Hashes are a certainly very important part of any language.&nbsp; If you&#8217;re not used to hashes, you may not see their potential at first.&nbsp; However, having used them in several languages now, hashes always ended up reducing my code significantly especially when only complex solutions would only do otherwise.&nbsp; However, bash or ksh for that matter, don&#8217;t really come with such a construct.&nbsp; Reading up on how to do such a thing really didn&#8217;t provide any elegant solutions that I&nbsp;wanted for most scenarios.&nbsp; What I really wanted is something that had these features:<span id="more-995"></span></p>
<ul>
<li>I&nbsp;needed to define my hashes easily similar to the pearl construct <strong>%hash= { &quot;key&quot; =&gt; &quot;value&quot;, &quot;key1&quot; =&gt; &quot;value2&quot; }</strong></li>
<li>I&nbsp;needed easy key / value retrieval without excessive code and something with minimal implementation that&#8217;s easy to use in looping and conditional constructs.</li>
<li>Finally, some flexibility so I can have the freedom to define various kind of hashes depending on my needs.</li>
<li>Avoid (<strong>NOT</strong>) using arrays (<strong>define -a array1</strong>), conditionals (<strong>if</strong>, <strong>case</strong> ) and loops (<strong>for</strong>, <strong>while</strong>, <strong>do</strong>)</li>
</ul>
<p>&nbsp;</p>
<p>Well what I&nbsp;did is using a combination of strings and the unix sed utility to accomplish all of the above in the below script (hashv retrieves values <em><strong>from</strong></em> keys.&nbsp; hashk retrieves keys <em><strong>from</strong></em> values):</p>
<hr />
<pre>
#!/bin/bash

mhash=&quot;Jan:01 Feb:02 Mar:03 Apr:04 May:05 Jun:06 Jul:07 Aug:08 Sep:09 Oct:10 Nov:11 Dec:12&quot;;

function hashv {
        hkey=&quot;&quot;;
        mh=&quot;&quot;;
        if [[ $2 != &quot;&quot; ]]; then hkey=$2; else echo &quot;&quot;; return 0; fi
        if [[ $1 != &quot;&quot; ]]; then mh=$1; else echo &quot;&quot;; return 0; fi

        echo $mh|sed -e &quot;s/.*\([ \t]*\)\($hkey\):\([^ \t]*\?\)\([ \t]*\).*/\3/gi&quot;
}

function hashk {
        hvalue=&quot;&quot;;
        mh=&quot;&quot;;
        if [[ $2 != &quot;&quot; ]]; then hvalue=$2; else echo &quot;&quot;; return 0; fi
        if [[ $1 != &quot;&quot; ]]; then mh=$1; else echo &quot;&quot;; return 0; fi

        echo $mh|grep &quot;$hvalue&quot;|sed -e &quot;s/\([^ \t]*\)[:]\($hvalue\)/\|\1|\2\|/i&quot; -e &quot;s/.*\?[|]\(.*\)[|].*[|].*\?/\1/i&quot;;
}

echo &quot;____________________________________&quot;;
hashv &quot;$mhash&quot; &quot;Dec&quot;;
hashk &quot;$mhash&quot; &quot;12&quot;;
echo &quot;____________________________________&quot;;
hashv &quot;$mhash&quot; &quot;&quot;;
hashk &quot;&quot; &quot;12&quot;;
echo &quot;____________________________________&quot;;
hashv &quot;$mhash&quot; &quot;Oct&quot;;
hashk &quot;$mhash&quot; &quot;10&quot;;
echo &quot;____________________________________&quot;;
hashv &quot;$mhash&quot; &quot;Jan&quot;;
hashk &quot;$mhash&quot; &quot;01&quot;;
echo &quot;____________________________________&quot;;
</pre>
<hr />
<p>&nbsp;</p>
<p>Saving to a file <strong>hash.bash</strong>, the above gives the output:</p>
<p>&nbsp;</p>
<hr />
<pre><strong># ./hash.bash</strong>
____________________________________
12
Dec
____________________________________

____________________________________
10
Oct
____________________________________
01
Jan
____________________________________
</pre>
<hr />
<p>
which is what I was looking for.&nbsp; It turns out that the above code is more flexible in it&#8217;s implementation then I really had hoped for.&nbsp; If spaces and colon (<strong>:</strong>) isn&#8217;t really satisfactory as a delimeter, I can easily change it to something else I&nbsp;know I&nbsp;won&#8217;t be using.&nbsp; The string definition makes defining hashes easy, even more so then the perl counterpart I was used to (though, yes, probably not as powerfull)&nbsp; Which brings up another interesting point, I also have the ability to change the behaviour of this type of hash definition something I&nbsp;don&#8217;t get in other languages.</p>
<p>Hope you found this useful!&nbsp; Enjoy and don&#8217;t hesitate to write below!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2009/02/06/creating-associative-or-hash-arrays-in-bash-using-sed-and-strings-without-the-use-of-arrays-looping-and-conditionals/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Apache: Configuring mod_security (modsecurity) for Apache on Fedora.</title>
		<link>http://www.microdevsys.com/WordPress/2009/01/14/apache-configuring-mod_security-modsecurity-for-apache-on-fedora/</link>
		<comments>http://www.microdevsys.com/WordPress/2009/01/14/apache-configuring-mod_security-modsecurity-for-apache-on-fedora/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 07:11:23 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=918</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/01/14/apache-configuring-mod_security-modsecurity-for-apache-on-fedora/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Apache: Configuring mod_security (modsecurity) for Apache on Fedora.';
digg_bodytext = 'INTRODUCTIONMost people today know or have some idea what a firewall is.&nbsp; For those not too familiar with it, it&#8217;s essentially a piece of software or hardware that sits between your computer and the internet (outside world) helping to prevent...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
INTRODUCTION
Most people today know or have some idea what a firewall is.&#160; For those not too familiar with it, it&#8217;s essentially a piece of software or hardware that sits between your computer and the internet (outside world) helping to prevent unauthorized access to your computer / workstation.&#160; The firewall does this by blocking certain ports [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/01/14/apache-configuring-mod_security-modsecurity-for-apache-on-fedora/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Apache: Configuring mod_security (modsecurity) for Apache on Fedora.';
digg_bodytext = 'INTRODUCTIONMost people today know or have some idea what a firewall is.&nbsp; For those not too familiar with it, it&#8217;s essentially a piece of software or hardware that sits between your computer and the internet (outside world) helping to prevent...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p><strong>INTRODUCTION</strong></p>
<p>Most people today know or have some idea what a <a href="http://www.microdevsys.com/WordPress/2007/07/05/the-linux-firewall-some-typical-rules/">firewall</a> is.&nbsp; For those not too familiar with it, it&#8217;s essentially a piece of software or hardware that sits between your computer and the internet (outside world) helping to prevent <a href="http://www.microdevsys.com/WordPress/2009/01/08/security-round-cube-webmail-scans-spreading-on-the-web-roundcube-msgimport-nonexistenshit-and-webmail/">unauthorized access</a> to your computer / workstation.&nbsp; The firewall does this by blocking certain ports on your workstation that applications normally use to communicate with over networks. It does this to hide vulnerable applications from being exposed to potentially malicious break in attempts.&nbsp; The firewall&#8217;s granularity typically reaches and is limited to filtering the type of protocols allowed on as little as a single IP, the direction (IN / OUT = TO / FROM your computer) of the traffic and as broad as blocking entire sets of IP&#8217;s (For example 50.N.N.N - 150.N.N.N).&nbsp; This is really the broad range of what a typical firewall can do.<span id="more-918"></span></p>
<p>What it does not do is filter based on the type of traffic on a single IP and a single protocol going in either direction.&nbsp; What we mean is that it doesn&#8217;t look at the type of traffic going in and out to decide if the intent is good or bad.&nbsp; The internet which uses port 80 is the prime example here.&nbsp; We know very well that when we browse, viruses, spyware and malware can get into our systems.&nbsp; Firewalls are typically not designed to tell the difference here. For example a request such as this:</p>
<p style="margin-left: 40px;">&nbsp;<strong>http://&lt;your IP&gt;/&#8217;c:\; format c:&#8217; </strong></p>
<p>cannot be distinguished by your operating system and firewall to be different from</p>
<p style="margin-left: 40px;"><strong>http://&lt;your IP&gt;/</strong></p>
<p>Simply put, to your computer, firewall or not, the two requests on port 80 (World Wide Web / http) are identical in terms of safety.</p>
<p>This is where <a rel="nofollow" href="http://modsecurity.org">mod_security</a> comes in. In this case it scans all traffic on port 80 coming in and out of your PC, matches this to a bunch of rules we can write and based on the written rules, decides to either deny, warn or allow the traffic.&nbsp; So for example, if we know a certain break in attempt and gathered data on it, we can write a rule to block it in on port 80.&nbsp; We can then distinguish between the two above examples to deny the first one (it has <strong>format c:</strong> in it) and allow the second.</p>
<p><strong>SETUP</strong></p>
<p>Mod security has progressed significantly in the past few years and is fairly easy to install and configure.&nbsp; In fact, as we will see it comes out of the box with some written rules to catch most of the common intrusion types on the internet on port 80 (httpd / www ).&nbsp; This makes for fairly easy setup and configuration.</p>
<p><strong>BASIC INSTALLATION</strong></p>
<ol>
<li><strong>yum search mod_security</strong>&nbsp; (or <em>yum search modsecurity</em>)<br />
    (Should yield <strong>mod_security.i386</strong> as one of the results: <em>mod_security.i386 : Security module for the Apache HTTP Server</em>)&nbsp;</li>
<li><strong>yum install mod_security</strong><br />
    (This installed package <strong>mod_security-2.5.6-1.fc10.i386</strong>)</li>
<li><strong>rpm -ql mod_security-2.5.6-1.fc10.i386<br />
    </strong><span style="color: rgb(0, 255, 0);">/etc/httpd/conf.d/mod_security.conf</span><br />
    /etc/httpd/modsecurity.d<br />
    <span style="color: rgb(255, 153, 0);">/etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_20_protocol_violations.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_21_protocol_anomalies.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_23_request_limits.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_30_http_policy.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_35_bad_robots.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_40_generic_attacks.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_45_trojans.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_50_outbound.conf<br />
    /etc/httpd/modsecurity.d/modsecurity_localrules.conf</span><br />
    /etc/httpd/modsecurity.d/optional_rules<br />
    /etc/httpd/modsecurity.d/optional_rules/modsecurity_crs_20_protocol_violations.conf<br />
    /etc/httpd/modsecurity.d/optional_rules/modsecurity_crs_21_protocol_anomalies.conf<br />
    /etc/httpd/modsecurity.d/optional_rules/modsecurity_crs_40_generic_attacks.conf<br />
    /etc/httpd/modsecurity.d/optional_rules/modsecurity_crs_42_comment_spam.conf<br />
    /etc/httpd/modsecurity.d/optional_rules/modsecurity_crs_42_tight_security.conf<br />
    /etc/httpd/modsecurity.d/optional_rules/modsecurity_crs_55_marketing.conf<br />
    <span style="color: rgb(153, 153, 153);"><strong>/usr/lib/httpd/modules/mod_security2.so</strong></span><br />
    /usr/share/doc/mod_security-2.5.6<br />
    /usr/share/doc/mod_security-2.5.6/CHANGES<br />
    /usr/share/doc/mod_security-2.5.6/LICENSE<br />
    /usr/share/doc/mod_security-2.5.6/README.TXT<br />
    .<br />
    .<br />
    (Highlighted items are most important: the Apache HTTPD <span style="color: rgb(153, 153, 153);"><strong>.so</strong></span> module, <span style="color: rgb(255, 153, 0);">.conf</span> config files and the main <span style="color: rgb(0, 255, 0);">mod_security.conf </span>)</li>
<li><strong>rpm &#8211;verify mod_security-2.5.6-1.fc10.i386</strong><br />
    (Does various verifications such as <strong>MD5</strong>, <strong>Modification time</strong> of files etc verification from the RPM since the RPM was installed: No news (results) is good news in this case)</li>
<li><strong>rpm -q &#8211;whatprovides /usr/lib/httpd/modules/mod_security2.so</strong><br />
    mod_security-2.5.6-1.fc10.i386 (Verify where <strong>mod_security2.so</strong> came from, in case old copies resided.)</li>
<li><strong>cat /etc/httpd/conf/httpd.conf|grep &quot;Include conf.d&quot;</strong><br />
    Include conf.d/*.conf<br />
    ( This ensures that <span style="color: rgb(0, 255, 0);">mod_security.conf</span> will be loaded automatically.&nbsp; <span style="color: rgb(0, 255, 0);">mod_security.conf </span>will then load <span style="color: rgb(153, 153, 153);"><strong>mod_security2.so</strong></span>.</li>
<li><em>OPTIONAL</em>: Follow <a href="http://www.microdevsys.com/WordPress/2009/01/14/linux-enable-extended-httpd-status-reports-in-apache-through-service-fullstatus/">Linux:&nbsp;Enable extended httpd status reports in Apache</a> if you have not already.&nbsp; Test with <strong>service httpd fullstatus</strong> (If there is no error and you get detailed printouts, you are fine.)</li>
<li>Run <strong>apachectl configtest</strong> to check the config file for syntax errors or simply run <strong>service httpd restart</strong>.</li>
<li>Test the configuration for some basic intrusion attempts.&nbsp; Type<br />
    <strong>http://localhost/update.php?entries=2837%27;DELETE%20FROM%20t_entries&#8211;</strong><br />
    in a browser.&nbsp; It simulates an SQL&nbsp;injection.</li>
<li>Check the log file with&nbsp; <br />
    <strong># tail -f /var/log/httpd/error_log</strong><br />
    [Tue Jan 13 01:11:16 2009] [error] [client 127.0.0.1] ModSecurity: Warning. Pattern match &quot;(?:\\b(?:(?:s(?:elect\\b(?:.{1,100}?\\b(?:(?:length|count|top)\\b.{1,100}?\\bfrom|from\\b.{1,100}?\\bwhere)|.*?\\b(?:d(?:ump\\b.*\\bfrom|ata_type)|(?:to_(?:numbe|cha)|inst)r))|p_(?:(?:addextendedpro|sqlexe)c|(?:oacreat|prepar)e|execute(?:sql)?|makewebtask)|ql_(? &#8230;&quot; at ARGS:user. [file &quot;/etc/httpd/modsecurity.d/modsecurity_crs_40_generic_attacks.conf&quot;] [line &quot;66&quot;] [id &quot;950001&quot;] [msg &quot;SQL Injection Attack&quot;] [data &quot;delete from&quot;] [severity &quot;CRITICAL&quot;] [tag &quot;WEB_ATTACK/SQL_INJECTION&quot;] [hostname &quot;localhost&quot;] [uri &quot;/login.php&quot;] [unique_id &quot;SWwwhMCoAAQAACz4CDwAAAAA&quot;]</p>
<p>    The result in <strong>error_log</strong> tells you the attempt was caught but only a <strong>Warning</strong> was issued.</li>
<li><strong>You&#8217;re done!&nbsp;</strong>&nbsp; (w/ basic configuration)<br />
    &nbsp;</li>
</ol>
<p>Now follow the link below and let&#8217;s add example rules for some real-life situations found at <a href="http://www.microdevsys.com/WordPress/2009/01/08/security-round-cube-webmail-scans-spreading-on-the-web-roundcube-msgimport-nonexistenshit-and-webmail/">Security: Round cube webmail scans spreading on the web: roundcube, msgimport, nonexistenshit and webmail</a>.</p>
<p>Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2009/01/14/apache-configuring-mod_security-modsecurity-for-apache-on-fedora/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Linux: Enable extended httpd status reports in Apache through service: fullstatus</title>
		<link>http://www.microdevsys.com/WordPress/2009/01/14/linux-enable-extended-httpd-status-reports-in-apache-through-service-fullstatus/</link>
		<comments>http://www.microdevsys.com/WordPress/2009/01/14/linux-enable-extended-httpd-status-reports-in-apache-through-service-fullstatus/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 06:22:43 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=922</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/01/14/linux-enable-extended-httpd-status-reports-in-apache-through-service-fullstatus/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Linux: Enable extended httpd status reports in Apache through service: fullstatus';
digg_bodytext = 'Apache HTTPD is the most popular web server to date.&nbsp; It&#8217;s extensible and configurable to meet various needs both small and big.&nbsp; Here we&#8217;ll focus on extending it&#8217;s reporting functionality by enabling full status capability...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
Apache HTTPD is the most popular web server to date.&#160; It&#8217;s extensible and configurable to meet various needs both small and big.&#160; Here we&#8217;ll focus on extending it&#8217;s reporting functionality by enabling full status capability to see more granularity in status reports.&#160; As you probably know, the service on Red Hat Linux systems can be [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/01/14/linux-enable-extended-httpd-status-reports-in-apache-through-service-fullstatus/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Linux: Enable extended httpd status reports in Apache through service: fullstatus';
digg_bodytext = 'Apache HTTPD is the most popular web server to date.&nbsp; It&#8217;s extensible and configurable to meet various needs both small and big.&nbsp; Here we&#8217;ll focus on extending it&#8217;s reporting functionality by enabling full status capability...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p><a rel="nofollow" href="http://www.apache.org">Apache HTTPD</a> is the most popular web server to date.&nbsp; It&#8217;s extensible and configurable to meet various needs both small and big.&nbsp; Here we&#8217;ll focus on extending it&#8217;s reporting functionality by enabling full status capability to see more granularity in status reports.&nbsp; As you probably know, the service on <a href="http://www.redhat.com" rel="nofollow"><strong>Red Hat Linux</strong></a> systems can be controlled with the service command like this:<span id="more-922"></span></p>
<ul>
<li><strong>service httpd restart<br />
    </strong></li>
<li><strong>service httpd stop<br />
    </strong></li>
<li><strong>service httpd start<br />
    </strong></li>
<li><strong>service httpd status</strong> (tells if the process is running and reports the PID of the process: nothing else useful is reported)</li>
</ul>
<p>The configuration <strong>httpd</strong> parameter above actually refers to a script and can be viewed by editing the file <strong>/etc/init.d/httpd</strong> using <strong>vi</strong>, <strong>pico</strong>, <strong>nano</strong> or other CLI editors to look up other parameters <strong>httpd</strong> can be given (ie stop, start, restart, status etc as above).&nbsp; One of the commands of interest is <strong>fullstatus</strong> which does not yet come configured out of the box.&nbsp; Here are the steps to enable it:</p>
<ul>
<li><strong>cat /etc/httpd/conf/httpd.conf|egrep &quot;Location.*\-status&quot;</strong><br />
    # &lt;Location /server-status&gt;<br />
    (Checks if <strong>fullstatus</strong> has not already been enabled.&nbsp; A pound (#) before <strong>Location</strong> above indicates it is disabled)</li>
<li><strong>service httpd fullstatus</strong><strong> </strong>(or <strong>apachectl fullstatus</strong> )<strong><br />
    </strong><span style="color: rgb(255, 0, 0);">Forbidden </p>
<p>    You don&#8217;t have permission to access /server-status on this server. </span><br />
    .<br />
    .<strong><br />
    </strong>(If error is thrown, as above <strong>fullstatus</strong> has not been enabled)</li>
<li><strong>rpm -aq|grep elinks</strong><br />
    elinks-0.12-0.6.pre2.fc10.i386<br />
    (Checks if elinks is installed.&nbsp; Do this before installing elinks.)</li>
<li><strong>yum install elinks</strong> <br />
    (<strong>IF</strong> elinks is <strong>NOT</strong>&nbsp;installed)</li>
<li><strong>rpm -aq|grep elinks</strong><br />
    elinks-0.12-0.6.pre2.fc10.i386<br />
    (To verify installation worked)</li>
<li><strong>vi /etc/httpd/conf/httpd.conf</strong> <br />
    (Or use <strong>pico</strong> or <strong>nano</strong> if you are not comfortable with <strong>vi</strong>.)</li>
<li>Find and uncomment the line <strong>ExtendedStatus On</strong> (Remove <strong>#</strong> from start of line)</li>
<li>Find and uncomment the following directives.&nbsp; Change configuration
<p>    <strong>From</p>
<p>    </strong>#&lt;Location /server-status&gt;<br />
    #&nbsp;&nbsp; SetHandler server-status<br />
    #&nbsp;&nbsp;&nbsp; Order deny,allow<br />
    #&nbsp;&nbsp;&nbsp; Deny from all<br />
    #&nbsp;&nbsp;&nbsp; Allow from <span style="color: rgb(255, 0, 0);">example.com</span><br />
    #&lt;/Location&gt;<strong></p>
<p>    To<br />
    </strong><br />
    &lt;Location /server-status&gt;<br />
    &nbsp;&nbsp;&nbsp; SetHandler server-status<br />
    &nbsp;&nbsp;&nbsp; Order deny,allow<br />
    &nbsp;&nbsp;&nbsp; Deny from all<br />
    &nbsp;&nbsp;&nbsp; Allow from localhost <span style="color: rgb(0, 255, 0);">127.0.0.1</span><br />
    &lt;/Location&gt;</li>
<li>Save the configuration file and exit (In <strong>vi</strong> type <strong>:wq</strong> )</li>
<li><strong>service httpd restart<br />
    </strong>(Restart the httpd service)</li>
<li><strong>service httpd fullstatus</strong> (or <strong>apachectl fullstatus</strong>)<strong><br />
    </strong></li>
</ul>
<p>
The last command should print output similar to the below:</p>
<p>&nbsp;</p>
<pre>
                       Apache Server Status for localhost

   Server Version: Apache/2.2.10 (Unix) DAV/2 PHP/5.2.6 Apache/2.2.0 (Fedora)
   mod_perl/2.0.4 Perl/v5.10.0

   Server Built: Oct 21 2008 07:51:36

   --------------------------------------------------------------------------

   Current Time: Wednesday, 14-Jan-2009 01:15:24 EST

   Restart Time: Tuesday, 13-Jan-2009 09:57:34 EST

   Parent Server Generation: 0

   Server uptime: 15 hours 17 minutes 50 seconds

   Total accesses: 13 - Total Traffic: 14 kB

   CPU Usage: u.71 s.09 cu0 cs0 - .00145% CPU load

   .000236 requests/sec - 0 B/second - 1102 B/request

   1 requests currently being processed, 7 idle workers

 ______W_........................................................
 ................................................................
 ................................................................
 ................................................................

   Scoreboard Key:
   &quot;_&quot; Waiting for Connection, &quot;S&quot; Starting up, &quot;R&quot; Reading Request,
   &quot;W&quot; Sending Reply, &quot;K&quot; Keepalive (read), &quot;D&quot; DNS Lookup,
   &quot;C&quot; Closing connection, &quot;L&quot; Logging, &quot;G&quot; Gracefully finishing,
   &quot;I&quot; Idle cleanup of worker, &quot;.&quot; Open slot with no current process

Srv PID   Acc  M CPU   SS   Req Conn Child Slot    Client       VHost           Request
0-0 2465 0/2/2 _ 0.43 26995 74  0.0  0.00  0.00 24.102.58.189 127.0.0.1 GET /nonexistenshit
                                                                        HTTP/1.1
1-0 2468 0/2/2 _ 0.00 26995 1   0.0  0.01  0.01 24.102.58.189 127.0.0.1 GET /mail/bin/msgimport
                                                                        HTTP/1.1
2-0 2471 0/2/2 _ 0.00 26994 1   0.0  0.00  0.00 24.102.58.189 127.0.0.1 GET /bin/msgimport
                                                                        HTTP/1.1
3-0 2474 0/2/2 _ 0.37 26994 1   0.0  0.00  0.00 24.102.58.189 127.0.0.1 GET /rc/bin/msgimport
                                                                        HTTP/1.1
                                                                        GET
4-0 2476 0/2/2 _ 0.00 26994 1   0.0  0.00  0.00 24.102.58.189 127.0.0.1 /roundcube/bin/msgimport
                                                                        HTTP/1.1
                                                                        GET
5-0 2478 0/2/2 _ 0.00 26993 1   0.0  0.00  0.00 24.102.58.189 127.0.0.1 /webmail/bin/msgimport
                                                                        HTTP/1.1
6-0 2480 0/1/1 W 0.00 0     0   0.0  0.00  0.00 127.0.0.1     127.0.0.1 GET /server-status
                                                                        HTTP/1.1

   --------------------------------------------------------------------------

    Srv  Child Server number - generation
    PID  OS process ID
    Acc  Number of accesses this connection / this child / this slot
     M   Mode of operation
    CPU  CPU usage, number of seconds
    SS   Seconds since beginning of most recent request
    Req  Milliseconds required to process most recent request
   Conn  Kilobytes transferred this connection
   Child Megabytes transferred this child
   Slot  Total megabytes transferred this slot

   --------------------------------------------------------------------------

    Apache/2.2.0 (Fedora) Server at localhost Port 80
</pre>
<p>In the above case it caught the popular <strong>nonexistenshit</strong> scan attempt discussed earlier in <a href="http://www.microdevsys.com/WordPress/2009/01/08/security-round-cube-webmail-scans-spreading-on-the-web-roundcube-msgimport-nonexistenshit-and-webmail/">Security: Round cube webmail scans spreading on the web: roundcube, msgimport, nonexistenshit and webmail</a></p>
<p>Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2009/01/14/linux-enable-extended-httpd-status-reports-in-apache-through-service-fullstatus/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Securing your website Apache HTTPD (port 80) from malicious scans.</title>
		<link>http://www.microdevsys.com/WordPress/2009/01/08/securing-your-website-apache-httpd-port-80-from-malicious-scans/</link>
		<comments>http://www.microdevsys.com/WordPress/2009/01/08/securing-your-website-apache-httpd-port-80-from-malicious-scans/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 18:44:49 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=837</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/01/08/securing-your-website-apache-httpd-port-80-from-malicious-scans/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Securing your website Apache HTTPD (port 80) from malicious scans.';
digg_bodytext = 'It&#8217;s still a surprise to most just how much scanning and probing by either hackers or malicious software is going on on the web when they do find out.&nbsp; I&nbsp;mean, do you really know how many times your workstation or home network get&#8217;s...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
It&#8217;s still a surprise to most just how much scanning and probing by either hackers or malicious software is going on on the web when they do find out.&#160; I&#160;mean, do you really know how many times your workstation or home network get&#8217;s hit by attempted intrusions and invasions?&#160; I was never able to find [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2009/01/08/securing-your-website-apache-httpd-port-80-from-malicious-scans/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Securing your website Apache HTTPD (port 80) from malicious scans.';
digg_bodytext = 'It&#8217;s still a surprise to most just how much scanning and probing by either hackers or malicious software is going on on the web when they do find out.&nbsp; I&nbsp;mean, do you really know how many times your workstation or home network get&#8217;s...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p>It&#8217;s still a surprise to most just how much scanning and probing by either hackers or malicious software is going on on the web when they do find out.&nbsp; I&nbsp;mean, do you really know how many times your workstation or home network get&#8217;s hit by attempted intrusions and invasions?&nbsp; I was never able to find this sort thing out or to see it until I ran Linux.&nbsp; This, imho, makes the Linux OS a bit more open to reporting such things, which is one of the things I&nbsp;like about it.&nbsp;</p>
<p>Just recently looking over my logs I see there is a large 0-Day scan hitting boxes around the web with regards to the <strong>roundcube</strong> webmail application. The scan has been spreading over the web and has now been hitting my box since yesterday.&nbsp; Initially&nbsp;I responded with an ad-hoc solution to this and I&#8217;ve blocked some IP&#8217;s namely the ones below:<span id="more-837"></span></p>
<blockquote>
<p>&nbsp;92.48.127.158 - - [08/Jan/2009:04:52:44 -0500] &quot;GET /nonexistenshit HTTP/1.1&quot; 301 326 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
92.48.127.158 - - [08/Jan/2009:04:52:45 -0500] &quot;GET /mail/bin/msgimport HTTP/1.1&quot; 301 330 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
92.48.127.158 - - [08/Jan/2009:04:52:45 -0500] &quot;GET /bin/msgimport HTTP/1.1&quot; 301 325 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
92.48.127.158 - - [08/Jan/2009:04:52:45 -0500] &quot;GET /rc/bin/msgimport HTTP/1.1&quot; 301 328 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
92.48.127.158 - - [08/Jan/2009:04:52:45 -0500] &quot;GET /roundcube/bin/msgimport HTTP/1.1&quot; 301 335 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
92.48.127.158 - - [08/Jan/2009:04:52:46 -0500] &quot;GET /webmail/bin/msgimport HTTP/1.1&quot; 301 333 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
61.19.252.4 - - [08/Jan/2009:05:08:59 -0500] &quot;GET /nonexistenshit HTTP/1.1&quot; 301 326 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
61.19.252.4 - - [08/Jan/2009:05:09:00 -0500] &quot;GET /mail/bin/msgimport HTTP/1.1&quot; 301 330 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
61.19.252.4 - - [08/Jan/2009:05:09:01 -0500] &quot;GET /bin/msgimport HTTP/1.1&quot; 301 325 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
61.19.252.4 - - [08/Jan/2009:05:09:01 -0500] &quot;GET /rc/bin/msgimport HTTP/1.1&quot; 301 328 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
61.19.252.4 - - [08/Jan/2009:05:09:02 -0500] &quot;GET /roundcube/bin/msgimport HTTP/1.1&quot; 301 335 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;</p>
</blockquote>
<p>But this is just one small set of them.&nbsp; In addition to the above, earlier I&#8217;ve been noticing these as well:</p>
<blockquote>
<p>209.163.188.49 - - [06/Jan/2009:17:19:00 -0500] &quot;GET /user/soapCaller.bs HTTP/1.1&quot; 301 330 &quot;-&quot; &quot;Morfeus Fucking Scanner&quot;<br />
82.215.135.141 - - [27/Dec/2008:20:16:26 -0500] &quot;GET /user/soapCaller.bs HTTP/1.1&quot; 404 295 &quot;-&quot; &quot;Morfeus Fucking Scanner&quot;<br />
78.109.23.224 - - [02/Jan/2009:06:24:46 -0500] &quot;GET /user/soapCaller.bs HTTP/1.1&quot; 301 330 &quot;-&quot; &quot;Morfeus Fucking Scanner&quot;</p>
</blockquote>
<p>And these:</p>
<blockquote>
<p>61.119.173.150 - - [30/Jan/2009:13:36:51 -0500] &quot;GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1&quot; 400 311 &quot;-&quot; &quot;-&quot;<br />
195.250.148.253 - - [30/Jan/2009:14:11:34 -0500] &quot;GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1&quot; 400 311 &quot;-&quot; &quot;-&quot;<br />
87.59.40.54 - - [30/Jan/2009:21:42:40 -0500] &quot;GET http://proxytest.pr.funpic.de/ HTTP/1.0&quot; 400 313 &quot;-&quot; &quot;-&quot;</p>
</blockquote>
<p>and they just kept coming!&nbsp; Some of the IP&#8217;s can be blocked with these lines in iptables however these appear to come from infected systems themselves (<em><strong>ie victims</strong></em>):</p>
<p><strong>$&nbsp;iptables -A INPUT -s 195.184.65.90 -i eth0 -p tcp -m multiport &#8211;dports 80,25,110 -j REJECT &#8211;reject-with icmp-host-unreachable</p>
<p></strong>Above <strong>iptables</strong> command line blocks the IP simulates an <strong>unavailble</strong> host, basically making your PC invisible to the IP you&#8217;ve blocked.&nbsp; This can keep your box from getting scanned or attacked further from this IP, which is probably what you want.&nbsp; However, unless you have the application the scans are probing or hackers are trying to exploit, likely you may not be vulnerable.&nbsp; In the event your box is not mission critical, it may be worth stopping HTTPD on stand alone workstations just to be safe.&nbsp; But run and hide isn&#8217;t an option for all.&nbsp; If you have the Apache HTTPD application or any other web server like IIS, try to apply paches or upgrade your version to the latest available from the <a rel="nofollow" href="http://roundcube.net">owner of the app</a>.&nbsp;</p>
<p><em><strong>One less noticable side effect of the above scans is that the foreign server is also exposing those IP&#8217;s on the web actively running httpd, which could make victims prone for other attacks.&nbsp; Not good!<br />
</strong></em></p>
<p><span style="font-size: large;"><strong>OVERVIEW</strong></span></p>
<p>The first basic way to keep your workstation secure is to have a good firewall.&nbsp; Here&#8217;s our how to on <a href="http://www.microdevsys.com/WordPress/2007/07/05/the-linux-firewall-some-typical-rules/">The Linux Firewall Configuration</a>.&nbsp; I took it upon myself then to <a href="http://www.microdevsys.com/WordPress/2009/01/14/apache-configuring-mod-security-modsecurity-for-apache-on-fedora/">secure my own Apache HTTPD installation with ModSecurity</a>.&nbsp; Turns out this was fairly easy and came out of the box, nearly fully configured.&nbsp; This is an absolutely great module that anyone can install and I highly recommend it.&nbsp; It&#8217;s really like a firewall for your web applications and probably one of it&#8217;s kind.&nbsp; Below code will assume usage of the module.&nbsp; More on this further down.</p>
<p>Following the above <strong>ModSecurity</strong> installation, I automated above with this little script that blocks IP&#8217;s for a duration of time then unblocks after a certain amount of time has expired (one day or seven days, depending on severity and frequency), as in cases such as above (You can tweak the variables for your own tastes) Here are the features of the script:</p>
<ul>
<li>Monitors the HTTPD log file from <strong>cron</strong>, ModSecurity and other traffic on port 80 / httpd.</li>
<li>Works from within HTTP ModSecurity using the</li>
<li>Starts a server.</li>
<li>Allows client connections to the server from non previlidged accounts.</li>
<li>Actively monitors, blocks and unblocks (After a period of time) offending IP&#8217;s that match various criteria.</li>
<li>Keeps track of when IP&#8217;s were blocked and unblocks them according attack frequency from a single IP.</li>
<li>Logs messages to various log files including messages, access_log with regards to what the script is doing.</li>
<li>A script remotely intelligent to be able to function as a server / client, be able to detect it&#8217;s surroundings sufficiently and take different actions depending on it&#8217;s running environment.<br />
    &nbsp;</li>
</ul>
<p>The script blocks the trouble IP&#8217;s from scanning your system further and blocks the IP&#8217;s of the attacking host for a length of time.&nbsp; <span style="color: rgb(255, 0, 0);">Of course as with any script, you will need to customize for your own tastes and needs and usage is at your own risk, as mentioned.&nbsp;</span></p>
<p>To figure out where a hack came from, who has done it, etc, is a vast topic that I&#8217;ll leave for another time.&nbsp; I&#8217;m not particularly eager to setup a honey pot server or figure out who done it and start some sort of investigation. &nbsp;Just interested in keeping these things from consistently hitting my workstation.</p>
<p>Currently, the attacks have been coming from the following locations, so it may be worth your time to check the scans from your location:</p>
<p style="margin-left: 40px;">24.102.58.189<br />
131.162.130.185<br />
131.162.130.187<br />
131.162.130.189<br />
131.162.130.191<br />
131.162.169.77<br />
148.244.120.4<br />
155.100.137.112<br />
173.45.68.130<br />
193.138.172.14<br />
195.184.65.90<br />
195.245.119.150<br />
195.3.206.45<br />
201.116.17.162<br />
203.211.130.68<br />
203.81.48.126<br />
208.111.34.21<br />
209.160.20.34<br />
209.163.188.49<br />
209.92.24.221<br />
210.245.123.177<br />
211.136.184.138<br />
212.68.34.107<br />
212.95.37.126<br />
213.251.174.41<br />
216.245.195.90<br />
217.147.30.185<br />
220.233.179.199<br />
24.102.58.189<br />
24.213.90.168<br />
58.215.88.10<br />
61.19.252.4<br />
66.154.97.57<br />
66.36.243.132<br />
66.79.162.235<br />
67.159.44.179<br />
67.202.54.191<br />
67.205.76.148<br />
67.207.74.76<br />
67.210.225.242<br />
67.210.235.154<br />
67.215.231.250<br />
67.228.238.194<br />
69.162.117.108<br />
69.60.117.215<br />
72.20.4.254<br />
72.233.93.144<br />
78.110.173.247<br />
80.18.145.59<br />
85.112.3.165<br />
86.34.134.162<br />
87.233.139.98<br />
87.233.176.117<br />
87.98.132.141<br />
87.98.222.87<br />
87.98.228.69<br />
89.108.124.239<br />
89.149.244.134<br />
89.163.145.92<br />
91.196.169.226<br />
92.48.127.158<br />
94.76.206.2<br />
&nbsp;</p>
<p>The script will continue to detect new intrusion attempts and block them as they happen.&nbsp; Previously blocked IP&#8217;s will be unblocked after one day (86400 seconds) or seven days (604800 seconds).&nbsp; Script will reblock any previously blocked IP&#8217;s if the same scan is again detected from an IP.&nbsp; So it&#8217;s a self-maintaining script, which, if no further attempts are detected, will unblock all the IP&#8217;s it blocked.</p>
<p>As briefly mentioned earlier, in this case, the ideal solution would be to use <a rel="nofollow" href="http://modsecurity.org">mod_security</a> which we will be briefly discussed here.&nbsp; Naturally the Apache <strong>mod_security</strong> is a preferred way because it would be handling these at the time when they happen.&nbsp; Before we look into adding rules for <strong>mod_security</strong> have a look at <a href="http://www.microdevsys.com/WordPress/2009/01/14/apache-configuring-mod_security-modsecurity-for-apache-on-fedora/">Apache: Configuring mod_security (modsecurity) for Apache on Fedora.</a> for configuring the basic <strong>ModSecurity</strong> setup on your workstation prior to any custom <strong>ModSecurity</strong> configuration.</p>
<p>Below is a script to handle the above issues.</p>
<p><span style="font-size: large;"><strong>INSTALLATION</strong></span></p>
<p>Reveiw then copy the script source found at the link below (as a <strong>.tar.gz</strong> file or <strong>.sh</strong> file, whichever) into some file such as <strong>/root/bin/imr.sh</strong>, set permissions and follow configuration instructions below:</p>
<table width="100%" cellspacing="1" cellpadding="1" border="0">
<tbody>
<tr>
<td><a rel="nofollow" href="http://www.microdevsys.com/WordPressDownloads/imr.sh ">http://www.microdevsys.com/WordPressDownloads/imr.sh </a></td>
</tr>
<tr>
<td><a rel="nofollow" href="http://www.microdevsys.com/WordPressDownloads/imr.sh.tar.gz">http://www.microdevsys.com/WordPressDownloads/imr.sh.tar.gz</a></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;<strong>INSTALLATION ( crontab</strong> )</p>
<p><span style="color: rgb(255, 0, 0);"><strong>WARNING:</strong></span>&nbsp;This will block all non local IP&#8217;s so you should take note before adding it to <strong>crontab</strong>.&nbsp; If you need to customize which sorts of IP&#8217;s you need to exclude/include, at this time you may need to modify the script to do so though I do plan to add the feature at some point in time. &nbsp;</p>
<p>Here&#8217;s how to add the script to run every 5 minutes within <strong>cron</strong>:</p>
<p style="margin-left: 40px;"><strong>$ crontab -e</strong><br />
<strong>$ Add line &quot;*/5 * * * * nice -n 10 /root/bin/imr.sh&quot; to the configuration to run every 5 minutes.</strong></p>
<p>The script will now scan your apache log files for any remote activity generated and take action.&nbsp; Again, this isn&#8217;t the best sort of option unless you want to block all non-local incoming IP&#8217;s but is fine if you are doing some testing / development and don&#8217;t want to have your box overly exposed on port 80 (HTTP).&nbsp;</p>
<p><strong>INSTALLATION ( ModSecurity</strong> )</p>
<p>This is the preferred means of handling such issues.&nbsp; The problem IP is blocked when the incident happens and even prevents intrusion.&nbsp; This script, as mentioned, supports a basic client/server model through <strong>nc</strong>.&nbsp; In so doing, it can be used in <strong>ModSecurity</strong> to issue directives between HTTPD ModSecurity and the server which can then take action on an IP.&nbsp; Here are the steps to set this up:</p>
<ul>
<li>As before, ensure you copied above script into a folder somewhere accessible by root and now also by Apache HTTP such as <strong>/usr/bin/shared/imr.sh</strong>.</li>
<li>Run the script.&nbsp; It should create a work folder under <strong>/tmp/</strong> called <strong>imr.sh</strong>.&nbsp; The folder may contain several files:<br />
    <strong>imr.sh.log&nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Script log messages, if script could not write to standard log files.<br />
    <strong>imrArchive.txt&nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # List of all IP&#8217;s encountered since script was initially ran.<br />
    <strong>imrIPSet.txt&nbsp;&nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # List of currently blocked IP&#8217;s coupled with the time when they were blocked.</li>
<li>Run <strong>/usr/bin/shared/imr.sh &#8211;server start</strong> to start the server:<br />
    <strong><em># /usr/bin/shared/imr.sh &#8211;server start<br />
    #</em></strong></li>
<li>Run <strong>/usr/bin/shared/imr.sh &#8211;server status</strong> to check that the server is running.<br />
    <strong><em># /usr/bin/shared/imr.sh &#8211;server status<br />
    Tue Feb 3 13:56:42 EST 2009 Status of service on port 11235 is:<br />
    Tue Feb 3 13:56:42 EST 2009 <span style="color: rgb(51, 153, 102);">ONLINE</span> and listening<br />
    #</em></strong></li>
<li>To stop the server at a later date, issue <strong>/usr/bin/shared/imr.sh &#8211;server start</strong></li>
<li>Add the text in green below to the corresponding ModSecurity rule and file below:<br />
    /etc/httpd/modsecurity.d/modsecurity_crs_21_protocol_anomalies.conf<br />
    .<br />
    .<br />
    # Check that the host header is not an IP address<br />
    #<br />
    SecRule REQUEST_HEADERS:Host &quot;^[\d\.]+$&quot; &quot;phase:2,t:none,deny,log,auditlog,status:400,<span style="color: rgb(51, 153, 102);"><strong>exec:/usr/bin/shared/imr.sh</strong></span>,msg:&#8217;Host header is a numeric IP address&#8217;, severity:&#8217;2&#8242;,id:&#8217;960017&#8242;,tag:&#8217;PROTOCOL_VIOLATION/IP_HOST&#8217;&quot;<br />
    .<br />
    .</li>
<li>Optionally create your own rule inside this file or within your own file (Click links on below mind map mockup for an explanation of what they do in the rule):<br />
    # <strong>cat /etc/httpd/modsecurity.d/modsecurity_localrules.conf</strong><br />
    # Drop your local rules in here.</p>
<p>    <a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N108ED">SecRule</a>&nbsp; <a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N110D9">REQUEST_URI_RAW</a> &quot;(/mail/bin/msgimport|/nonexistenshit|/bin/msgimport|/rc/bin/msgimport|/webmail/bin/msgimport|w00tw00t.at.ISC.SANS.DFind|proxytest.pr.funpic.de)&quot; &quot; <a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#processing-phases">phase</a>:2,<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#transformation-functions">t</a>:<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N1146A">none</a>,t:<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N11458">lowercase</a>,t:<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N11473">normalisePath</a>,<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N116E3">deny</a>,<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N117CA">log</a>,<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N11AA4">status</a>:404,<span style="color: rgb(51, 153, 102);"><strong><a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N11729">exec</a>:/usr/bin/shared/imr.sh,msg</strong></span>:&#8217;RoundCube Webmail scan from %{<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N10F56">REMOTE_ADDR</a>}.&nbsp; Blocked.&nbsp; More on RoundCube Webmail found at http://roundcube.net.&nbsp; See site for possible further news on this.&#8217;,<a rel="nofollow" href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/modsecurity2-apache-reference.html#N1176C">id</a>:99999&quot;<br />
    <strong>#</strong></li>
<li>Add the below lines to have the server started at each boot up time:<br />
    <strong># vi /etc/rc.d/rc.local</strong><br />
    .<br />
    .<br />
    .<br />
    <strong>/usr/bin/shared/imr.sh &#8211;server start<br />
    /usr/bin/shared/imr.sh &#8211;server status<br />
    </strong></li>
<li>You&#8217;re done!</li>
</ul>
<p><strong>WORKING SAMPLE</strong></p>
<p>Here is a few samples of how the script will work.&nbsp; Recently, this attack occurred from 210.245.123.177 and here is what the script did:</p>
<p style="margin-left: 40px;"><strong># cat /var/log/httpd/access_log|grep 210.245.123.177</strong><br />
210.245.123.177 - - [29/Jan/2009:14:19:04 -0500] &quot;GET /nonexistenshit HTTP/1.1&quot; 400 304 &quot;-&quot; &quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;<br />
<strong>#</strong></p>
<p>The subseuent lines following the text <strong>/nonexistenshit</strong> no longer appear as we saw them above, which is a good sign.&nbsp; Corresponding to the above, you should see a line similar to:</p>
<p style="margin-left: 40px;">Thu Jan 29 14:19:05 EST 2009 imr.sh : (Blocking the IP) : Blocking IP:|210.245.123.177|</p>
<p>
To test the rules, you can issue http://localhost/nonexistenshit and see if the rules, and script pick up the test intrusion:</p>
<p style="margin-left: 40px;"><strong>Tue Feb 3 14:44:29 EST 2009 imr.sh: Invoked from ModSecurity. The following IP (127.0.0.1), if not local type, will be blocked.<br />
Tue Feb 3 14:44:29 EST 2009 NOTE: Either the IP to block is local, or you are within modsecurity where iptables is inaccessible. No actions performed</strong></p>
<p><span style="font-size: large;"><strong>CONCLUSION</strong></span></p>
<p>I suppose there may be some sort of means available now to do this with another app however looking for some sort of functionality in the zoo of software packages available today seamed more daunting to me then simply writing one.&nbsp; Best of all this gives me some sort of integrated option for keeping my workstation secure without having to cost me much of my time.&nbsp; Just like doing things manually with a GUI firewall, I&nbsp;prefer to script this sort of stuff to decide on a best sort of action to take under certain conditions, keep my box secure and free my time for other stuff.</p>
<p>Hope you enjoy.&nbsp; Don&#8217;t forget to leave a comment.</p>
<p>HF! Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2009/01/08/securing-your-website-apache-httpd-port-80-from-malicious-scans/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fedora 10+: UI video / graphics problems upon reboot to Fedora 10+.  Graphics are unreadable.</title>
		<link>http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-ui-video-graphics-problems-upon-reboot-to-fedora-10-graphics-are-unreadable/</link>
		<comments>http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-ui-video-graphics-problems-upon-reboot-to-fedora-10-graphics-are-unreadable/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 03:27:15 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=644</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-ui-video-graphics-problems-upon-reboot-to-fedora-10-graphics-are-unreadable/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Fedora 10+: UI video / graphics problems upon reboot to Fedora 10+.  Graphics are unreadable.';
digg_bodytext = 'PROBLEMOne of the first things that went wrong after upgrading to Fedora 10 was the UI screen was unreadable / undescernable.&nbsp; The screen was entirely messed up and though the keyboard worked fine, it wasn&#8217;t easy to discern the UI windows from...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
PROBLEM
One of the first things that went wrong after upgrading to Fedora 10 was the UI screen was unreadable / undescernable.&#160; The screen was entirely messed up and though the keyboard worked fine, it wasn&#8217;t easy to discern the UI windows from the shades of red, yellow, blue, green etc grany dots that showed up.&#160; [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-ui-video-graphics-problems-upon-reboot-to-fedora-10-graphics-are-unreadable/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Fedora 10+: UI video / graphics problems upon reboot to Fedora 10+.  Graphics are unreadable.';
digg_bodytext = 'PROBLEMOne of the first things that went wrong after upgrading to Fedora 10 was the UI screen was unreadable / undescernable.&nbsp; The screen was entirely messed up and though the keyboard worked fine, it wasn&#8217;t easy to discern the UI windows from...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p><strong>PROBLEM</strong></p>
<p>One of the first things that went wrong after upgrading to Fedora 10 was the UI screen was unreadable / undescernable.&nbsp; The screen was entirely messed up and though the keyboard worked fine, it wasn&#8217;t easy to discern the UI windows from the shades of red, yellow, blue, green etc grany dots that showed up.&nbsp; In my case, I&#8217;ve solved this by lowering the video resolution in the below manner.&nbsp; I have the <strong>ATI Radeo 9600</strong> card.</p>
<p><strong>SOLUTION</strong></p>
<p><span id="more-644"></span>Here is how to change the video resolution on your system.</p>
<ol>
<li>At the UI login screen hit <strong>CTRL-ALT-F2</strong> to switch to a ready terminal login screen.</li>
<li>cd /etc/X11/</li>
<li>vi xorg.conf</li>
<li>I had the <strong>Modes</strong> item below like this with highest resolution listed as 1280&#215;1024:<br />
    <strong>Modes&nbsp;&nbsp;&nbsp; &quot;1280&#215;1024&quot; &quot;1280&#215;960&quot; &quot;1152&#215;864&quot; &quot;1024&#215;768&quot; &quot;832&#215;624&quot; &quot;800&#215;600&quot; &quot;720&#215;400&quot; &quot;640&#215;480&quot;</strong></li>
<li>Change above to the below to lower the maximum resolution allowed:<br />
    <strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Modes&nbsp;&nbsp;&nbsp; &quot;1152&#215;864&quot; &quot;1024&#215;768&quot; &quot;832&#215;624&quot; &quot;800&#215;600&quot; &quot;720&#215;400&quot; &quot;640&#215;480&quot;<br />
    #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Modes&nbsp;&nbsp;&nbsp; &quot;1280&#215;1024&quot; &quot;1280&#215;960&quot; &quot;1152&#215;864&quot; &quot;1024&#215;768&quot; &quot;832&#215;624&quot; &quot;800&#215;600&quot; &quot;720&#215;400&quot; &quot;640&#215;480&quot;</strong></li>
<li>Type <strong>:wq</strong> &lt;enter&gt; to save the file.</li>
<li>Type <strong>$ </strong><strong>init 1</strong> at the console to go to single user mode.&nbsp;</li>
<li>Once in single user mode (verify using <strong>runlevel</strong>) type <strong>$ init 5</strong>.</li>
<li>Your screen should now be fixed for you.</li>
</ol>
<p>There after you could try to use these <a href="http://www.microdevsys.com/WordPress/?p=46">Graphics and Video: Changing the graphics/video resolution with xrandr</a> instructions here to test the various resolutions <strong>Fedora 10+</strong> can now handle once you are in the <strong>UI</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-ui-video-graphics-problems-upon-reboot-to-fedora-10-graphics-are-unreadable/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fedora 10: unable to authenticate user and reenabling the root login access.</title>
		<link>http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-unable-to-authenticate-user-and-reenabling-the-root-login-access/</link>
		<comments>http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-unable-to-authenticate-user-and-reenabling-the-root-login-access/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 03:01:13 +0000</pubDate>
		<dc:creator>Tom Kacperski</dc:creator>
		
		<category><![CDATA[NIX Posts]]></category>

		<guid isPermaLink="false">http://www.microdevsys.com/WordPress/?p=634</guid>
		<description><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-unable-to-authenticate-user-and-reenabling-the-root-login-access/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Fedora 10: unable to authenticate user and reenabling the root login access.';
digg_bodytext = 'PROBLEMIn Fedora 10, the root login was disabled into the GUI, giving you a unable to authenticate user message.&nbsp; You may have noticed that you got a warning about this in Fedora 9 but it wasn&#8217;t yet disabled then.&nbsp; Not so in Fedora 10...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
PROBLEM
In Fedora 10, the root login was disabled into the GUI, giving you a unable to authenticate user message.&#160; You may have noticed that you got a warning about this in Fedora 9 but it wasn&#8217;t yet disabled then.&#160; Not so in Fedora 10 so this might be something you would want to do prior [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;"><script type="text/javascript">
<!--
digg_url = 'http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-unable-to-authenticate-user-and-reenabling-the-root-login-access/';
digg_bgcolor = '#F7F7F7';
digg_skin = '';
digg_window = '';
digg_title = 'Fedora 10: unable to authenticate user and reenabling the root login access.';
digg_bodytext = 'PROBLEMIn Fedora 10, the root login was disabled into the GUI, giving you a unable to authenticate user message.&nbsp; You may have noticed that you got a warning about this in Fedora 9 but it wasn&#8217;t yet disabled then.&nbsp; Not so in Fedora 10...';
digg_media = 'news';
digg_topic = '';
//-->
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p><strong>PROBLEM</strong></p>
<p>In <strong>Fedora 10</strong>, the root login was disabled into the GUI, giving you a <strong>unable to authenticate user</strong> message.&nbsp; You may have noticed that you got a warning about this in <strong>Fedora 9</strong> but it wasn&#8217;t yet disabled then.&nbsp; Not so in <strong>Fedora 10</strong> so this might be something you would want to do prior to rebooting after <a href="http://www.microdevsys.com/WordPress/?p=529">upgrading to Fedora 10</a>.&nbsp; I&#8217;m not all too surprised this eventually happened.&nbsp; It&#8217;s not uncommon to hear of this whereever you happen to ask.&nbsp; So essentially the pot finally boiled over and we have no root login.&nbsp; This effects Gnome, KDE and the whole lot.</p>
<p>Essentially the problem relies in the GDM file.</p>
<p><strong>SOLUTION</strong></p>
<p><span id="more-634"></span>Anyway, here is how to enable or reenable it should you run into the same problem.</p>
<ol>
<li>At the UI login screen hit <strong>CTRL-ALT-F2</strong> to switch to a ready terminal login screen.</li>
<li>Login as the <strong>root</strong> user ID.</li>
<li>cd /etc/pam.d/</li>
<li>cp -aR gdm gdm.old</li>
<li>vi /etc/pam.d/gdm</li>
<li>Comment out the line like this (add item in <span style="color: rgb(51, 153, 102);">green</span>): <br />
    <span style="color: rgb(51, 153, 102);"><strong>#</strong></span> auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp; pam_succeed_if.so user != root quiet</li>
<li>Type <strong>:wq</strong> to write the file out and quit.</li>
<li>Type <strong>CTRL-ALT-F7</strong> to return to the login session.</li>
<li>Try to login as <strong>root</strong> again.</li>
</ol>
<p>Of course there could be other issues.&nbsp; Possibly you may need to reset your password and if you are trying to edit the /etc/pam.d/gdm file from within the UI as an unprevilidged user, then you&#8217;ll also need to <strong>su -</strong> or <strong>sudo</strong> as root.&nbsp; If the above doesn&#8217;t work, you&#8217;ll need to restart the system and login using the <strong>root</strong> account in single user mode.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.microdevsys.com/WordPress/2008/12/05/fedora-10-unable-to-authenticate-user-and-reenabling-the-root-login-access/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
