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

<channel>
	<title>Ars Longa, Vita Brevis &#187; спам</title>
	<atom:link href="http://blog.sjinks.pro/tag/spam/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.pro</link>
	<description>Quod scripsi, scripsi</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:56:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Обход плагина WP Hashcash</title>
		<link>http://blog.sjinks.pro/security/955-bypass-wp-hashcash/</link>
		<comments>http://blog.sjinks.pro/security/955-bypass-wp-hashcash/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 05:43:11 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=955</guid>
		<description><![CDATA[Не так страшен JavaScript, как его малюют… WP Hashcash — очередной плагин WordPress для борьбы со спамом. Принцип работы основывается на том, что спам-боты не умеют исполнять JavaScript. Идея в том, что если пользователь открыл сайт из браузера, браузер выполнит некоторый хитрый код JavaScript, и реузльтат работы этого скрипта будет передан назад на сервер в качестве доказательства [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/955-bypass-wp-hashcash/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Не так страшен <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a>, как его малюют…</em></h2>
<p><a href="http://wordpress-plugins.feifei.us/hashcash/">WP Hashcash</a> — очередной <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> для борьбы со спамом. Принцип работы основывается на том, что <a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">спам</a>-боты не умеют исполнять JavaScript. Идея в том, что если пользователь открыл сайт из браузера, браузер выполнит некоторый хитрый код JavaScript, и реузльтат работы этого скрипта будет передан назад на сервер в качестве доказательства «человечности» комментатора.<span id="more-955"></span></p>
<p>Недостаток этого подхода заключается в том, что используемый JavaScript является довольно-таки простым; как следствие, его можно «понять» даже из <a href="http://blog.sjinks.pro/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a>-скрипта.</p>
<p>Пример кода JavaScript, генерируемого плагином:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9557">
        <div class="code javascript" id="p955code7">
<span class="kw2">function</span> wphc<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> wphc_data <span class="sy0">=</span> <span class="br0">&#91;</span>1850500665<span class="sy0">,</span>1666021931<span class="sy0">,</span>1699898495<span class="sy0">,</span>1648446524<span class="sy0">,</span>2035770162<span class="sy0">,</span>1980447546<span class="sy0">,</span>2018932269<span class="sy0">,</span>956464429<span class="sy0">,</span>890644332<span class="sy0">,</span>956447103<span class="sy0">,</span>890644332<span class="sy0">,</span>973224063<span class="sy0">,</span>890579818<span class="sy0">,</span>761213796<span class="sy0">,</span>1850368808<span class="sy0">,</span>1615687680<span class="sy0">,</span>1750492719<span class="sy0">,</span>756628087<span class="br0">&#93;</span><span class="sy0">;</span> <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">&lt;</span>wphc_data.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wphc_data<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">=</span>wphc_data<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">^</span><span class="nu0">220336991</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> a <span class="sy0">=</span> <span class="kw2">new</span> Array<span class="br0">&#40;</span>wphc_data.<span class="me1">length</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">&lt;</span>wphc_data.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> String.<span class="me1">fromCharCode</span><span class="br0">&#40;</span>wphc_data<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">&amp;</span> 0xFF<span class="sy0">,</span> wphc_data<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">&gt;&gt;&gt;</span>8 <span class="sy0">&amp;</span> 0xFF<span class="sy0">,</span> wphc_data<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">&gt;&gt;&gt;</span>16 <span class="sy0">&amp;</span> 0xFF<span class="sy0">,</span> wphc_data<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">&gt;&gt;&gt;</span>24 <span class="sy0">&amp;</span> 0xFF<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">eval</span><span class="br0">&#40;</span>a.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">''</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Такой JavaScript весьма похож на PHP <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Как следствие, идея обхода плагина заключается в том, чтобы преобразовать JavaScript в PHP и выполнить получившийся PHP-код.</p>
<p>Итак:</p>
<ol>
<li>В PHP нет ключевого слова <code>var</code> (строго говоря, оно там есть, только имеет другое назначение).</li>
<li>В PHP несколько другой синтаксис объявления массива</li>
<li>Идентификаторы в PHP начинаются с доллара</li>
<li>Операция сдвига выглядит как <code>&gt;&gt;</code>, а не <code>&gt;&gt;&gt;</code>.</li>
<li>В PHP нет классов Array, String, но никто не мешает их написать <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ol>
<p>Наша задача состоит в преобразовании кода, приведённого выше, в нечто подобное:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9558">
        <div class="code php" id="p955code8">
<span class="kw2">function</span> wphc<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$wphc_data</span> <span class="sy0">=</span> <span class="kw1">array</span><span class="br0">&#40;</span>1850500665<span class="sy0">,</span>1666021931<span class="sy0">,</span>1699898495<span class="sy0">,</span>1648446524<span class="sy0">,</span>2035770162<span class="sy0">,</span>1980447546<span class="sy0">,</span>2018932269<span class="sy0">,</span>956464429<span class="sy0">,</span>890644332<span class="sy0">,</span>956447103<span class="sy0">,</span>890644332<span class="sy0">,</span>973224063<span class="sy0">,</span>890579818<span class="sy0">,</span>761213796<span class="sy0">,</span>1850368808<span class="sy0">,</span>1615687680<span class="sy0">,</span>1750492719<span class="sy0">,</span>756628087<span class="br0">&#41;</span><span class="sy0">;</span> <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">&lt;</span>count<span class="br0">&#40;</span><span class="re0">$wphc_data</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$wphc_data</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">=</span><span class="re0">$wphc_data</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span>^<span class="nu0">220336991</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$a</span> <span class="sy0">=</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">&lt;</span>count<span class="br0">&#40;</span><span class="re0">$wphc_data</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$a</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span> <span class="sy0">=</span> fromCharCode<span class="br0">&#40;</span><span class="re0">$wphc_data</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span> <span class="sy0">&amp;</span> 0xFF<span class="sy0">,</span> <span class="re0">$wphc_data</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">&gt;&gt;</span>8 <span class="sy0">&amp;</span> 0xFF<span class="sy0">,</span> <span class="re0">$wphc_data</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">&gt;&gt;</span>16 <span class="sy0">&amp;</span> 0xFF<span class="sy0">,</span> <span class="re0">$wphc_data</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">&gt;&gt;</span>24 <span class="sy0">&amp;</span> 0xFF<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><span class="kw3">join</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="sy0">,</span> <span class="re0">$a</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Это достигается таким набором правил <code>str_replace()</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9559">
        <div class="code php" id="p955code9">
<span class="re0">$x</span> <span class="sy0">=</span> <span class="kw1">array</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; <span class="st_h">'wphc_data'</span> &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'$wphc_data'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'var $'</span> &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'$'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'var '</span> &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">'$'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'];'</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">');'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'= ['</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'= array('</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'new Array($wphc_data.length)'</span> <span class="sy0">=&gt;</span> <span class="st_h">'array()'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'$wphc_data.length'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'count($wphc_data)'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">' i&lt;'</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">' $i&lt;'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'[i]'</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'[$i]'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'i++'</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'$i++'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'&gt;&gt;&gt;'</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'&gt;&gt;'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'a[$i] ='</span> &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'$a[$i] ='</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'String.'</span> &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">''</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st_h">'eval'</span> &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">''</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="st0">&quot;a.join('')&quot;</span> <span class="sy0">=&gt;</span> <span class="st_h">'join(&quot;&quot;, $a)'</span><span class="sy0">,</span><br />
<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="re0">$s</span> <span class="sy0">=</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; <span class="kw3">array_keys</span><span class="br0">&#40;</span><span class="re0">$x</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="kw3">array_values</span><span class="br0">&#40;</span><span class="re0">$x</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="re0">$s</span><br />
<span class="br0">&#41;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>При желании правила можно попытаться оптимизировать, но мне было лень — скрипт ломался на коленке за 10 минут.</p>
<p>Реализация функции <code>fromCharCode</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p95510">
        <div class="code php" id="p955code10">
<span class="kw2">function</span> fromCharCode<span class="br0">&#40;</span><span class="re0">$a</span><span class="sy0">,</span> <span class="re0">$b</span><span class="sy0">,</span> <span class="re0">$c</span><span class="sy0">,</span> <span class="re0">$d</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">chr</span><span class="br0">&#40;</span><span class="re0">$a</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="kw3">chr</span><span class="br0">&#40;</span><span class="re0">$b</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="kw3">chr</span><span class="br0">&#40;</span><span class="re0">$c</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="kw3">chr</span><span class="br0">&#40;</span><span class="re0">$d</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>После замены результат нужно вычислить при помощи <code>eval()</code>. После чего получим такой результат:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p95511">
        <div class="code javascript" id="p955code11">
<span class="kw2">function</span> wphc_compute<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="kw1">return</span> 43448 <span class="sy0">*</span> 43448 <span class="sy0">+</span> <span class="nu0">75878</span><span class="sy0">;</span> <span class="br0">&#125;</span> wphc_compute<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>Как можно заметить, этот код является одновременно и PHP-кодом, и JavaScript-кодом.</p>
<p>Следующий шаг —</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p95512">
        <div class="code php" id="p955code12">
<span class="re0">$s</span> <span class="sy0">=</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st_h">'wphc_compute();'</span><span class="sy0">,</span> <span class="st_h">''</span><span class="sy0">,</span> <span class="re0">$s</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">eval</span><span class="br0">&#40;</span><span class="re0">$s</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">echo</span> wphc_compute<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>Результатом выполнения будет число 1887804582.</p>
<p>Как видим, для обхода такой простой защиты не нужен даже интерпретатор JavaScript <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/955-bypass-wp-hashcash/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/955-bypass-wp-hashcash/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ставим спам в комментариях на службу людям</title>
		<link>http://blog.sjinks.pro/wordpress/931-comment-spam-to-serve-humanity/</link>
		<comments>http://blog.sjinks.pro/wordpress/931-comment-spam-to-serve-humanity/#comments</comments>
		<pubDate>Sat, 06 Aug 2011 04:48:20 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Spamhaus]]></category>
		<category><![CDATA[Stop Forum Spam]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=931</guid>
		<description><![CDATA[Автоматическое отправление автоматического спама на Stop Forum Spam Я давно получаю по несколько тысяч спам-комментариев в день (не то, что мне он мешает — система его отсеивает полностью автоматически) и, как следствие, давно думаю о том, как заставить этот спам служить людям. Начиналось всё созданием чёрных списков типа DNSBL (сюда попадали IP-адреса спамеров) и URIBL (а сюда — рекламируемые [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/931-comment-spam-to-serve-humanity/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Автоматическое отправление автоматического спама на <a href="http://blog.sjinks.pro/tag/stop-forum-spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Stop Forum Spam">Stop Forum Spam</a></em></h2>
<p>Я давно получаю по несколько тысяч <a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">спам</a>-комментариев в день (не то, что мне он мешает — система его отсеивает полностью автоматически) и, как следствие, давно думаю о том, как заставить этот <a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">спам</a> служить людям.</p>
<p>Начиналось всё созданием чёрных списков типа <a href="http://blog.sjinks.pro/tag/dnsbl/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  DNSBL">DNSBL</a> (сюда попадали IP-адреса спамеров) и URIBL (а сюда — рекламируемые домены), но на раскрутку очередного чёрного списка (а также на его поддержание) банально не было ни сил, ни времени.</p>
<p>Закончилось всё тем, что я прекратил заниматься велосипедостроительством, зарегистрировался на <a href="http://www.stopforumspam.com/">Stop Forum Spam</a> и теперь отсылаю весь полученный спам туда. Хотя я не во всём согласен с SFS, положительным моментом является то, что списки спамеров мониторятся <a href="http://blog.sjinks.pro/tag/spamhaus/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Spamhaus">Spamhaus</a> (<a href="http://www.spamhaus.org/sbl/sbl.lasso?query=SBL115165">пример 1</a>, <a href="http://www.spamhaus.org/sbl/sbl.lasso?query=SBL115164">пример 2</a>). Хотя Spamhaus о себе тоже много думает (блокировать почту на основании того, что с данного IP-адреса идёт форумный спам — <a href="http://blogspambl.com/faq.html#idiot">бред</a>), тем не менее, у Spamhaus больше шансов прикрыть спамера, чем у простого блоггера.</p>
<p>На этом лирическое отступление закончено, далее идёт рассказ о том, как автоматически сообщать об автоматическом спаме в Stop Forum Spam, ибо чем больше отчетов они получат, тем быстрее спамер будет остановлен.<span id="more-931"></span></p>
<p>Идея, на которой строится реализация метода, абсолютно <a href="http://iskariot.ru/development/vs-auto-spam/">не нова</a>, но эффективна.</p>
<p><strong>Шаг первый.</strong> Регистрация на SFS и получение <a href="http://www.stopforumspam.com/signup">API-ключа</a>.</p>
<p><strong>Шаг второй.</strong> Создаём в каталоге с файлами <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> такой простенький файл (например, <code>wp-comments-post2.<a href="http://blog.sjinks.pro/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">php</a></code>):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p93117">
        <div class="code php" id="p931code17">
<span class="kw1">require_once</span> <span class="kw3">dirname</span><span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'wp-comments-post2.php'</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p><strong>Шаг третий.</strong> Добавляем в <code>comments.php</code> используемой темы липовую форму комментариев. Например, такую:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p93118">
        <div class="code xhtml" id="p931code18">
<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;display: none; left: -10000px; top: -10000px;&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span>&gt;&lt;<span class="kw2">strong</span>&gt;</span>Пожалуйста, не используйте данную форму комментирования — она исключительно для спамеров.<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">strong</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">form</span> <span class="kw3">method</span><span class="sy0">=</span><span class="st0">&quot;post&quot;</span> <span class="kw3">action</span><span class="sy0">=</span><span class="st0">&quot;/wp-comments-post.php&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;comment-form-author&quot;</span>&gt;&lt;<span class="kw2">label</span>&gt;</span>Имя<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span> <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">size</span><span class="sy0">=</span><span class="st0">&quot;30&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;author&quot;</span><span class="sy0">/</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;comment-form-email&quot;</span>&gt;&lt;<span class="kw2">label</span>&gt;</span>E-mail<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span> <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">size</span><span class="sy0">=</span><span class="st0">&quot;30&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;email&quot;</span><span class="sy0">/</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;comment-form-url&quot;</span>&gt;&lt;<span class="kw2">label</span>&gt;</span>Сайт<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">size</span><span class="sy0">=</span><span class="st0">&quot;30&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;url&quot;</span><span class="sy0">/</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;comment-form-comment&quot;</span>&gt;&lt;<span class="kw2">label</span>&gt;</span>Комментарий<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;&lt;<span class="kw2">textarea</span> <span class="kw3">rows</span><span class="sy0">=</span><span class="st0">&quot;8&quot;</span> <span class="kw3">cols</span><span class="sy0">=</span><span class="st0">&quot;45&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;comment&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">textarea</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;form-submit&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;Отправить комментарий&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span><span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;hidden&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;comment_post_ID&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;&lt;?php echo get_the_ID(); ?&gt;</span></span>&quot; name=&quot;comment_post_ID&quot;/&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;hidden&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;0&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;comment_parent&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;comment_parent&quot;</span><span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">form</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
        </div>
    </div>
</div>

<p><strong>Шаг четвёртый.</strong> Меняем нормальную форму комментирования. Всё, что требуется — изменить action формы комментирования с <code>/wp-comments-post.php</code> на <code>/wp-comments-post2.php</code>.</p>
<p>Если для создания формы комментирования используется новомодная функция <code>comment_form()</code> изменить <code>action</code> можно так:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p93119">
        <div class="code php" id="p931code19">
<span class="kw2">&lt;?php</span> <br />
&nbsp; &nbsp; <span class="kw3">ob_start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; comment_form<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$s</span> <span class="sy0">=</span> <span class="kw3">ob_get_clean</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$s</span> <span class="sy0">=</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st_h">'/wp-comments-post.php'</span><span class="sy0">,</span> <span class="st_h">'/wp-comments-post2.php'</span><span class="sy0">,</span> <span class="re0">$s</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">echo</span> <span class="re0">$s</span><span class="sy0">;</span><br />
<span class="sy1">?&gt;</span>
        </div>
    </div>
</div>

<p><strong>Шаг пятый.</strong> Добавляем кусок кода в файл <code>functions.php</code> используемой темы:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p93120">
        <div class="code php" id="p931code20">
&nbsp; &nbsp; <span class="kw2">function</span> killallspam_pre_comment_approved<span class="br0">&#40;</span><span class="re0">$status</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw4">false</span> <span class="sy0">!==</span> <span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st_h">'REQUEST_URI'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="st_h">'/wp-comments-post.php'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">isset</span><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'comment'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'email'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'author'</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st_h">'REMOTE_ADDR'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$apikey</span> &nbsp;<span class="sy0">=</span> <span class="st_h">'API-ключ Stop Forum Spam'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$comment</span> <span class="sy0">=</span> <span class="kw3">stripslashes</span><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'comment'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ip</span> &nbsp; &nbsp; &nbsp;<span class="sy0">=</span> <span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st_h">'REMOTE_ADDR'</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$email</span> &nbsp; <span class="sy0">=</span> <span class="kw3">stripslashes</span><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'email'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$user</span> &nbsp; &nbsp;<span class="sy0">=</span> <span class="kw3">stripslashes</span><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'author'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$options</span> <span class="sy0">=</span> <span class="kw1">array</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CURLOPT_RETURNTRANSFER <span class="sy0">=&gt;</span> <span class="kw4">true</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CURLOPT_AUTOREFERER &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="kw4">true</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CURLOPT_URL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'http://www.stopforumspam.com/add.php'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CURLOPT_MAXREDIRS &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> 10<span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CURLOPT_FOLLOWLOCATION <span class="sy0">=&gt;</span> <span class="kw4">true</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CURLOPT_POST &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="kw4">true</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CURLOPT_POSTFIELDS &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">'username='</span> <span class="sy0">.</span> <span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="re0">$user</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'&amp;ip_addr='</span> <span class="sy0">.</span> <span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="re0">$ip</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'&amp;email='</span> <span class="sy0">.</span> <span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="re0">$email</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'&amp;api_key='</span> <span class="sy0">.</span> <span class="re0">$apikey</span> <span class="sy0">.</span> <span class="st_h">'&amp;evidence='</span> <span class="sy0">.</span> <span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="re0">$comment</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ch</span> <span class="sy0">=</span> <span class="kw3">curl_init</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">curl_setopt_array</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> <span class="re0">$options</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">curl_exec</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">curl_close</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st_h">'spam'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$status</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">function_exists</span><span class="br0">&#40;</span><span class="st_h">'add_filter'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_filter<span class="br0">&#40;</span><span class="st_h">'pre_comment_approved'</span><span class="sy0">,</span> <span class="st_h">'killallspam_pre_comment_approved'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Вместо <code>API-ключ Stop Forum Spam</code> подставляем свой API-ключ.</p>
<p>Вместо возни с cURL можно использовать API-функцию WordPress <code>wp_remote_post()</code>.</p>
<p><strong>Шаг шестой.</strong> Радуемся жизни <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/931-comment-spam-to-serve-humanity/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/931-comment-spam-to-serve-humanity/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Обнаружение ловушек Project Honey Pot</title>
		<link>http://blog.sjinks.pro/security/904-detect-project-honey-pot-honeypots/</link>
		<comments>http://blog.sjinks.pro/security/904-detect-project-honey-pot-honeypots/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 00:39:24 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[honeypot]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=904</guid>
		<description><![CDATA[Использование непродуманности реализации ловушек для их обнаружения Project Honey Pot — web-сервис, предоставляющий сеть ловушек (honeypots), встраиваемых в сайты, для сбора информации об IP-адресах, используемых для сбора адресов email (email harvesting) в целях рассылок спама, оставления спам-комментариев на форумах и блогах, проведения атак на сайты и прочей нежелательной активности. Начинание, безусловно, полезное, но реализация, к сожалению, подводит. Основная проблема [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/904-detect-project-honey-pot-honeypots/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Использование непродуманности реализации ловушек для их обнаружения</em></h2>
<p><a href="http://www.projecthoneypot.org/?rf=83830">Project Honey Pot</a> — web-сервис, предоставляющий сеть ловушек (honeypots), встраиваемых в сайты, для сбора информации об IP-адресах, используемых для сбора адресов email (email harvesting) в целях рассылок спама, оставления <a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">спам</a>-комментариев на форумах и блогах, проведения атак на сайты и прочей нежелательной активности.</p>
<p>Начинание, безусловно, полезное, но реализация, к сожалению, подводит.<span id="more-904"></span></p>
<p>Основная проблема Project Honey Pot состоит в том, что они не пытаются скрыть свои ловушки. Например, если известно примерное время попадания почтового сервера в их чёрный список, достаточно получить список доменов, на которые отправлялась почта и поискать их в Google. Так как спамеры очень часто используют заголовок письма вида <code>username@example.com, blah blah blah</code>, ловушка сразу становится очевидной:</p>
<p><a href="http://static.sjinks.info/wp-content/uploads/2011/03/sample-messages.png"><img src="http://static.sjinks.info/wp-content/uploads/2011/03/sample-messages.png" alt="Project Honey Pot — Example Messages" title="Project Honey Pot — Example Messages" width="339" height="196" class="alignnone size-full wp-image-905" /></a></p>
<p>Аналогично с самими ловушками, которые пользователи проекта расставляют на своих сайтах: реализация такова, что нехороший пользователь может легко подделать IP-адреса, подставляя других пользователей. Иными словами, добавить конкурента в чёрный список проще простого. Но это не интересно <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Гораздо интереснее было найти ловушки для спама (spamtraps). Метод, кстати, очень простой: устанавливается тысяча-другая ловушек на свой сайт с <a href="http://blog.sjinks.pro/administering/107-setting-up-wildcard-subdomains-in-apache/">общими поддоменами</a> и периодически просматривается. В результате мы получаем тысячу-другую адресов ловушек. Но особенность проекта такова, что Project Honey Pot получает от пользователя не конкретный email-адрес, а весь домен (в том плане, что пользователи жертвуют проекту MX-записи домена). В результате за день получается неплохой список доменов с ловушками. Дальше дело техники: анализируются MX-записи этих доменов, получаются их IP-адреса. В результате получится очень небольшой список (по понятным причинам я его приводить не буду) адресов серверов ловушек проекта плюс несколько мусорных записей.</p>
<p>Отличить почтовый сервер проекта очень легко:</p>
<ul>
<li>он поддерживает pipelining;</li>
<li>не выполняет никаких проверок хоста, с ним соединяющегося;</li>
<li>не выполняет никаких проверок отправителя (MAIL FROM);</li>
<li>не является открытым релеем, но согласен принять почту для любого из доменов, пожертвовавших свои MX-записи.</li>
</ul>
<p>Последняя особенность дискредитирует всю систему, ибо достаточно пары доменов для того, чтобы определить все адреса проекта.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/904-detect-project-honey-pot-honeypots/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/904-detect-project-honey-pot-honeypots/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Чёрный список IP блогоспамеров</title>
		<link>http://blog.sjinks.pro/uncategorized/850-blog-spamers-ip-blacklist/</link>
		<comments>http://blog.sjinks.pro/uncategorized/850-blog-spamers-ip-blacklist/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 19:53:16 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Всё подряд]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=850</guid>
		<description><![CDATA[Страна должна знать своих героев в лицо! По примеру Jeff Starr, которого я давно и с удовольствием читаю, я решил выложить список IP-адресов тех людей и ботов, которые были замечены в спаме в комментариях. Критерий отбора простой: создано несколько honey pot&#8217;ов специально для спамеров. Спамеры в них размещают свой спам, светят свой IP и рекламируемые [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/uncategorized/850-blog-spamers-ip-blacklist/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Страна должна знать своих героев в лицо!</em></h2>
<p><a href="http://perishablepress.com/press/2010/11/09/latest-blacklist-entries/">По примеру Jeff Starr</a>, которого я давно и с удовольствием читаю, я решил выложить список IP-адресов тех людей и ботов, которые были замечены в спаме в комментариях.</p>
<p>Критерий отбора простой: создано несколько honey pot&#8217;ов специально для спамеров. Спамеры в них размещают свой <a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">спам</a>, светят свой IP и рекламируемые сайты.<br />
IP проверяется по чёрным спискам: открытые прокси, известные спамеры, члены ботнетов и т.п. Если спамер найден в таком списке, он сразу добавляется в чёрный список. Аналогично с засвеченными адресами.</p>
<p>Буквально за сутки получился неплохой список.<span id="more-850"></span></p>
<p>IP-адреса спамеров:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p85023">
        <div class="code text" id="p850code23">
41.190.16.17<br />
41.208.14.4<br />
46.109.63.131<br />
46.118.0.137<br />
61.115.229.74<br />
61.145.121.124<br />
61.32.222.13<br />
71.252.64.51<br />
72.254.128.201<br />
72.73.25.190<br />
74.81.65.83<br />
77.121.0.28<br />
77.244.212.231<br />
77.245.113.128<br />
77.87.173.97<br />
77.87.32.102<br />
77.93.2.81<br />
78.138.171.164<br />
78.159.99.148<br />
78.37.199.222<br />
78.46.111.152<br />
79.142.66.55<br />
79.142.68.99<br />
80.240.220.20<br />
80.251.113.51<br />
80.251.113.52<br />
80.67.13.157<br />
80.67.13.196<br />
81.90.10.80<br />
81.90.9.102<br />
81.90.9.170<br />
82.137.200.6<br />
83.21.199.161<br />
83.21.222.157<br />
83.21.97.99<br />
83.237.242.196<br />
83.246.152.130<br />
83.9.124.249<br />
83.9.207.5<br />
83.9.210.105<br />
83.9.212.50<br />
83.9.237.80<br />
84.253.83.66<br />
87.118.100.70<br />
87.118.94.70<br />
87.207.64.195<br />
87.248.178.75<br />
89.149.244.89<br />
89.208.11.117<br />
89.208.32.87<br />
89.223.47.23<br />
89.254.208.205<br />
90.151.88.62<br />
91.121.18.12<br />
91.201.66.124<br />
91.201.66.204<br />
91.201.66.205<br />
91.201.66.28<br />
91.201.66.61<br />
91.210.106.105<br />
91.212.226.20<br />
91.214.45.107<br />
91.214.46.223<br />
91.214.97.91<br />
91.77.77.106<br />
92.241.164.105<br />
92.241.165.236<br />
92.241.168.206<br />
92.241.168.209<br />
92.241.169.175<br />
92.241.169.176<br />
93.116.183.14<br />
93.178.197.195<br />
93.80.15.151<br />
93.91.200.146<br />
94.136.160.108<br />
94.142.130.129<br />
94.142.130.194<br />
94.142.131.233<br />
94.142.133.185<br />
94.142.134.144<br />
94.142.134.213<br />
94.142.134.221<br />
94.159.162.182<br />
94.159.247.99<br />
94.179.150.186<br />
94.181.131.44<br />
94.23.192.21<br />
94.75.118.123<br />
94.75.247.93<br />
95.133.77.65<br />
95.134.108.195<br />
95.135.49.203<br />
95.139.152.188<br />
95.154.120.230<br />
95.168.183.233<br />
95.211.0.70<br />
95.211.127.16<br />
95.211.8.146<br />
95.211.9.167<br />
95.215.0.136<br />
95.215.0.200<br />
95.215.0.207<br />
95.215.36.99<br />
95.25.128.66<br />
95.31.16.116<br />
95.72.247.215<br />
109.106.136.119<br />
109.165.82.94<br />
109.184.179.114<br />
109.184.234.110<br />
109.196.184.8<br />
109.196.185.157<br />
109.230.217.208<br />
111.1.32.23<br />
111.160.68.26<br />
111.160.70.197<br />
111.160.70.199<br />
111.161.3.215<br />
111.161.3.231<br />
116.224.30.159<br />
118.122.85.216<br />
118.96.11.103<br />
119.70.40.102<br />
123.125.156.134<br />
123.125.156.206<br />
125.208.246.76<br />
173.203.78.165<br />
173.204.85.10<br />
173.234.54.189<br />
173.236.70.210<br />
173.244.212.36<br />
174.120.202.98<br />
178.187.136.230<br />
178.93.175.27<br />
180.149.49.114<br />
184.82.95.178<br />
187.49.175.148<br />
188.112.246.247<br />
188.114.42.253<br />
188.126.68.42<br />
188.17.113.189<br />
188.72.227.124<br />
188.72.227.92<br />
188.72.227.97<br />
188.92.74.40<br />
188.92.75.43<br />
189.4.114.137<br />
193.105.210.11<br />
193.105.210.174<br />
193.105.210.32<br />
193.106.136.33<br />
193.106.136.36<br />
193.106.136.62<br />
193.169.87.153<br />
194.146.197.6<br />
194.8.75.44<br />
195.159.93.143<br />
195.191.54.176<br />
195.200.193.156<br />
195.2.240.68<br />
195.2.240.70<br />
195.229.241.178<br />
201.20.18.165<br />
202.108.50.75<br />
205.213.195.70<br />
209.202.78.97<br />
210.13.77.66<br />
211.138.124.202<br />
212.138.113.15<br />
212.235.107.163<br />
212.48.214.126<br />
212.55.131.173<br />
212.95.32.221<br />
212.95.54.70<br />
213.0.89.10<br />
213.108.2.6<br />
213.138.93.238<br />
213.147.207.244<br />
213.5.128.158<br />
213.5.128.226<br />
213.5.128.236<br />
213.5.129.238<br />
213.5.132.9<br />
213.5.66.16<br />
213.5.67.185<br />
213.5.67.4<br />
213.5.69.179<br />
213.5.71.163<br />
216.108.231.238<br />
216.125.196.57<br />
220.235.88.68<br />
221.122.60.237<br />
221.194.132.229<br />
222.165.133.198
        </div>
    </div>
</div>

<p>Сайты, которыми спамили (переходить по ним <strong>строго не рекомендуется</strong>):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p85024">
        <div class="code text" id="p850code24">
.000site.ru<br />
.08vheim.tk<br />
.0uf4xpg.tk<br />
.1ucoo0k.tk<br />
.2h5qu4m.tk<br />
.6buqmdx.tk<br />
.800mgmotrinfou.beep.com<br />
.aaamor.com<br />
.adtan.com<br />
.a.janek.ru<br />
.abc-print.at.ua<br />
.allbestcasino.com<br />
.altermedicine.ru<br />
.amrales.co.cc<br />
.angelfire.com<br />
.anglersfishery.com<br />
.antalte.co.cc<br />
.aparadekto.com<br />
.arms.good-choise.com<br />
.art.4web.pl<br />
.art4web.pl<br />
.asuronre.somee.com<br />
.avandiamexicofou.beep.com<br />
.avandiavisionfou.beep.com<br />
.avermala.co.cc<br />
.avidvdplayer.com<br />
.avi.vg<br />
.bactrimsulfafou.beep.com<br />
.bank1.pl<br />
.bankiem.pl<br />
.benazeprildogfou.beep.com<br />
.bernarda.co.cc<br />
.bestcasinos.webs.com<br />
.best-uggs.ru<br />
.bitovaya.com.ua<br />
.boniva150mgfou.beep.com<br />
.bonivafosamaxfou.beep.com<br />
.box.net<br />
.caduetdosagefou.beep.com<br />
.caffeinedrugfou.beep.com<br />
.cafwardfast.co.cc<br />
.candrostai.co.cc<br />
.casinointernetblog.com<br />
.cfxoojesvghu.com<br />
.chez.com<br />
.cialiseuropefou.beep.com<br />
.ciufcia.pl<br />
.comingcelexafou.beep.com<br />
.contactemailform.com<br />
.coregcrcostfou.beep.com<br />
.coumadinstopfou.beep.com<br />
.countconthe.co.cc<br />
.csm.com<br />
.dealtoworld.com<br />
.derchefe.co.cc<br />
.diamand.com.nu<br />
.direct2b.com<br />
.dramles.co.cc<br />
.dvjr34v.tk<br />
.epfjyhveeysi.com<br />
.ermacala.co.cc<br />
.evon9ipy.narod.ru<br />
.ewofjocyjkot.com<br />
.fd3la.com<br />
.fin-on.ru<br />
.forum-kredytowe.pl<br />
.fraumila.co.cc<br />
.freecasinogames2010.webs.com<br />
.free-pc-soft.ru<br />
.frelma.co.cc<br />
.frenchbulldogpuppiesforsale.info<br />
.gedicdi.co.cc<br />
.genericwpthemes.com<br />
.grotogorod.ru<br />
.grumaka.co.cc<br />
.gsmlab.pl<br />
.habraro.co.cc<br />
.hiramteel.chez.com<br />
.ig0r7tg.tk<br />
.ikvintera.co.cc<br />
.instantempo-bhsf.it<br />
.insurance-costs.info<br />
.itobal.co.cc<br />
.itphodan.co.cc<br />
.kamagrapharma.com<br />
.kaspersky-key.ucoz.lv<br />
.kieszen.milledwa.pl<br />
.kinderlove.ru<br />
.kitinsurance.info<br />
.ki-tolko-tut.info<br />
.kitourpick.co.cc<br />
.kj-smotri.info<br />
.klikai-ajdbx.co.cc<br />
.klikai-caquf.co.cc<br />
.klikai-czkos.co.cc<br />
.klikai-diewo.co.cc<br />
.klikai-dyswz.co.cc<br />
.klikai-ecutr.co.cc<br />
.klikai-eqdvd.co.cc<br />
.klikai-ffath.co.cc<br />
.klikai-fmdlm.co.cc<br />
.klikai-gfdib.co.cc<br />
.klikai-hmaoz.co.cc<br />
.klikai-hzhgi.co.cc<br />
.klikai-imxej.co.cc<br />
.klikai-iolqb.co.cc<br />
.klikai-jbrdc.co.cc<br />
.klikai-jmcsw.co.cc<br />
.klikai-kijkr.co.cc<br />
.klikai-koxca.co.cc<br />
.klikai-ldsuo.co.cc<br />
.klikai-litxd.co.cc<br />
.klikai-louqk.co.cc<br />
.klikai-mndhz.co.cc<br />
.klikai-nowxj.co.cc<br />
.klikai-nukei.co.cc<br />
.klikai-osqjf.co.cc<br />
.klikai-ozqet.co.cc<br />
.klikai-pqifb.co.cc<br />
.klikai-pvayj.co.cc<br />
.klikai-qnald.co.cc<br />
.klikai-qzeol.co.cc<br />
.klikai-rgxpp.co.cc<br />
.klikai-rhkyt.co.cc<br />
.klikai-rkuoh.co.cc<br />
.klikai-rphab.co.cc<br />
.klikai-rwywy.co.cc<br />
.klikai-tgxwb.co.cc<br />
.klikai-tjwox.co.cc<br />
.klikai-ugdcp.co.cc<br />
.klikai-utvqd.co.cc<br />
.klikai-wcxsd.co.cc<br />
.klikai-whtjb.co.cc<br />
.klikai-wnqyo.co.cc<br />
.klikai-xkaay.co.cc<br />
.klikai-xkoqw.co.cc<br />
.klikai-xzcln.co.cc<br />
.klikai-yyipl.co.cc<br />
.krwi0jq.tk<br />
.kuznec-rostov.ru<br />
.larancegow4.narod.ru<br />
.levitrabuyonline.com<br />
.limtioci.co.cc<br />
.lipetsk-site.ru<br />
.look-insurance.info<br />
.lotidam.co.cc<br />
.luxonopulso.com.br<br />
.magazin-diski-shiny.ru<br />
.magazin-shiny-diski.ru<br />
.magrenar.com<br />
.malls72.ru<br />
.mamrela.co.cc<br />
.masterbrass.ru<br />
.maxim-axenov.polubomu.ru<br />
.maximumvip.com<br />
.metrocc.ru<br />
.mielno.pl<br />
.mietwagenmallorcaspanien.com<br />
.milmita.co.cc<br />
.monkredit.com<br />
.moskvadosug000.tk<br />
.moskvadosug001.tk<br />
.moskvadosug002.tk<br />
.moskvadosug003.tk<br />
.moskvadosug004.tk<br />
.moskvadosug005.tk<br />
.moskvadosug006.tk<br />
.moskvadosug007.tk<br />
.moskvadosug008.tk<br />
.moskvadosug009.tk<br />
.moskvadosug010.tk<br />
.moskvadosug011.tk<br />
.moskvadosug012.tk<br />
.moskvadosug013.tk<br />
.moskvadosug014.tk<br />
.moskvadosug015.tk<br />
.moskvadosug016.tk<br />
.moskvadosug017.tk<br />
.moskvadosug018.tk<br />
.moskvadosug019.tk<br />
.moskvadosug020.tk<br />
.moskvadosug021.tk<br />
.moskvadosug022.tk<br />
.moskvadosug023.tk<br />
.moskvadosug024.tk<br />
.moskvadosug025.tk<br />
.moskvadosug026.tk<br />
.moskvadosug027.tk<br />
.moskvadosug028.tk<br />
.moskvadosug029.tk<br />
.moskvadosug030.tk<br />
.moskvadosug031.tk<br />
.moskvadosug032.tk<br />
.moskvadosug033.tk<br />
.moskvadosug034.tk<br />
.moskvadosug035.tk<br />
.moskvadosug036.tk<br />
.moskvadosug037.tk<br />
.moskvadosug038.tk<br />
.moskvadosug039.tk<br />
.moskvadosug040.tk<br />
.moskvadosug041.tk<br />
.moskvadosug042.tk<br />
.moskvadosug043.tk<br />
.moskvadosug044.tk<br />
.moskvadosug045.tk<br />
.moskvadosug046.tk<br />
.moskvadosug047.tk<br />
.moskvadosug048.tk<br />
.moskvadosug049.tk<br />
.moskvadosug050.tk<br />
.moskvadosug051.tk<br />
.moskvadosug052.tk<br />
.moskvadosug053.tk<br />
.moskvadosug054.tk<br />
.moskvadosug055.tk<br />
.moskvadosug056.tk<br />
.moskvadosug057.tk<br />
.moskvadosug058.tk<br />
.moskvadosug059.tk<br />
.moskvadosug060.tk<br />
.moskvadosug061.tk<br />
.moskvadosug062.tk<br />
.moskvadosug063.tk<br />
.moskvadosug064.tk<br />
.moskvadosug065.tk<br />
.moskvadosug066.tk<br />
.moskvadosug067.tk<br />
.moskvadosug068.tk<br />
.moskvadosug069.tk<br />
.moskvadosug070.tk<br />
.moskvadosug071.tk<br />
.moskvadosug072.tk<br />
.moskvadosug073.tk<br />
.moskvadosug074.tk<br />
.moskvadosug075.tk<br />
.moskvadosug076.tk<br />
.moskvadosug077.tk<br />
.moskvadosug078.tk<br />
.moskvadosug079.tk<br />
.moskvadosug080.tk<br />
.moskvadosug081.tk<br />
.moskvadosug082.tk<br />
.moskvadosug083.tk<br />
.moskvadosug084.tk<br />
.moskvadosug085.tk<br />
.moskvadosug086.tk<br />
.moskvadosug087.tk<br />
.moskvadosug088.tk<br />
.moskvadosug089.tk<br />
.moskvadosug090.tk<br />
.moskvadosug091.tk<br />
.moskvadosug092.tk<br />
.moskvadosug093.tk<br />
.moskvadosug094.tk<br />
.moskvadosug095.tk<br />
.moskvadosug096.tk<br />
.moskvadosug097.tk<br />
.moskvadosug098.tk<br />
.moskvadosug099.tk<br />
.mouberozbvji.com<br />
.multiportalpi7ru.ourtoolbar.com<br />
.najgraj.pl<br />
.naturescoloncleanse.org<br />
.net.net<br />
.netvibes.com<br />
.newss.com.nu<br />
.nlzzshqbrour.com<br />
.nmoeszbqtfxr.com<br />
.npjuhussgzjc.com<br />
.nsp-biznes.com<br />
.nsyndwghcpxd.com<br />
.onlinecasino55.com<br />
.ontemre.co.cc<br />
.oponymozgowe.pl<br />
.oupvkxunkazp.com<br />
.p41yuhj.tk<br />
.pasupppeg.co.cc<br />
.pauleenw4.narod.ru<br />
.peekapaysite.com<br />
.personaltrainerexpert.com<br />
.petitelectromenager.eu<br />
.pickholstu.co.cc<br />
.piter-sauna.ru<br />
.pokerspielen1.com<br />
.pozycjonowanie.lagata.pl<br />
.pozycjonowanie-lodz.com<br />
.prosperschell.chez.com<br />
.qkqurrayimhb.com<br />
.qtbmshwunypi.com<br />
.rabota7979.narod.ru<br />
.rachatdecredit.net<br />
.radiologytechnicianguide.com<br />
.realcazinoz.com<br />
.reklamowy.biz<br />
.reliefinn.com<br />
.riocrapcing.co.cc<br />
.roskelleyv4a.narod.ru<br />
.rtvshop.waw.pl<br />
.russati.narod.ru<br />
.ryreyre.ehoh.net<br />
.salatina.co.cc<br />
.seewrwe.mitsu-hide.com<br />
.sembneci.co.cc<br />
.senior.pl<br />
.sex-paradise.ru<br />
.shampes.com<br />
.shebopcosmetics.com<br />
.shinway.ru<br />
.sirwetpx6.narod.ru<br />
.smashflash.com<br />
.sobatklikm.com<br />
.svinvestment.blogspot.com<br />
.szm.com<br />
.t35.com<br />
.t71n281.tk<br />
.tanie-nieruchomosci.eu<br />
.taobao.com<br />
.tat4dwn.com<br />
.text-jobs.ru<br />
.tggfhcedqmzw.com<br />
.the-dentist.com<br />
.thenewfoundry.com<br />
.tinnitusrecovery.com<br />
.tlumaczenia-kmk.pl<br />
.topim.aq.pl<br />
.ubrimala.co.cc<br />
.uilprkmxvlbx.com<br />
.umralsanda.co.cc<br />
.undora.co.cc<br />
.unknown.ru<br />
.unkovela.co.cc<br />
.urkovska.co.cc<br />
.utenta.co.cc<br />
.uticainsurance.info<br />
.uxtorla.co.cc<br />
.vemalde.co.cc<br />
.vocer.ru<br />
.voda-vor.ru<br />
.vplcoltztbwo.com<br />
.warlabrecords.com<br />
.weqqwrt.edo-jidai.com<br />
.winkingsize.com<br />
.yogzkovcfmdm.com<br />
.yourwincasino.com<br />
.ytrtwe.choitoippuku.com<br />
.zackspornlinks.com
        </div>
    </div>
</div>

<p>Список можно добавить в черный список комментариев <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a>.</p>
<p>Надеюсь, списки кому-нибудь помогут <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em>Опубликовано в рамках программы <strong>«<a href="http://blog.sjinks.pro/uncategorized/848-week-without-captcha/">Неделя без капчи</a>»</strong></em></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/uncategorized/850-blog-spamers-ip-blacklist/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/uncategorized/850-blog-spamers-ip-blacklist/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Неделя без капчи</title>
		<link>http://blog.sjinks.pro/uncategorized/848-week-without-captcha/</link>
		<comments>http://blog.sjinks.pro/uncategorized/848-week-without-captcha/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 23:30:57 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Всё подряд]]></category>
		<category><![CDATA[DNSBL]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=848</guid>
		<description><![CDATA[На блоге тестируется новый плагин для борьбы со спамом Волевым решением убрал капчу с блога. Я пришел к выводу, что капчи — это зло. На данный момент проводятся испытания нового плагина для борьбы со спамом. Идея, лежащая в основе плагина, не нова: я её озвучивал два с половиной года назад: использование DNSBL для борьбы со спамом. Тогда [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/uncategorized/848-week-without-captcha/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>На блоге тестируется новый <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> для борьбы со спамом</em></h2>
<p>Волевым решением убрал капчу с блога. Я пришел к выводу, что капчи — это зло. На данный момент проводятся испытания <a href="https://launchpad.net/wp-plugin-blcheck">нового плагина</a> для борьбы со спамом.<span id="more-848"></span></p>
<p>Идея, лежащая в основе плагина, не нова: я её озвучивал два с половиной года назад: <strong><a href="http://blog.sjinks.pro/php/123-using-dnsbl-to-fight-comment-spam/">использование DNSBL для борьбы со спамом</a></strong>.</p>
<p>Тогда у меня не дошли руки до написания полноценного плагина <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a>, да и желания особого не было. Сейчас же по работе пришлось столкнуться с <a href="http://blog.sjinks.pro/tag/dnsbl/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  DNSBL">DNSBL</a>, в результате чего родился плагин.</p>
<p>Плагин использует как DNSBL, так и URIBL. Первые используются для фильтра IP комментатора (есть хороший такой сервис <code>blogspambl.com</code>), вторые — для анализа ссылок внутри комментария.</p>
<p>Пока эффективность работы плагина составляет 100% (эх, где бы спамеров взять?)</p>
<p>Поживём — увидим.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/uncategorized/848-week-without-captcha/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/uncategorized/848-week-without-captcha/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Борьба со спамом на уровне фильтра пакетов</title>
		<link>http://blog.sjinks.pro/wordpress/598-fighting-spam-with-iptables/</link>
		<comments>http://blog.sjinks.pro/wordpress/598-fighting-spam-with-iptables/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 02:55:41 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=598</guid>
		<description><![CDATA[Жесткий, но эффективный метод борьбы со спамом в комментариях Два месяца назад я писал об одном очень жестком методе борьбы с последствиями установки плагина Time spent on blog. Теперь этот же самый метод применяем на спам-ботах, которые безуспешно пытаются оставить спам в комментариях. Отвлекусь от темы и отвечу на вопрос о необходимости применения жестких мер [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/598-fighting-spam-with-iptables/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Жесткий, но эффективный метод борьбы со спамом в комментариях</em></h2>
<p>Два месяца назад я писал об одном <strong><a href="http://blog.sjinks.pro/linux/559-fighting-time-spent-on-blog-plugin/">очень жестком методе борьбы с последствиями установки плагина Time spent on blog</a></strong>. Теперь этот же самый метод применяем на <a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">спам</a>-ботах, которые <a href="http://blog.sjinks.pro/wordpress/plugins/74-sick-and-tired-of-spamers-yet-another-captcha-for-wordpress/">безуспешно пытаются оставить спам в комментариях</a>.</p>
<p>Отвлекусь от темы и отвечу на вопрос о необходимости применения жестких мер против спамеров: во-первых, они генерируют много паразитного трафика (трафик не бесплатен), во-вторых, они генерируют лишнюю нагрузку на сервер, в-третьих, вода камень точит — любую капчу можно подобрать.<span id="more-598"></span></p>
<p>Предварительная настройка:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p59827">
        <div class="code bash" id="p598code27">
iptables <span class="re5">-N</span> spammers<br />
iptables <span class="re5">-A</span> INPUT <span class="re5">-j</span> spammers
        </div>
    </div>
</div>

<p>Фрагмент процесса, который запускается кроном (например, раз в час):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p59828">
        <div class="code bash" id="p598code28">
<span class="co0"># Лог доступа (IP идёт первым полем)</span><br />
<span class="re2">PATH</span>=<span class="sy0">/</span>var<span class="sy0">/</span>log<span class="sy0">/</span>access.log<br />
<br />
<span class="co0"># Получаем список забаненных спамеров</span><br />
<span class="re2">ips</span>=<span class="sy0">`</span>iptables <span class="re5">-S</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">&quot;^-A spammers &quot;</span> <span class="sy0">|</span> <span class="kw2">awk</span> <span class="st_h">'{ print $4 }'</span> <span class="sy0">|</span> <span class="kw2">sed</span> <span class="st_h">'s/\/32//g'</span><span class="sy0">`</span><br />
<br />
<span class="co0"># Ищем в логах спамеров (предполагается, что возвращается код ошибки 500,</span><br />
<span class="co0"># если капча введена неверно. Если капча была введена неверно больше 10 раз</span><br />
<span class="co0"># с одного и того же IP, то считаем, что это спамер.</span><br />
<span class="re2">spammers</span>=<span class="sy0">`</span>\<br />
&nbsp; &nbsp; <span class="kw2">grep</span> <span class="re5">-E</span> <span class="st_h">'&quot;POST /wp-comments-post.php HTTP/1.[01]&quot; 500'</span> <span class="re1">$PATH</span> <span class="sy0">|</span> \<br />
&nbsp; &nbsp; <span class="kw2">awk</span> <span class="st_h">'{ print $1 }'</span> <span class="sy0">|</span> \<br />
&nbsp; &nbsp; <span class="kw2">sort</span> <span class="sy0">|</span> \<br />
&nbsp; &nbsp; <span class="kw2">uniq</span> <span class="re5">-c</span> <span class="sy0">|</span> \<br />
&nbsp; &nbsp; <span class="kw2">awk</span> <span class="st_h">'{ if ($1 &gt; 10) { print $2; }}'</span> \<br />
<span class="sy0">`</span><br />
<br />
<span class="co0"># Ищем новые жертвы и добавляем их в список</span><br />
<span class="kw3">echo</span> <span class="st0">&quot;<span class="es2">$spammers</span>&quot;</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="re5">-v</span> <span class="re5">-F</span> <span class="st0">&quot;<span class="es2">$ips</span>&quot;</span> <span class="sy0">|</span> <span class="kw2">xargs</span> <span class="re5">-l</span> <span class="re5">-r</span> <span class="re5">-I</span> <span class="br0">&#123;</span><span class="br0">&#125;</span> iptables <span class="re5">-A</span> spammers <span class="re5">-s</span> <span class="st_h">'{}'</span> <span class="re5">-j</span> DROP
        </div>
    </div>
</div>

<p>В результате всё очень здорово: с учётом того, что на сервере крутятся несколько весьма посещаемых сайтов, нагрузка значительно падает. В связи с чем возникает вопрос: какова же доля паразитного трафика в Internet?</p>
<p>Недостатки метода: требуется root-доступ к серверу и хорошее знание <a href="http://blog.sjinks.pro/tag/linux/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Linux">Linux</a> (чтобы понять, что делает скрипт).<br />
Достоинства: спамеры идут лесом, уменьшается доля паразитного трафика и нагрузка на сервер.</p>
<p>iarq72g98h</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/598-fighting-spam-with-iptables/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/598-fighting-spam-with-iptables/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Спам в трэкбэках</title>
		<link>http://blog.sjinks.pro/wordpress/422-trackback-spam/</link>
		<comments>http://blog.sjinks.pro/wordpress/422-trackback-spam/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 07:36:45 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=422</guid>
		<description><![CDATA[Когда же спамеры вымрут? В последнее время я получаю спам в трэкбэках такого вида: &#60;strong&#62;tjztbtnq...&#60;/strong&#62; tjztbtnq... Спам приходит через TOR и содержит URL вида &#x0068;ttp://www.google.com/search?q=gjyyljra. В приницпе, бороться с ним легко (в плане автоматизации), но мне интересно: может быть, кто-нибудь сталкивался с другим видом спама в трэкбэках или пингбэках? Уж если автоматизировать процесс, так по [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/422-trackback-spam/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Когда же спамеры вымрут?</em></h2>
<p>В последнее время я получаю <a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">спам</a> в трэкбэках такого вида:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p42230">
        <div class="code html" id="p422code30">
<span class="sc2">&lt;<span class="kw2">strong</span>&gt;</span>tjztbtnq...<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">strong</span>&gt;</span><br />
<br />
tjztbtnq...
        </div>
    </div>
</div>

<p>Спам приходит через TOR и содержит URL вида <code>&#x0068;ttp://www.google.com/search?q=gjyyljra</code>.</p>
<p>В приницпе, бороться с ним легко (в плане автоматизации), но мне интересно: может быть, кто-нибудь сталкивался с другим видом спама в трэкбэках или пингбэках? Уж если автоматизировать процесс, так по полной! <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/422-trackback-spam/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/422-trackback-spam/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>SJ CAPTCHA Lite: невидимая защита от спама</title>
		<link>http://blog.sjinks.pro/wordpress/plugins/329-sjcaptcha-lite-invisible-spam-protection/</link>
		<comments>http://blog.sjinks.pro/wordpress/plugins/329-sjcaptcha-lite-invisible-spam-protection/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 07:14:33 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[SJ CAPTCHA]]></category>
		<category><![CDATA[SJ CAPTCHA Lite]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=329</guid>
		<description><![CDATA[Спаму не место на блоге! Собрав большую статистику по спам-ботам, я решил несколько видоизменить плагин SJ CAPTCHA — причем в сторону упрощения. Причин тому несколько: Проверка FCrDNS оказалась чрезмерно эффективной: да, она спасает от спам-ботов. Но, к сожалению, из-за большого радиуса кривизны рук некоторых провайдеров, которые не могут нормально PTR-записи прописать (или поставить им в соответствие A-записи), [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/329-sjcaptcha-lite-invisible-spam-protection/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Спаму не место на блоге!</em></h2>
<p>Собрав большую статистику по <a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">спам</a>-ботам, я решил несколько видоизменить <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> <strong><a href="http://blog.sjinks.pro/wordpress/plugins/74-sick-and-tired-of-spamers-yet-another-captcha-for-wordpress/">SJ CAPTCHA</a></strong> — причем в сторону упрощения.</p>
<p>Причин тому несколько:</p>
<ol>
<li><a href="http://blog.sjinks.pro/php/125-forward-confirmed-reverse-dns-zombie-wont-pass/"><strong>Проверка FCrDNS</strong></a> оказалась чрезмерно эффективной: да, она спасает от спам-ботов. Но, к сожалению, из-за большого радиуса кривизны рук некоторых провайдеров, которые не могут нормально PTR-записи прописать (или поставить им в соответствие A-записи), отсеиваются и вполне нормальные пользователи. Что обидно.</li>
<li>Проверка A и MX-записей доменов, указанных в email, оказалась не очень эффективной: большинство спамеров хотя и используют несуществующие адреса, но указанные домены в природе всё же существуют. К тому же, реализация данной проверки не работает в Windows (особенности <a href="http://blog.sjinks.pro/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a>)</li>
<li>Собственно <a href="http://blog.sjinks.pro/tag/captcha/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  captcha">CAPTCHA</a> оказалась очень эффективной — все «слишком умные» спамботы срезались именно на ней. К сожалению, при отключенных изображениях или использовании консольных браузеров она бесполезна. А если роль спам-бота играет человек, то она вообще никак помочь не сможет. Увы.</li>
</ol>
<p><span id="more-329"></span></p>
<p>Что получилось в итоге: остался переработанный <a href="http://pokrovskii.com/izyaschnoe-otseivanie-spama/">метод изящного отсеивания спама</a>. Его эффективность на данный момент я оцениваю в 99%: эту защиту обошла всего лишь парочка ботов. Я за ними очень пристально наблюдаю и надеюсь, что смогу найти простую управу и на них.</p>
<p>Бета-версию плагина <a href="http://blog.sjinks.pro/tag/sj-captcha-lite/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  SJ CAPTCHA Lite">SJ CAPTCHA Lite</a> для <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> на свой страх и риск можно скачать <a href="http://download.sjinks.pro/wordpress/sj-captcha-lite.zip" rel="nofollow">отсюда</a>.</p>
<p><strong>Плагин переехал жить <a href="http://blog.sjinks.pro/wordpress-plugins/sj-captcha-lite/">сюда</a>.</strong></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/329-sjcaptcha-lite-invisible-spam-protection/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/plugins/329-sjcaptcha-lite-invisible-spam-protection/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>DomainKeys и DKIM с Postfix в Ubuntu Linux</title>
		<link>http://blog.sjinks.pro/administering/324-domainkeys-and-dkim-with-postfix-on-ubuntu-linux/</link>
		<comments>http://blog.sjinks.pro/administering/324-domainkeys-and-dkim-with-postfix-on-ubuntu-linux/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 23:03:26 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[dk-filter]]></category>
		<category><![CDATA[DKIM]]></category>
		<category><![CDATA[dkim-filter]]></category>
		<category><![CDATA[DomainKeys]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[закрытый ключ]]></category>
		<category><![CDATA[открытый ключ]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=324</guid>
		<description><![CDATA[Подписываем и проверяем почту при помощи DomainKeys и DKIM в Postfix Давным-давно настроив у себя SPF, я собирался поразбираться с DomainKeys и DomainKeys Identified Mail (DKIM), но, как часто случается, банально не хватило времени. Но наконец-то нашлась свободная минутка (пришлось знакомиться с ними по долгу работы). В данной статье я расскажу о том, как настроить [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/administering/324-domainkeys-and-dkim-with-postfix-on-ubuntu-linux/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Подписываем и проверяем почту при помощи <a href="http://blog.sjinks.pro/tag/domainkeys/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  DomainKeys">DomainKeys</a> и <a href="http://blog.sjinks.pro/tag/dkim/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  DKIM">DKIM</a> в <a href="http://blog.sjinks.pro/tag/postfix/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Postfix">Postfix</a></em></h2>
<p>Давным-давно настроив у себя SPF, я собирался поразбираться с DomainKeys и DomainKeys Identified Mail (DKIM), но, как часто случается, банально не хватило времени. Но наконец-то нашлась свободная минутка (пришлось знакомиться с ними по долгу работы).</p>
<p>В данной статье я расскажу о том, как настроить DK/DKIM для совместной работы с Postfix в <a href="http://blog.sjinks.pro/tag/debian/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Debian">Debian</a>/<a href="http://blog.sjinks.pro/tag/ubuntu/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Ubuntu">Ubuntu</a> <a href="http://blog.sjinks.pro/tag/linux/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Linux">Linux</a>.<span id="more-324"></span></p>
<p>Предполагается, что Postfix уже неастроен и работает; если это не так, то очень рекомендую к прочтению <a href="https://help.ubuntu.com/community/Postfix" rel="nofollow">этот замечательный мануал</a>.</p>
<p>Прежде всего нужно установить <code><a href="http://blog.sjinks.pro/tag/dk-filter/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  dk-filter">dk-filter</a></code> и <code><a href="http://blog.sjinks.pro/tag/dkim-filter/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  dkim-filter">dkim-filter</a></code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32449">
        <div class="code bash" id="p324code49">
<span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> dk-filter dkim-filter
        </div>
    </div>
</div>

<p>Обращаю внимание, что с большой вероятностью при установке пакета <code>dkim-filter</code> <span class="codebox"><code class="bash"><span class="kw2">dpkg</span></code></span> выдаст ошибку о невозможности запуска демона <code>dkim-filter</code>. Это нормально, ибо демон нужно сначала настроить.</p>
<p>Начнём с генерации ключей. Для этого воспользуемся утилитой <code>dkim-genkey</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32450">
        <div class="code bash" id="p324code50">
dkim-genkey <span class="re5">-d</span> example.com <span class="re5">-s</span> mail
        </div>
    </div>
</div>

<p>Результатом работы утилиты будут два файла: <code>mail.txt</code> (<a href="http://blog.sjinks.pro/tag/public-key/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  открытый ключ">открытый ключ</a>) и <code>mail.private</code> (<a href="http://blog.sjinks.pro/tag/private-key/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  закрытый ключ">закрытый ключ</a>).</p>
<p>В файле <code>mail.txt</code> будет что-то вроде этого:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32451">
        <div class="code text" id="p324code51">
mail._domainkey IN TXT &quot;v=DKIM1; g=*; k=rsa; p=MIG...AQAB&quot;
        </div>
    </div>
</div>

<p>Эту запись нужно поместить в файл зоны почтового сервера и перезапустить сервер DNS. Также рекомендую добавить в файл зоны информацию об <em>Author Signing Practises</em> (ASP)&nbsp;&mdash;&nbsp;практики подписывания сообщений. Не буду на этом останавливаться, кому интересно&nbsp;&mdash;&nbsp;смотрите <a href="http://www.sendmail.org/dkim/wizard" rel="nofollow">сюда</a>.</p>
<p>Переходим к <code>mail.private</code>. Лично я храню &laquo;почтовые ключи&raquo; в каталоге <code>/etc/mail</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32452">
        <div class="code bash" id="p324code52">
<span class="kw2">sudo</span> <span class="kw2">mkdir</span> <span class="re5">-p</span> <span class="sy0">/</span>etc<span class="sy0">/</span>mail<span class="sy0">/</span>example.com<br />
<span class="kw2">sudo</span> <span class="kw2">mv</span> <span class="re5">-f</span> mail.private <span class="sy0">/</span>etc<span class="sy0">/</span>mail<span class="sy0">/</span>example.com<span class="sy0">/</span>mail
        </div>
    </div>
</div>

<p>При необходимости генерацию ключей нужно произвести для других доменов.</p>
<p>Теперь, когда у нас есть открытый и закрытый ключи, можно с чистой совестью приступать к конфигурированию <code>dkim-filter</code>. Его файл конфигурации находится в <code>/etc/dkim-filter.conf</code></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32453">
        <div class="code bash" id="p324code53">
<span class="kw2">sudo</span> <span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>dkim-filter.conf
        </div>
    </div>
</div>

<p>Я использую следующую конфигурацию:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32454">
        <div class="code text" id="p324code54">
# Запись сообщений в syslog<br />
Syslog yes<br />
<br />
# Всегда добавлять заголовок Authentication-Results<br />
AlwaysAddARHeader yes<br />
<br />
# Файл с перечнем доменов, для которых осуществляется<br />
# подписывание исходящих сообщений <br />
Domain /etc/dkim.domains<br />
<br />
# Файл с перечнем закрытых ключей<br />
KeyList /etc/dkim.keylist<br />
<br />
# Не перезапускаться при ошибках<br />
AutoRestart no<br />
<br />
# Режим работы: подпись и проверка<br />
Mode sv<br />
<br />
# Подписывать сообщения из поддоменов<br />
# доменов, указанных в Domains<br />
SubDomains yes<br />
<br />
# Отклонять письма с неверной подписью<br />
On-BadSignature reject
        </div>
    </div>
</div>

<p>Файл <code>/etc/dkim.domains</code> имеет следующий вид:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32455">
        <div class="code text" id="p324code55">
example.com<br />
example.net<br />
# По домену на строку
        </div>
    </div>
</div>

<p>Файл <code>/etc/dkim.keylist</code> имеет следующий вид:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32456">
        <div class="code text" id="p324code56">
# Отправитель:Подписывающий домен:Путь к закрытому ключу<br />
*example.com:example.com:/etc/mail/example.com/mail<br />
*example.net:example.net:/etc/mail/example.net/mail
        </div>
    </div>
</div>

<p>Обращаю внимание, что имя файла ключа (<code>mail</code>) должно совпадать с селектором ключа в TXT-записи DKIM домена (<code><strong>mail</strong>._domainkey</code>).</p>
<p>После этого запускаем <code>dkim-filter</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32457">
        <div class="code bash" id="p324code57">
<span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>dkim-filter start
        </div>
    </div>
</div>

<p>По умолчанию он будет прослушивать порт 8891 на localhost.</p>
<p>Теперь переходим к <code>dk-filter</code>. Будем использовать те же самые ключи (а смысл генерировать новые?).</p>
<p>Начнём с редактирования файла зоны: в него нужно добавить строку (политику подписи сообщений):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32458">
        <div class="code text" id="p324code58">
_domainkey &nbsp; &nbsp; &nbsp;IN TXT &quot;o=~&quot;
        </div>
    </div>
</div>

<p>или </p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32459">
        <div class="code text" id="p324code59">
_domainkey &nbsp; &nbsp; &nbsp;IN TXT &quot;o=-&quot;
        </div>
    </div>
</div>

<p>В первом варианте мы сообщаем, что почтовые сообщения могут быть подписаны (а могут и не быть подписаны); во втором — что все сообщения, исходящие из данного домена, должны быть подписаны.</p>
<p>После изменения файла зоны (не забываем обновить serial зоны) DNS-сервер необходимо перезапустить.</p>
<p>Переходим к файлу <code>/etc/default/dk-filter</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32460">
        <div class="code bash" id="p324code60">
<span class="kw2">sudo</span> <span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>default<span class="sy0">/</span>dk-filter
        </div>
    </div>
</div>

<p>У меня этот файл имеет следующий вид:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32461">
        <div class="code bash" id="p324code61">
<span class="re2">DAEMON_OPTS</span>=<span class="st0">&quot;-l&quot;</span><br />
<span class="re2">DAEMON_OPTS</span>=<span class="st0">&quot;<span class="es2">$DAEMON_OPTS</span> -k -d /etc/dkim.domains -s /etc/dk.keylist -D -h -S mail&quot;</span><br />
<span class="re2">SOCKET</span>=<span class="st0">&quot;inet:8892@localhost&quot;</span>
        </div>
    </div>
</div>

<p>А файл <code>/etc/dk.keylist</code> выглядит так:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32462">
        <div class="code text" id="p324code62">
# Подписывающий домен:Путь к закрытому ключу<br />
example.com:/etc/mail/example.com/mail<br />
example.net:/etc/mail/example.net/mail
        </div>
    </div>
</div>

<p>Перезапускаем <code>dk-filter</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32463">
        <div class="code bash" id="p324code63">
<span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>dk-filter restart
        </div>
    </div>
</div>

<p>Наконец, переходим к конфигурации Postfix. Дописываем в <code>/etc/postfix/main.cf</code> следующие строки:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32464">
        <div class="code text" id="p324code64">
milter_default_action = accept<br />
milter_protocol = 2<br />
smtpd_milters =<br />
&nbsp; &nbsp; inet:localhost:8891,<br />
&nbsp; &nbsp; inet:localhost:8892<br />
non_smtpd_milters =<br />
&nbsp; &nbsp; inet:localhost:8891,<br />
&nbsp; &nbsp; inet:localhost:8892
        </div>
    </div>
</div>

<p>После чего перезагружаем Postfix:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32465">
        <div class="code bash" id="p324code65">
<span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>postfix reload
        </div>
    </div>
</div>

<p>Перед тестированием DK/DKIM, возможно, придётся подождать окончания распространения изменений в DNS-записях.</p>
<p>Самый простой способ тестирования — отправка произвольного сообщения на адрес <code>autorespond+dk@dk.elandsys.com</code> (для тестирования DomainKeys) или <code>autorespond+dkim@dk.elandsys.com</code> (для тестирования DKIM).</p>
<p>Пример успешного прохождения проверок DK/DKIM:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p32466">
        <div class="code email" id="p324code66">
<span class="sc0">Authentication-Results<span class="sy0">:</span> ns1.qubic.net<span class="sy0">;</span> <span class="re5">sender-id</span>=pass header.from=<span class="re2">vladimir@internetnetworkmarketer.org.ua</span><span class="sy0">;</span> <span class="re5">spf</span>=pass smtp.mfrom=<span class="re2">vladimir@internetnetworkmarketer.org.ua</span></span><br />
<span class="sc0">Authentication-Results<span class="sy0">:</span> ns1.qubic.net<span class="sy0">;</span> <span class="re5">domainkeys</span>=pass header.from=<span class="re2">vladimir@internetnetworkmarketer.org.ua</span></span><br />
<span class="sc0">Authentication-Results<span class="sy0">:</span> ns1.qubic.net<span class="sy0">;</span> <span class="re5">dkim</span>=pass (1024-bit key)</span><br />
        header.i=@internetnetworkmarketer.org.ua; dkim-adsp=none
        </div>
    </div>
</div>

<p>В примере выше я поменял адреса (на горе спамерам); те, кто рискнёт отправить письмо на <a href="mailto:vladimir@internetnetworkmarketer.org.ua">internetnetworkmarketer.org.ua</a>, рискуют попасть в чёрный список UCEPROTECT Level 1 <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Рекомендую к прочтению:</p>
<ul>
<li><strong><a href="http://www.elandsys.com/resources/sendmail/domainkeys.html">Sendmail DomainKeys</a></strong>;</li>
<li><strong><a href="http://www.elandsys.com/resources/sendmail/dkim.html">Sendmail DKIM</a></strong>.</li>
</ul>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/administering/324-domainkeys-and-dkim-with-postfix-on-ubuntu-linux/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/administering/324-domainkeys-and-dkim-with-postfix-on-ubuntu-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Привет спамерам!</title>
		<link>http://blog.sjinks.pro/uncategorized/152-hi-spammers/</link>
		<comments>http://blog.sjinks.pro/uncategorized/152-hi-spammers/#comments</comments>
		<pubDate>Wed, 21 May 2008 09:16:59 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Всё подряд]]></category>
		<category><![CDATA[SJ CAPTCHA]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=152</guid>
		<description><![CDATA[Жду ответных действий :-) Внимание всем спамерам! Теперь ваша жизнь на моём блоге еще больше усложнилась — благодаря тому спаму, который вы упорно шлете в течение вот уже трех месяцев, я собрал превосходную статистику. И написал плагин, который будет с вами бороться… Если и дальше никаких проблем не будет, то, возможно, можно будет смело отключить премодерацию комментариев. [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/uncategorized/152-hi-spammers/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Жду ответных действий :-)</em></h2>
<p><strong>Внимание всем спамерам!</strong></p>
<p>Теперь ваша жизнь на моём блоге еще больше усложнилась — благодаря тому спаму, который вы упорно шлете в течение вот уже трех месяцев, я собрал превосходную статистику. И написал <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a>, который будет с вами бороться… Если и дальше никаких проблем не будет, то, возможно, можно будет смело отключить премодерацию комментариев. Вот так! <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<p>PS: это всё благодаря одному <a href="http://blog.sjinks.pro/php/wordpress/74-sick-and-tired-of-spamers-yet-another-captcha-for-wordpress/">очень замечательному плагину</a>. <strong><a href="http://blog.sjinks.pro/tag/spam/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  спам">Спам</a> не пройдёт!</strong></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/uncategorized/152-hi-spammers/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/uncategorized/152-hi-spammers/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

