The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Подробно о настройке OpenBSD, Postfix, SpamAssassin, Amavisd-new, ClamAV (openbsd bsd smap virus clamav mail postfix filter spamassassin)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: 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

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 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.2, Jorj_K (?), 21:38, 21/08/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    $sa_tag_level_deflt = -999;
    стоит, что еще может быть?
     
  • 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)
     
     
  • 2.7, prog10 (?), 21:13, 14/12/2005 [^] [^^] [^^^] [ответить]  
  • +/
    razor,dcc clamav - смотри на них
     

  • 1.8, Павел (??), 15:26, 17/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    может кто нить подскажет как правильно прописать следующее
    1 всем пользователям запрещено принимать письма с аттачами с zip архивами
    2 а васе и пете разришить
    Что надо прописать в конфиге ????
     
  • 1.12, Noname (??), 19:33, 27/12/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Привет всем профи.
    Такая беда, съезжаю с винды на свободные системы. Хочу прокси домашний вместо маршрутизатора, на старом железе. Не могу туда OpenBSD накатить. Он при установке тянет файлы с интернета, которого еще нет и объяснить ему, как подключиться (логин/пароль, провайдерские) я немогу. А все пособия по установке OpenBSD в нете, от "знатаков", они там его через виртуалбокс накатывают а мне надо сразу на голое железо, это возможно? СПС!.....
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру