<?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>Одминский блог &#187; exim</title>
	<atom:link href="http://odminblog.ru/label/exim/feed/" rel="self" type="application/rss+xml" />
	<link>http://odminblog.ru</link>
	<description>Блог о технологиях, технократии и методиках борьбы с граблями</description>
	<lastBuildDate>Thu, 17 May 2012 22:38:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Управление автоповторами в Exim</title>
		<link>http://odminblog.ru/upravlenie-avtopovtorami-v-exim/</link>
		<comments>http://odminblog.ru/upravlenie-avtopovtorami-v-exim/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 11:22:27 +0000</pubDate>
		<dc:creator>anchous</dc:creator>
				<category><![CDATA[Почтовые системы]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[настройка системы]]></category>
		<category><![CDATA[почтовые системы]]></category>

		<guid isPermaLink="false">http://odminblog.ru/?p=1024</guid>
		<description><![CDATA[На одном из почтарей под управлением exim возникала постоянно ситуация, когда при отправке письма на широковещательный внутренний адрес компании alloffice@odminblog.ru, в случае переполнения ящиков одного или нескольких пользователей, письмо ничинало отсылаться каждые 15 минут, после чего количество забитых ящиков еще больше увеличивалось и почтарь впадал в ступор. Возникало не из-за того что я первоначально криво [...]]]></description>
			<content:encoded><![CDATA[<p>На одном из почтарей под управлением exim возникала постоянно ситуация, когда при отправке письма на широковещательный внутренний адрес компании alloffice@odminblog.ru, в случае переполнения ящиков одного или нескольких пользователей, письмо ничинало отсылаться каждые 15 минут, после чего количество забитых ящиков еще больше увеличивалось и почтарь впадал в ступор. Возникало не из-за того что я первоначально криво все настроил, а из-за того что пользователи имея ящики по 200 метров не запаривались на их очистку, в добавок к чему сыпали мейлами по 15-20 мегабайт.</p>
<p>В этой связи возникла задача переписать стандартное правило автоповторов для exim. Для этого открываем конфигурационный файл и идем в самый его конец, в секцию RETRY. Там мы видим следующие строки:</p>
<p>########################################<br />
#                      RETRY CONFIGURATION                           #<br />
########################################<br />
begin retry<br />
# Domain               Error       Retries<br />
*                 refused_A   F,2h,20m;<br />
*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h</p>
<p>Это стандартное правило автоповторов для exim, и оно всегда имеет две звездочки, для того чтобы описать общее правило для всех доменов и ошибок, не описанных отдельным полем. Об этом описании мы поговорим позже, а в данной записи получается что в случае любой ошибки для любого домена повтор отправки будет осуществляться каждые 15 минут в течении двух часов, после чего с интервалами от одного часа до 16 часов, с множителем в 1,5, после чего в течении 4 дней попытка будет осуществляться каждые 6 часов. После истечения времени автоповтора exim отбивает адрес доставки и скитывает отправителю отлуп.</p>
<p>Само правило автоповтора создается по следующему шаблону:<br />
&lt;Domain&gt;&lt;Error&gt;&lt;Retries&gt;<br />
Первым пункт может включать как имя домена, так и, для сужения задачи, адрес получателя.<br />
Второй пункт описывает специфическую ошибку, которые бывают следующих типов:<br />
auth_failed &#8211; при неудачной аутентификации в случае отправки на хост из списка  hosts_require_auth<br />
data_4xx   &#8211; при ошибке которая получается для команды smtp диалога DATA, или сразу же после команды<br />
mail_4xx   &#8211; при ошибке которая получается для команды smtp диалога MAIL.<br />
rcpt_4xx    &#8211; которая получается для команды smtp диалога RCPT<br />
Также в этих трех ошибках, ошибка может задаваться полным номером, для сужения правила применения автоповтора.<br />
lost_connection &#8211; при неожиданном закрытии SMTP-сессии со стороны сервера<br />
refused_MX &#8211; при отказе в соединении к хосту определенному как почтовый сервер по данным из MX записи<br />
refused_A &#8211; при отказе в соединении к хосту полученному не из MX записи<br />
refused &#8211; при любом отказе в соединении<br />
timeout_connect_MX &#8211; при таймауте попытки соединения с хостом определенномв MX-записи<br />
timeout_connect_A &#8211; при таймауте попытки соединения с хостом полученным не из MX-записи<br />
timeout_connect &#8211; при таймауте любой попытки соединения<br />
timeout_MX &#8211; при таймауте во время соединения или в процессе SMTP-сессии с хостом, полученным из MX-записи<br />
timeout_A &#8211; при таймауте во время соединения или в процессе SMTP-сессии с хостом, полученным не из MX-записи<br />
timeout &#8211; при таймауте во время соединения или в процессе SMTP-сессии<br />
tls_required &#8211; в сессии соединения сервер должен был использовать TLS (сервер определен в списке  hosts_require_tls), но либо TLS не был предложен, либо сервер прислал ответ 4xx на команду STARTTLS<br />
quota  &#8211; при локальной доставке транспортом “ appendfile ” была превышена квота почтового ящика пользователя<br />
quota_&lt;time&gt; &#8211; при локальной доставке транспортом “ appendfile ” была превышена квота почтового ящика, и к почтовому ящику не обращались время равное &lt;time&gt;<br />
Также после этого поля возможно определить отправителя, тем самыв сузив правило автоповтора, например для приоритезации руководства компании:<br />
senders=&lt;address list&gt;<br />
Тогда правило автоповтора будет выглядеть<br />
kremlin.ru  rcpt_452  senders=&#8221;mainperson@odminblog.ru&#8221;  G,8h,10m,</p>
<p>Третий пункт отпределяет само правило автоповтора:<br />
&lt;letter&gt;,&lt;cutoff time&gt;,&lt;arguments&gt;<br />
Буквой задает алгоритм вычисления правила автоповтора:<br />
F &#8211; повторять автоповтор с определенным интервалом. Первое число определяет в течении какого периода осуществлять автоповтор, второе задает интервал.<br />
G -  повторять автоповтор в геометрически увеличивающихся интервалах. Первое число определяет максимальное значение для интервала, второе начальное значение интервала, третье число множитель, используемый для увеличения интервала при каждом повторении.Если первое число не задано, то интервал увеличивается до значения параметра retry_interval_max, который не может быть больше 24h.<br />
H &#8211; повторять отправку повтора со случайными интервалами. Используемые аргументы &#8211; такие же как для  G. Для каждого повтора, предыдущий интервал умножается на фактор, для получения максимума следующего интервала. Минимальный интервал &#8211; первый аргумент параметра, и актуальный интервал выбирается случайным образом из диапазона между ними.<br />
Если в поле правила автоповтора ничего не задано, то сразу после неудачной попытки отправки, генерируется рикошет и уходит в сторону отправителя.</p>
<p>Исходя из всего вышеописанного создаем новое правило автоповторов:<br />
####################################################<br />
#                      RETRY CONFIGURATION                           #<br />
####################################################<br />
begin retry<br />
# Domain               Error       Retries<br />
alloffice@odminblog.ru    *<br />
odminblog.ru    quota<br />
*                 refused_A   F,2h,20m;<br />
*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h</p>
<p>По этому правилу на все ошибки препятствующие доставки на адрес alloffice@odminblog.ru будет генерироваться рикошет, а при переполнении ящика кого либо из пользователей домена odminblog.ru также будет генерироваться рикошет</p>
<div id="crp_related"><h3>Читать еще:</h3><ul><li><a href="http://odminblog.ru/global-external-alias-using-exim/" rel="bookmark" class="crp_title">Организация глобального внутреннего алиаса средствами exim</a></li><li><a href="http://odminblog.ru/ttl-in-dns-for-migrate/" rel="bookmark" class="crp_title">Изменение значений TTL в сервере DNS/BIND при миграции</a></li><li><a href="http://odminblog.ru/port-redirect-on-d-link-dfl-210/" rel="bookmark" class="crp_title">Проброс портов на D-Link DFL-210</a></li><li><a href="http://odminblog.ru/cheets-and-tips-exim/" rel="bookmark" class="crp_title">Всякие полезности для exim</a></li><li><a href="http://odminblog.ru/exim-queue/" rel="bookmark" class="crp_title">Работа с очередью Exim</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://odminblog.ru/upravlenie-avtopovtorami-v-exim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Организация глобального внутреннего алиаса средствами exim</title>
		<link>http://odminblog.ru/global-external-alias-using-exim/</link>
		<comments>http://odminblog.ru/global-external-alias-using-exim/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 11:57:42 +0000</pubDate>
		<dc:creator>anchous</dc:creator>
				<category><![CDATA[Почтовые системы]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[домен]]></category>
		<category><![CDATA[почтовые системы]]></category>

		<guid isPermaLink="false">http://odminblog.ru/?p=897</guid>
		<description><![CDATA[Очень часто возникает необходимость создать некоторое количество внутренних почтовых адресов, например по отделам и административным группам (sales@ , acct@) или безусловную рассылку на все почтовые адреса компании, что нибудь вроде all@ или office@. Этот алиас мы присваиваем всем имеющимся почтовым пользователям, но через пару недель использования, а то и сразу на него начинает сыпаться дикое [...]]]></description>
			<content:encoded><![CDATA[<p>Очень часто возникает необходимость создать некоторое количество внутренних почтовых адресов, например по отделам и административным группам (sales@ , acct@) или безусловную рассылку на все почтовые адреса компании, что нибудь вроде all@ или office@. Этот алиас мы присваиваем всем имеющимся почтовым пользователям, но через пару недель использования, а то и сразу на него начинает сыпаться дикое количество спама, ибо за день на стандартные потовые адреса может приходить до нескольких сотен сообщений, которые в ситуации с глобальным алиасом будут падать на все конторские ящики, выводя пользователей из себя и портя нервы админу. Естественно, что лучшим выходом в данной ситуации будет закрыть это адрес для внешней пересылки, оставив его только для внутреннего общения компании. Но как это сделать?</p>
<p>Если для внутренней пересылки используется внутренний почтовый сервер, то это одно дело, но если сервер у нас один и на нем необходимо завести этих пользователей, запретив отправку на них почты извне?</p>
<p>Тут нам в очередной раз приходит на помощь такой гибкий инструмент управления почтовым сервером Exim, как его конфигурационный файл exim.conf</p>
<p>В разделе <strong>MAIN CONFIGURATION SETTINGS</strong> у  нас уже должны быть заданы IP адреса для которых разрешена отправка через наш почтовый север. Обычно в этот список включается только localhost для того чтобы сервер мог пересылать сам через себя, но можно также включить и пользователей локальной сети, например:<br />
<em><br />
hostlist relay_from_hosts = 127.0.0.1 : 192.168.16.0/24 </em></p>
<p>В разделе  <strong>ACL CONFIGURATION</strong> создаем правило для нашего глобального алиаса, по которому использование данного адреса будет разрешено только для хостов указанных в списке relay_from_hosts или прошедших аутентификацию.</p>
<p><em>deny    message     = Go Away! This address not permitted for external use!<br />
hosts              = !+relay_from_hosts<br />
local_parts       = GLOBAL_ALIAS<br />
!authenticated   = *</em></p>
<p>Данное правило можно расширить списком определенных доменов, но это даст возможность просачиваться спаму, использующему обратные адреса принадлежащие к нашим локальным доменам. Поэтому я это правило исключил после некоторого периода тестового использования.</p>
<p><em>domains        = +local_domains</em></p>
<p>После этого для каждого создаваемого пользователя мы добавляем глобальный алиас, или же можно созрать список рассылки без добавления отдельных алиасов, для этого в раздел <strong>ROUTERS CONFIGURATION</strong> добавляем следующее выражение:</p>
<p><em>virtual_allusers:<br />
driver = redirect<br />
domains = +local_domains<br />
allow_fail<br />
allow_defer<br />
condition = ${if eq {$local_part}{all</em>|<em>еще какие-нить алиасы}{yes}{no}}<br />
data = ${lookup mysql{SELECT CONCAT(login,»@»,domain) FROM users}}</em></p>
<p>Также можно объявить разрешенных отправителей для этого адреса, если количество внутриофисных спамеров ограничено:<br />
<em>senders = localspammer@odminblog.ru</em></p>
<div id="crp_related"><h3>Читать еще:</h3><ul><li><a href="http://odminblog.ru/exim-acl-vs-spam/" rel="bookmark" class="crp_title">Борьба со спамом в MTA EXIM на основе ACL</a></li><li><a href="http://odminblog.ru/perenapravlenie-pochty-na-vneshnij-adres-sredstvami-dbmail/" rel="bookmark" class="crp_title">Перенаправление почты на внешний адрес средствами dbmail</a></li><li><a href="http://odminblog.ru/autoreply-for-exim/" rel="bookmark" class="crp_title">Автоответ в Exim</a></li><li><a href="http://odminblog.ru/cashing-dns-server-under-bind/" rel="bookmark" class="crp_title">Настройка кеширующего DNS сервера на базе BIND</a></li><li><a href="http://odminblog.ru/cheets-and-tips-exim/" rel="bookmark" class="crp_title">Всякие полезности для exim</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://odminblog.ru/global-external-alias-using-exim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Всякие полезности для exim</title>
		<link>http://odminblog.ru/cheets-and-tips-exim/</link>
		<comments>http://odminblog.ru/cheets-and-tips-exim/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 09:25:11 +0000</pubDate>
		<dc:creator>anchous</dc:creator>
				<category><![CDATA[Подсказки]]></category>
		<category><![CDATA[Почтовые системы]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[почтовые системы]]></category>

		<guid isPermaLink="false">http://odminblog.ru/?p=676</guid>
		<description><![CDATA[Ниже приводится вольный перевод статьи, посвященной хитростям работы с SMTP сервером Exim v. 4.  Эта статья является более подробным изложением материала который я приводил  в моем предыдущем посте о работе с очередью Exim.  Какие то вводные могут пересекаться, но по сути это более подробная и развернутая инструкция.
Естественно, что использование этих команд не исключает необходимости познаний [...]]]></description>
			<content:encoded><![CDATA[<p>Ниже приводится вольный перевод статьи, посвященной хитростям работы с SMTP сервером Exim v. 4.  Эта статья является более подробным изложением материала который я приводил  в моем предыдущем посте о <a href="http://odminblog.ru/exim-queue/" target="_blank">работе с очередью Exim</a>.  Какие то вводные могут пересекаться, но по сути это более подробная и развернутая инструкция.<br />
Естественно, что использование этих команд не исключает необходимости познаний о работе сервисов SMTP, MTA и знакомства с шеллом UNIX.<br />
<span id="more-676"></span></p>
<h3>Message-ID и spool файлы</h3>
<p>Уникальные номера message-ID под которыми сервер Exim помещает письма в очередь, представляют собой набор буквено-циферных названий с вариацией регистра, и выглядят следующим образом: XXXXXX-YYYYYY-ZZ. Большинство команд изменения очереди используют эти уникальные message-id.</p>
<p>Каждому сообщению, в spool директории соответствуют три файла. Если вы хотите удалить напрямую файлы, не прибегая к командам работы с очередью, то вы должны быть уверены, что ваши изменения коснутся всех трех файлов, иначе Exim будет работать с остатками вытащенными из spool директории .</p>
<p>Файлы в папке /var/spool/exim/msglog содержат информацию о подключения для каждого сообщения и называются так же как и message-id письма.</p>
<p>Файлы в папке /var/spool/exim/input называются также как и message-id письма, в добавленным суффиксом после названия для различения информации содержащейся в файле: для заголовка (-H); для тела письма (-D).</p>
<p>Чаще всего эти директории содержат подпапки для удобства работы с большой очередью, поэтому не удивяйтесь если директории /var/spool/exim/input и /var/spool/exim/msglog будут заполнены алфавитными подпапками, поэтому все поиски и выборки, с помощью утилиты grep, должны быть производиться рекурсивно.</p>
<h3>Основные команды</h3>
<p>Вывод информации о количестве сообщений в очереди:</p>
<p>root@odminblog.ru#  exim -bpc</p>
<p>Листинг сообщений находящихся в очереди (время в очереди, размер, message-id, адресат и получатель):</p>
<p>root@odminblog.ru#  exim -bp</p>
<p>Вывод суммарного отчета по сообщениям в очереди (количество, размер, последнее письмо, наиболее раннее, домен и общий результат):</p>
<p>root@odminblog.ru#  exim -bp | exiqsumm</p>
<p>Вывод информации о том, чем в данный момент занимается сервер Exim:</p>
<p>root@odminblog.ru#  exiwhat</p>
<p>Трассировка алгоритма отправки по заданному адресу:</p>
<p>root@odminblog.ru#  exim -bt test@yahoo.com<br />
test@yahoo.com<br />
router = dnslookup, transport = remote_smtp<br />
host g.mx.mail.yahoo.com [98.137.54.238]  MX=1<br />
host f.mx.mail.yahoo.com [98.137.54.237]  MX=1<br />
host a.mx.mail.yahoo.com [67.195.168.31]  MX=1<br />
host a.mx.mail.yahoo.com [67.195.168.230] MX=1<br />
host b.mx.mail.yahoo.com [74.6.136.65]    MX=1<br />
host h.mx.mail.yahoo.com [66.94.236.34]   MX=1<br />
host c.mx.mail.yahoo.com [206.190.54.127] MX=1<br />
host d.mx.mail.yahoo.com [209.191.88.254] MX=1</p>
<p>Запуск &#8220;эмулятора&#8221; SMTP сессии из командной строки, таким образом словно он приходит на сервер с указанного IP адреса. Для данной отладки используются актуальные настройки сервера Exim, поэтому способ очень удобен для тестирования сервера, ACL и фильтров. Сообщение отправляется в эмулированной сессии, поэтому оно не будет доставлено.</p>
<p>root@odminblog.ru#  exim -bh 192.168.10.1<br />
**** SMTP testing session as if from host 192.168.10.1<br />
**** but without any ident (RFC 1413) callback.<br />
**** This is not for real!</p>
<p>Вывод всех настроек сервера Exim:</p>
<p>root@odminblog.ru#  exim -bP</p>
<h3>Поиск в очереди с помощью exiqgrep</h3>
<p>К комплект Exim входит отличная утилита для выборки из почтовой очереди, именующаяся exiqgrep. С <a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/exim-html-4.50/doc/html/spec_49.html#IX2895"> инфа с офф.сайта</a> об использовании утилиты настойчиво рекомендовано просмотреть, ибо знание возможных ключей способно значительно облегчить жизнь сисадмина. Тем более что различные флаги могут сочетаться, для более подробного поиска в почтовой очереди.</p>
<p>Флаг  -f  позволяет искать в очереди сообщение от определенного отправителя, как по имени пользователя или домену, так и по полному адресу:</p>
<p>root@odminblog.ru#  exiqgrep -f  user@search.dom</p>
<p>Флаг  -r позволяет искать в очереди письмо к определенному адресату или домену:</p>
<p>root@odminblog.ru#  exiqgrep -r  user@search.dom</p>
<p>Флаг -o выведет информацию о сообщениях старше определенного количества секунд. В примере для значения в 1 день:</p>
<p>root@odminblog.ru#  exiqgrep -o  86400</p>
<p>Флаг -y выведет информацию о сообщения моложе определенного количества секунд. В примере для значения в 1 час:</p>
<p>root@odminblog.ru#  exiqgrep -y 3600</p>
<p>Флаг -s выведет сообщение определенного размера, или при использовании видгета, определенного диапазона. Например от 500 до 599 байт:</p>
<p>root@odminblog.ru# exiqgrep -s &#8216;^5..$&#8217;</p>
<p>Флаг -z выведет только замороженные сообщения, или  -x для только размороженных сообщений.</p>
<p>Еще несколько флагов для контроля вывода</p>
<p>Флаг -i выведет только message-id в качестве результата запроса:</p>
<p>root@odminblog.ru# exiqgrep -i [-o | -r | -f ]</p>
<p>Флаг -c выведет отчет о количестве сообщений из общего числа, удовлетворяющих условию поиска:</p>
<p>root@odminblog.ru# exiqgrep -c [-o | -r | -f ]</p>
<p>Листинг message-id всех сообщений находящихся в очереди:</p>
<p>root@odminblog.ru# exiqgrep -i</p>
<h3>Управление очередью</h3>
<p>Для управления сообщениями в очереди используется основной бинарник сервера exim, находящийся /usr/sbin/exim, в вариациях с различными флагами. Большая часть этих флагов требует задания одного или конвейера message-IDЮ заданных из командной строки.</p>
<p>Запуск очереди:</p>
<p>root@odminblog.ru# exim -q -v</p>
<p>Запуск очереди только для локальной доставки:</p>
<p>root@odminblog.ru# exim -ql -v</p>
<p>Удаление сообщения из очереди:</p>
<p>root@odminblog.ru# exim -Mrm &lt;message-ID&gt;</p>
<p>Заморозить сообщения для отправки:</p>
<p>root@odminblog.ru# exim -Mf &lt;message-ID&gt;</p>
<p>Разморозить сообщение:</p>
<p>root@odminblog.ru# exim -Mt &lt;message-ID&gt;</p>
<p>Доставить сообщение не зависимо от того заморожено оно или нет и истекло ли время повтора или нет:</p>
<p>root@odminblog.ru# exim -M &lt;message-ID&gt;</p>
<p>Доставить сообщение только если время повтора истекло:</p>
<p>root@odminblog.ru# exim -Mc &lt;message-ID&gt;</p>
<p>Удалить все замороженные сообщения:</p>
<p>root@odminblog.ru#  exiqgrep -z -i | xargs exim -Mrm</p>
<p>Удалить все замороженные сообщения в очереди, старше определенного времени в секундах:</p>
<p>root@odminblog.ru#  exiqgrep -o -860000 | xargs exim -Mrm</p>
<p>Заморозить все сообщения в очереди от данного отправителя:</p>
<p>root@odminblog.ru#  exiqgrep -i -f  user@test.com | xargs exim -Mf</p>
<p>Просмотреть заголовок письма:</p>
<p>root@odminblog.ru#  exim -Mvh &lt;message-ID&gt;</p>
<p>Просмотреть тело письма:</p>
<p>root@odminblog.ru#  exim -Mvb &lt;message-ID&gt;</p>
<p>Просмотреть логи относящиеся к данному письму:</p>
<p>root@odminblog.ru#  exim -Mvl &lt;message-ID&gt;</p>
<p>Добавить адресата к сообщению:</p>
<p>root@odminblog.ru#  exim -Mar &lt;message-ID&gt; &lt;address&gt; [&lt;address&gt;]</p>
<p>Изменить отправителя письма:</p>
<p>root@odminblog.ru#  exim -Mes &lt;message-ID&gt; &lt;address&gt;</p>
<h3>Access control</h3>
<p>Сервер Exim дает возможность использовать так называемые листы контроля доступа( <a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/exim-html-4.50/doc/html/spec_39.html">access control lists)</a> для управления и фильтрацией на уровне  SMTP диалога, которые задаются в разделе ACL конфигурационного файла сервера exim.conf. Начинать фильтрацию можно со строки SMTP диалога  HELO.</p>
<p># Использовать ACL после HELO<br />
acl_smtp_helo = check_helo</p>
<p># Выражения для проверки check_helo ACL:<br />
check_helo:</p>
<p>deny message = Gave HELO/EHLO as &#8220;friend&#8221;<br />
log_message = HELO/EHLO friend<br />
condition = ${if eq {$sender_helo_name}{friend} {yes}{no}}</p>
<p>deny message = Gave HELO/EHLO as our IP address<br />
log_message = HELO/EHLO our IP address<br />
condition = ${if eq {$sender_helo_name}{$interface_address} {yes}{no}}</p>
<p>accept</p>
<p>*** Проверка HELO остается исключительно на вашей совести, поскольку строка HELO наименне важная в диалоге SMTP, поэтому не надо вешать на неё слишком много проверок, поскольку многие спамеры используют весьма информативные поля HELO, в то время как вполне законопослушные отправители, с кривых серваков, будут отметаться именно по этому полю. К тому же для спамера это наиболее простой способ избежать проверки- указать в поле HELO что дескать HELO im.an.ugly.spammer, так что в этой проверке не стоит устраивать допроса с пристрастием.</p>
<p>Следующим этапом идет проверка отправителя и хоста-отправителя. Ниже разобрано как сделать это после команды RCPT TO, что даст гораздо больше информации, нежели делать отлуп сразу по завершению строки MAIL FROM.</p>
<p># Указать листу ACL отрабатывать после RCPT TO<br />
acl_smtp_rcpt = check_recipient</p>
<p># Выражение для check_recipient ACL<br />
check_recipient:</p>
<p># [...]</p>
<p>drop hosts = /etc/exim_reject_hosts<br />
drop senders = /etc/exim_reject_senders</p>
<p># [ Здесь же можно указывать и белые списки... ]</p>
<p>В данноом примере два текстовых файлика приводятся в качестве черных списков. В этих файлах следует указывать имена хостов/IPадреса в /etc/exim_reject_hosts, и почтовые адреса в /etc/exim_reject_senders, по одному на строчке</p>
<p>Также возможно использовать <a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/exim-html-4.50/doc/html/spec_40.html">контекстное сканирование</a> для проверки тела сообщения, но нужно помнить о том, что эта процедура затребует для сервера Exim гораздо больше  CPU чем это необходимо при отсутствии этой проверки, особенно если письма большого размера.<br />
# Указать ACL отрабатывать после поля DATA<br />
acl_smtp_data = check_message</p>
<p># Выражение для использования check_messages ACL<br />
check_message:</p>
<p>deny message = &#8220;Sorry, Charlie: $regex_match_string&#8221;<br />
regex = ^Subject:: .*Lower your self-esteem by becoming a sysadmin</p>
<p>accept</p>
<h3>Исправление SMTP-Auth для почтового клиента Pine</h3>
<p>Если клиенты pine не могут использовать SMTP аутентификацию на сервере Exim и получают ошибку &#8220;unable to authenticate&#8221; без запроса пароля, то для них следует использовать следующее выражение в конце конфига  exim.conf.  Выражение приводится для сервера Exim с поддержкой MySQL:</p>
<p>begin authenticators</p>
<p>fixed_plain:<br />
driver = plaintext<br />
public_name = PLAIN<br />
server_condition = ${lookup mysql{SELECT user_idnr FROM dbmail_users \<br />
WHERE userid = &#8216;${quote_mysql:$2}&#8217; AND passwd = &#8216;${quote_mysql:$3}&#8217;}}<br />
server_set_id = $2<br />
server_prompts = :</p>
<p>Эта проблема существовала довольно давно в CPanel Exim , но она добавляется в конфигурацию для стабильности системы.</p>
<h3>Исправление SMTP-Auth для почтового клиента The Bat</h3>
<p>Для использования почтового клиента The Bat с сервером Exim, следует прописать для него следующее выражение аутентификации с использованием алгоритма CRAM-MD5, в  секции аутентификаций конфига exim.conf:</p>
<p>begin authenticators</p>
<p>auth_cram_md5:<br />
driver = cram_md5<br />
public_name = CRAM-MD5<br />
server_secret = ${lookup mysql{SELECT passwd FROM dbmail_users \<br />
WHERE userid = &#8216;${quote_mysql:$1}&#8217;}{$value}fail}<br />
server_set_id = $1</p>
<h3>Логирование темы письма</h3>
<p>Одна из наиболее полезных конфигураций для Exim- логирование тем сообщений, проходящих через почтовый сервер. Добавляем в конфиг exim.conf, и можем смотреть какие сообщения признаны спамом:</p>
<p>log_selector = +subject</p>
<p><a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/exim-html-4.50/doc/html/spec_48.html#SECT48.15">Reducing or increasing what is logged</a>.</p>
<h3>Отключение блокировки вложений</h3>
<p>Для того чтобы отключить блокировку потенциально опасных вложений, которая применяется на многих Cpanel серверах по умолчанию,  но осуществлять контроль на уровне доменов, следует добавить соответствующую блокировку в начало файла /etc/antivirus.exim:</p>
<p>if $header_to: matches &#8220;example\.com|example2\.com&#8221;<br />
then<br />
finish<br />
endif</p>
<h3>Просмотр логов с помощью утилиты exigrep</h3>
<p>Утилита <a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/exim-html-4.50/doc/html/spec_49.html#IX2911">exigrep</a> (не путать с exiqgrep) используется для поиска по лог файлам, используя произвольные выражения. Использование этой команды выведет все сообщения из лога с определенным message-id, подпадающим под данное выражение, что очень удобно, поскольку каждое сообщение оставляет в лог файле три записи, которые проблематично вывести с помощью стандартных команд.</p>
<p>Поиск письма посланного с определенного IP адреса:<strong></strong></p>
<p>root@odminblog.ru# exigrep &#8216;&lt;= .* \[12.34.56.78\] &#8216; /path/to/exim_log</p>
<p>Поиск письма посланного на определенный IP адрес:<strong></strong></p>
<p><strong></strong>root@odminblog.ru#  exigrep &#8216;=&gt; .* \[12.34.56.78\]&#8216; /path/to/exim_log</p>
<p>В данном поисковом запросе символ  &#8220;=&gt;&#8221; указывает исходящее сообщение, посланное на &#8220;user@domain.tld&#8221;.  Символ &#8220;&lt;=&#8221;  указывает на входящее сообщение и отправителя письма, IP адрес отправителя, размер письма,  message ID и тему письма, если данный параметр логирования включен.</p>
<p>root@odminblog.ru# exigrep &#8216;=&gt; .*user@domain.tld&#8217; /path/to/exim_log | fgrep &#8216;&lt;=&#8217;</p>
<p>Сгенерировать и вывести статистику работы сервера Exim на основе лог файла:</p>
<p>root@odminblog.ru# eximstats /path/to/exim_mainlog</p>
<p>Сгенерировать и вывести статистику работы сервера Exim на основе лог файла, с менее информативным  выводом:</p>
<p>root@odminblog.ru# eximstats -ne -nr -nt /path/to/exim_mainlog</p>
<p>Сгенерировать и вывести статистику работы сервера Exim за определенный день, на основе лог файла:</p>
<p>root@odminblog.ru# fgrep YYYY-MM-DD /path/to/exim_mainlog | eximstats</p>
<p>Удалить из очереди все сообщения содержащие в теле определенный набор символов:</p>
<p>root@odminblog.ru# grep -lr &#8216;a certain string&#8217; /var/spool/exim/input/ | \<br />
sed -e &#8217;s/^.*\/\([a-zA-Z0-9-]*\)-[DH]$/\1/g&#8217; | xargs exim -Mrm</p>
<p>Для просмотра тел сообщений используется команда grep, поскольку утилита exiqgrep не умеет просматривать тело сообщения. Если удалить эти файлы напряму, то это будет не корректной обработкой очереди, поэтому настоятельно рекомендуется использовать приведенные команды.</p>
<p>Но поскольку в очереди может содержаться огромное количество message-ids (например вывод `exiqgrep -i` возвращает большой список значений) , то можно попасть под ограничение shell на количество вводимых аргументов.  Поэтому вывод содержащий message-ids перенаправляется в xargs для избежания подобных ограничений. Например команда для удаления всех сообщений, посланных с адреса spam@evil.com, выглядит так:</p>
<p>root@odminblog.ru# exiqgrep -i -f &#8216;&lt;spam@evil.com&gt;&#8217; | xargs exim -Mrm</p>
<h3>Перегрузка конфигурации сервера</h3>
<p>После внесения измененений в exim.conf, необходимо перегрузить основной pid сервера exim, для того чтобы демон перечел конфигурацию. В принципе можно выключить и включить сервис, но в этот момент можно потерять какое то количество сообщений. Поэтому делаем через kill:</p>
<p>root@localhost# kill -HUP `cat /var/spool/exim/exim-daemon.pid`</p>
<p>Этот рестарт отобразит в логе сервера exim_mainlog что нибудь вроде этого:</p>
<p>2010-02-11 12:08:56 pid 750: SIGHUP received: re-exec daemon<br />
2010-02-11 12:08:56 exim 4.69 daemon started: pid=750, -q30m, listening for SMTP on port 25 (IPv4)</p>
<h3>Read The Fucking Manual</h3>
<p><a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/">The Exim Home Page</a></p>
<p><a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/docs.html">Documentation For Exim</a></p>
<p><a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/exim-html-4.50/doc/html/spec.html">The Exim Specification &#8211; Version 4.5x</a></p>
<p><a rel="nofollow" href="http://odminblog.ru/links/go.php?url=http://www.exim.org/exim-html-4.50/doc/html/spec_5.html#IX199">Exim command line arguments</a></p>
<div id="crp_related"><h3>Читать еще:</h3><ul><li><a href="http://odminblog.ru/exim-queue/" rel="bookmark" class="crp_title">Работа с очередью Exim</a></li><li><a href="http://odminblog.ru/exim-acl-vs-spam/" rel="bookmark" class="crp_title">Борьба со спамом в MTA EXIM на основе ACL</a></li><li><a href="http://odminblog.ru/autoreply-for-exim/" rel="bookmark" class="crp_title">Автоответ в Exim</a></li><li><a href="http://odminblog.ru/global-external-alias-using-exim/" rel="bookmark" class="crp_title">Организация глобального внутреннего алиаса средствами exim</a></li><li><a href="http://odminblog.ru/cron-log-over-mail/" rel="bookmark" class="crp_title">Отправка отчетов по почте планировщиком cron</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://odminblog.ru/cheets-and-tips-exim/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Дефрагментация и сжатие InnoDB</title>
		<link>http://odminblog.ru/defrag-innodb/</link>
		<comments>http://odminblog.ru/defrag-innodb/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 14:28:55 +0000</pubDate>
		<dc:creator>anchous</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[база данных]]></category>
		<category><![CDATA[дамп]]></category>

		<guid isPermaLink="false">http://odmin.sane4ka.ru/?p=459</guid>
		<description><![CDATA[Есть у меня отличный почтарь, да не один, а несколько. Все они крутятся в связке Exim + DBmail + MySQL, конечно там есть много чего еще, но это основная связка, и нас из неё интересует последняя составляющая mySQL. Дело в том, что база пользователей и всего имеющегося мусора крутится по мускулем и хостится в базе [...]]]></description>
			<content:encoded><![CDATA[<p>Есть у меня отличный почтарь, да не один, а несколько. Все они крутятся в связке Exim + DBmail + MySQL, конечно там есть много чего еще, но это основная связка, и нас из неё интересует последняя составляющая mySQL. Дело в том, что база пользователей и всего имеющегося мусора крутится по мускулем и хостится в базе типо InnoDB, которую необходимо постоянно сжимать и сканировать. Желательно каждую ночь, чтобы мусор скопившийся за день, не забивал место в табличном пространстве.</p>
<p>К большому сожалению база InnoDB работает по принципу ниппеля, т.е. туда дуй, оттуда х&#8230; Объясняя это доступным языком- табличное пространство может как расширяться так и уменьшаться, но физический размер базы при этом изменяется только в сторону увеличения. Проще говоря если у вас база была на максимуме 20гигов, и после этого вы её почистив освободили 90% пространства, внутри база у вас будет свободна на 90% (посмотреть свободное пространство можно командой в консоли управления сервером: mysql&gt; show table status; ), но снаружи она так и будет занимать на диске 20 Гиг физического пространства диска. Так вот у меня, на одном из серверов, она успела разрастись, пока я прочухал тот факт, что забыл установить чистящий скриптик, до 250 Гигов, которые конечно работают как часы, но самой цифрой действуют мне на нервы. В этой связи надо что то делать. Но делать можно только одним способом, а именно перегнать базу в дамп sql и затянуть его обратно, предварительно дропнув имеющегося монстра. В этой связи, ровно как и для дефрагментации табличного пространства, нашим лучшим другом является системная утилита mysqldump, входящая в стандартный комплект поставки сервера mySQL.</p>
<p>*** Для дефрагментации InnoDB также можно использовать способ двойной перегонки <img src='http://odminblog.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  базы, с помощью команды ALTER преобразовать её в тип MyISAM, а затем обратно в тип InnoDB.<br />
<span id="more-459"></span>Данная утилита дает возможность сделать мгновенный слепок базы данных (на тему мгновенности конечно это я так, для красивого словца- полтора гига шло минут 7, 250 прошли за 2.5 часа) представляющий собой текстовый файл с набором SQL команд для создания и заполнения таблиц.<br />
Собственно приступаем к работе:</p>
<p># mysqldump -uSQL_USER_EXIM -p EXIM_DATABASE &gt; /tmp/exim.sql</p>
<p>-u или &#8211;user=  &#8211; имя пользователя<br />
-p &#8211;password  -  запрос пароля<br />
exim_database &#8211; имя базы данных<br />
exim.sql &#8211; файл для вывода дампа</p>
<p>за раз можно загнатьв дамп несколько баз, если перечислить их друг за другом, после опции -B или &#8211;databases:</p>
<p># mysqldump -uSQL_USER_EXIM -p database1 -B database2 database3 &gt; /tmp/database.sql</p>
<p>также можно снять дамп всех таблиц, если использовать оператор -A или &#8211;all-databases:</p>
<p># mysqldump -uSQL_USER_EXIM -p -A &gt; /tmp/database.sql</p>
<p>Данная операция займет некоторое время и место на диске, зависящее от объема базы SQL.</p>
<p>После этого останавливаем сервер mySQL</p>
<p>#  /usr/local/mysql/support-files/mysql.server stop</p>
<p>*****<br />
С версии 6.x доступен так называемый on-line backup для всех типов баз. Его отличительные особенности то, что он не блокирует выполнение INSERT/UPDATE/DELETE и выполняется простейшими командами:<br />
BACKUP DATABASE &lt;db_name&gt; to &lt;file&gt;<br />
RESTORE &lt;file&gt; [OVERWRITE]<br />
*****</p>
<p>Делаем резервную копию базы данных которую мы предполагаем экспортировать, из папки %mysql%/data переписываем файл базы и журналов InnoDB и соответствующую ей папку с файлами *.frm в самое укромное место на винте.</p>
<p>После этого удаляем таблицу и соответствующие ей файлы, и запускаем сервер:</p>
<p>#  /usr/local/mysql/support-files/mysql.server start</p>
<p>Сервер немного подумает и восстановит пустую базу InnoDB, после чего мы заливаем в неё наш бэкап. Сделать это можно двумя способами, либо из командной строки:</p>
<p># mysql -uSQL_USER_EXIM -p EXIM_DATABASE &lt; /tmp/exim.sql</p>
<p>либо из консоли сервера:</p>
<p>mysql&gt; use EXIM_DATABASE;<br />
mysql&gt; source exim.sql</p>
<p>После чего смотрим производительность и размер диска, занимаемый базой.<br />
******<br />
Парочка полезных советов:</p>
<p>При ограниченных ресурсах памяти или объемной базе данных, следует использовать опцию &#8211;quick или &#8211;opt, это позволит утилите mysqldump начать делать дамп базы без предварительной загрузки её в память.</p>
<p>Также может возникнуть необходимость указания кодировки в которой вы хотели бы получить дамп вашей базы, для этого используется опция &#8211;default-character-set=</p>
<p>Опция -f позволит продолжать выполнение резервирования даже при получении ошибки в ходе выполнения процедуры.</p>
<p>Удобная команда для автоматического резервирования со сжатием:<br />
mysqldump -uROOT -pPASSWD DBNAME | gzip -c &gt; `date &#8220;+%Y-%m-%d&#8221;`.gz</p>
<p>Также возможно резервироватьна удаленный хост:<br />
mysqldump -uROOT -PNUMBER_PORT -hHOST -pPASSWD DBNAME</p>
<div id="crp_related"><h3>Читать еще:</h3><ul><li><a href="http://odminblog.ru/nastrojka-skriptov-dlya-importa-baz-dannyx-v-mysql/" rel="bookmark" class="crp_title">Настройка скриптов для импорта баз данных в mysql</a></li><li><a href="http://odminblog.ru/kak-importirovat-bolshu-bazu-dannyx-v-mysql/" rel="bookmark" class="crp_title">Как импортировать большую базу данных в mysql</a></li><li><a href="http://odminblog.ru/ustanovka-servera-baz-dannyx-mysql-na-centos/" rel="bookmark" class="crp_title">Установка сервера баз данных mySQL на CentOS</a></li><li><a href="http://odminblog.ru/mysql-server-install/" rel="bookmark" class="crp_title">Установка сервера БД MySQL</a></li><li><a href="http://odminblog.ru/razblokirovka-bana-ip-adresa-v-cpanel/" rel="bookmark" class="crp_title">Разблокировка бана IP адреса в cpanel</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://odminblog.ru/defrag-innodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Борьба со спамом в MTA EXIM на основе ACL</title>
		<link>http://odminblog.ru/exim-acl-vs-spam/</link>
		<comments>http://odminblog.ru/exim-acl-vs-spam/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 00:20:18 +0000</pubDate>
		<dc:creator>anchous</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[IT безопасность]]></category>
		<category><![CDATA[Почтовые системы]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[почтовые системы]]></category>

		<guid isPermaLink="false">http://odmin.sane4ka.ru/?p=252</guid>
		<description><![CDATA[Как говорят знающие люди, хуже спама может быть только борьба со спамом. Но тем не менее с тем ужасным потоком, что обрушивается на незащищенного пользователя, необходимо что то делать, т.к. иначе конечному пользователю приходится тратить часы на разборы тех словесных завалов, что валятся ему в ящик.
Можно сколь угодно долго рассуждать относительно этичности использования RBL листов, [...]]]></description>
			<content:encoded><![CDATA[<p>Как говорят знающие люди, хуже спама может быть только борьба со спамом. Но тем не менее с тем ужасным потоком, что обрушивается на незащищенного пользователя, необходимо что то делать, т.к. иначе конечному пользователю приходится тратить часы на разборы тех словесных завалов, что валятся ему в ящик.<br />
Можно сколь угодно долго рассуждать относительно этичности использования RBL листов, но внедрение их автоматически снижает нагрузку спама в разы, тем более что для рассылок последнее время очень часто используются бот-сети, полностью имулирующие нормальное соединение.<br />
<span id="more-252"></span><br />
В этой связи MTA Exim имеет большое подспорье, в виде ACL листов, которые позволяют отсекать спам на основе стоп-слов, заголовков SMTP диалога, использования HELO в диалоге и многое другое.<br />
Ниже я привожу используемую мной конфигурацию файла exim.conf c фрагментом раздела ACL. Небольшие комментарии, надеюсь помогут разобраться, хотя  все должно быть понятно из описания логирования:</p>
<p>####################################</p>
<p>begin acl</p>
<p>#  Отбиваем всякие пакости на основе проверки содержимого письма<br />
acl_check_virus:<br />
deny  message   = Message rejected: virus found. NO PASARAN!(Ernesto Che Guevara).<br />
hosts  = *<br />
demime = *<br />
malware = *<br />
accept</p>
<p>acl_check_rcpt:<br />
accept  hosts = :<br />
accept  local_parts =<br />
deny    hosts =</p>
<p># Задаем почтовые адреса для внутреннего использования, с закрытой внешней пересылкой<br />
deny    message         = SRY, but address not permitted for external use!<br />
hosts           = !+relay_from_hosts<br />
local_parts     = all<br />
!authenticated  = *</p>
<p># пропускаем почту через RBL<br />
deny    message       = rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text\<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru</p>
<p>!authenticated  = *<br />
log_message   = found in $dnslist_domain<br />
dnslists      = relays.mail-abuse.org</p>
<p>deny    message       = rejected, $sender_host_address Open Proxy, see: $dnslist_domain\n$dnslist_text\<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru</p>
<p>!authenticated  = *<br />
log_message   = found in $dnslist_domain<br />
dnslists      = dnsbl.void.ru</p>
<p>deny    message       = Spam blocked see:http://www.spamcop.net/w3m?action=checkblock&amp;ip=$sender_host_address\<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru</p>
<p>!authenticated  = *<br />
log_message   = found in $dnslist_domain<br />
dnslists      = bl.spamcop.net</p>
<p>deny    message        = host is listed in $dnslist_domain<br />
!authenticated  = *<br />
log_message   = found in $dnslist_domain<br />
dnslists     =     opm.blitzed.org</p>
<p>deny    message       = rejected, $sender_host_address is listed in: http://relays.osirusoft.com/cgi-bin/rbcheck.cgi \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
!authenticated  = *<br />
!local_parts    = abuse                # Эта строка задает игнорирование данного правила для заданных адресов<br />
log_message   = found in spamguard.leadmon.net<br />
dnslists      = spamguard.leadmon.net</p>
<p>deny    message       = rejected, $sender_host_address is listed in: http://www.spamsources.fabel.dk/ \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
!authenticated  = *<br />
!local_parts    = abuse<br />
log_message   = found in http://www.spamsources.fabel.dk/<br />
dnslists      = spamsources.fabel.dk</p>
<p>deny    message       = rejected, $sender_host_address is listed in: http://www.spamhaus.org/ \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
!authenticated  = *<br />
!local_parts    = abuse<br />
log_message   = found in http://www.spamhaus.org/<br />
dnslists      =         sbl.spamhaus.org : \<br />
xbl.spamhaus.org : \<br />
pbl.spamhaus.org : \<br />
sbl-xbl.spamhaus.org : \<br />
zen.spamhaus.org</p>
<p># Проводим процедуру обратного звонка, т.е. при поступлении запроса на отправку от отпределенного адреса, происходит встречный запрос к серверу отправителя<br />
verify = sender/callout=90s,maxwait=120s<br />
verify = recipient/defer_ok/callout=90s/callout_defer_ok<br />
message = The sender cannot be verified. Check your email-client settings! \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
!local_parts    = abuse<br />
!sender_domains = +domains_disable_senderverify # в данном списке, объявленом в главной конфигурации, мы задаем исключения для доменов</p>
<p>deny    message       = rejected, $sender_host_address is listed in: http://mail-abuse.org/ \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
!authenticated  = *<br />
!local_parts    = abuse<br />
log_message   =   found in  www.mail-abuse.org<br />
dnslists        = blackholes.mail-abuse.org : \<br />
dialup.mail-abuse.org</p>
<p># Проверяем диалог на соответствие RFC<br />
deny message        = HELO/EHLO required by SMTP RFC<br />
condition           =  ${if eq{$sender_helo_name}{}{yes}{no}}<br />
delay           = TEERGRUBE</p>
<p># Проверяем корректность IP адреса отправителя, проверка направлена на манипуляции с HELO<br />
deny message        = Forged IP detected in HELO-$sender_helo_name<br />
hosts          = !+relay_from_hosts<br />
log_message    = Forged IP detected in HELO: $sender_helo_name<br />
!authenticated  = *<br />
condition      = ${if eq{$sender_helo_name}{$interface_address}{yes}{no}}<br />
delay          = TEERGRUBE</p>
<p># Проверяем корректность IP адреса отправителя, проверка направлена на манипуляции с HELO<br />
deny message        = Forged IP detected in HELO -$sender_helo_name != $sender_host_address<br />
hosts          = !+relay_from_hosts<br />
!authenticated  = *<br />
condition      = ${if match{$sender_helo_name}{\N^\d+(\.\d+){3}$\N} {yes}{no}}<br />
condition      = ${if eq{$sender_helo_name}{$sender_host_address} {no}{yes}}<br />
delay          = TEERGRUBE</p>
<p>deny message        = Forged hostname detected in HELO -$sender_helo_name<br />
hosts          = !+relay_from_hosts<br />
!authenticated  = *<br />
log_message     = Forged hostname detected in HELO -$sender_helo_name<br />
condition       = ${if match_domain{$sender_helo_name}{+local_domains} {yes}{no}}<br />
delay           = TEERGRUBE</p>
<p># Отбиваем больше одного пустого отправителя<br />
deny message        = Only one recipient accepted for NULL sender<br />
senders        = :<br />
condition      = ${if &gt;{$rcpt_count}{1} {1}}<br />
delay          = TEERGRUBE</p>
<p>####### Данный раздел перекрывает большие листы рассылки и перебор пользователей<br />
.ifdef ALLOWEDRCPTFAIL<br />
drop message   = too many unknown users (${eval:$rcpt_fail_count+1} failed recipients)<br />
log_message    = Dictionary attack (${eval:$rcpt_fail_count+1} failed recipients).<br />
condition      = ${if &gt;{$rcpt_fail_count}{${eval:ALLOWEDRCPTFAIL-2}} {1}{0}}<br />
delay          = ${eval:FAILEDRCPTDELAY*$rcpt_fail_count}s<br />
domains        = +local_domains<br />
hosts          = !+relay_from_hosts<br />
!authenticated  = *<br />
.endif<br />
deny message        = unknown user<br />
log_message    = Teergrube: dictionary attack (${eval:$rcpt_fail_count+1} failed recipients)<br />
condition      = ${if &gt;{$rcpt_fail_count}{0} {1}{0}}<br />
delay          = ${eval:FAILEDRCPTDELAY*$rcpt_fail_count}s<br />
domains        = +local_domains<br />
!verify         = recipient</p>
<p>deny hosts     = !+localadds:!+hosts_disable_callback:*<br />
sender_domains = !+envdomain_disable_callback:!+domains_callback_norandom:!+domains_disable_senderverify:*<br />
local_parts    = !+noenvfromcallback<br />
!verify         = sender/callout=90s,random<br />
delay          = TEERGRUBE</p>
<p># Проводим обратный звонок, для всех кроме специально заданных доменов и хостов<br />
deny hosts     = !+localadds:!+hosts_disable_callback:*<br />
sender_domains = !+domains_callback_norandom:!+domains_disable_senderverify<br />
local_parts    = !+noenvfromcallback<br />
!verify         = sender/callout=90s<br />
delay          = TEERGRUBE</p>
<p>############### Проводим проверки на уровне SMTP диалога</p>
<p>deny    message       = Wrong HELO &#8211; access denied. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
hosts         = !+relay_from_hosts<br />
!local_parts    = abuse<br />
!authenticated = *<br />
condition     = ${if !match{$sender_helo_name}{\N\w\.\w\N}{yes}{no}}</p>
<p>deny    message       = Too short HELO &#8211; access denied. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
hosts         = !+relay_from_hosts<br />
!local_parts    = abuse<br />
!authenticated = *<br />
condition     = ${if &lt;{${strlen:$sender_helo_name}}{5}{yes}{no}}</p>
<p>deny    message       = Bad HELO domain symbols &#8211; access denied. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
hosts         = !+relay_from_hosts<br />
!local_parts    = abuse<br />
!authenticated = *<br />
condition     = ${if match{$sender_helo_name}{\N_\N}{yes}{no}}</p>
<p>deny    message       = HELO is IP address &#8211; access denied. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
!local_parts    = abuse<br />
condition     = ${if isip{$sender_helo_name}}</p>
<p>deny    message       = Used HELO: $sender_helo_name not equal IP: $sender_host_address &#8211; access denied. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
!local_parts    = abuse<br />
!authenticated = *<br />
condition     = ${if match{$sender_helo_name}{\N^\[(\d+\.\d+\.\d+\.\d+)\]$\N}\<br />
{yes}{no}}<br />
condition     = ${if !eq{$sender_host_address}{${sg{$sender_helo_name}\<br />
{\N^\[(\d+\.\d+\.\d+\.\d+)\]$\N}{\$1}}}\<br />
{yes}{no}}</p>
<p>deny    message       = Must be letters in HELO domain &#8211; access denied. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
hosts         = !+relay_from_hosts<br />
!local_parts    = abuse<br />
!authenticated = *<br />
condition     = ${if match{$sender_helo_name}\<br />
{\N^[-\d\.]+$\N}{yes}{no}}</p>
<p>deny    message       = Wrong HELO domain &#8211; access denied. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
hosts         = !+relay_from_hosts<br />
!local_parts    = abuse<br />
!authenticated = *<br />
condition     = ${if match{$sender_helo_name}{\N^.*\.(arpa|local|localdomain)$\N}{yes}{no}}</p>
<p>deny    message       = Main Hostname in your HELO &#8211; access denied. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
hosts         = !127.0.0.1<br />
!local_parts    = abuse<br />
condition     = ${if match{$sender_helo_name}{$primary_hostname}{yes}{no}}</p>
<p># Блокировка попытки подмены IP адреса отправителя на адрес получателя<br />
deny     message       = &#8220;Go ahead, it&#8217;s mine IP!!!!&#8221;<br />
condition     = ${if eq{$sender_helo_name}{$sender_host_address} \<br />
{true}{false}}<br />
hosts         = * : !+relay_from_hosts</p>
<p># Запрет на использование в доменных именах различных приставок модемного доступа, на основе стоп-слов.<br />
deny    message       = Access denied &#8211; dsl/dialup/cable relays HELO detected, use your ISP SMTP server. \<br />
If you think that the system is mistaken, please report details to abuse@odminblog.ru<br />
hosts         = !+relay_from_hosts<br />
sender_domains = !+greedy_suckers    # Исключение для серверов, имеющих в имени, приведенные стоп-слова<br />
!local_parts    = abuse<br />
!authenticated = *<br />
condition     = ${if match{$sender_helo_name}\<br />
{\N^((\d{1,3}[\.\-_x]){3}|.*(\d{6,12}|wireless|broadband|modem|dyn|\<br />
cable|client|dial|unused|gprs|dsl|dhcp|user|vpn|home|dip|catv|(v|w)\<br />
lan|as(1|2|3|4|5)|dynamic(?&gt;ip)|host-ip|ppp|cdma|(?&lt;!mx|s)pool|unassigned)\<br />
.*\.[-a-z0-9]+\.\w+|.*(?&lt;!smtp).*(cust|host).*\.[-a-z0-9]+\.\w+)$\N}\<br />
{yes}{no}}</p>
<div id="crp_related"><h3>Читать еще:</h3><ul><li><a href="http://odminblog.ru/global-external-alias-using-exim/" rel="bookmark" class="crp_title">Организация глобального внутреннего алиаса средствами exim</a></li><li><a href="http://odminblog.ru/cheets-and-tips-exim/" rel="bookmark" class="crp_title">Всякие полезности для exim</a></li><li><a href="http://odminblog.ru/ogranichenie-dostupa-ssh-po-ip/" rel="bookmark" class="crp_title">Ограничение доступа ssh по IP в CentOS</a></li><li><a href="http://odminblog.ru/autoreply-for-exim/" rel="bookmark" class="crp_title">Автоответ в Exim</a></li><li><a href="http://odminblog.ru/cashing-dns-server-under-bind/" rel="bookmark" class="crp_title">Настройка кеширующего DNS сервера на базе BIND</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://odminblog.ru/exim-acl-vs-spam/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Работа с очередью Exim</title>
		<link>http://odminblog.ru/exim-queue/</link>
		<comments>http://odminblog.ru/exim-queue/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 13:28:33 +0000</pubDate>
		<dc:creator>anchous</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Почтовые системы]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[почтовые системы]]></category>

		<guid isPermaLink="false">http://odmin.sane4ka.ru/?p=208</guid>
		<description><![CDATA[Работая с Exim, постоянно наталкиваешься на какие то проблемы, когда письмо зависает в очереди, по тем или иным причинам, либо хост не доступен, либо криво настроены повторы   и встает задача, что то сделать с зависшими сообщениями. Собственно ниже, о том как бороться с очередями Exim

Способы очистки очереди:
Наиболее прямолинейный и грубый прием, тем не [...]]]></description>
			<content:encoded><![CDATA[<p>Работая с Exim, постоянно наталкиваешься на какие то проблемы, когда письмо зависает в очереди, по тем или иным причинам, либо хост не доступен, либо криво настроены повторы <img src='http://odminblog.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  и встает задача, что то сделать с зависшими сообщениями. Собственно ниже, о том как бороться с очередями Exim<br />
<span id="more-208"></span><br />
Способы очистки очереди:<br />
Наиболее прямолинейный и грубый прием, тем не менее позволяющий очистить очередь безусловно, но настоятельно не рекомендую его использовать:<br />
rm -rf /var/spool/exim/input/*</p>
<p>Корректный способ, имеющий так же результатом полную очистку очереди сообщений:<br />
service exim stop;<br />
rm -rf /var/spool/exim/input.bak;<br />
mv /var/spool/exim/input /var/spool/exim/input.bak;<br />
mkdir /var/spool/exim/input;<br />
chown mailnull.mail /var/spool/exim/input;<br />
chmod 750 /var/spool/exim/input;<br />
service exim start;</p>
<p>Официальный способ очистки очереди:<br />
exim -qff</p>
<p>Тоже самое с включенным дебаггом процесса:<br />
exim -qff -d9</p>
<p>Собственно все тоже самое можно проделать скриптом. Как условие- все исполняемые файлы должны быть прописаны полностью, и пользователь стартующий скрипт должен быть доверенным для Exim&#8217;а.<br />
Также данный скрипт может помочь в ситуации когда после доставки сообщения Exim куда то девает телосообщения, в результате чего письмо становится гостом и в листинге очереди exim -bp объем не указывается, в результате чего exiqgrep, не понимая о чем речь, выпадает с ошибкой.<br />
Собственно скрипт убивающий сообщения из очереди, но оговорюсь сразу- письма уходят навсегда.</p>
<p>#!/bin/bash</p>
<p># Определяем qualify_domain &#8212; он необходим для удаления всяческого мусора<br />
domain=`exim -bP | grep -i &#8220;^qualify_domain&#8221; | sed -e s/.*\=\ //g`</p>
<p># Прощаемся со всеми замороженными сообщениями<br />
exim -bpr | grep &#8216;<' | awk '{print $2}' | grep '-' | xargs exim -Mrm 2> /dev/null</p>
<p># при передаче скрипту параметра c, включаем агрессивный режим<br />
if [ "$1" == "c" ]; then</p>
<p>    # Удаляем все баунсы старше 20 минут<br />
    exiqgrep -o 1200 -if &#8216;^<>$&#8217; |xargs exim -Mrm<br />
    # Сносим все сообщения с адресами начинающихся со спец.символов, таких как нижний подчерк, минус или тире<br />
    exiqgrep -f &#8216;^<\_|^<\-|^<\|' -i | xargs exim -Mrm<br />
    exiqgrep -r '^\_|^\-|^\|' -i | xargs exim -Mrm<br />
    #Выкашиваем сообщения отправленные на китайские домены, за последние 20 минут<br />
    exiqgrep -f "$domain" -r '.cn$' -o 1200 -i | xargs exim -Mrm<br />
    # Удаляем любые сообщения отправленные скриптами, если они зависли в очереди более чем на 12 часов<br />
    exiqgrep -f "$domain" -o 43200 -i | xargs exim -Mrm<br />
    exit<br />
fi</p>
<p># В мягком режиме удаляем только frozen баунсы и письма с невозможными адресами в заголовках<br />
exiqgrep -zif '^<>$&#8217; |xargs exim -Mrm<br />
exiqgrep -f &#8216;^<\_|^<\-|^<\|&#8217; -i | xargs exim -Mrm<br />
exiqgrep -r &#8216;^\_|^\-|^\|&#8217; -i | xargs exim -Mrm </p>
<p>##########################################<br />
Работа с очередью Exim.<br />
Когда возникает необходимость удалить одно или несколько замороженных сообщений из очереди, мы прибегаем к утилите Exipick:<br />
exipick &#8211; показывает сообщения в очереди экзима<br />
exipick -z &#8211; показывает замороженные сообщения<br />
exipick -i &#8211; показывает ID сообщений</p>
<p>exim -Mrm ID &#8211; удаляет из очереди сообщение с определенным ID</p>
<p>В итоге получаем:<br />
exipick -zi | xargs exim -Mrm //очистит все замороженные сообщения из очереди<br />
exipick -i | xargs exim -Mrm //очистит все сообщения из очереди<br />
exipick -i | xargs exim -Mg  // Очистка почтовой очереди в MTA Exim. Сервер пытается немедленно доставить все письма, находящиеся в очереди. Если какое-либо письмо не удалось доставить, оно удаляется из очереди.</p>
<div id="crp_related"><h3>Читать еще:</h3><ul><li><a href="http://odminblog.ru/cheets-and-tips-exim/" rel="bookmark" class="crp_title">Всякие полезности для exim</a></li><li><a href="http://odminblog.ru/autoreply-for-exim/" rel="bookmark" class="crp_title">Автоответ в Exim</a></li><li><a href="http://odminblog.ru/global-external-alias-using-exim/" rel="bookmark" class="crp_title">Организация глобального внутреннего алиаса средствами exim</a></li><li><a href="http://odminblog.ru/upravlenie-avtopovtorami-v-exim/" rel="bookmark" class="crp_title">Управление автоповторами в Exim</a></li><li><a href="http://odminblog.ru/perenapravlenie-pochty-na-vneshnij-adres-sredstvami-dbmail/" rel="bookmark" class="crp_title">Перенаправление почты на внешний адрес средствами dbmail</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://odminblog.ru/exim-queue/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Автоответ в Exim</title>
		<link>http://odminblog.ru/autoreply-for-exim/</link>
		<comments>http://odminblog.ru/autoreply-for-exim/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 16:45:37 +0000</pubDate>
		<dc:creator>anchous</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Почтовые системы]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[почтовые системы]]></category>

		<guid isPermaLink="false">http://odmin.sane4ka.ru/?p=205</guid>
		<description><![CDATA[Часто бывает необходимо отсылать автоответ о том, что сотрудник временно отсутствует в офисе, причем желательно это производить на уровне сервера, а не почтового клиента. В Exim это можно сделать несколькими способами.
Первый способ подходит для классически настроенного Exim.

##########################################################
Раздел  ROUTERS CONFIGURATION:
autoreply:
driver = accept
require_files = /usr/home/exim/$local_part/.vacation.txt
condition = ${if or { \
{match {$h_precedence:} {(?i) junk&#124;bulk&#124;list}} \
{eq {$sender_address} {}} [...]]]></description>
			<content:encoded><![CDATA[<p>Часто бывает необходимо отсылать автоответ о том, что сотрудник временно отсутствует в офисе, причем желательно это производить на уровне сервера, а не почтового клиента. В Exim это можно сделать несколькими способами.<br />
Первый способ подходит для классически настроенного Exim.<br />
<span id="more-205"></span><br />
##########################################################<br />
Раздел  ROUTERS CONFIGURATION:</p>
<p>autoreply:<br />
driver = accept<br />
require_files = /usr/home/exim/$local_part/.vacation.txt<br />
condition = ${if or { \<br />
{match {$h_precedence:} {(?i) junk|bulk|list}} \<br />
{eq {$sender_address} {}} \<br />
{match {$h_subject:} {(ADV|Adv)}} \<br />
} {no} {yes}}<br />
no_expn<br />
senders = !+noautoreply_senders<br />
transport = address_reply<br />
unseen<br />
no_verify</p>
<p>##########################################################<br />
Раздел TRANSPORTS CONFIGURATION:</p>
<p>address_reply:<br />
driver = autoreply<br />
file = /usr/home/exim/$local_part/.vacation.txt<br />
file_expand<br />
once = /var/log/exim-$local_part-vacation.db<br />
once_repeat = 1d<br />
from = $local_part@odminblog.ru<br />
headers_add = &#8220;Auto_Repl:$reply_address&#8221;<br />
to = $sender_address<br />
subject = Re: ${rfc2047:$h_subject:}</p>
<p>##########################################################<br />
В разделе MAIN CONFIGURATION определяем местоположение списка исключений для автоответа</p>
<p>addresslist  noautoreply_senders = /etc/mail/autorep.noanswer</p>
<p>##########################################################</p>
<p>И собственно определяем сам список доменов, на письма с которых не нужно отсылать автоответ:</p>
<p>##########################################################<br />
####    /etc/mail/autorep.noanswer<br />
##########################################################</p>
<p>^.*-request@.*<br />
^owner-.*@.*<br />
^.*-owner@.*<br />
^.*-admin@.*<br />
^bounce-.*@.*<br />
^.*@bounce\..*<br />
^.*-outgoing@.*<br />
^.*-relay@.*<br />
^.*-bounces@.*<br />
^.*-bounce@.*<br />
^.*-confirm@.*<br />
^.*-errors@.*<br />
^mailer@.*<br />
^postmaster@.*<br />
^mailer-daemon@.*<br />
^mailer_daemon@.*<br />
^majordomo@.*<br />
^majordom@.*<br />
^mailman@.*<br />
^nobody@.*<br />
^reminder@.*<br />
^autoreply.*@.*<br />
^.*-autoresponder@.*<br />
^autoresponder@.*<br />
^listserv@.*<br />
^daemon@.*<br />
^server@.*<br />
^root@.*<br />
^noreply.*@.*<br />
^no-reply@.*<br />
^bounce@.*<br />
^news@.*<br />
^request.*@.*<br />
^httpd@.*<br />
^lighttpd@.*<br />
^www@.*<br />
^www-data@.*<br />
^nagios@.*<br />
^sales@.*<br />
^info@.*<br />
^fetchmail.*@.*<br />
^listmaster@.*<br />
^mailmaster@.*<br />
^webmaster@.*<br />
^squid@.*<br />
^support@.*<br />
^exim@.*<br />
scomp@aol.net</p>
<p>Теперь все что от нас требуется, это своевременно закинуть в домашнюю директорию пользователя файлик .vacation.txt с текстом автоответа. Кодировка по умолчанию будет utf-8</p>
<p>##########################################################<br />
На EximWiki несколько иная конфигурация которая выглядит довольно убедительно, но я её не пробовал, т.ч. просто привожу.<br />
##Router##<br />
uservacation:<br />
driver = accept<br />
domains = +local_domains<br />
condition = ${if or { \<br />
{ match {$h_precedence:} {(?i)junk|bulk|list} } \<br />
{ eq {$sender_address} {} } \<br />
{ def:header_X-Cron-Env: } \<br />
{ def:header_Auto-Submitted: } \<br />
{ def:header_List-Id: } \<br />
{ def:header_List-Help: } \<br />
{ def:header_List-Unsubscribe:} \<br />
{ def:header_List-Subscribe: } \<br />
{ def:header_List-Owner: } \<br />
{ def:header_List-Post: } \<br />
{ def:header_List-Archive: } \<br />
{ def:header_Autorespond: } \<br />
{ def:header_X-Autoresponse: } \<br />
{ def:header_X-Autoreply-From: } \<br />
{ def:header_X-eBay-MailTracker: } \<br />
{ def:header_X-MaxCode-Template: } \<br />
{ match {$h_X-Auto-Response-Suppress: } {OOF} } \<br />
{ match {$h_X-OS:} {HP Onboard Administrator} } \<br />
{ match {$h_X-MimeOLE:} {\N^Produced By phpBB2$\N} } \<br />
{ match {$h_Subject:} {\N^Yahoo! Auto Response$\N} } \<br />
{ match {$h_Subject:} {\N^ezmlm warning$\N} } \<br />
{ match {$h_X-FC-MachineGenerated:} {true} } \<br />
{ match {$message_body} {\N^Your \&#8221;cron\&#8221; job on\N} } \<br />
{ match {$h_Subject:} {\N^Out of Office\N} } \<br />
{ match {$h_Subject:} {\N^Auto-Reply:\N} } \<br />
{ match {$h_Subject:} {\N^Autoresponse:\N} } \<br />
{ match {$h_Subject:} {\N(Auto Reply)$\N} } \<br />
{ match {$h_Subject:} {\N(Out of Office)$\N} } \<br />
{ match {$h_Subject:} {\Nis out of the office.$\N} } \<br />
{ match {$h_X-Spam-Flag:} {\N^yes\N} } \<br />
{ match {$h_From:} {\N(via the vacation program)\N } } \<br />
} \<br />
} {no} {yes} \<br />
}<br />
require_files = /.vacation.msg<br />
user = ${lc:$local_part}<br />
senders = !+noautoreply_senders<br />
transport = vacation_transport<br />
unseen<br />
no_expn<br />
no_verify<br />
##########################################<br />
##Transport##<br />
vacation_transport:<br />
driver = autoreply<br />
log = /.vacation.log<br />
once = /.vacation.once<br />
once_repeat = 7d<br />
# Errors-To: is deprecated<br />
# There are arguments over whether this should send to the SMTP sender, or<br />
# to a From:, Reply-To: or Resent-From: header<br />
to = &#8220;${if def:h_Errors-To: {$h_Errors-To:} {$sender_address}}&#8221;<br />
file =  /.vacation.msg<br />
return_message<br />
subject = ${if def:h_subject: \<br />
{Auto: Re: ${rfc2047:${quote:${escape:${length_60:$h_subject:}} }} }\<br />
{Auto: I am away from my mail} \<br />
}<br />
user = ${lc:$local_part}</p>
<p>Файлы исключения для автоответа прописываются таким же образом.<br />
##########################################################</p>
<p>Второй способ значительно проще, и подразумевает запущенную связку Exim + DBmail + MySQL. В этом случае мы всего лишь определяем в разделе Transport следующую строку:<br />
address_reply:<br />
driver = autoreply</p>
<p>и в конфигурационном DBMAIL dbmail.conf определяем дерективу отвечающую за использование таблицы  auto_reply для автоответа.</p>
<p>AUTO_REPLY      = yes</p>
<div id="crp_related"><h3>Читать еще:</h3><ul><li><a href="http://odminblog.ru/exim-acl-vs-spam/" rel="bookmark" class="crp_title">Борьба со спамом в MTA EXIM на основе ACL</a></li><li><a href="http://odminblog.ru/global-external-alias-using-exim/" rel="bookmark" class="crp_title">Организация глобального внутреннего алиаса средствами exim</a></li><li><a href="http://odminblog.ru/exim-queue/" rel="bookmark" class="crp_title">Работа с очередью Exim</a></li><li><a href="http://odminblog.ru/cheets-and-tips-exim/" rel="bookmark" class="crp_title">Всякие полезности для exim</a></li><li><a href="http://odminblog.ru/perenapravlenie-pochty-na-vneshnij-adres-sredstvami-dbmail/" rel="bookmark" class="crp_title">Перенаправление почты на внешний адрес средствами dbmail</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://odminblog.ru/autoreply-for-exim/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

