Настройка спам-фильтра DSpam (dspam, dspam-web, dovecot-antispam) в CentOS/RHEL 7

Установка DSpam

Сначала установим необходимые пакеты:

В CentOS 6 пользователь dspam создавался с UID, который меньше 500 и возникала проблема с запуском веб-части DSpam в Apache, поэтому приходилось менять UID. Сейчас эта часть уже не актуальна:

Создадим для DSpam базу и специального пользователя в MySQL:

Теперь создадим в базе MySQL необходимые для работы таблицы:

Условимся, что здесь и далее вместо %DSpamDB%, %DSpamUser% и %DSpamPassWord% нужно вписывать название базы данных, имя пользователя и пароль. Никаких процентов!

Настройка DSpam

Теперь можно запустить DSpam:

Настройка postfix

Настройка SELinux для DSpam и Postfix

После того как SELinux настроен соответствующим образом для взаимосвязи postfix и DSpam – можно перезапустить postfix:

Настройка fetchmail

Настроим fetchmail, для того, чтобы он принятую почту принимал с использованием DSpam:
1-й вариант (попроще)

2-й вариант (правильнее):
В PostfixAdmin, в настройках fetchmail нужно прописать следующий mda:

прямо так, с кавычками. Имейте в виду, PostfixAdmin должен быть исправлен так как описано в этой статье, иначе PostfixAdmin будет неправильно записывать значения MDA в базу MySQL.

Настройка Apache и DSpam-web

Настройка SELinux для DSpam-web и Apache

Перезапустим Apache:

Теперь можно открыть в браузере ссылку https://mail.example.com:8443/ для доступа к DSpam-web.

Настройка Dovecot

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

Таким образом все письма в теме которых (или в поле автор) есть слово VIAGRA – будут автоматически удаляться. А те письма, которые DSpam пометил как Spam – будут помечаться прочитанными и попадать в папку Spam. Имейте в виду, Dovecot должен быть настроен так как описано в этой статье.

Но, как известно, в некоторых случаях письма со спамом не определяются как Spam, а некоторые письма, наоборот, отмечаются как спам по ошибке. В таких случаях необходимо сказать DSpam, что вот это письмо, к примеру, не спам, а вот это, наоборот спам. Это нужно для самообучения DSpam.
Отмечать ошибочные письма как спам/не спам можно в вебинтерфейсе DSpam, но это сложный вариант, мы настроим проще.

Установка плагина dovecot-antispam

Для Dovecot есть специальный плагин, который будет следить за перемещением писем в почтовом ящике и в случае необходимости передавать эти письма на обучение DSpam. К примеру, если письмо вытаскивают из папки Spam (кроме случаев когда эти письма кладут в корзину), такое письмо передаётся DSpam со словами – это не спам. А если письмо наоборот, кладут в папку Spam, такое письмо передаётся DSpam со словами – это спам!

Плагина, который, обеспечивает нужный нам функционал, в репозиториях CentOS нет, поэтому соберём его и установим из исходников. Для этого сделаем следующее:

В CentOS 6 присутствовал пакет dovecot-devel в репозитории EPEL, поэтому не было нужды его скачивать с сайта atrpms.net. В CentOS 7 на момент написания статьи этого пакета в репозитории EPEL ещё не было, так что, если команда yum -y install dovecot-devel выдаст ошибку – скачайте пакет вручную и установите. А если пакет установится из репозитория – скачивать и устанавливать его вручную не нужно будет.

Если в момент выполнения команды make install мы увидим следующие ошибки:

нужно будет сделать следующее:

Если ошибок не будет – значит всё ок.

Теперь пропишем скомпилированный и установленный плагин в настройки dovecot:

Настройка SELinux для плагина dovecot-antispam

После настройки плагина – перезапустим dovecot:

Сейчас можете попробовать поместить письмо в папку Spam и посмотреть в веб-интерфейсе DSpam, поменялся ли статус у данного письма во вкладке «История».
Так же можно посмотреть, нет ли ошибок в SELinux:

Если ошибок нет, а статус письма в веб-интерфейсе DSpam меняется – значит мы настроили всё правильно.

Обновление от 18.01.2016

Во время очередного обновления CentOS, отказались обновляться пакеты dovecot:

yum нам предлагаем выполнить yum check, что ж, выполним:

Ожидаемо не помогло. Окей, удалим пакет который нам мешает, обновим оригинальные пакеты, а потом опять установим dovecot-devel.

Обновились. 🙂

Comments

  1. Анатолий
    05.03.2015 - 01:43

    Добрый день! Спасибо за отличную статью!
    Хотел узнать, пробовали ли вы использовать dspam-milter, для интеграции dspam с postfix?
    Если да, был бы очень признателен за описание процесса настройки.
    Успехов!

    • Добрый.
      Не очень понял вопрос. Дспам ведь и так интегрируется с постфиксом. Постфикс каждое письмо обрабатывает дспамом. Разве нет?

      • Анатолий
        05.03.2015 - 13:35

        В вашем примере dspam интегрируется с postfix посредством SMTP протокола. Мой вопрос был про интеграцию посредством технологии milter, что дает ряд преимуществ. Нативной поддержки milter в dspam нет, но есть пакет dspam-milter (https://github.com/whyscream/dspam-milter), который позволяет настроить взаимодействие postfix и dspam, посредством данной технологии.

        • Понято. Пока не делал. Дополнительно только dkim прикрутил. Надо будет выложить описание.

  2. Андрей
    28.10.2015 - 15:29

    Подскажите пожалуйста, почему возникает такая ошибка?
    В интернете много информации по написанию .te файлов и по анализу ошибок selinux, много чего перепробовал,но пока не нашёл решения. Подскажите пожалуйста в каком направлении искать

    $ semodule -i dspam-dovecot.pp
    libsepol.print_missing_requirements: dspam-dovecot’s global requirements were not met: type/attribute httpd_dspam_rw_content_t (No such file or directory).
    libsemanage.semanage_link_sandbox: Link packages failed (No such file or directory).
    semodule: Failed!

Добавить комментарий

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