Использование ClamAV, SpamAssassin, MIMEDefang для борьбы с нежелательной почтой в Sendmail

Материал из Xgu.ru

(Перенаправлено с sendmail/filtering)
Перейти к: навигация, поиск


ОС и ПО: FreeBSD, Sendmail, MIMEDefang, SpamAssassin, ClamAV, Mailgraph
В основу положена статья: Mail Server Filtering на O'Reilly
Перевод, редактирование: Игорь Чубин

Короткий URL: sendmail/filtering

Эта статья является переводом статьи [1] с небольшими дополнениями, исправлениями и пояснениями. В частности, добавлена информация об обучении SpamAssassin и другие сведения об этой программе, а также описана процедура настройки mailgraph для визуализации величины потока писем, спама и вирусов.


Содержание

[править] Введение

Большая часть того, что приходит на почтовый сервер совсем не желательно: это вирусы, спам и исполняемый мусор. Даже если у вас на десктопе стоит не Windows, всё равно, появление нового вируса вызывает быстрое заполнение почтового ящика. Если вы администратор, то вы знаете, что на ваших пользователей нельзя положиться в том, что они не будут кликать на прикрепленных exe-файлах. Добавьте к этому огромный поток спама и прочего хлама, и вы почувствуете, что дальше так продолжаться не может. Защита от спама и вирусов может сэкономить много вашего времени и сил.

В статье описывается процедура настройки для FreeBSD, но с небольшими поправками, она может быть применена к любой Unix/Linux-системе, в которой используется Sendmail.

Здесь показано, как с помощью свободно распространяемых программ организовать защиту от вирусов, а также ограничение нежелательного контента в электронных письмах и спама.

Используются следующие программы:

  • Sendmail - почтовый сервер;
  • MIMEDefang - программа управления контентом;
  • ClamAV - антивирус;
  • SpamAssassin - программа по борьбе со спамом и нежелательной корреспонденцией.

Cвязка этих программ, настроенная соответствующим образом, позволяет практически полностью избавиться от вирусов/спама, без всякого вреда для легальных писем.

В Sendmail есть специальный интерфейс - milter API (milter = mail filter), предназначенный для подключения сторонних программ. Это означает, что можно легко добавить дополнительную функциональность к Sendmail'у, которой у него раньше не было.

В данном случае через milter к Sendmail'у будет подключен MIMEDefang, а программы SpamAssassin и ClamAV будут в свою очередь подключаться к MIMEDefang'у.

Для того чтобы связка заработала, нужно проинсталлировать все компоненты, настроить их соответствующим образом и запустить в правильном порядке.

[править] Инсталляция ClamAV

Установите ClamAV из каталога /usr/ports/security/clamav с помощью команды make install. Пока что не вызывайте make clean! В каталоге сборки work/ есть примеры вирусов, на которых позже можно будет проверить, что программа работает правильно.

Из порта будет установлены:

  • главный сканер вирусов,clamd;
  • утилита командной строки clamscan;
  • предварительная база сигнатур вирусов;
  • документация;
  • вспомогательные программы.

В нормальном режиме работы clamd должен работать постоянно, а другие программы, которые желают проверить файл на наличие вирусов, будут связываться с ним и передавать ему соответствующие файлы.

Запустите clamd из командной строки. Вообще-то его нужно конфигурировать, но в этот раз запуск выполняется только с целью проверки. Находясь в каталоге порта запустите проверку текущего каталога на наличие вирусов.

# clamscan -r -l testoutput.txt

Ключ -r заставляет clamscan выполнять рекурсивную проверку каталога. А ключ -l указывает на то, что результат сканирования нужно записать в файл testoutput.txt.

В результате выполнения команды clamscan проверит все файлы в текущем каталоге на вирусы и выведет сведения о каждом из них. В лог-файле testoutput.txt будет сжатый отчёт, в котором будут присутствовать только список инфицированных файлов и статистическая информация о проверке. Для версии ClamAV 0.65, должно быть найдено 5 инфицированных файлов.

Теперь нужно сконфигурировать ClamAV для совместной работы с MIMEDefang. Его главный конфигурационный файл /usr/local/etc/clamd.conf. Многие возможности и функции программы являются конфигурируемыми, многие можно по желанию отключить. Дополнительную информацию об опциях можно получить в man-странице файла clamd.conf.

Как минимум, нужно изменить пользователя, от имени которого будет работать ClamAV. Его нужно установить равным mailnull, это пользователь от имени которого работают Sendmail и MIMEDefang.

#User clamav
User mailnull

После того как вы изменили эти настройки, нужно также изменить права доступа на каталоги, в которые ClamAV выполняет запись.

# chown -R mailnull:mailnull /var/run/clamav/
# chown -R mailnull:mailnull /var/log/clamav/

После того как заработал сканер, можно заняться обновлением баз. Вирусные базы поддерживаются добровольцами со всего мира. Когда появляется новый популярный вирус, его сигнатуры и описание добавляются в базы в течение нескольких часов. На момент написания оригинальной статьи (апрель 2004) в базе содержалось 10,131 вирусов, а на момент написания перевода (октябрь 2006) уже 71,517.

Для начала нужно запустить freshclam от имени root'а, чтобы проверить, что программа может связаться с одним из зеркал серверов описания вирусов и скачать с него базу. Убедитесь, что программа прежде чем завершиться проверяет свежесть файлов main.cvd и daily.cvd.

Когда уже известно, что обновление успешно выполняется, включите демон freshclam для выполнения периодических обновлений. Единственный нюанс связан с правами, с которыми работает freshclam. Демон freshclam работает с правами clamav, а ClamAV - с правами mailnull, поэтому freshclam не сможет писать файлы в каталог журналов ClamAV. Проще всего изменить права, с которыми будет работать freshclam или положить его журналы в другое место.

В /etc/rc.conf нужно добавить строки

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_freshclam_flags="-u mailnull --checks=1 --daemon-notify=/usr/local/etc/clamd.conf"

или

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_freshclam_flags="--checks=1 --datadir=/usr/local/share/clamav [без переноса]
        --daemon-notify=/usr/local/etc/clamd.conf --log=/var/log/clamav/freshclam.log"

в зависимости от того какой вариант вы выберите. В первом случае freshlam работает с правами mailnull, а во втором он кидает логи в другое место.

После следующей перезагрузки система запустит сканер вирусов и программу обновления базы сигнатур ClamAV. Если будут проблемы с запуском freshclam, попробуйте создать журнал и сделать его принадлежащим clamav.

# touch /var/log/clamav/freshclam.log
# chown clamav:clamav /var/log/clamav/freshclam.log


[править] SpamAssassin

SpamAssassin это одна из самых известных программ по борьбе со спамом. Это Perl-скрипт, который анализирует письмо, сравнивает его с рядом шаблонов, и в зависимости от результатов анализа присваивает каждому письму определённое число, спам-рейтинг. Например, ключевые слова, такие как "Viagra", или фразы, такие как "Make money fast" увеличивают рейтинг письма. Рейтинг также увеличивается из-за отсутствия адреса получателя в заголовке или неизвестного имени для IP-адреса отправителя. Почтовый клиент, потом, может удалять письма в зависимости от набранного спам-рейтинга.

В действительности, методы, которые SpamAssassin использует для обнаружения спама значительно шире:

  • Проверка заголовков письма на правильность и соответствие стандартам Интернета
  • Проверка заголовков и тела письма на наличие определённых фраз и строк, часто встречающихся в спам-письмах. Проверка может выполняться на нескольких языках.
  • Заголовок и тело письма могут проверяться по онлайн-базам, содержащим контрольные суммы спам-сообщений
  • IP-адрес отправителя письма может проверяться по онлайн-спискам с адресами известных спаммеров или подозрительных почтовых серверов
  • Определённые адреса, хосты или домены могут быть занесены в чёрный или белый список. Белый список может быть создан автоматически, основываясь на истории отправленных сообщений

