Amavisd new что это
HOW-TO: Настройка Amavisd-new + ClamAV + Dspam
Содержание
Для начала необходимо создать два почтовых ящика spam@example.com и notspam@example.com для того чтоб пользователи могли обучать спам фильтр. Можно конечно было и не создавать отдельные почтовые ящики а решить это другими методами, но так проще. Пересылаемое сообщение на адреса spam@example.com и notspam@example.com должно быть в виде вложения, так так сигнатура dspam будет находиться в заголовке сообщения.
Приступаем к настройке.
Все действия в этой статье выполняются от пользователя root.
1. Настройка Amavisd-new
Устанавливаем необходимые пакеты
Добавим пользователя clamav в группу amavis
Приступаем к настройке amavis
Редактируем файл /etc/amavis/conf.d/15-content_filter_mode раскоментировав в нём следующие строки
Теперь редактируем файл /etc/amavis/conf.d/20-debian_defaults
Всё остальное я оставил по умолчанию.
Теперь переходим в каталог /usr/sbin/
И редактируем файл amavisd-new Находим в нём строки
Добавим наш домен в белый список amavis Для этого отредактируем файл /etc/amavis/conf.d/40-policy_banks добавив в него строку example.com’ ⇒ ‘WHITELIST’,
2. Настройка DSPAM
Теперь приступаем к настройке Dspam.
На данном этапе существует 2-а способа установки dspam:
1. Установка старой версии 3.6.8 из репозитория ubuntu
2. Установка последней версии 3.9.1-RC1 из исходников
2.1. Установка dspam из репозитория ubuntu
Устанавлмваем необходимые пакеты
В процессе установки вас спросят создавать ли базу для dspam, соглашаемся, необходимо будет указать root пароль от mysql и пароль для пользователя от которого будет работать dspam с mysql.
Переходим в каталог /etc/dspam и приступаем к редактированию dspam.conf Ниже я приведу свой конфиг dspam с некоторыми коментариями
Приступаем к настройке web интерфейса dspam
Даём права группе www-data на этот файл
Теперь создаём файл dspam в каталоге /etc/apache2/conf.d/
и вставляем в него следующее содержимое
Установим недостающий модуль для apache и активируем его
Устанавливаем пользователя amavis в качестве админа в web интерфейсе dspam
Теперь необходимо отредактировать файл /etc/dspam/webfrontend.conf заменив значение одной строки на свой домен
Далее редактируем файл /etc/dspam/conf.d/mysql.conf убрав коментарий с параметра MySQLUIDInSignature
И разрешим доступ к этому файлу группе amavis
Отредактируем файл /etc/default/dspam заменив в нём значение параметра START с no на yes.
2.2. Установка dspam из исходников
Установим необходимые пакеты для сборки dspam
Установим procmail (используется в качестве доставщика в dspam)
Добавим пользователя dspam
Переходим в каталог /usr/src и скачиваем последнюю версию dspam (версия 3.9.1-RC1 последняя на момент написания статьи)
Распаковываем полученный архив
Переходим в папку dspam-3.9.1-RC1
Если всё прошло нормально то устанавливаем
Добавляем базу dspam в mysql
Создаём таблицы в БД dspam
и добавляем пользователя dspam, так же даём этому пользователю все права на БД dspam
Для выхода набираем
Назначаем права на запуск dspam
Переходим к установке web интерфейса
Создадим необходимый каталог и установим на него права
Копируем файлы web интерфейса в созданный каталог, назначаем права на скопированные файлы
Удаляем make файлы, они нам не нужны
Создаём символическую ссылку на файл пользовательских настроек по умолчанию, в каталог /etc/dspam, для того чтоб эти настройки были видны демону dspam
Даём права группе www-data на этот файл
Теперь создаём файл dspam в каталоге /etc/apache2/conf.d/
и вставляем в него следующее содержимое
Установим недостающий модуль для apache и активируем его
Устанавливаем дополнительные пакеты для того чтоб в web интерфейсе отображались графики
Устанавливаем пользователя amavis в качестве админа в web интерфейсе dspam
Теперь необходимо отредактировать файл /var/www/dspam/configure.pl
В следующей строке укажите ваш домен
Следующие строки отредактируйте как в примере, убрав комментарии и заменив значения на те что показаны ниже
Разрешим доступ к конфигурационному файлу dspam группе amavis
Переходим в каталог /etc/dspam и редактируем файл dspam.conf Ниже приведен мой конфиг. Этот конфиг во многом совпадает с конфигом который описывался выше для версии из убунтовского репозитория, Начиная с версии 3.8.0 в dspam появился параметр Tokenizer, более подробно читайте о нём здесь
Создадим каталог /var/run/dspam и назначим ему права
Совсем не обязательно запускать dspam в качестве демона, так как amavis сам при каждой проверки запускает dspam с необходимыми параметрами, но если вы всё таки хотите чтоб dspam стартовал в качестве демона при загрузке сервера вам необходимо выполнить следующее:
в этот файл запишите
и создать скрипт запуска в /etc/init.d (скрипт взят из пакета dspam в репозитории ubuntu)
содержимое этого скрипта
Установите права на скрипт
Создайте символические ссылки на скрипт в rcX.d для автоматического запуска dspam при загрузке сервера.
2.3 Настройка автоматической очистки базы dspam от устаревших записей
Копируем необходимые sql файлы
Создаём файл с названием dspam
и кладём этот скрипт в /etc/cron.daily
Устанавливаем права на скрипт
2.4 Настройка ротации логов dspam
Создаём файл с названием dspam
и кладём его в /etc/logrotate.d
Вот собственно и всё, настройка dspam законченна.
3. Подключение amavis и dspam в postfix
редактируем master.cf добавив в конец файла следующие строки
Создаём файл /etc/postfix/transports и записываем в него
Преобразуем данный файл в базу данных
На всякий случай проверяем статус clamav-daemon
если * clamd is running то всё ок если нет то запускаем
4. Добавление пользователя amavis в базу dspam.
Создадим файл message.txt с произвольным содержанием
И выполним команду
После чего в домашнем каталоге dspam должна появится папка
внутри которой будут файлы amavis.log, amavis.stats.
Установим права на домашний каталог dspam и всё его содержимое
Всё, настройка amavis + dspam + clamav закончена.
5. Тестирование
Теперь отправим тестовое сообщение через telnet, откроем данное сообщение для просмотра, на сервере в папке пользователя, в нём должны быть заголовки
Если они присутствуют, то всё работает нормально.
Более подробно о настройке amavis читайте здесь:
Создание почтовой системы на базе exim, dbmail, amavisd-new и postgresql.
Создание почтовой системы на базе exim, dbmail, amavisd-new и postgresql.
Оглавление
О статье.
DBMail
Возможности DBMail.
Установка и настройка DBMail.
Создаем почтовую базу данных:
Компилируем и инсталлируем DBMail:
затем откорректируем все необходимые пути и выполним
Программы, входящие в DBMail.
Пример добавления пользователя:
dbmail-adduser add test@test.com password 0 0 test@test.com
Пример добавления перенаправления почты (в своей системе я эту возможность отключил):
dbmail-adduser f postmaster@test.com postmaster
Пример добавления дополнительного адреса для почтового ящика:
dbmail-adduser c test@test.com +a test2@test.com
Так же алиасы поддерживают редирект сообщения во внешние программы:
Пример выдержки куска procmail, использующий IMAP папку:
Особенности DBMail.
Возможности Amavisd-new
Установка и настройка amavisd-new.
Настройка параметров, отвечающих за взаимодействие демона amavisd-new и MTA.
Настройка параметров, определяющих особенности взаимодействия amavisd-new и почтового сервера.
Настройка параметров сохранения логов.
Настройка уведомлений, DSN(Delivery Status Notifications), результатов фильтрации (BOUNCE/REJECT/DROP/PASS), карантина.
$virus_admin = <
‘baduser@sub1.example.com’ => ‘HisBoss@sub1.example.com’,
‘.sub1.example.com’ => ‘virusalert@sub1.example.com’,
‘.sub2.example.com’ => », # don’t send admin notifications
‘a.sub3.example.com’ => ‘abuse@sub3.example.com’,
‘.sub3.example.com’ => ‘virusalert@sub3.example.com’,
‘.example.com’ => ‘noc@example.com’,
‘.’ => ‘virusalert@hq.example.com’,
>;
Настройка индивидуальных параметров для отдельных пользователей, настройка белых/черных списков и т. п.
Несколько примеров использования *_lovers и bypass_* переменных:
$virus_lovers
$virus_lovers
$virus_lovers
$virus_lovers
$virus_lovers
$virus_lovers
$virus_lovers
или
@bypass_spam_checks_acl = ( «!.$mydomain», «.» );
недостатком последнего примера может являться то, что spamassassin не сможет анализировать исходящую ham (no-spam) почту и заносить результаты в bayes БД.
При работе со списками-хешами удобно использовать функцию map, которая выдает результаты вычисления выражения (вычисляемого в списочном контексте):
Настройка ограничений на использование ресурсов.
Настройка взаимодействия amavisd-new и внешних программ.
Отладка amavisd-new.
Особенности настройки SpamAssassin.
Интеграция с Pyzor.
Интеграция с Razor.
Описание транспортов.
Описание конфигурации повторной отправки сообщений.
Описание конфигурации перезаписи адресов.
Описание механизмов аутентификации.
Макросы.
Установка и настройка почтовой системы
Как защитить почтовый сервер от спама Clamav + Amavisd
Как защитить почтовый сервер от спама Clamav + Amavisd
Установка и настройка Clamav + Amavisd
Устанавливаем необходимые для работы антивируса и антиспама компоненты:
dnf —enablerepo=epel,powertools install amavisd-new clamd perl-Digest-SHA1 perl-IO-stringy
Открываем конфигурационный файл amavis:
Редактируем следующие параметры:
$mydomain = ‘infoit.com.ua’;
…
$myhostname = ‘relay.infoit.com.ua’;
* данные опции не обязательны, но они определяют сообщения в заголовках. $mydomain — домен, в котором находится сервер; $myhostname — имя сервера.
$allowed_header_tests <‘multiple’>= 0;
$allowed_header_tests <‘missing’>= 0;
* данные опции позволят программе Outlook без ошибок отправлять тестовое сообщение.
Открываем конфигурационный файл clamd:
Снимаем комментарий для опции TCPSocket:
Теперь разрешаем запуск антивируса и amavis:
systemctl enable clamd@scan —now
systemctl enable amavisd —now
Настройка Postfix
Добавляем в postfix:
content_filter = scan:[127.0.0.1]:10024
receive_override_options = no_address_mappings
* где content_filter указывает на приложение, которое будет сканировать сообщения; receive_override_options позволяет увидеть оригинальные email адреса писем с вирусами.
Теперь редактируем master.cf:
scan unix — — n — 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no
127.0.0.1:10025 inet n — n — 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
* итак, данной настройкой мы создадим два вспомогательных сервиса scan и 127.0.0.1:10025 (сервис без имени, он просто будет слушать на порту 10025 — это порт по умолчанию, на который отправляет сообщение amavis после выполнения проверки). Также, мы используем следующие опции:
systemctl restart postfix
Настройка обновлений антивируса и amavis
dnf install clamav-update
Обновляем антивирусную базу командой:
Для обновления базы антиспама:
sa-update —nogpg —verbose
Для настройки автоматического обновления, редактируем cron:
15 3 * * * /bin/freshclam
30 3 * * * /bin/sa-update
* в данном примере, каждый день в 03:15 будет запускаться процесс обновления clamav, а в 03:30 — антиспама.
Проверка
Для проверки антивируса отправляем сообщение со следующим содержимым:
X5O!P%@AP[4\PZX54(P^)7CC)7>$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Письмо не должно дойти, а в логе (/var/log/maillog) мы увидим строку:
… amavis[17688]: (17688-04) Blocked INFECTED (Eicar-Signature)
… relay=127.0.0.1[127.0.0.1]:10024, delay=0.25, delays=0.19/0/0/0.06, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, — INFECTED: Eicar-Signature )
Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
В итоге, письмо не должно прийти, а в логах мы увидим:
… amavis[17689]: (17689-04) Blocked SPAM
… status=sent (250 2.7.0 Ok, discarded, — spam )
Пересылка СПАМа и вирусов на другой ящик
Все письма со спамом и вирусами будут перемещаться в карантин. Если мы хотим перенаправлять все подобные сообщения на специальный ящик, то необходимо настроить amavis.
Открываем конфигурационный файл:
Добавляем такие опции:
$spam_quarantine_to = «spam\@infoit.com.ua»;
…
$virus_quarantine_to = «virus\@infoit.com.ua»;
* где $spam_quarantine_to указываем на адрес для перенаправления СПАМ-писем; $virus_quarantine_to — почта для писем с обнаруженными вирусами.
После перезагрузим amavisd:
systemctl restart amavisd
Пробуем отправить сообщения с тестовыми сигнатурами на СПАМ и вирус — письма должны быть перенаправлены на указанные адреса.
Сохранения СПАМа в папку SPAM пользователя
Выше мы рассмотрели возможность перенаправления всех нежелательных писем на другой почтовый ящик. Данный способ удобен, что пользователи не видят ненужные сообщения, но накладывает дополнительную обязанность на администратора по поиску писем, которые ложно были определены как СПАМ. В данном подразделе мы рассмотрим альтернативу — сохранение нежелательных сообщений в специальной папке.
Устанавливаем пакет dovecot-pigeonhole:
dnf install dovecot-pigeonhole
Открываем на редактирование файл:
Комментируем и добавляем строки:
/.dovecot.sieve
sieve = /etc/dovecot/sieve/default.sieve
* закомментированная строка указывала, что файл с настройками находится в домашней директории каждого пользователя. Мы же будем делать централизованный конфиг в файле /etc/dovecot/sieve/default.sieve.
Открываем файл /etc/dovecot/conf.d/15-lda.conf и редактируем:
* в данном примере мы добавили плагин sieve. Также необходимо со строки снять комментарий, если он был.
Открываем файл /etc/dovecot/conf.d/15-lda.conf и редактируем:
* также мы добавили плагин sieve + необходимо со строки снять комментарий, если он есть.
Создаем каталог и файл с настройками sieve:
require «fileinto»;
if header :contains «X-Spam-Flag» «YES» <
fileinto «Junk»;
>
* в данном примере мы ищем в заголовках X-Spam-Flag и отправляем такие письма в папку Junk.
Задаем владельца для созданных каталога и файла:
systemctl restart dovecot
Открываем конфиг amavis:
* по умолчанию стоит значение D_DISCARD, что означает, что сообщения будут отклонятся. Нам же нужно D_PASS — пропускать.
systemctl restart amavisd
Антиспам средствами Postfix
В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 7 секций, обработка которых выполняется в следующем порядке:
Чтобы лучше понять принцип, мы должны знать SMTP-команды при выполнении отправки почты. И так, порядок, следующий:
И так, для настройки антиспама в конфигурационный файл main.cf добавляем:
smtpd_client_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_pipelining
permit
smtpd_sender_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_non_fqdn_sender
reject_unknown_sender_domain
permit
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_non_fqdn_recipient
reject_unauth_destination
reject_unknown_recipient_domain
reject_unverified_recipient
permit
… и значения для них:
* это более или менее мягкие правила. Их можно использовать первое время, пока тестируем сервер.
Для усиления защиты добавляем:
smtpd_recipient_restrictions =
…
reject_unknown_client_hostname
reject_invalid_helo_hostname
reject_non_fqdn_helo_hostname
reject_unknown_helo_hostname
reject_rbl_client bl.spamcop.net
reject_rbl_client cbl.abuseat.org
reject_rbl_client dul.ru
reject_rbl_client dnsbl.abuse.ch
permit
* более подробное описание опций для защиты можно найти на странице postfix.org/postconf.5.html.
После внесения всех правок, необходима перезагрузка Postfix:
systemctl restart postfix
Обучение антиспама
Мы установили amavis, который проверяет почту на СПАМ средствами spamassassin. Последний без обучения, практически, бесполезен. Синтаксис команды для обучения следующий:
Таким образом, первая команда укажет spamassassin какие письма являются нежелательными, а вторая — не несущими рекламный характер.
Хорошей практикой будет договориться с пользователями о ручном помещении нежелательной почты из входящих в папку СПАМ. Тогда мы сможем пройтись скриптом по всем ящиками на сервере и обучать антиспам. Например, такой командой:
* в данном примере мы сказали spamassassin найти в каталогах пользователей папки Спам, Spam, Junk, Junk E-mail (данные каталоги являются типичными для помещения СПАМа) и провести обучение.
Чтобы минимизировать количество ложных срабатываний, необходимо проводить обучение с ключом —ham. В нашем примере мы отправляем все нежелательные письма на ящик spam. В таком случае, необходимо вручную находить ложные срабатывания и переносить их в специальную папку, например Ham. Тогда команда для обучения будет такой:
sa-learn —ham /home/mail/dmosk.local/spam\@dmosk.local/.Ham/cur
Статистику обучения можно посмотреть командой:
sa-learn —dump magic
Черные и белые списки
В настройках amavis мы можем переопределять СПАМ-бал для конкретного отправителя или всего домена. Для этого открываем файл:
Внутри фигурных скобок можно создавать новые строки с описанием поведения антиспама.
а) для добавления в белый список.
Присваиваем минусовое значение для бала, например:
* в данном примере все письма от домена infoit.com.ua будут получать минус 5 баллов. Таким образом, шансов попасть в СПАМ будет меньше. У всех писем от email example@mail.ru будет отниматься 10 баллов.
б) для добавления в черный список.
В данном случае, мы задаем положительное значение для балла:
После того, как мы внесли правки в наш файл, перезапускаем amavis:
systemctl restart amavisd
9. Отправка почты наружу
Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.
Настройки DNS для сервера
Многие почтовые серверы делают запросы в систему доменных имен для проверки легитимности почтового сервера, отправляющего почту. При настройке MTA очень важно правильно добавить необходимые записи в DNS.
1. rDNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.
И так, для создания записи в обратной зоне, необходимо написать письмо Интернет провайдеру, к сети которого подключен сервер или хостеру, если почтовый сервер настроен на VPS. IP-адрес нашего сервера должен вести на имя, которым приветствуется наш postfix — можно посмотреть командой:
Если мы получим пустой ответ, то вводим:
Если и в этот вариант не вернет ответ, вводим:
2. А-запись. Также необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.
Для этого заходим в консоль управления зоной нашего домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.
Настройки DNS для домена
Для каждого домена, для которого будем отправлять почту создаем записи:
Для проверки корректности настройки сервера, воспользуемся ресурсами:
Postfix — amavisd-new без localhost или почтовый сервер по новому
Есть масса инструкций, как поднять почтовый сервер на связке postfix — amavisd-new — dovecot. И подавляющее большинство из них повторяют друг друга почти дословно, включая ошибки и неточности.
Мне кажется скучным бездумно нажимать кнопки, поэтому я решил оптимизировать стандартную конфигурацию: что если построить взаимодействие postfix и amavisd-new не через localhost, а на unix socket?
Как оказалось, всё не так просто, но я это сделал! Инструкция и патч под катом.
Честно сказать, я вообще не люблю взаимодействие через localhost в пределах одной машины. Если требуется организовать обмен данными между двумя приложениями, то гораздо правильнее, безопаснее и менее ресурсоёмко сделать это через unix socket на файловой системе. Тем более, что так можно организовать защиту (средствами прав на файловой системе) даже там, где она отсутствует на уровне приложения или протокола.
Итак, путь почты в обсуждаемой связке выгладит так:
Выходит, нам нужно организовать две стыковки: при передаче на фильтрацию и при возврате обратно в MTA. Так как сокет создаёт слушатель, то в первом случае это будет amavisd, а во втором — postfix.
Начнём со второго, ибо это проще и лучше описано. Для того, чтобы postfix создал слушающий сокет, нужно просто во второй колонке master.cf (колонка type) указать unix, а не inet. В этом случае первая колонка определяет путь и имя файла сокета.
Так как процессы postfix работают в chroot (это можно отключить для конкретного процесса, но не стоит), то папку нужно создать внутри домашней директории postfix: /var/spool/postfix. В ней будут оба сокета:
Ну и конфигурация postfix:
Конкретные опции зависят от вашей настройки, это мой вариант.
Не очень красиво, но и не деструктивно для штатной структуры папок пакета.
Перезапускаем postfix и убеждаемся, что файл сокета появился в папке amavis, а pid-файл в pid/unix.amavis. К сожалению, права на сокет — 666, но права на папку, которую создали ранее, защитят файл от лишних глаз.
Проверить работу можно командой:
Отлично, с этим справились. Теперь к amavisd.
Сначала настроим обратный путь почты через unix socket, принадлежащий postfix. Это работает из коробки:
Файл с конфигурацией по умолчанию содержит упоминание дерективы @listen_sockets, но никакого описания для неё нет. Зато оно есть в release notes, даже с примерами! Правда и там сокет всего один, но что мешает попробовать?
ОК, а как задать протокол для сокета (который указывается в policy bank)? Во всех примерах пишут просто SOCK. По аналогии с inet-сокетами (там можно указать хост-порт) я предположил, что нужно указывать полный путь к файлу сокета. Вот что получилось:
Перезапускаю, проверяю — действительно, создались оба сокета! Победа? Не совсем, при попытке подключиться к сокету, ничего не происходит, а в лог записывается ошибка, что протокол для него не определён. Выходит, policy bank к ним не применяются.
Как же так? Пришлось идти в код.
Этот поход принёс две новости — как водится, хорошую и плохую. Хорошая состоит в том, что предположение относительно %interface_policy было верным:
И оба свойства там пустые.
Изучение документации подсказало такой вариант:
Остался последний штрих. Так как amavisd создаёт свой сокет с правами только на себя, а доступ для остальных мы запретили (что верно), то нужно добавить postfix в группу amavis, чтобы он смог писать в сокет: