Max Kostikov

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

Одним из наиболее популярных и мощных инструментов реализующих данный комплексный подход является пакет Spamassassin. Однако, Spamassassin обладает не только возможностями по борьбе со спамом внутри системы, но и реализует некоторые возможности по отправке отчётов о вновь обнаруженном спаме на обслуживаемой им системе во внешние антиспам-службы на базе техник учёта контрольных сумм (checksum-based filtering) и чёрных листов хостов (DNSBL). Это позволяет иметь более точные данные по распространению того или иного вида спам-сообщений и более адекватно представлять данные по ним всем подписчикам по всему миру.

Рассмотрим настройку работы данного механизма в рамках имеющейся системы на базе FreeBSD.

root@beta:~ # uname -v
FreeBSD 10.3-RELEASE-p4 #0: Sat May 28 12:23:44 UTC 2016     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
root@beta:~ # spamassassin -V
SpamAssassin version 3.4.1
  running on Perl version 5.20.3

1. Подключение checksum-based служб

К числу служб на базе учёта контрольных сумм поддерживаемых Spamassassin относятся три наиболее известных — Rhyolite DCC, Vipul's Razor и Pyzor.

Не рассматривая отдельно настройку и установку Spamassassin, которые достаточно подробно освещены в его документации и множестве статей в интернет, обратим лишь внимание на необходимость наличия включённых в него соответствующих модулей при компиляции.

root@beta:~ # cd /usr/ports/mail/spamassassin/
root@beta:/usr/ports/mail/spamassassin # make showconfig
===> The following configuration options are available for spamassassin-3.4.1_6:
     AS_ROOT=on: Run spamd as root (recommended)
     SSL=on: Build spamd/spamc with SSL support
     UPDATE_AND_COMPILE=on: Download and compile rulesets (recommended)
====> Optional user-config/bayes database backends
     MYSQL=on: MySQL database support
     PGSQL=off: PostgreSQL database support
====> Optional SpamAssassin plugins
     DCC=on: DCC digest list support (mail/dcc-dccd)
     DKIM=on: Verify DKIM records (mail/p5-Mail-DKIM)
     PYZOR=on: Pyzor digest list support (mail/pyzor)
     RAZOR=on: Vipul's Razor digest list support (mail/razor-agents)
     RELAY_COUNTRY=off: Location-based scoring (net/p5-Geo-IP)
     SPF_QUERY=on: Verify SPF records (mail/p5-Mail-SPF)
====> GnuPG (for sa-update, optional): you have to select exactly one of them
     GNUPG_NONE=off: Do not use GnuPG
     GNUPG=off: GnuPG 1 (security/gnupg1)
     GNUPG2=on: GnuPG 2 (security/gnupg)
===> Use 'make config' to modify these settings

Благодаря этому необходимые пакеты служб checksum-based filtering будут автоматически установлены в систему.

root@beta:/usr/ports/mail/spamassassin # pkg info | egrep "(pyzor|dcc|razor)"
dcc-dccd-1.3.158_1             Distributed Checksum Clearinghouse bulk email detector
py27-pyzor-1.0.0               Collaborative, networked system to detect and block spam
razor-agents-2.84_1            Distributed, collaborative, spam detection and filtering network

Также следует проконтролировать, чтобы для этих служб были открыты порты для обмена с серверами:

  • для DCC - UDP 6277;
  • для Razor - TCP 2307;
  • для Pyzor - UDP 24441.

Кроме того, демону Spamassassin необходимо разрешить отправку отчётов во внешние системы ключом -l или --allow-tell.

root@beta:~ # cat /etc/rc.conf | grep spamd
spamd_enable="YES"
spamd_flags="-x -q -l -u mailnull"

1.1. Настройка DCC

Ввиду того, что в данной системе данные из службы DCC используются также и SMTP сервером Exim, был выбран вариант его использования в демонизированном виде через модуль интерфейса dccifd.

Его настройка сводится к указанию по запуску службы в файле rc.conf.

root@beta:~ # cat /etc/rc.conf | grep dcc
dccifd_enable="YES"

Используя в качестве файла настройки стандартный конфигурационный файл из пакета DCC для базы, изменим буквально лишь пару его параметров.

root@beta:~ # cd /usr/local/dcc/
root@beta:/usr/local/dcc # cp dcc_conf.sample dcc_conf
...
root@beta:/usr/local/dcc # diff -u dcc_conf.sample dcc_conf | grep -v "#"
--- dcc_conf.sample     2016-02-26 23:47:26.386821000 +0200
+++ dcc_conf    2014-11-25 21:19:26.000000000 +0200
@@ -7,7 +7,7 @@

 DCC_CONF_VERSION=4

@@ -89,14 +89,14 @@
 DCCM_LOG_AT=5
-DCCM_REJECT_AT=
+DCCM_REJECT_AT=MANY
 DCCM_CKSUMS=
 DCCM_XTRA_CKSUMS=

-DCCIFD_ENABLE=off
+DCCIFD_ENABLE=on

Параметр DCCIFD_ENABLE сигнализирует о использовании службы в режиме демона, а DCCM_REJECT_AT устанавливает уровень, при котором демон DCC будет выдавать позитивную оценку на спам.

И запустим его и проверим корректность функционирования.

root@beta:/usr/local/dcc # service dccifd start
Starting dccifd.
root@beta:/usr/local/dcc # cdcc info
# 06/05/16 16:48:39 EET  /usr/local/dcc/map
# Re-resolve names after 17:36:17  Check RTTs after 16:52:30
# 1334.06 ms threshold, 1289.40 ms average    12 total, 9 working servers
IPv6 off   version=3

dcc1.dcc-servers.net,-      RTT+1000 ms  anon
#  209.169.14.27,-                                     x.dcc-servers ID 104
#     100% of 32 requests ok  292.13+1000 ms RTT       100 ms queue wait
#  209.169.14.29,-                                     x.dcc-servers ID 104
#     100% of 32 requests ok  289.19+1000 ms RTT       100 ms queue wait
#  209.169.14.30,-                                     x.dcc-servers ID 104
#     100% of 32 requests ok  269.15+1000 ms RTT       100 ms queue wait

dcc2.dcc-servers.net,-      RTT+1000 ms  anon
#  67.66.138.141,-
#      not answering
#  69.12.208.70,-                                          sonic.net ID 1156
#     100% of 32 requests ok  300.66+1000 ms RTT       100 ms queue wait
# *192.84.137.21,-                                           INFN-TO ID 1233
#     100% of 32 requests ok  147.94+1000 ms RTT       100 ms queue wait

dcc3.dcc-servers.net,-      RTT+1000 ms  anon
#  38.124.232.176,-                                                  ID 1102
#     100% of 32 requests ok  234.06+1000 ms RTT       100 ms queue wait
#  74.92.232.243,-                                          Etherboy ID 1002
#     100% of 32 requests ok  247.10+1000 ms RTT       100 ms queue wait

dcc4.dcc-servers.net,-      RTT+1000 ms  anon
#  69.12.221.230,-                                         sonic.net ID 1117
#     100% of 32 requests ok  296.51+1000 ms RTT       100 ms queue wait

dcc5.dcc-servers.net,-      RTT+1000 ms  anon
#  209.169.14.26,-
#      not answering
#  216.240.102.30,-                                          dmv.com ID 1181
#     100% of 32 requests ok  247.40+1000 ms RTT       100 ms queue wait

@,-                         RTT-1000 ms  32768 secret13192363914y2710
#  127.0.0.1,-
#      not answering

################
# 06/05/16 16:48:39 EET  greylist /usr/local/dcc/map
# Re-resolve names after 18:43:05
# 1 total, 0 working servers
# continue not asking greylist server 256 seconds after 4 failures

@,-                         Greylist 32768 secret13192363914y2710
# *127.0.0.1,6276
#      not answering

Кроме того, ввиду того, что DCC ведёт локальный лог в специфическом формате (см. каталог /usr/local/dcc/log), следует позаботиться о её своевременной очистке используя специальный скрипт через службу CRON.