[править] Инсталляция SpamAssassin

Установите SpamAssassin из порта /usr/ports/mail/p5-Mail-SpamAssassin.


Поскольку SpamAssassin будет работать как часть MIMEDefang, конфигурировать его сам по себе не стоит. Его конфигурация входит в состав MIMEDefang. Сейчас можно переходить к конфигурированию MIMEDefang.

[править] Инсталляция MIMEDefang

MIMEDefang может менять письма множеством различных способов; с его помощью можно очень гибко организовать регулировку прав по использованию почтовой системы. В данном случае, главная причина использования MIMEDefang это обрубать лишние атачменты и скоординировать действия ClamAV и SpamAssassin.

Порт MIMEDefang находится в /usr/ports/mail/mimedefang. Также как и SpamAssassin он написан на Perl. Также как и ClamAV он работает в режиме демона. Это позволяет избежать большой нагрузки на систему при старте Perl-скрипта при получении каждого почтового сообщения. При инсталляции инсталляционный скрипт MIMEDefang определяет, что в системе присутствуют ClamAV и SpamAssassin и выполняет сборку соответствующим образом.

Конфигурационный файл MIMEDefang, /usr/local/etc/mimedefang/mimedefang-filter, содержит фрагменты Perl-кода, который интегрируется в код главного демона MIMEDefang. Если вы не очень хорошо разбираетесь в Perl, не переживайте; просто проверяйте что вы добавили новые строчки именно в том виде, в каком они показаны ниже (вообще, автор статьи рекомендует и переводчик присоединяется, потратить немного времени на изучение Perl, даже если вы не программист; неизвестно, кому он ещё полезней - программистам или администраторам Unix).

Нужно установить несколько переменных в mimedefang, такие как $AdminAddress и $AdminName. Если отдельный человек будет заниматься администрированием MIMEDefang, укажите его имя и адрес, в противном случае, можете указать обычный адрес почтового администратора. (Кавычки указывать обязательно. Двойные или одинарные имеет значение, поэтому не нужно их менять.)

$AdminAddress = 'postmaster@blackhelicopters.org';
$AdminName    = "Mail Administrator";

MIMEDefang время от времени отправляет сообщения с информацией о выполненных действиях. Укажите адрес, на который должны приходить письма, в переменной $DaemonAddress.

$DaemonAddress = 'mimedefang@blackhelicopters.org';

Остальные настройки в этом файле опциональны. Просмотрите, какие настройки вообще можно делать, возможно, какие-то из них покажутся вам полезными. Там же есть примеры, как настроить блокировку сообщений с слишком большим количеством частей MIME (MIME parts). По умолчанию включены функции антиспама и антивируса и постановки письма на карантин.

Можно довериться MIMEDefang и просто отбрасывать письма, зараженные с точки зрения MIMEDefang вирусами. Если вы не хотите ставить письма с вирусами на карантин, просто закомментируйте в файле mimedefang-filter эти строки:

# but quarantine the part for examination later.  Comment
# the next line out if you don't want to bother.
action_quarantine($entity, "A known virus was discovered and deleted.  \
        Virus-scanner messages follow:\n$VirusScannerMessages\n\n");

Если закомментировать эти строки, MIMEDefang заставит Sendmail отбрасывать входящие письма с вирусами сразу же.

Переменная $bad_exts содержит список расширений файлов, которые MIMEDefang будет блокировать. Можете расширить или, наоборот, сократить этот список, если нужно. Для того чтобы запретить, например, пересылку файлов с расширением .mp3, нужно просто добавить в список это расширение и перезапустить MIMEDefang.

Для того чтобы MIMEDefang стартовал во время загрузки системы, в каталоге /usr/local/etc/rc.d найдите файл mimedefang.sh-dist и переименуйте его в mimedefang.sh. Если там уже есть такой файл, значит это действие выполнять не нужно - MIMEDefang уже будет стартовать.

