Подробно о настройке OpenBSD, Postfix, SpamAssassin, Amavisd-new, ClamAV (openbsd bsd smap virus clamav mail postfix filter spamassassin)
Ключевые слова: openbsd , bsd , smap , virus , clamav , mail , postfix , filter , spamassassin , (найти похожие документы )
From: OVERDRiVE <sidix@b2r.ru. >
Date: Mon, 20 Apr 2005 18:21:07 +0000 (UTC)
Subject: Подробно о настройке 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\.com\s+\[.*\]\)/
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
Legal Stuff
This document is ©2004 by Scott Vintinner and is released under the
OpenContent License (shown below).
Thanks to the following people who have responded back with
corrections and recommendations : Monte Ohrt, Sean Lally, Jim
O'Donald, Patryck, Kris Nosack, Karl Kopp, Vernon Schryver, Jens
Gutzeit, Ralf Hildebrandt, Derek Shaw, Bojan Zdrnja, Kevin
Roosdahl, David White, Cameron Moore, and Mark Martinec (from
Amavisd-new).
OpenContent License (OPL)
Version 1.0, July 14, 1998.
This document outlines the principles underlying the OpenContent
(OC) movement and may be redistributed provided it remains
unaltered. For legal purposes, this document is the license under
which OpenContent is made available for use.
The original version of this document may be found at
http://opencontent.org/opl.shtml
LICENSE
Terms and Conditions for Copying, Distributing, and Modifying
Items other than copying, distributing, and modifying the Content
with which this license was distributed (such as using, etc.) are
outside the scope of this license.
1. You may copy and distribute exact replicas of the OpenContent
(OC) as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any
warranty; and give any other recipients of the OC a copy of this
License along with the OC. You may at your option charge a fee for
the media and/or handling involved in creating a unique copy of the
OC for use offline, you may at your option offer instructional
support for the OC in exchange for a fee, or you may at your option
offer warranty in exchange for a fee. You may not charge a fee for
the OC itself. You may not charge a fee for the sole service of
providing access to and/or use of the OC via a network (e.g. the
Internet), whether it be via the world wide web, FTP, or any other
method.
2. You may modify your copy or copies of the OpenContent or any
portion of it, thus forming works based on the Content, and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified content to carry prominent notices
stating that you changed it, the exact nature and content of the
changes, and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the OC or any part
thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License, unless otherwise permitted
under applicable Fair Use law.
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the OC, and
can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work
based on the OC, the distribution of the whole must be on the terms
of this License, whose permissions for other licensees extend to
the entire whole, and thus to each and every part regardless of who
wrote it. Exceptions are made to this requirement to release
modified works free of charge under this license only in compliance
with Fair Use law where applicable.
3. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to copy,
distribute or modify the OC. These actions are prohibited by law if
you do not accept this License. Therefore, by distributing or
translating the OC, or by deriving works herefrom, you indicate
your acceptance of this License to do so, and all its terms and
conditions for copying, distributing or translating the OC.
NO WARRANTY
4. BECAUSE THE OPENCONTENT (OC) IS LICENSED FREE OF CHARGE, THERE
IS NO WARRANTY FOR THE OC, TO THE EXTENT PERMITTED BY APPLICABLE
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
AND/OR OTHER PARTIES PROVIDE THE OC "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK OF USE OF THE OC IS WITH YOU.
SHOULD THE OC PROVE FAULTY, INACCURATE, OR OTHERWISE UNACCEPTABLE
YOU ASSUME THE COST OF ALL NECESSARY REPAIR OR CORRECTION.
5. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
MIRROR AND/OR REDISTRIBUTE THE OC AS PERMITTED ABOVE, BE LIABLE TO
YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
THE OC, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
Tuesday, August 17, 2004 19:52
2004, Russia, Moscow translated by sidix@b2r.ru
1.1 , Jorj_K (? ), 21:33, 21/08/2005 [ответить ] [﹢﹢﹢ ] [ · · · ]
+ /–
spamassassin проверяет но в хедерсы письма не дописывает ничего, а в логах пишет что проверил
spam_scan: hits=2.15 tests=[ALL_TRUSTED=-2.4,HTML_40_50=0.527,HTML_BADTAG_50_60=0.864,HTML_MESSAGE=0.001,HTML_MIME_NO_HTML_TAG=0,HTML_NONELEMENT_60_70=0.237,INFO_TLD=1.717,MIME_HTML_ONLY=1.204]
что ему не хватает?
2.6 , prog10 (? ), 21:09, 14/12/2005 [^ ] [^^ ] [^^^ ] [ответить ]
+ /–
Ему нехватает внимательности админа
rewrite_header 1 в файле local.cf spamassassin
1.3 , Lug (? ), 11:55, 26/08/2005 [ответить ] [﹢﹢﹢ ] [ · · · ]
+ /–
не понял куда он деёт распознаные письма как спам ? удаляет или что ?
Как сделать чтобы на первое время он слал все письма на админа напр.(Admin@domain2.ru) ? для оцеки так сказать его правильного функционирования ?
2.5 , SmallwooD13 (? ), 03:47, 15/09/2005 [^ ] [^^ ] [^^^ ] [ответить ]
+ /–
складывает в /var/amavis/quarantine/
как сделать чтоб администратору слал не знаю.
1.4 , SmallwooD13 (? ), 03:45, 15/09/2005 [ответить ] [﹢﹢﹢ ] [ · · · ]
+ /–
Почему-то amavisd долго обрабатывает письма.
В логе пишет,что самый долгий процесс это:
fwd-connect: 30065 (71%)99
Чем он занимается эти 30 секунд, кто-нибудь подскажет?
(OS FreeBSD-5.3)
1.8 , Павел (?? ), 15:26, 17/03/2006 [ответить ] [﹢﹢﹢ ] [ · · · ]
+ /–
может кто нить подскажет как правильно прописать следующее
1 всем пользователям запрещено принимать письма с аттачами с zip архивами
2 а васе и пете разришить
Что надо прописать в конфиге ????
1.12 , Noname (?? ), 19:33, 27/12/2021 [ответить ] [﹢﹢﹢ ] [ · · · ]
+ /–
Привет всем профи.
Такая беда, съезжаю с винды на свободные системы. Хочу прокси домашний вместо маршрутизатора, на старом железе. Не могу туда OpenBSD накатить. Он при установке тянет файлы с интернета, которого еще нет и объяснить ему, как подключиться (логин/пароль, провайдерские) я немогу. А все пособия по установке OpenBSD в нете, от "знатаков", они там его через виртуалбокс накатывают а мне надо сразу на голое железо, это возможно? СПС!.....