root@beta:/usr/local/dcc # cat /etc/crontab | grep dcc
15      0       *       *       *       dcc     /usr/local/dcc/libexec/cron-dccd

1.2. Настройка Vipul's Razor

Служба Vipul's Razor использует индивидуальные для каждого системного пользователя настройки. В этой связи принимая во внимание, что Spamassassin, как все остальные почтовые сервисы в этой системе, работает от имени пользователя mailnull.

Рабочий каталог этой учётной записи расположен по пути /var/spool/mqueue.

root@beta:/usr/local/dcc # cat /etc/passwd | grep mailnull
mailnull:*:26:26:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin

Произведём стартовую настройку посредством утилиты razor-admin и проверим результат.

root@beta:/usr/local/dcc # cd /var/spool/mqueue
root@beta:/var/spool/mqueue # sudo -u mailnull razor-admin -register
Register successful.  Identity stored in /var/spool/mqueue/.razor/identity-rusaQdc5__
root@beta:/var/spool/mqueue # sudo -u mailnull razor-admin -discover
root@beta:/var/spool/mqueue # sudo -u mailnull razor-admin -create
root@beta:/var/spool/mqueue # ll .razor/
total 16
lrwxr-xr-x  1 mailnull  daemon    19  5 июн 18:13 identity@ -> identity-rusaQdc5__
-rw-------  1 mailnull  daemon    90  5 июн 18:13 identity-rusaQdc5__
-rw-r--r--  1 mailnull  daemon   706  5 июн 18:13 razor-agent.conf
-rw-r--r--  1 mailnull  daemon  1095  5 июн 18:15 razor-agent.log
-rw-r--r--  1 mailnull  daemon   995  5 июн 18:15 server.c303.cloudmark.com.conf
-rw-r--r--  1 mailnull  daemon   839  5 июн 18:13 server.n002.cloudmark.com.conf
-rw-r--r--  1 mailnull  daemon    57  5 июн 18:15 servers.catalogue.lst
-rw-r--r--  1 mailnull  daemon    30  5 июн 18:13 servers.discovery.lst
-rw-r--r--  1 mailnull  daemon    76  5 июн 18:15 servers.nomination.lst

Проверить, что всё функционирует должным образом можно следующей командой используя, например, образец спама из комплекта поставки Spamassassin.

root@beta:/var/spool/mqueue # locate sample-spam.txt
/root/.cpan/build/Mail-SpamAssassin-3.4.1-4hz5PT/sample-spam.txt
root@beta:/var/spool/mqueue # sudo -u mailnull razor-check -d /root/.cpan/build/Mail-SpamAssassin-3.4.1-4hz5PT/sample-spam.txt
 Razor-Log: Computed razorhome from env: /var/spool/mqueue/.razor
 Razor-Log: Found razorhome: /var/spool/mqueue/.razor
 Razor-Log: read_file: 15 items read from /var/spool/mqueue/.razor/razor-agent.conf
июн 05 17:31:40.426582 check[4873]: [ 2] [bootup] Logging initiated LogDebugLevel=9 to stdout
июн 05 17:31:40.427894 check[4873]: [ 5] computed razorhome=/var/spool/mqueue/.razor, conf=/var/spool/mqueue/.razor/razor-agent.conf, ident=/var/spool/mqueue/.razor/identity-rusaQdc5__
июн 05 17:31:40.428105 check[4873]: [ 2]  Razor-Agents v2.84 starting razor-check -d /root/.cpan/build/Mail-SpamAssassin-3.4.1-4hz5PT/sample-spam.txt
...
июн 05 17:31:40.782315 check[4873]: [ 8] razor-check finished successfully.

1.3. Настройка Pyzor

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

root@beta:/var/spool/mqueue # sudo -u mailnull pyzor ping
public.pyzor.org:24441  (200, 'OK')

1.4. Настройка DNSBL

По умолчанию проверка на вхождение в различные DNSBL включена в Spamassassin по умолчанию и не требует никаких дополнительных действий. При этом отправка отчётов об обнаруженном спаме доступна для листа SpamCop.

