Подробно о настройке


OpenBSD, Postfix, SpamAssassin, Amavisd-new, ClamAV

http://antispam.b2r.ru/antispam_translate.html

Версия документа: 1.1; Дата:Tuesday August 17, 2004 19:52;
Статус: перевод закончен. проверка завершена.
Статус: документ обновлён, добавлен новый раздел

Система фильтрации и защиты от спама
(OpenBSD + Postfix + SpamAssassin + Amavisd-new + DCC + Razor) + ClamAV

Автор: Scott Vintinner
Перевод: OVERDRiVE <sidix@b2r.ru.>
Последнее изменение: 6 Мая 2004
Последнюю версию этого руководства можно найти по адресу:
http://www.flakshack.com/anti-spam

Содержание

* Кратко о документе
* О чём этот документ
* Замечания и договоренности
* Схема работы системы
* Настройка Firewall
* Какое нужно "железо"
* Установка OpenBSD
* Конфигурация OpenBSD
* Удаление Sendmail из системы
* Добавление учётных записей
* Инсталляция и конфигурация Postfix
* Инсталляция необходимых модулей для Perl
* Установка и конфигурация SpamAssassin
* Установка Razor
* Установка DCC
* Установка BerkleyDB [добавление]
* Установка и конфигурирование Amavisd-new
* Установка и настройка отчётов Postfix
* Отчёты о спаме
* Что делать, если мне надо отключить, на время, amavisd-new
и/или SpamAssassin ?
* Производительность
* Настройки системы для нескольких доменов
* Антивирусная подсистема
* Скрипты, используемые в системе
* Legal staff

Кратко о документе