Нужно чтобы после завершения загрузки системы работали MIMEDefang и clamd; SpamAssassin вызывает MIMEDefang, так что выполнять его запуск при загрузке не нужно.


[править] Проверка правильности инсталляции MIMEDefang

На первом этапе сборки MIMEDefang выполняется скрипт ./configure, который осуществляет поиск проинсталлированных в системе ClamAV и SpamAssassin. При условии, что они проинсталлированы, скрипт обнаруживает их и дальнейшую сборку выполняет с учётом необходимости поддержки этих программ.

Если вы не уверены, что при сборке MIMEDefang увидел ClamAV и SpamAssassin, вы можете убедиться в этом следующим образом: воспользуйтесь ключом -features программы. Вы получите полный список возможностей MIMEDefang с указанием на соответствующие модули. Отфильтровав этот список по интересующим нас словам, можно убедиться что MIMEDefang интегрирован с ClamAV/SpamAssassin или нет:

# mimedefang.pl -features | egrep -i '(clam|spamass)'
SpamAssassin                  : yes
Virus:CLAMAV                  : yes (/usr/local/bin/clamscan)
Virus:CLAMD                   : yes (/usr/local/sbin/clamd)
Mail::SpamAssassin            : Version 3.001003

Если в результате поиска обнаружилось, что параметры имеют значения ~no~ или вообще отсутствуют, MIMEDefang не увидел соответствующую программу. Возможно, это связано с тем, что при он устанавливался до того как в системе были инсталлированы ClamAV и SpamAssassin. Нужно выполнить сборку повторно.


[править] Точное имя сокета для связи MIMEDefang - ClamAV

MIMEDefang и ClamAV используют файловый сокет (доменное гнездо UNIX) для обмена информацией между собой. Несовпадение имён сокетов в настройках одной и другой программы может привести к тому, что проверка писем на наличие вирусов выполняться не будет.

В статье [2], которая была положена в основу начальной версии этой страницы указывается имя сокета /var/spool/MIMEDefang/clamd.sock. В последующих версиях MIMEDefang имя сокета изменилось, и сейчас оно такое: /var/run/clamav/clamd.

Например, если у вас в скрипте MIMEDefang /usr/local/bin/mimedefang.pl указан сокет
$ClamdSock  = "/var/run/clamav/clamd";
тогда Вам надо соответствующим образом изменить имя сокета в конфигурационном файле ClamAV /usr/local/etc/clamd.conf на
LocalSocket /var/run/clamav/clamd

Имя этого сокета нужно указать в конфигурационном файле ClamAV, и такой же сокет должен использоваться в MIMEDefang. Если сокет или в одном, или в другом месте указан неверно (т.е. если имена не совпадают), в системном журнале будет появляться сообщение об ошибке. Оно будет появляться каждый раз, когда MIMEDefang захочет воспользоваться помощью ClamAV для проверки файла.

Nov  4 15:14:14 fbsd1 mimedefang.pl[78707]: kA4DED6b078772: Could not connect to clamd daemon at /var/run/clamav/clamd
Nov  4 15:14:14 fbsd1 mimedefang.pl[78707]: Problem running virus scanner: code=999, category=cannot-execute, action=tempfail

Имя сокета, указанное в сообщении, естественно, может отличаться.

Проще всего изменить конфигурацию ClamAV и заставить слушать его на нужном MIMEDefang'у сокете. Как это сделать, было рассказано выше. Если же по какой-то причине, сделать это невозможно, найти файл в MIMEDefang, где указано имя сокета, можно следующим образом (метод подходит только для FreeBSD, для других систем вместо pkg_info нужно использовать соответствующую программу просмотра пакета):

# pkg_info -Lx defang | grep / | while read file
> do
> grep /var/run/clamav/clamd $file /dev/null
> done
/usr/local/bin/mimedefang.pl:$ClamdSock  = "/var/run/clamav/clamd";

[править] Настройка SpamAssassin для использования с MIMEDefang