2. Дополнительная настройка Spamassassin

Теперь следует произвести дополнительную настройку вышеописанных служб в файле конфигурации Spamassassin.

root@beta:/var/spool/mqueue # cd /usr/local/etc/mail/spamassassin/
root@beta:/usr/local/etc/mail/spamassassin # cat local.cf
...
# DCC
dcc_home                        /usr/local/dcc
dcc_dccifd_path                 /usr/local/dcc/dccifd
dcc_timeout                     10

# Razor
use_razor2 1

# Pyzor
use_pyzor 1
pyzor_path /usr/local/bin/pyzor
pyzor_options --homedir /var/spool/mqueue/

# SpamCop
spamcop_from_address noreply@my.server
...

В секции настроек DCC сообщаем о работе через интерфейс-демон и устанавливаем таймаут ожидания ответа от него, а в секции Pyzor указываем путь к исполняемому модулю и рабочему каталогу для хранения временных данных для проверки в данной службе. Кроме того командами use_razor2 и use_pyzor эти модули включаются в алгоритим проверки Spamassassin. При этом DCC в последних версиях включён по-умолчанию и не требует отдельной активации.

Для DNSBL SpamCop сообщаем от имени какого пользователя будет оправляться отчёт о спаме. В противном случае будут использованы данные ident что в ряде случаев может привести к некорректному формированию адреса отправителя и ошибке отправки отчёта.

Итак, все настройки завершены и можно перезапустить демон Spamassassin.

root@beta:/usr/local/etc/mail/spamassassin # service sa-spamd restart
Stopping spamd.
Waiting for PIDS: 1486.
Starting spamd.

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

root@beta:/usr/local/etc/mail/spamassassin # spamassassin -D < /root/.cpan/build/Mail-SpamAssassin-3.4.1-4hz5PT/sample-spam.txt
...

3. Отправка отчётов о спаме

Отправка отчётов о спаме производится в процессе стандартного обучения Spamassassin. При этом обратите внимание, что по-обыкновению используемая для этих целей локальная утилита sa-learn, во-первых, работает только локально, а, во-вторых, и это главное, затрагивает только Bayes-фильтры данной системы и не имеет функционала отправки отчётов во внешние службы.

Однако искомым функционалом обладает сетевой клиент spamc. При его вызове с ключом -C type или --reporttype=type, где type принимает значения report для спама и revoke для ошибочно принятого за спам сообщения.

Вызов этой утилиты возможно производить из используемых в системе скриптов обучения (например, аналогичных описанным в статье "Отложенное пакетное обучение антиспам-фильтра используя Dovecot" на этом сайте) не забывая при этом указывать в качестве дополнительных параметров имя пользователя, для которого производится это действие для корректного внесения изменений в bayes-сигнатуры и максимальный размер обрабатываемого письма, если установленный по умолчанию размер в 512 килобайтов представляется недостаточным.

Результаты отправки отчётов о спаме будут кратко отображаться в стандартном лог-файле Spamassassin.

root@beta:~ # cat /var/log/maillog
...
Jun 05 16:00:00 beta spamd[53319]: spamd: connection from localhost [::1]:54015 to port 783, fd 5
Jun 05 16:00:05 beta spamd[53319]: reporter: spam reported to DCC
Jun 05 16:00:06 beta spamd[53319]: reporter: spam reported to Pyzor
Jun 05 16:00:09 beta spamd[53319]: reporter: spam reported to Razor
Jun 05 16:00:11 beta spamd[53319]: reporter: spam reported to SpamCop
Jun 05 16:00:11 beta spamd[53319]: spamd: Tell: Setting local,remote for box@my.server:26 in 11.6 seconds, 32981 bytes
Jun 05 16:00:11 beta spamd[34712]: prefork: child states: II
...

При отправке же отчётов об ошибочно отнесённой к спаму корреспонденции Spamassassin поддерживает лишь Vipul's Razor.

4. PROFIT!

Статья была полезной? Тогда прошу не стесняться и деньгами или биткоинами.


Buy Bitcoin at CEX.IO