* построена на базе документации Fairly-Secure Anti-SPAM Gateway
Using OpenBSD, Postfix, Amavisd-new, SpamAssassin, Razor and DCC
(оригинал: http://www.flakshack.com/anti-spam/)


* Adding ClamAV Anti-Virus to an Anti-SPAM Gateway
(оригинал: http://www.xmission.com/%7Ekn/AddClamAV/)


* переведена на русский мной, мной же проинсталлена, добавлены
описания встретившихся проблем при установке.

* как со мной связаться: sidix@b2r.ru

О чём этот документ

Этот документ - руководство, оно описывает как настроить
анти-спамовый шлюз используя набор бесплатного и доступного
программного обеспечения.

Данное руководство разработано для небольших компаний, которые
имеют один или несколько доменов.
Я буду описывать как установить и настроить на новый компьютер эту
систему, используя схему работы в корпоративном DMZ.

Система, представляет собой почтовый шлюз между сетью Internet и
корпоративными почтовыми серверами, такими, например, как: Lotus
Domino, Microsoft Exchange server, или вообще любой почтовый
сервер, без разницы.

При разработке данной системы упор сделан на безопасность,
использовать мы будем следующие компоненты:

* Операционная система OpenBSD (http://www.openbsd.org,
http://www.openbsd.ru), текущий релиз 3.5;

* Почтовый агент MTA (Mail Transfer Agent) Postfix
(http://www.postfix.org);

* Amavisd-new (http://www.ijs.si/software/amavisd) - основной фильтр,
который обрабатывает поступающую от Postfix почту и гарантирует,
что мы не потеряем ни одного письма;
Amavisd-new - качественно новый, доработанный и наполненный новыми
функциями продукт, в отличие от своего предшественника: amavis,
который являлся простым вирус сканером;

* SpamAssassin (http://www.spamassassin.org) - основной анти-спам
компонент, который производит сравнение приходящих писем с набором
правил, а также использует статический анализ который сам строится
на основе приходящих сообщений, а также в процессе обучения
системы;

* В дополнение к SpamAssassin модулю мы будем использовать 2
онлайновые базы данных:
+ DCC (Distributed Checksum Clearinghouse)
(http://www.rhyolite.com/anti-spam/dcc);
+ Vipul's Razor (http://razor.sourceforge.net);
эти две базы работают путем сравнения хэша пришедшего
сообщения с хэшем сообщения уже известного и
идентифицированного, как спам.

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

В данном руководстве мы будем использовать режим Postfix, называемый: Before-Queue Content Filtering proxy (фильтрация
контента до постановки в очередь), который позволить отклонять спамовые сообщения еще на этапе соединения с почтовым сервером (на деле, так ли оно получается, будет видно со временем из логов).
Отправитель отклоненного сообщения, идентифицированного как спам, получит от постмастера сообщение "undeliverable" (другими словами "не доставлено"), которое будет включать строку с описанием ошибки, и в которое вы сможете сами вписать инструкцию по преодолению ложного срабатывания системы фильтрации (другими словами: что надо будет сделать отправителю, чтобы миновать ваш почтовый фильтр, в случае, если его письмо идентифицируется как спам), тогда он
сможет, следуя вашим инструкциям, быть добавленым в "белый список" разрешенных адресов, которые не проверяются спам фильтром. В конечном итоге вы получите антиспамовую систему которая будет иметь очень малый процент ложных срабатываний.

Замечания и договоренности

Данное руководство подразумевает, что вы уже знакомы с операционными системами на базе Unix, если же вы никогда прежде не работали с такими системами, как Linux или Unix, то возможно, что вы встретитесь с трудностями в процессе инсталляции и настройки системы. Также, я надеюсь, что вы знаете что такое текстовый редактор vi и как с ним работать. (здесь http://www.colorado.edu/ITS/docs/unix/vi.html вы можете ознакомиться с основными командами).

Вы можете скачать и установить себе копию PuTTY
(http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html) и WinSCP (http://winscp.sourceforge.net/eng/download.php).
Эти две замечательные утилиты помогут вам в конфигурации вашего сервера удаленно и не требуют никакой GUI оболочки на стороне сервера, только консоль. Не буду описывать преимущества этих двухпрограмм, просто поверьте - они, то что надо.

* Текст, который выделен cиним - это то, что вы должны набрать в консоли (в принципе можете работать методом Cut'n'Paste, только делайте это аккуратнее);
* Текст, который выделен красным -это то, что вы должны исправить в текстовых файлах;
* Текст, который выделен серым - это содержимое конфигурационных файлов;
* Значок # перед командой, напечатанной cиним цветом - это приглашение командной строки, его печатать не нужно;
* Значок # в конфигурационных файлах используется для комментариев;

Схема работы системы

ЗАМЕЧАНИЕ: предположим, наша локальна сеть использует адресацию: 10.0.0.0/8. Сеть 10.1.0.0/16 - наша основная. Сеть 10.2.0.0/16 - это DMZ. Пусть внешняя сеть будет класса C с адресацией: 65.0.0.0/24. Сервер, который мы будем настраивать называется: mta1.
Имя домена в наших примерах: domain.com.

Настройка Firewall

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

| откуда куда протокол порт описание

10.2.1.50 10.1.1.50 TCP 25 исходящий SMTP
External

10.1.1.50 10.2.1.50 TCP 25 SMTP с Exchange сервера на
наш шлюз

External 10.2.1.50 TCP 25 входящий SMTP

10.2.1.50 External UDP 6277 Исходящий трафик от MTA на DCC серверы

External 10.2.1.50 UDP 6277 Входящий трафик от серверов DCC на MTA

10.2.1.50 External TCP 2703 Исходящий трафик от MTA на Razor серверы

10.2.1.50 External TCP 7 Исходящий ping от MTA на Razor серверы

10.2.1.50 External TCP 22 Исходящий трафик SSH

10.2.1.50 External TCP 21 Исходящий FTP (для скачивания
необходимых при инсталляции файлов)

10.2.1.50 External TCP 80 Исходящий HTTP (для скачивания
необходимых при инсталляции файлов)

Сервер mta1 должен иметь доступ к DNS серверу. В моей конфигурации DNS сервер стоит в DMZ, поэтому никаких дополнительных настроек на firewall не требуется.

Какое нужно "железо"

В принципе будет достаточно среднего компа с 256Мб оперативной памяти. В данном руководстве отражены настройки, оптимизированные для работы именно с таким объемом памяти. Если у вас больше или меньше чем 256Мб оперативки, вы можете ознакомится с разделом
Производительность, в конце руководства, перед тем как запустите вашу систему в эксплуатацию. Данная конфигурация позволяет поддерживать до 8 одновременных соединений с вашим сервером. Если вам потребуется большее количество соединений одновременно, скорее всего придется добавить еще пару плашек памяти в ваш сервер (amavisd отжирает прилично памяти в процессе работы(проверено - действительно жрет, однако ~50-60Мб всегда свободно и сервак у меня еще ни разу не свопился))

Установка OpenBSD

OpenBSD FAQ chapter 4 (http://www.openbsd.org/faq/faq4.html) - здесь вы можете найти прекрасное пошаговое руководство по установкеоперационной системы, поэтому я не буду вдаваться в подробности инсталляции в данном руководстве, а приведу лишь пару советов.

* Возможно, что основной проблемой при инсталляции OpenBSD - будет разбиение диска на разделы. Мы не будем рассматривать вариант мульти-загрузки (например: Windows + OpenBSD и т.п.), поэтому наша работа будет гораздо легче. Просто следуйте шаг за шагом инструкциям в руководстве по установке и у вас всё получится... поверьте мне - это просто. Когда вы будете делить диск на разделы воспользуйтесь моими рекомендациями ниже. Размеры разделов, указанные в FAQ, - минимальные (типа заявлений Microsoft о возможности установки Windows NT на компьютер с 386 процессором).
Дисковое пространство на данный момент весьма дешево, поэтому, если вы решите поставить описываемую систему на старый компьютер, не жадничайте, а потратьте немного денег на приобретение жесткого диска объемом хотя бы 20Гб, не меньше.

примерные размеры разделов:

+ wd0a - / (root) 500Mb - этот раздел будет содержать такие директории как: /, /root, /dev

+ wd0b - (swap) - этот раздел будет размером как минимум равным количеству оперативной памяти, если вы поставили 256Мб, сделайте размер данного раздела равным 256Мб


+ wd0d - /tmp 300Mb

+ wd0e - /var 8Gb - так как дисковое пространство дешево, дайте var директории побольше места. Все почтовые очереди, локальные почтовые ящики, логи и всякая остальная фигня хранится именно здесь

+ wd0f - /usr 2Gb - для этого раздела размер в 2Gb является абсолютным минимумом. Если вам когда-нибудь потребуется обновлять вашу операционную систему (а вам это со временем потребуется), то необходимо будет место для размещения исходных кодов и скомпилированных файлов

+ wd0g - /home 1Gb - для этого раздела много места не потребуется, так как у нас не будет никаких локальных пользователей акромя администратора. Размер в 1Gb - ему будет в самый раз.

* Когда инсталлятор спросит вас, какие пакеты устанавливать, примите те которые выделены [X], т.е. по умолчанию. Я не рекомендую вам устанавливать на сервер систему X с KDE или GNOME оболочками, по той простой причине, что на сервере она ни к чему. Чем меньше вы программ поставите на сервер, тем меньше у вас будет забот в процессе эксплуатации системы и меньше причин беспокоиться о необновленных пакетах и т.д.

* Когда инсталлятор попросит ввести time zone, введите свою, например: Europe/Moscow. В дальнейшем локальное время на сервере можно будет настроить для автоматической синхронизации.

Конфигурация OpenBSD

Когда OpenBSD завершит инсталляцию и вы перезагрузитесь, вы сможете вернуться за вашу рабочую станцию и дальнейшие настройки системы производить удаленно, используя PuTTY через SSH соединение. Это будет гораздо удобнее, нежели вы будете производить настройки непосредственно с консоли сервера, хотя кому как нравится.

НЕ ОБЯЗАТЕЛЬНО: при желании вы можете изменить шелл с csh, который устанавливается руту по умолчанию, на ksh, дабы иметь возможность добивать команды и пути клавишей TAB. Для этого наберите следующую команду:

# vipw
root:$asdfasdfqwerqwer$%.:0:0:daemon:0:0:MTA1 Sendmail &:/root:/bin/ksh

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

Давайте настроим систему, чтобы автоматически синхронизировалось время - это важно для функционирования системы в целом. Сделать это можно двумя способами. Самый простой способ - настроить rdate так, тобы он периодически запускался и обновлял время используя сервер времени (NTP сервер). Более сложный, но и более грамотный способ - это поднять собственный NTP сервер, однако его мы рассматривать в данном руководстве не будем. Итак - первый способ:

# crontab -e

затем добавляем следующую строку в конец файла:

# update time from NTP server
0 0 * * * /usr/sbin/rdate -ncva 128.2.136.71 | logger -t NTP

Эта строка говорит о том, что наш сервер будет синхронизиловать свои часы с удаленным NTP сервером ежедневно в полночь. Наш сервер будет соединяться с публичным NTP сервером Carneigie Mellon. Можете также ознакомиться со списком других публичных NTP серверов
(http://www.ntp-servers.com/uk/world-time-server.html) и выбрать тот, который поближе к вам. Перенаправление | logger -t NTP позволит записать сообщение о сделанных установках в лог файл
/var/log/messages.

Создайте файл .forward в директории /root. Почтовая система будет перенаправлять почту адресованную root на адрес указанный вами в этом файле.

# vi /root/.forward

Добавьте в файл /etc/hosts локальный адрес вашего сервера. Это требуется некоторым перловым модулям при инсталляции, на этапе самотестирования. Без данной настройки возможны проблемы при их установке.

# vi /etc/hosts

Добавьте следующую запись в конец файла (естественно, что у вас возможно другое имя сервера):

10.2.1.50 mta1.domain.com mta1

Удаление Sendmail из системы

1. Удалите запускаемые файлы sendmail. Postfix при инсталляции устанавливает собственную программу с именем sendmail на то же самое место в целях совместимости. Также запомните, что в OpenBSD запускаемые файлы sendmail всегда доступны и находятся в директории /usr/libexec/sendmail/sendmail.

# rm /usr/sbin/sendmail

2. Удалим запуск очереди sendmail из crontab

# crontab -e

поищите строку похожую на эту и удалите её или закомментируйте используя символ #

# sendmail clientmqueue runner
*/30 * * * * /usr/sbin/sendmail -L sm-msp-queue -Ac -q

3. Отредактируте файл /etc/rc.conf.local. Это отключит sendmail в случае перезагрузки системы:

sendmail_flags = NO

Если такого файла нет, создайте его: vi /etc/rc.conf.local. Этот файл имеет приоритет перед /etc/rc.conf файлом. Сохраняя свои настройки в этом файле вы облегчите себе процесс обновления системы и впоследствии вам не придется вручную объединять ваш rc.conf файл с его новой версией. (это на случай обновления вашей системы до нового релиза, например до версии 3.6)

4. Убейте все текущие процессы sendmail.

# ps -ax |grep sendmail
# kill `head -1 /var/run/sendmail.pid`


ЗАМЕЧАНИЕ: все эти настройки мы производим беря во внимание, что это наш новый сервер и мы ничего не испортим. Если это не так, то думаю, что будут проблемы. (Кто ж на рабочем сервере занимается экспериментами ?)

Добавление учётных записей

Старайтесь ничего и никогда не запускать под учетной записью root.
Эта учетная запись имеет неограниченные полномочия в системе и если случится како-нибудь глюк или обнаружится брешь в защите системы - можно будет поиметь серьезные проблемы. Поэтому различные процессы в нашей ситеме будет стартовать и работать под собственными учетными записями с ограниченными полномочиями в системе, но достаточными для выполнения их задач.

Используйте vipw чтобы отредактировать системный файл паролей.
Можете также воспользоваться коммандой adduser или useradd, просто так нам будет проще и наглядней. Опуститесь в конец файла и добавьте следующие строки:

postfix:*:2000:2000::0:0:Postfix Mail
Daemon:/var/empty:/sbin/nologin
amavisd:*:3000:3000::0:0:Amavis Mail Scanner
Daemon:/var/amavisd:/sbin/nologin

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

postfix:*:2000:
postdrop:*:2001:
amavisd:*:3000:

Краткое объяснение того, что мы сейчас сделали: учетная запись postfix - это учетная запись под которой выполняется postfix процесс, также как и amavisd процесс с учетной записью amavisd.

Выполнение этих процессов в chroot режиме безопасно с точки зрения потенциальной атаки и возможной компрометации системы. Процессы ограничены своими учетными записями. * указывает операционной ситеме о том, что пользователь не имеет возможности входа в систему (login), для такого пользователя вызывается специальный шелл: /sbin/nologin.

Инсталляция и конфигурация Postfix

ВНИМАНИЕ: просто настоятельно рекомендую перед началом установки проагрейдить дерево портов (если вы еще этого не сделали) с помощью CVS, либо просто скачав обновленное дерево портов (ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/ports.tar.gz). (чуть позже я напишу как это сделать с помощью CVS)

Вы можете установить Postfix из портов используя инструкцию приведенную в этом документе: Ports & Packages FAQ (http://www.openbsd.org/ports.html). Порт postfix находится здесь: /usr/ports/mail/postfix. Желательно использовать версию postfix 2.1.0 или более новую. Ниже я покажу как установить Postfix непосредственно из исходников.

1. Для начала скачаем последнюю версию postfix и сохраним его в директорию /root затем распакуем и скомпилируем. Проверьте сайт http://www.postfix.org на предмет наличия последней версии postfix.

# cd /root
# ftp http://postfix.energybeam.com/source/official/postfix-2.1.4.tar.gz
# tar -zxvf postfix-2.1.4.tar.gz
# cd postfix-2.1.4
# make

2. Установка по умолчанию запускается командой make install далее просто отвечаете на вопросы программы-инсталлятора:

# make install

примерные вопросы (в основном можете спокойно жать Enter)

install_root: /
tempdir: [/root/postfix-2.1.0] or whichever directory the source is in
configdir: /etc/postfix
daemondir: /usr/libexec/postfix
commanddir: /usr/sbin
queuedir: /var/spool/postfix
sendmailpath: /usr/sbin/sendmail
newaliases path: /usr/bin/newaliases
mailq path: /usr/bin/mailq
mail owner: postfix
setgidgroup: postdrop
man page dir: /usr/local/man
sample dir /etc/postfix
readme no

3. Настроим запуск Postfix в chroot окружении. Нам придется для этого скопировать необходимые системные файлы в root директорию откуда мы собираемся запускать Postfix.

# mkdir /var/spool/postfix/etc
# cd /etc
# cp localtime services hosts resolv.conf /var/spool/postfix/etc

4. Настроим файл aliases (обычно он лежит здесь: /etc/postfix/aliases) , он позволяет нам прописать псевдонимы для основных аккаунтов. Если по-простому, то файл aliases позволяет нам перенаправлять любые email сообщения для не email пользователей (типа www) на почтовый ящик root. Почтовые сообщения для пользователя root будут перенаправляться на адрес указанный нами в файле /root/.forward, как это было описано выше.

# cp /etc/postfix/aliases /etc/

Запустите программу newaliases чтобы создать хэшированный текстовый файл с расширением .db (например: aliases.db) (который, собственно, Postfix и использует в процессе своей работы).

# newaliases

5. Далее займемся настройкой конфигурационного файла Postfix: /etc/postfix/main.cf. Поищите приведенные ниже строки и исправьте их, если потребуется. Кстати, их может и не быть в файле созданном по умолчанию. (я поступил проще - просто скопировал содержимое ниже в файл конфигурации, соответственно, не забудьте поправить имя сервера):

6.
queue_directory = /var/spool/postfix
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = mta1.domain.com
mydomain = domain.com
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $mydomain,
mail.$mydomain
mynetworks = 10.0.0.0/8, 65.0.0.0/24, 127.0.0.0/8
local_recipient_maps =
biff = no
empty_address_recipient = MAILER-DAEMON
queue_minfree = 120000000
message_size_limit = 80000000
mailbox_size_limit = 1000000000
smtpd_banner = $myhostname ESMTP
transport_maps = hash:/etc/postfix/transport
local_transport = local
smtpd_recipient_restrictions = permit_mynetworks,
reject_unauth_destination, reject_non_fqdn_recipient
#some people also add reject_non_fqdn_sender (but I have clients that
break this rule that I need to receive from)
notify_classes = protocol,resource,software
# Install Time Configuration
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = no
html_directory = no

Разъяснение конфигурационных директив Postfix (не всех, конечно):

* queue_directory

Рабочая директория Postfix. То место, где временно сохраняется вся приходящая почта до процесса доставки.

* daemon_directory

Определяет местоположение всех программ системы postfix.

* mail_owner

Определяет учетную запись, которая является владельцем почтовой очереди.

* myhostname

Имя данного компьютера, включая доменную часть. This is used when adding received by headers in email messages.

* mydomain

Определяет домен данного компьютера.

* myorigin

Это имя добавляется локально посланным сообщениям. Например: если вы посылаете сообщение от пользователя root, то он его получит таким: from root@mta1.domain.com.

* mydestination
Эта директива указывает postfix что он должен принять почту для пользователя этого домена. Пожалуйста, учтите, что данная директива НЕ может быть использована для витруального домена или для запасного MX хоста. В нашем случае, мы сделаем так, чтобы принималась почта для пользователей следующих доменов:

something@mta1.domain.com,
something@localhost.domain.com,
something@domain.com,
something@mail.domain.com

* mynetworks

Эта директива указывает postfix какие сети он должен считать локальными. Другими словами, компьютеры, соединяющиеся из этих сетей будут иметь возможность релея почтовых сообщений. В нашем случае мы прописываем следующие сети 127.0.0.0 (для localhost, собственно сам сервер), 65.0.0.0 (для всех других компьютеров в нашей внешней сети), и 10.0.0.0 (для всех компьютеров во внутренней сети).

* local_recipient_maps

Эта директива указывает postfix где ему искать имена локальных пользователей для доставки им почты. Здесь ничего не надо указывать (не удаляйте саму директиву - это может вызвать ошибки).

* biff

Эта директива указывает postfix не использовать biff программу которая позволяет пользователям узнать, что им пришла почта.

* empty_address_recipient

Эта директива указывает адрес назначения для недоставленной (undeliverable) почты для адресата с пустым полем: от (from <> ). В нашем случае - это MAILER-DAEMON (а еще лучше послать на /dev/null)

* queue_minfree

Эта директива запрещает принимать какие-либо сообщения, если пространства на жестком диске осталось менее чем 120Mb. This number should be 1.5 times the message_size_limit or you will get an error message.

* message_size_limit

Эта директива указывает максимальный размер сообщения. Сообщения, размером более чем 80Mb будут отклоняться.

* mailbox_size_limit

Эта директива указывает максимальный размер локального почтового ящика.

* smtpd_banner

Сообщение сервера, подключившемуся компьютеру. Чем меньше информации при этом будет выдано о сервере, тем лучше... в целях безопасности.

* transport_maps


Эта директива указывает Postfix, где ему искать информацию о доступных транпортах. В нашем примере это файл, в котором мы указываем Postfix, что почта для домена domain.com должна быть доставлена на наш Exchange сервер.

* local_transport

Эта директива указывает Postfix, что вся докальная почта должна быть доставлена через локальный агент доставки.

* smtpd_helo_restrictions,
* smtpd_sender_restrictions,
* smtpd_recipient_restrictions

Эти директивы используются для запрещения доступа к Postfix на основе HELO команд отправителя или получателя. Ограничения для получателя используются для невозможности "открытого релея". Болееподробную информацию об этих директивах вы можете найти в документации к Postfix.

* notify_classes

Эта директива описывает все виды служебных сообщений посылаемых Postfix на postmaster аккаунт. вот список возможных опций :

bounce: отсылает постмастеру копию заголовка непринятого сообщения.
2bounce: отсылает недоставленную непринятую (undelivered) почту постмастеру.
delay: отсылает постмастеру копию заголовка отложенной (delayed) почты.
policy: отсылает постмастеру описание SMTP сессии в том случае, если
клиентское соединение было отвергнуто в соотвествии с правилами
политики. Если вы разрешите эту опцию, вы будете получать по одному
сообщению на каждое спам сообщение - это неплохо для отладки, но плохо
сказывается на производительности
protocol: отсылает постмастеру описание SMTP сессии в случае если
произощла ошибка со стороны клиента или сервера.
resource: информирует постмастера о невозможности доставки почты в
случае нехватки ресурсов.
software: информирует постмастера о невозможности доставки почты в
случае проблемы с программным обеспечением.

Install Time Configuration

Эта секция хранит информацию о дате установки системы - это будет полезно при будущем обновлении системы.

7. Отредактируйте файл /etc/postfix/master.cf. Измените chroot установки для всех базовых сервисов postfix со значения 'n' на 'y'. Вот как это должно выглядеть:

#This is the before-filter smtpd...it passes content to amavisd on port 10024
smtp inet n - y - 8 smtpd -o smtpd_proxy_filter=127.0.0.1:10024
-o smtpd_client_connection_count_limit=4
pickup fifo n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr fifo n - y 300 1 qmgr
rewrite unix - - y 300 - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
flush unix n - y 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
showq unix n - y - - showq
error unix - - y - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
trace unix - - y - 0 bounce
verify unix - - y - 1 verify

# This is the after-filter smtpd, it listens on port 10025 to receive mail from amavisd

127.0.0.1:10025 inet n - y - - smtpd
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=
-o mynetworks=127.0.0.0/8
-o receive_override_options=no_unknown_recipient_checks

Параметр: smtpd_client_connection_count_limit ограничивает количество одновременных соединений с вашим сервером. Вы должны выставить этот параметр примерно в половину значения: smtpd maxproc.

ЗАМЕЧАНИЕ: использование метода фильтрации входящих сообщений (Before-Queue) не рекомендуется к применению в случае большого почтового трафика (например, если вы провайдер), т.к. вы будете иметь ровно столько одновременных соединений, сколько у вас запущено amavisd процессов. Все остальные соединения будут отклоняться. Если хотите, вы можете переключить amavisd в нормальный режим фильтрации, используя: D_BOUNCE или D_PASS, а не
D_REJECT (прочтите файл README.postfix в документации к amavisd).

Также вы можете прочитать больше о методе фильтрации (Before-Queue) в файле SMTPD_PROXY_README прилагаемом к исходным кодам Postfix.

1. Далее нам необходимо отредактировать файл (/etc/postfix/transport). В этом файле содержатся списки серверов, на которые мы собираемся пересылать входящую почту. В нашем случае запись в этом файле будет выглядеть так: domain.com smtp:[10.1.1.50] если же вы хотите использовать FQDN вместо IP адреса, просто уберите скобки и напишите имя сервера (например: smtp:exchange.domain.com).
После добавления новых записей в транспортный файл, необходимо выполнить команду postmap. Она переведет наш текстовый файл в формат понятный Postfix и создаст файл с расширением db (transport.db).
# postmap /etc/postfix/transport

2. Пропишите запуск Postfix в стартовый скрипт: /etc/rc.local, добавив строку: /usr/sbin/postfix start в конец файла. А теперь запустите его этой же самой командой: /usr/sbin/postfix start.

3. Теперь неплохо бы проверить его работоспособность следующим образом: попробуем законнектиться на 25-ый и 10025-ый порты
telnet-ом:

# telnet localhost 25

сервер должен ответить что-то в этом роде:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mta1.domain.com ESMTP
press ctrl-], then type 'quit' to quit

далее пробуем порт 10025:

# telnet localhost 10025

сервер должен ответить что-то в этом роде:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mta1.domain.com ESMTP
press ctrl-], then type 'quit' to quit

Инсталляция необходимых модулей для Perl

Обе программы и amavisd-new и SpamAssassin написаны на perl и используют в своей работе кучу модулей. Нам придется их скачать, иначе ничего работать не будет. Запустим специальную процедуру установки модулей perl, используй следующую команду:

# perl -MCPAN -e shell

нажав пару раз ввод вы получите командную строку типа:cpan> где вы сможете вводить команды. Для установки необходимых модулей надо написать: install, а затем имя модуля (например: install MIME::Words). Если вам понадобится помощь, наберите: help.

Вот список необходимых модулей.

ЗАМЕЧАНИЕ: возможно, что при попытке установки модуля система ответит, что модуль (... are up to date, т.е. уже установлен), тогде просто переходите к установке следующего. В процессе инсталляции устанавливаемые модули могут инициировать установку зависимых модулей, не препятствуйте этому.

* MD5
* LWP (лично у меня встает только путем форсированной установки: force install LWP)
* Mail::Internet
* Archive::Tar
* Archive::Zip
* IO::Wrap
* IO::Stringy
* Unix::Syslog
* MIME::Words
* MIME::Head
* MIME::Body
* MIME::Entity
* MIME::Parser
* Net::SMTP
* Net::DNS (когда система спросит: enable tests (проводить тесты), отаветьте: no)
* Net::Ping
* Net::Server
* Net::Server::PreForkSimple
* Convert::TNEF
* Convert::UUlib
* MIME::Decoder::Base64
* MIME::Decoder::Binary
* MIME::Decoder::Gzip64
* MIME::Decoder::NBit
* MIME::Decoder::QuotedPrint
* MIME::Decoder::UU
* Time::HiRes
* Digest::SHA1
* Digest::Nilsimsa
* Getopt::Long
* File::Copy (возможно, что система скажет, что модуль идет в поставке нового релиза Perl и предложит его установить, таким образом в системе появится два интерпретатора Perl, не думаю, что это здорово. Я не стал этого делать, просто отказался)
* Bit::Vector
* Date::Calc

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

install MD5 LWP Mail::Internet Archive::Tar Archive::Zip IO::Wrap
IO::Stringy Unix::Syslog MIME::Words MIME::Head MIME::Body MIME::Entity
MIME::Parser Net::SMTP Net::DNS Net::Ping Net::Server
Net::Server::PreForkSimple Convert::TNEF Convert::UUlib
MIME::Decoder::Base64 MIME::Decoder::Binary MIME::Decoder::Gzip64
MIME::Decoder::NBit MIME::Decoder::QuotedPrint MIME::Decoder::UU
Time::HiRes Digest::SHA1 Digest::Nilsimsa Getopt::Long File::Copy
Bit::Vector Date::Calc

Бывает иногда, что система выдает некое сообщение типа:

Unsatisfied dependencies detected during [G/GA/GAAS/ Somefile.tar.gz] -----
Name of Dependency
Shall I follow them and prepend them to the queue
of modules we are processing right now? [yes]

Это означает, что модуль, который мы устанавливаем, требует других модулей для корректной работы и просит у вас разрешения установить сначала их. Разрешите установку написав: yes или просто нажав ввод.

Также система будет вас запрашивать по разным поводам в процессе инсталляции модулей. Просто жмите ввод для применения установок по умолчанию.

Если вы получите сообщение об ошибке, посмотрите о чем идет речь, обычно система пишет, что ей не нравится. В качестве альтернативного пути можно произвести форсированную установку модуля (cpan> force install имя_модуля ).

Когда закончите инсталляцию модулей нажмите q, а затем ввод, для выхода в шелл.

Установка и конфигурация SpamAssassin

1. Т.к. SpamAssassin является perl модулем, то произведем его установку по уже знакомой нам схеме. Выполните команду:

# perl -MCPAN -e shell

затем:

cpan> install Mail::SpamAssassin

Если система спросит вас: желаете ли вы запустить тесты Razor2 или DCC, просто нажмите ввод, чтобы выбрать - нет. Когда закончите инсталляцию модуля нажмите q, а затем ввод, для выхода в шелл.

2. Отредактируйте файл настроек SpamAssassin /etc/mail/spamassassin/local.cf, сделайте следующие изменения:

rewrite_subject 1
report_safe 0
use_terse_report 0
use_bayes 1
bayes_path /var/amavisd/.spamassassin/bayes
auto_learn 1
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 0
dcc_add_header 1
dns_available yes
header LOCAL_RCVD Received =~ /.*(S+.domain.coms+[.*])/
describe LOCAL_RCVD Received from local machine
score LOCAL_RCVD -50
## Optional Score Increases
score DCC_CHECK 4.000
score RAZOR2_CHECK 2.500
score BAYES_99 4.300
score BAYES_90 3.500
score BAYES_80 3.000

Разъяснение конфигурационных директив SpamAssassin (не всех, конечно):

* rewrite_subject

(1|0) указывает SpamAssassin изменитьтему в SPAM сообщении на subject_tag

* use_bayes

(0|1) эта директива включает или выключает Bayesean обучение системы.
В нашем случае - включено.

* bayes_path

(path) Путь до базы bayes.

* auto_learn

(0|1) Если включено (1), тогда SA будет автоматически добавлять
сообщения распознанные как SPAM на 100% или на 100% как не SPAM
сообщения, в Baysean базу данных.

* use_razor2

(0|1) указывает SA использовать Razor версии 2

* use_DCC
(0|1) указывает SA использовать DCC (Distributed Checksum
Clearinghouse)

* use_pyzor

(0|1) указывает SA не использовать Pyzor (мы его и не ставили).

* dcc_add_header

(0|1) указывает SA добавить заголовок от DCC, который содержит
статистику о сообщении

* dns_available

(yes|test|no) SA тестирует имеет ли он доступ к DNS серверам.

* LOCAL_RCVD rules

The last lines header, describe and score are used to prevent my
outgoing mail from being tested for spam. If you're like me, your
users would be upset if their mail was tagged as spam before a client
read it. This rule basically checks the header for the Received from:
lines showing the message route.

You will need to customize this rule to fit your system. To do this,
send a message to your test hotmail account (or some account outside
of your system). Check the headers for lines that look like this:
Received: from mta1.domain.com (mta1.domain.com [64.132.107.5])
by law122.ms.hotmail.com (8.12.6/8.12.2) with ESMTP id h3EI48pL002768
for <forge@hotmail.com.>; Mon, 14 Apr 2003 14:04:08 -0400 (EDT)
Received: from exchange.domain.com (exchange.domain.com [10.1.1.50])
by mta1.domain.com (Postfix) with ESMTP id F3B7117EFD
for <forge@hotmail.com.>; Mon, 14 Apr 2003 14:04:07 -0400 (EDT)
Received: by exchange.domain.com with Internet Mail Service
(5.5.2653.19) id <GKFZ3XPK>; Mon, 14 Apr 2003 14:04:03 -0400

The rule is a standard SpamAssassin rule and uses Regular Expression
syntax. To explain it in regular terms, it looks for *.domain.com
(*[*]) on the received line (where the stars are anything). When it
finds a match, it gives the message a SPAM score of -50 (ensuring it
is not counted as SPAM).

Optional Score Increases

In this section, I turn up the value of several of the rules. The
default score for a spam that turns up in the DCC database is only
2.756 when we're using Bayes and network checks. This seemed a little
low for me, so I upped it to 4 points. If you wanted every message
listed in the DCC database to be tagged as SPAM, you'd set this to 6.3
points. You can check the default scores for everything in the file
/usr/local/share/spamassassin/50_scores.cf. You may see 4 different
scores listed next to some rules. The file has different scores for
whether or not you are using Bayes and network checks. When there is
only 1 score, that score applies all the time, otherwise the 4th score
is for bayes and network checks like we are using.

3. Теперь создадим и настроим домашние директории для amavisd и spamassassin:

# mkdir -p /var/amavisd
# chown amavisd.amavisd /var/amavisd
# chmod 750 /var/amavisd
# cd /var/amavisd
# mkdir .spamassassin
# touch .spamassassin/user_prefs
# chown -R amavisd.amavisd .spamassassin


Установка Razor

К сожалению я не смог заставить корректно работать Razor не в
chroot режиме. Если вы не собираетесь запускать amavisd-new в
chroot режиме, вы можете просто отключить Razor в файле
конфигурации: /etc/mail/spamassassin/local.cf.

Скачаем последнюю версию razor-agents распакуем, скомпилируем и
установим:

# cd /root
# ftp http://prdownloads.sourceforge.net/razor/razor-agents-2.61.tar.gz
# tar -zxvf razor-agents-2.61.tar.gz
# cd razor-agents-2.61
# perl Makefile.PL
# make
# make test
# make install

создадим конфигурационные файлы в директории /etc/razor:

# razor-client
# razor-admin -create

зарегистрируемся в сети razor. Вместо postmaster@domain.com укажите ваш почтовый ящик:

# razor-admin -register -user postmaster@domain.com

скопируем конфигурационные файлы razor в chroot директорию:

# cp -r /root/.razor /var/amavisd
# chown -R amavisd.amavisd /var/amavisd/.razor

Вы можете включать и отключать Razor изменяя соответствующий параметр в конфигурационном файле /etc/mail/spamassassin/local.cf:

use_razor2 1

ЗАМЕЧАНИЕ: razor создает собственный лог-файл (razor-agent.log) в директории /var/amavisd/.razor. В принципе, существует возможность того, что файл может разростись и тогда он займет все пространство на разделе /var. Однако, когда вы точно будете уверены, что razor работает так как надо, вы можете отключить логгирование в конфигурационном файле. К сожалению нет возможности использовать newsyslog для ротации данного лог-файла без остановки и последующего старта процесса amavisd. Для отключения логгирования поправьте следующий конфигурационный файл: /var/amavisd/.razor/razor-agent.conf: найдите:

debuglevel = 5
измените на:

debuglevel = 0

затем перезапустите amavisd.

Установка DCC

Скачаем и установим последнюю версию DCC (http://www.dcc-servers.net/dcc/)

# cd /root
# ftp http://www.dcc-servers.net/dcc/source/dcc-dccd.tar.Z
# tar -zxvf dcc-dccd.tar.Z
# cd dcc-dccd-1.2.50
# ./configure
# make
# make install

Убедитесь, что udp port 6277 открыт, для этого выполните комманду:

# /usr/local/bin/cdcc 'info'

Если всё в порядке, то вы увидите что-то типа: dcc.rhyolite.com, - RTT+0 ms anon

# 153.19.44.233,- coral.ely.pg.gda.pl WEiAPG server-ID 1072
# 100% of 3 requests ok 1687.64+0 ms RTT 113 ms queue wait
# 192.188.61.3,- calcite.rhyolite.com Rhyolite server-ID 101
# 100% of 2 requests ok 755.52+0 ms RTT 50 ms queue wait


Так как amavisd-new будет запускаться в chroot режиме, то нам необходимо скопировать DCC и другие необходимые файлы в chroot директорию. DCC вызывается SpamAssassin и требует шелла /bin/sh для нормальной работы. В принципе это понижает секьюрность нашей системы, но без этого будут сыпаться ошибки когда мы запустим amavisd в debug режиме,мы увидим что-то вроде: DCC -> check failed: no response

# mkdir -p /var/amavisd/var /var/amavisd/usr/bin
/var/amavisd/usr/libexec /var/amavisd/var/dcc
# mkdir -p /var/amavisd/usr/lib /var/amavisd/bin
# cp -r /var/dcc /var/amavisd/var/
# cp /usr/local/bin/dccproc /var/amavisd/usr/bin
# cp /usr/libexec/ld.so /var/amavisd/usr/libexec
# chown -R amavisd:amavisd /var/amavisd/var/dcc
# cp /bin/sh /var/amavisd/bin/

DCC использует некоторые системные библиотеки OpenBSD, которые мы должны скопировать в chroot директорию. Т.к. версия библиотек меняется по мере обновления системы я просто покажу вам способ узнать какие файлы вам надо скопировать:

# ldd /usr/local/bin/dccproc

Ответ будет типа:

# /usr/local/bin/dccproc:
Start End Type Ref Name
00000000 00000000 exe 1 /usr/local/bin/dccproc
00008000 2000f000 rlib 1 /usr/lib/libm.so.1.0
00019000 20063000 rlib 1 /usr/lib/libc.so.30.0
00002000 00002000 rtld 1 /usr/libexec/ld.so


Просто скопируйте библиотеки, которые в списке (исключение: dccproc) в соответствующие им chroot директории в каталоге /var/amavisd. Например: вы должны скопировать /usr/lib/libm.so.1.0 в /var/amavisd/usr/lib/libm.so.1.0

Вы можете включать или выключать DCC редактируя файл: /etc/mail/spamassassin/local.cf:

use_dcc 1

Установка BerkleyDB

Данный раздел отсутствует в оригинальном руководстве, но так как в процессе инсталляции я сам наступил на эти грабли, то вот решение вопроса. Устанавливать будем BerkleyDB v.4, если у вас в системе уже установлена версия 3 или 4, то просто пропустите этот шаг. Если не уверены - в конце следующего шага вы будете запускать amavisd-new в debug режиме - смотрите внимательнее на предмет того, что система будет ругаться на проблемы с BerkleyDB.

установим libtools (/usr/ports/devel/libtool):

# cd /usr/ports/devel/libtool
# make install

установим собственно BerkleyDB (/usr/ports/databases/db/v4):

# cd /usr/ports/databases/db/v4
# make install

установим коннектор к BerkleyDB, который имеется в виде perl-модуля:

# cd /root
# ftp http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/BerkeleyDB-0.25.tar.gz
# tar -zxvf BerkeleyDB-0.25.tar.gz
# cd BerkeleyDB-0.25

поправим в файле config.in следующие строки:

INCLUDE = /usr/local/include/db4
LIB = /usr/local/lib/db4

далее сгенерим make-файл для компиляции perl-модуля:

# perl Makefile.PL

если вы увидите следующие строки:

Parsing config.in...
Looks Good.
Writing Makefile for BerkeleyDB

...то всё в порядке, можно продолжать установку, если нет, проверьте всё еще раз....

далее скомпилируем perl-модуль и установим его:

# make
# make install

создадим директорию для хранения баз:

# mkdir /var/amavisd/db
# chown amavisd.amavisd /var/amavisd/db

Установка и конфигурирование Amavisd-new

1. Установка amavisd-new очень проста, при условии, что вы установили
все необходимые PERL модули, о чём я писал выше. Итак:

# cd /root
# ftp http://www.ijs.si/software/amavisd/amavisd-new-20030616-p10.tar.gz
# tar -zxvf amavisd-new-20030616-p10.tar.gz
# cd amavisd-new-20030616
# cp amavisd /usr/local/sbin/
# chown root.wheel /usr/local/sbin/amavisd
# chmod 550 /usr/local/sbin/amavisd
# cp amavisd.conf /etc/
# chown root.wheel /etc/amavisd.conf
# chmod 644 /etc/amavisd.conf
# touch /var/amavisd/amavis.log
# chown amavisd.amavisd /var/amavisd/amavis.log

2. Отредактируйте конфигурационный файл: /etc/amavisd.conf, сделайте в нем следующие изменения:

use strict;
$MYHOME = '/var/amavisd';
$mydomain = 'domain.com';
$daemon_user = 'amavisd';
$daemon_group = 'amavisd';
$daemon_chroot_dir = $MYHOME;
$QUARANTINEDIR = "$MYHOME/quarantine";
$TEMPBASE = "$MYHOME/tmp";
$ENV{TMPDIR} = $TEMPBASE;
$helpers_home = $MYHOME;
$max_servers=8;
$child_timeout=20*60; # we need to adjust the timeout since it is not a localhost transfer
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
$inet_socket_port = 10024;
$inet_socket_bind = '127.0.0.1';
@inet_acl = qw( 127.0.0.1 );
@bypass_virus_checks_acl = qw( . );
@local_domains_acl = ( ".$mydomain" );
$DO_SYSLOG = 1; # (1 = syslog, 0 = logfile)
$LOGFILE = "$MYHOME/amavis.log";
$log_level = 5; # (0-5)
$final_spam_destiny = D_REJECT; # Set to D_REJECT, D_PASS to pass through
read_hash(\%whitelist_sender, '/var/amavisd/whitelist');
read_hash(\%blacklist_sender, '/var/amavisd/blacklist');
read_hash(\%spam_lovers, '/var/amavisd/spam_lovers');
#defending against mail bombs
$MAXLEVELS = 14; # Maximum recursion level for extraction/decoding
$MAXFILES = 1500; # Maximum number of extracted files
$MIN_EXPANSION_QUOTA = 100*1024; # bytes (default undef, not enforced)
$MAX_EXPANSION_QUOTA = 300*1024*1024; # bytes (default undef, not enforced)
$MIN_EXPANSION_FACTOR = 5; # times original mail size (must be specified)
$MAX_EXPANSION_FACTOR = 500; # times original mail size (must be specified)
$path =
'/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';
# SpamAssassin settings
$sa_local_tests_only = 0;
$sa_auto_whitelist = 1; # comment this line out to turn off auto whitelist
$sa_mail_body_size_limit = 64*1024; # 64KB
$sa_tag_level_deflt = 3.0; # controls adding the X-Spam-Status and X-Spam-Level headers,
$sa_tag2_level_deflt = 6.3; # controls adding 'X-Spam-Flag: YES', and editing Subject,
$sa_kill_level_deflt = $sa_tag2_level_deflt; # triggers spam evasive actions:
$sa_spam_subject_tag = '***SPAM*** ';
$sa_debug = 1; # comment this line out to turn off debugging
1; # insure a defined return

3. Создадим и настроим директории, используемые amavisd:

# mkdir /var/amavisd/tmp
# chown amavisd:amavisd /var/amavisd/tmp
# chmod 750 /var/amavisd/tmp
# mkdir /var/amavisd/quarantine
# chown amavisd:amavisd /var/amavisd/quarantine
# chmod 750 /var/amavisd/quarantine


4. Теперь сделаем так, чтобы мы смогли запускать amavisd-new в chroot режиме (вы можете пропустить этот шаг, если хотите, но не забудьте тогда закомментировать директиву: $daemon_chroot_dir setting в конфигурационном файле: /etc/amavisd.conf ).
ЗАМЕЧАНИЕ: выполняйте все нижеприведенные комманды в директории
/var/amavisd:

# cd /var/amavisd

Создадим необходимые каталоги:

# mkdir -p etc dev tmp var/run
# mkdir -p usr/bin usr/share/zoneinfo usr/lib usr/libexec

Создадим каталоги для конфигурационных файлов spamassassin:

# mkdir -p usr/local/share/spamassassin etc/mail/spamassassin

Создадим устройство dev/null:

# mknod dev/null c 2 2

Для того, чтобы созданное устройство заработало, нам необходимо убрать ограничение nodev на файловой системе и перемонтировать его. Отредактируем файл: /etc/fstab file:

# vi /etc/fstab
/dev/wd0g /var ffs rw, [DEL: nodev, :DEL] nosuid 1 2

Создадим символическую ссылку:

# ln -s / var/amavisd
Скопируем системные конфигурационные файлы в нашу chroot etc директорию. Запомните, если вы внесете какие-то изменения в системные конфигурационные файлы вам потребуется снова скопировать их в chroot etc директорию:

# cp /etc/protocols etc
# cp /etc/services etc
# cp /etc/hosts etc
# cp /etc/magic etc
# cp /etc/resolv.conf etc
# cp /etc/group etc
# cp /etc/passwd etc

Создадим pwd.db файл:

# echo amavisd:*:3000:3000::0:0:Amavis Mail Scanner
Daemon:/var/amavisd:/sbin/nologin>/var/amavisd/etc/master.passwd
# pwd_mkdb -d /var/amavisd/etc/ -p /var/amavisd/etc/master.passwd

Скопируем необходимые файлы SpamAssassin в chroot директорию:

# cp /etc/mail/spamassassin/local.cf etc/mail/spamassassin/
# cp -r /usr/local/share/spamassassin usr/local/share

Установим разрешения. amavisd должен быть владельцем своей домашней директории (/var/amavisd) , в противном случае неизбужны ошибки:

# chown -R root.wheel etc dev tmp usr var
# chown -R amavisd:amavisd .spamassassin .razor quarantine var/dcc
# chmod 1777 tmp
# chmod 666 dev/null

5. Создадим следующие файл-списки: whitelist, blacklist и spam_lovers. Эти файлы будут содержать по одному адресу e-mail или имени домена на одной строчке (написанные маленькими буквами), тех получателей или отправителей, которых мы будем обрабатывать специально. Записи в фале-списке: blacklist автоматически воспринимаются как SPAM. Отправители в фал-списке: whitelist не проходят проверку на SPAM. Получатели в файл-списке: spam_lovers в основном те пользователи, которые не участвуют в системе блокировки спама:

# touch /var/amavisd/blacklist
# touch /var/amavisd/whitelist
# touch /var/amavisd/spam_lovers

Вы можете добавить вашу учетную запись postmaster в файл-список: spam_lovers, т.к. в соответствии с RFC postmaster всегда должен принимать почту, направленную ему.

# echo postmaster@domain.com >> /var/amavisd/spam_lovers

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

From "Mail Delivery Subsystem" MAILER-DAEMON@mail.somecompany.com
Subject Returned mail: see transcript for details
Date Sat, May 1, 2004 8:57 pm
To person@somecompany.com

----- The following addresses had permanent fatal errors -----
< sentto@domain.com >
(reason: 550 5.7.1 Message content rejected, UBE, id=3452)

----- Transcript of session follows -----
... while talking to mta.domain.com.:
>>> DATA
<<< 550 5.7.1 Message content rejected, UBE, id=3452
554 5.0.0 Service unavailable

Правда его содержание мало информативно для неикушенного пользователя. В нашей компании мы немного модифицировали послание и теперь оно включает ссылку на наш web-сайт, а также телефон, по которому с нами можно связаться:

550 5.7.1 Message content rejected:looks like SPAM. Visit
http://www.domain.com/spam or call 704-555-1212

Вот пример web-страницына которую мы даем ссылку пользователям http://www.flakshack.com/anti-spam/whitelist.html . Можете скопировать её себе в качестве шаблона. Правда она не заработает сама по себе без обработки данных посылаемых с неё на сервер.
Для вставки своего сообщения отсылаемого пользователю вам потребуется немного поравить код amavisd. В текущей версии это надо сделать найдя строки с порядковым номером: 5587-5588. Если вы не уверены, что сможете это сделать сами - лучше ничего не трогайте и оставьте всё как есть: меняем:

: "550 5.7.1 Message content rejected, $reason")
. ", id=$am_id");
на:

: "550 5.7.1 Message content rejected:looks like SPAM. Visit
http://www.domain.com/spam or call 704-555-1212") );

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

7. Попробуем запустить amavis в debug режиме для теста. Для начала отредактируем файл: /etc/amavisd.conf где на время выставим следующие значения переменным:

$log_level = 5;
$sa_debug = 1;

Далее:

# /usr/local/sbin/amavisd debug

Смотрите внимательнее на экран на предмет сообщения об ошибках.
Для выхода нажмите CTRL-C.

8. Если все в порядке, тогда добавим запуск amavisd в стартовый скрипт. Отредактируйте файл: /etc/rc.local впишите в него строки приведенные ниже, перед строками загружающими Postfix:

# Start amavisd spam filter
/usr/local/sbin/amavisd

9. Откройте ещё одну сессию PuTTY или перейдите на соседнюю консоль.
Вывод отладочной информации amavisd не выключайте. Теперь мы попробуем послать тестовое письмо через нашу систему с целью проверки. Тестовое письмо должно будет либо отреджектиться либо пометиться как спам (это зависит от конечных настроек переменной
$final_spam_destiny setting в файле конфигурации amavisd
(/etc/amavisd.conf)).

В дистрибутиве: amavisd tar.gz, который мы скачали и распаковали в директории: /root/amavisd-new-20030616/test-messages, содержаться тестовые файлы которыми мы и проверим работу нашей системы.

Замените указанный ниже адрес на ваш:

# cd /root/amavisd-new-20030616/test-messages
# cat sample-spam.txt | sendmail myaddress@domain.com

или так:

# cat sample-nonspam.txt | sendmail myaddress@domain.com

Эти тестовые сообщения не наберут много очков, но для начала сгодятся. Чтобы облегчить процесс тестирования, вы можете добавить очков для телефонных номеров, которые могут содержаться в тестовом письме: sample-spam.txt путём добавления следующих строк в файл конфигурации SpamAssassin: /var/amavisd/etc/mail/spamassassin/local.cf:

body LOCAL_AMAVISTEST /800-320-9895 x2068/
describe LOCAL_AMAVISTEST Phone number in spam test message
score LOCAL_AMAVISTEST 10

10. Возможна одна фишка, которая может случиться после того как вы потестируете систему с реального почтового адреса: он (адрес с которого вы тестировали систему) возможно добавится в автоматический белый список (auto-whitelist (с положительными очками), соответственно ни к чему хорошему это не приведет, так как этот адрес возможно вам необходим в работе, а письма с него будут реджектиться. Исправить это можно таким способом:

# spamassassin -p /var/amavisd/.spamassassin/user_prefs
--remove-addr-from-whitelist=mytestaddress@mydomain.com

11. Когда вы удостоверитесь, что все в порядке, можете нажимать CTRL-C и запускать amavisd в нормальном режиме:

# /usr/local/sbin/amavisd

Установка и настройка отчётов Postfix

Наш последний шаг установка и настройка отчётов о работе системы.
Один раз в день, перед тем как произойдет инициация ротации maillog файла программой newsyslog, мы запустим наш скрипт, который сгенерит нам отчёт по работе системы и вышлет его на указанный адрес по e-mail. Существует пара немного различающихся скриптов для сбора статистики, которые можно найти на ресурсе http://freshmeat.net. Я не стал пробовать в работе их все, потому что скрипт pflogsumm.pl (Postfix Log Entry Summarizer), который вы можете найти на http://jimsun.linxnet.com/postfix_contrib.html, работает замечательно и делает всё, что мне необходимо. Давайте скачаем, установим и настроим его:

# cd /root
# ftp http://jimsun.linxnet.com/downloads/pflogsumm-1.1.0.tar.gz
# tar -zxvf pflogsumm-1.1.0.tar.gz
# cd pflogsumm-1.1.0
# mv pflogsumm.pl /usr/local/sbin/
# chmod 500 /usr/local/sbin/pflogsumm.pl


Каждую полночь программа newsyslog производит ротацию лог-файла maillog. В процессе работы она переименовывает файл: /var/log/maillog в файл: /var/log/maillog.0, а затем запаковывает его архиватором gzip. Наш скрипт распакует этот файл, обработает, а затем запакует обратно. Давайте напишем этот скрипт:

# vi /usr/local/sbin/my-postfix-report.sh

Напишем следующие строки:

#!/bin/sh
zcat /var/log/maillog.0.gz | /usr/local/sbin/pflogsumm.pl | mail -s
"AntiSPAM system's report" root

Затем выйдем и настроим права доступа:

# chmod 500 /usr/local/sbin/my-postfix-report.sh

Теперь отредактируем файл crontab:

# crontab -e

Добавим следующую строку в конец файла. Мы хотим, чтобы наш скрипт выполнялся каждый день в 4:00 утра:

0 4 * * * /usr/local/sbin/my-postfix-report.sh

Отчёты о спаме

Я написал perl-скрипт, который также генерирует отчёты (в том же формате, что и pflogsumm) о спаме. Эти отчёты включают в себя:

1. все спаммеры в порядке набранных SA очков;

2. все домены с которых сыпется спам в порядке количества сообщений;

3. все получатели в порядке количества принятых сообщений;

4. Итого по спаму;

Я не супер-мега в написании программ и скриптов на Perl, но скрипт работает в моей системе прекрасно.

Вы можете скачать полный пакет моих скриптов вконце данного руководства. Если вы захотите использовать их, просто скопируйте поверх уже созданных вами в процессе чтения данного руководства, только не забудьте поменять внутри названия программ (если таковое необходимо, т.к. скрипты написаны всё-таки под мою систему). Я обновил скрипт my-postfix-report.sh так, чтобы он включал все отчёты в одно сообщение.

Я также накрапал скрипт (my-summary.pl) который подсчитывает общее количество сообщений , количество спама и размер полученных сообщений за день, и сохраняет эту информацию в файл. Вы можете скачать полученный файл к себе загрузить его в Excel и создать сводную диаграмму, которая наглядно, в виде графика, покажет что у вас творится со спамом. Вот пример выходного файла, сгенеренного моим скриптом (формат: дата, количество посланных сообщений, общий размер всех сообщений, количество спамовых сообщений):

1/3/2004,18099,363151k,5894
1/4/2004,16176,106379k,6370
1/5/2004,16083,90243k,6449
1/6/2004,25380,609m,6147
1/7/2004,26420,708m,6272

Что делать, если мне надо отключить, на время, amavisd-new и/или SpamAssassin ?

Для отключения amavisd, всё, что вам надо сделать, это закомментировать строку в файле : /etc/postfix/master.cf:

#-o smtpd_proxy_filter=127.0.0.1:10024

Затем необходимо перазапустить Postfix:

# postfix reload

Производительность

Конфигурация системы, описанная выше, разработана для компьютера c количеством оперативной памяти: 256 Mb и позволяет вашему почтовому серверу принимать 8 входящих соединений одновременно. Если все 8 соединений установлены, все другие попытки установить соединение с сервером будут отклонены. В этом случае удаленный SMTP клиент будет продолжать попытки доставить сообщение на ваш почтовый сервер, пока не наступит тайм-аут, обычно в течении 5 дней. Если в вашем компьютере установлено менее 256 Mb оперативной памяти вам необходимо уменьшить количество amavisd и postfix процессов, в противном случае компьютер перестанет справляться с задачами, что приведет к падению процессов amavisd и/или postfix. Если в вашем компьютере больше чем 256 Mb оперативной памяти, то вы можете увеличить количество процессов больше 8.

Можете использовать следующие советы по увеличению/уменьшению количества процессов по приему почты:

После увеличения/уменьшения количества процессов, воспользуйтесь программой: top, она покажет вам загрузку системы. Когда вы выполните команду top, вы увидите приблизительно следующую информацию:

# top
Memory: Real: 113M/144M act/tot Free: 103M Swap: 0K/512M used/tot

Смотреть надо на значение "Free." Оно показывает сколько свободной оперативной памяти у вас есть в наличии.

Каждый smtpd процесс должен обрабатываться процессом amavisd, поэтому удостоверьтесь, что количество процессов smtpd и amavisd одинаково, т.е. равно 8:

Отредактируйте файл: /etc/amavisd.conf обратите внимание на следующую строку:

$max_servers = 8;

Если данная переменная в конфигурационном файле отсутствует, то значение по-умолчанию равно 2. Увеличьте или уменьшите данной значение, так, как вам необходимо.
Теперь отредактируем файл: /etc/postfix/master.cf. Найдите строку, которая выглядит как эта:

smtp inet n - y - 8 smtpd

Увеличьте или уменьшите значение maxprocs до количества процессов, которой вы выставили в файле: /etc/amavisd.conf.

Перезапустите amavisd и postfix. Запустите команду top, нажмите клавишу "o" и наберите "res" для того, чтобы информация о процессах отсортировалась по использованию памяти.

На чём это работает у нас:

У нас работает 2 сервера, для обеспечения отказоустойчивости и балансировки нагрузки. Обе системы - это:
Pentium III 900MHz
256 MB оперативной памяти
Dell PowerEdge Rackmount systems 20 GB HDD

В среднем, ежедневно, каждый сервер доставляет 700-1000 MB сообщений (по данным отчётов maillog) обычно это порядка 12000 сообщений на каждый сервер. Каждый сервер обнаруживает и блокирует порядка 6000 спам сообщений ежедневно. Другими словами - производительность великолепная.

Настройки системы для нескольких доменов

Since I get this question all the time, here are some quick
directions for running with multiple domains. Please note that this
is untested, but should give you some guidance. In the examples
below, I've added a new domain which I called "domain2.com" to the
system.

1. Отредактируйте файл: /etc/postfix/main.cf
Добавьте в переменную mydestination новые домены, например:

mydestination =
$myhostname,
localhost.$mydomain,
$mydomain,
mail.$mydomain.com,
localhost.domain2.com,
domain2.com,
mail.domain2.com

2. Отредактируйте файл: /etc/postfix/transports

Добавьте транспорт для новых доменов:

domain.com smtp:[10.1.1.50]
domain2.com smtp:[10.1.1.50]

3. Отредактируйте файл: /etc/amavisd.conf

Добавьте в переменную @local_domains_acl hash новые домены:

@local_domains_acl = ( ".$mydomain", 'domain2.com' );

Антивирусная подсистема

В нашей компании мы используем Symantec Mail Security на наших
Exchange серверах, поэтому на спам шлюзе антивирусная подсистема отсутствует. Kris Nosak потратил некоторое время на написание инструкции для подключения антивирусной подсистемы к системе, которую мы рассматриваем. Вы можете подключить её, прочитав следующее руководство:
http://antispam.b2r.ru/clamav_translate.html

Скрипты, используемые в системе

http://antispam.b2r.ru/scripts/my-postfix-report.sh
http://antispam.b2r.ru/scripts/my-restart.sh
http://antispam.b2r.ru/scripts/my-sa-learn.sh
http://antispam.b2r.ru/scripts/my-spamreport.pl
http://antispam.b2r.ru/scripts/my-summary.pl
http://antispam.b2r.ru/scripts/add-domain.sh

Обновлено: 13.03.2015