MIMEDefang вызывает SpamAssassin с конфигурационным файлом /usr/local/etc/mimedefang/sa-mimedefang.cf. Если вы хотите делать какие-то изменения в конфигурации SpamAssassin'а, меняйте этот файл. Редактирование других файлов ни к чему не приведёт, поскольку SpamAssassin их даже не будет читать. Ниже рассматриваются самые-самые базовые вопросы по конфигурированию SpamAssassin'а, вообще же конфигурация может быть намного более гибкой.

Отрегулируйте чувствительность фильтра с помощью переменной required_hits. По умолчанию её значение равно 5. Когда в результате анализа, SpamAssassin ставит спам-оценку письму выше чем 5, он маркирует письмо соответствующим образом, и у клиента есть возможность отфильтровать письмо и поступить с ним по собственному усмотрению.

Другая важная вещь это белый список (whitelist), в ней можно указывать адреса, письма с которых никогда нельзя воспринимать как спам. Например, сестра автора англоязычной статьи любит частенько отправлять письма перегруженные разметкой HTML, картинка и прочей дрянью, ну прям как заправский спамер. Если указать её адрес в строке whitelist_from, SpamAssassin никогда не будет считать её письма спамом. Даже в том случае, если она отфорвардит самый отъявленный спам порнографического содержания с вопросом "Что это?". Аналогичным образом blacklist_from позволяет блокировать всю почту с определённых адресов.

[править] Упрощение фильтрации на клиенте

MIMEDefang не позволяет SpamAssassin'у менять письмо! Вместо этого SpamAssassin сообщает spam-рейтинг письма MIMEDefang'у, и изменения делает уже он. В FAQ на MIMEDefang есть несколько хороших советов касающихся того, как настроить вывод информации в желаемом формате.

По умолчанию, MIMEDefang добавляет одну строку заголовка, которая содержит спам-рейтинг письма, вычисленный SpamAssassin'ом, и последовательность звездочек, соответствующую величине рейтинга, как в показанном ниже примере.

X-Spam-Score: 21.207 (*********************)

Для многих почтовых клиентов фильтрация по такому заголовку оказывается непростым делом: они не могут сравнивать численный рейтинг. С помощью небольшого изменения в MIMEDefang вы можете сильно облегчить жизнь таким пользователям.

В файле /usr/local/etc/mimedefang/mimedefang-filter будет такая строка;

action_change_header("X-Spam-Score", "$hits ($score) $names");

Если поменять местами переменные $score и $hits, пользователи смогут организовать фильтрацию по количеству звездочек.

action_change_header("X-Spam-Score", "$score ($hits) $names");

Теперь заголовок в письме будет выглядеть так:

X-Spam-Score: ************* (13.002)

Теперь можно написать правило, которое будет находить определенное количество звездочек за X-Spam-Score: и фильтровать сообщения по этому признаку. Теперь пользователи сами, самостоятельно, могут регулировать величину барьера для спама. А на сервере можно ужесточить правила проверки, ведь письмо все равно дойдет до пользователя, и он будет уже сам решать, какие письма считать спамом, а какие нет. Если пользователь слишком сильно зажмет спам, и потеряет из-за этого какое-то важное письмо, виноват будет он сам.

Для придания заголовку письма со спамом привычного вида типа ***SPAM*** надо либо заменить строку
action_change_header("X-Spam-Score", "$hits ($score) $names");
на строку
action_change_header('Subject', "***SPAM*** $Subject");
либо добавить после или до строки
action_change_header("X-Spam-Score", "$hits ($score) $names");
и вуаля - получаем заголовок
***SPAM*** Providing quality meds since 1996 (реальный заголовок пришедшего спама)

== Обучение SpamAssassin ==

Если у вас есть файлы с отъявленным спамом,
и файлы с гарантированно хорошими письмами,
вы можете провести обучение SpamAssassin
и рассказать ему, что такое хорошо и что такое плохо.

