Не секрет, что борьба со спамом является довольно нетривиальной задачей требующей комплексного подхода. Это обусловливает использование широкого набора средств анализа, контроля и оценки на всех уровнях приёма нового сообщения передаваемого по каналам электронной почты.
Одним из наиболее популярных и мощных инструментов реализующих данный комплексный подход является пакет 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
К числу служб на базе учёта контрольных сумм поддерживаемых 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
Также следует проконтролировать, чтобы для этих служб были открыты порты для обмена с серверами:
Кроме того, демону Spamassassin необходимо разрешить отправку отчётов во внешние системы ключом -l или --allow-tell.
root@beta:~ # cat /etc/rc.conf | grep spamd
spamd_enable="YES"
spamd_flags="-x -q -l -u mailnull"
Ввиду того, что в данной системе данные из службы 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
Служба 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 # chown mailnull /var/spool/mqueue
root@beta:/usr/local/dcc # cd /var/spool/mqueue
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 # sudo -u mailnull razor-admin -register
Register successful. Identity stored in /var/spool/mqueue/.razor/identity-rusaQdc5__
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.
Служба Pyzor не требует постинсталляционных настроек для успешного функционирования. В этом можно удостоверится специальной тестовой командой.
root@beta:/var/spool/mqueue # sudo -u mailnull pyzor ping
public.pyzor.org:24441 (200, 'OK')
По умолчанию проверка на вхождение в различные DNSBL включена в Spamassassin по умолчанию и не требует никаких дополнительных действий. При этом отправка отчётов об обнаруженном спаме доступна для листа SpamCop.
Теперь следует произвести дополнительную настройку вышеописанных служб в файле конфигурации 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 /var/db/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 сообщаем о работе через путь к сокет-файлу указанному в dcc_dccifd_path и устанавливаем таймаут ожидания ответа от него, а в секции 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
...
Отправка отчётов о спаме производится в процессе стандартного обучения 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.
Статья была полезной? Тогда прошу не стесняться и поддерживать деньгами через PayPal или Яндекс.Деньги.