Пусть, например:
* '''Mail/spam''' - файл со спамом;
* '''Mail/goodmail''' и '''/var/spool/mail/$LOGNAME''' - файлы с хорошими письмами (неспам, ham);
<pre>
$ ls Mail
spam    goodmail

О том, как обучать SpamAssassin можно подглядеть в статье http://www.3nity.ru/viewtopic.htm?t=1459, автором которой является setar

Вот выдержка из статьи
Теперь как учить - в комплекте есть программа sa-learn ей нужно скормить каталог с письмами ham и spam

сами письма нужно иметь в немодифицированном виде (без forward`а и прочих почтовых пересылок перенаправлений)
я их получал прямым экспортом из программы TheBat в формат .MSG
для удобства завёл специальные папочки в которых скидывал примеры писем, а в конце дня делал экспорт на сервер.

Для процесса обучения не требуется восстанавливать оригинальный заголовок письма вырезая пометку 
****SPAM**** и оценочное содержимое заголовка, система их просто игнорирует.

Для автоматизации процесса обучения я написал http://www.3nity.ru/files/antispam/learn маленький скриптик 
который забирает файлы сообщений с файлового сервера по ftp и скармливает их обучалке.

Обучение до включения в работу системы Баеса у меня заняло 4 дня. 

Обучение выполняется следующим способом:

$ sa-learn --mbox --spam Mail/spam
$ sa-learn --mbox --ham Mail/goodmail
$ sa-learn --mbox --ham /var/spool/mail/$LOGNAME


Просмотр результатов обучения:

$ sa-learn --dump data | sort -n
0.000    0    110 1072880922  discussion
0.000    0    112 1071162080  HMBOX-Line:2002
0.000    0    112 1072907632  modify
0.000    0    113 1072915324  H*u:Windows
0.000    0    115 1072900545  Sender
...
1.000  310      0 1071162080  N:HEADER_NBITS
1.000  316      0 1072026198  8-bit
1.000  323      0 1071162080  HEADER_8BITS
1.000  328      0 1072026198  N:N-bit
1.000  394      0 1072910571  Forged

[править] Интеграция с Sendmail

Теперь, когда у вас есть рабочая инсталляция MIMEDefang/SpamAssassin/ClamAV, их как-то нужно подключить к Sendmail. В современном Sednmail'е есть Makefile, который упрощает создание конфигурационного файла. В каталоге должен быть .mc файл с названием хоста. Если такого нет, скопируйте файл freebsd.mc в файл, который называется имя.вашего.хоста.mc. После этого в файле /etc/make.conf укажите имя этого файла в переменной SENDMAIL_MC.

SENDMAIL_MC=/etc/mail/bewilderbeast.mc

Когда будете пересобирать систему, эта переменная укажет make использовать ваш .mc файл вместо стандартного. Иначе после каждого make installworld пришлось бы изменять конфигурацию Sendmail заново. Правда, теперь после каждого апргрейда системы не забудьте сравнить новый freebsd.mc с ваши .mc, для того чтобы не пропустить каких-то важных изменений в конфигурации Sendmail.

В ваш новый .mc-файл добавьте следующие строки:

MAIL_FILTER(`mimedefang', `S=local:/var/spool/MIMEDefang/mimedefang.sock, [без переноса]
        F=T, T=C:15m;S:4m;R:4m;E:10m')dnl
define(`confINPUT_MAIL_FILTERS', `mimedefang')dnl

Находясь в каталоге /etc/mail нужно запустить команду make all, которая перестроит файл sendmail.cf. После этого нужно перезапустить Sendmail с новым конфигурационным файлом.


[править] Запуск MIMEDefang

На моей машине 6.3-RELEASE FreeBSD возникла проблема с запуском установленного MIMEDefang 2.64 с помощью скрипта автозагрузки /usr/local/etc/rc.d/mimedefang.sh

Опытным путем была найдена возможность запустить MIMEDefang из консоли
/usr/local/bin/mimedefang-multiplexor -U mailnull
/usr/local/bin/mimedefang -p /var/spool/MIMEDefang/mimedefang.sock -m /var/spool/MIMEDefang/mimedefang-multiplexor.sock -U mailnull
Для автоматического запуска при старте сервера надо добавить эти строки в файл /etc/rc.local и изменить права на запуск у скрипта /usr/local/etc/rc.d/mimedefang.sh
# chmod -x /usr/local/etc/rc.d/mimedefang.sh


[править] Проблема интеграции ClamAV и Sendmail

Спасибо Алексею Медведеву (БХФЗ)

Ниже описывается проблема, которая может возникнуть при интеграции почтовика Sendmail и антивируса ClamAV в FreeBSD. В приведённом примере Mimedefang не используется, но похожая проблема может возникнуть и при использовании Mimedefang.


Имена сокетов для связи Sendmail и ClamAV, указанные в соответствующих конфигурационных файлах, одинаковы:

                                                                                                                   
  sendmail.cf:   
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav/clmilter, T=S:4m;R:4m')                                                 
  clamd.conf:
LocalSocket /var/run/clamav/clmilter                                                                                        
                                                                                                                                            

Sendmail перезапускается нормально:

                                                                                                
%# /etc/rc.d/sendmail restart                                                                                                                   
Stopping sendmail.                                                                                                                           
Starting sendmail.                  

А clamav-milter не запускается

                                                                 
%# /usr/local/etc/rc.d/clamav-milter start                                                                                                      
Waiting for clamd socket.. 60.. 50.. 40.. 30.. 20.. 10..                                                                                     
There is no clamd socket (/var/run/clamav/clamd)!                                                                                            

при этом через некоторое время падает sendmail, в /var/log/mailog  :

                                                                          
Cannot allocate memory                                                                                                                       
Jul  9 13:22:57 mail sm-mta[1580]: l69AMv1o001580: SYSERR(root): out of memory: Cannot allocate memory                                       
Jul  9 13:23:08 mail sm-mta[1581]: l69AN8um001581: SYSERR(root): out of memory: Cannot allocate memory                                       
Jul  9 13:23:39 mail sm-mta[1586]: l69ANdPM001586: SYSERR(root): out of memory: Cannot allocate memory                         

Нашел на форуме opennet.ru такое сообщение:

После нескольких дней войны - нашёл таки причину.                                                                                            
Скорее всего у тебя в sysctl.conf стоит                                       
                                                               
    kern.ipc.somaxconn=32768                                                                                                                     

при таком значениии перестают нормально работать unix-sockets                                                                                
и в результате ты наблюдаешь                                                                                                                 
    
    Milter (clmilter): error connecting to filter: Connection refused by /var/run/clamav/clmilter.sock                                           

Я уменьшил это значение до kern.ipc.somaxconn=16384                                                                                          
                                                                                                                                           

Все так и сделал, запустил:

%# clamav-milter -o local:/var/run/clamav/clmilter.sock                                                        

и все заработало.

[править] Проверка

Самый простой способ проверить работоспособность настроенной связки, это отправить себе письмо заражённое вирусом.

Воспользуемся примером вируса, который распространяется в составе дистрибутива ClamAV. В дистрибутиве исходного кода ClamAV (если инсталляция выполнялась из портов, то он будет находиться в каталоге work/ порта clamav) есть каталог test/, содержащий примеры вирусов. Они использовались при проверке ClamAV выше.

# cd /usr/ports/security/clamav/work/clamav-*
# ls test/
README          clam.cab        clam.exe.bz2    clam.zip
clam-error.rar  clam.exe        clam.rar        mbox

Перешлите себе файл clam.zip как прикреплённый файл. Вирус должен быть обнаружен MIMEDefang: письмо заблокировано, а в системном журнале должна появиться строка с сообщением об обнаруженном вирусе.

# grep -r 'Discarding because' /var/log/*
/var/log/maillog:Nov  4 15:20:16 fbsd1 mimedefang.pl[78707]: Discarding because of virus ClamAV-Test-File

Строка содержит слова Discarding because, поэтому поиск выполнялся по ним. Сообщение об обнаруженном вирусе было найдено в файле /var/log/maillog. Обнаруженный вирус был классифицирован как ClamAV-Test-File.


Проверить, работает ли SpamAssassin можно, отправив письмо с отъявленным спамом на один из защищаемых адресов. Если такое письмо отсутствует, его можно написать вручную, правда, если не очень стараться, то спамоподобия может не хватить. В этом случае в заголовках прошедшего проверку письма не появится ни строчки о спаме.

Чтобы увидеть такие строки, нужно занизить критический уровень спам-рейтинга, так чтобы срабатывание выполнялось даже на самых безобидных письмах. Измените значение required_hits в файле /usr/local/etc/mimedefang/sa-mimedefang.cf до 1 и перезапустите MIMEDefang.

# /usr/local/etc/rc.d/mimedefang.sh restart
Shutting down mimedefang:                                   [  OK  ]
Shutting down mimedefang-multiplexor:                       [  OK  ]
Waiting for daemons to exit.
Starting mimedefang-multiplexor:                            [  OK  ]
Starting mimedefang:                                        [  OK  ]

Не забудьте после проверки вернуть спам-порог обратно и перезагрузить MIMEDefang!

Отправьте с другой машины письмо, содержащее слово viagra в теле.

$ echo viagra | mutt -s 'Spam Test' devi@fbsd1.xgu.ru

Письмо должно быть классифицировано как спам. Вот как выглядит полученное письмо:

Date: Sun, 5 Nov 2006 12:06:01 +0200                                                                                                         
To: devi@fbsd1.xgu.ru                                                                                                                        
Subject:  Spam Test                                                                                                                          
User-Agent: Mutt/1.5.6+20040907i                                                                                                             
From: devi@kievnet.kiev.ua                                                                                                                   
X-Spam-Score: 2.44 (**) DRUGS_ERECTILE,RCVD_BY_IP                                                                                            
X-Scanned-By: MIMEDefang 2.57 on 217.27.159.219                                                                                              
                                                                                                                                             
[-- Вложение #1 --]                                                                                                                          
[-- Тип: text/plain, кодировка: 7bit, размер: 0,1K --]                                                                                       
                                                                                                                                             
viagra                                                                                                                                       
                                                                                                                                             
[-- Вложение #2: SpamAssassinReport.txt --]                                                                                                  
[-- Тип: text/plain, кодировка: 7bit, размер: 0,6K --]                                                                                       
                                                                                                                                             
Spam detection software, running on the system "fbsd1.xgu.ru", has                                                                           
identified this incoming email as possible spam.  The original message                                                                       
has been attached to this so you can view it (if it isn't spam) or label                                                                     
similar future email.  If you have any questions, see                                                                                        
The administrator of that system for details.                                                                                                
                                                                                                                                             
Content preview:  viagra [...]                                                                                                               
                                                                                                                                             
Content analysis details:   (2.4 points, 0.0 required)                                                                                       
                                                                                                                                             
 pts rule name              description                                                                                                      
---- ---------------------- --------------------------------------------------                                                               
 0.3 RCVD_BY_IP             Received by mail server with no name                                                                             
 2.2 DRUGS_ERECTILE         Refers to an erectile drug                         

[править] Заключение

Если сделать tail -f /var/log/maillog, можно увидеть, как MIMEDefang обрабатывает каждое сообщение. Вирусы отбрасываются сразу же, спам маркируется и передается пользователю. Даже маленькие почтовые серверы могут получить сотни вирусов и тысячи спам-писем в день. Теперь такие письма обнаруживаются. И вы можете не так сильно беспокоиться о том, какой мусор путешествует по Интернет.

[править] Дополнительная информация

Дополнительные сведения о совместном использовании Sendmail, ClamAV, SpamAssassin и MIMEDefang могут быть найдены здесь:

Другие сведения о борьбе со спамом:


[править] Материалы по настройке почтовых систем на Xgu.ru

[править] Материалы по ClamAV на xgu.ru