SpamAssassin это почтовый спам-фильтр, действие которого основывается на теореме Байеса. Поскольку он написан на Perl, применять его на высоко нагруженных серверах не рекомендуется, в связи с не очень большим быстродействием. Однако, он достаточно прост в установке и настройке и при этом показывает неплохие результаты по отсеканию спама, поэтому часто используется в небольших компаниях.
Установка
В качестве платформы для построения почтового сервера используем Gentoo, MTA - exim.
Для начала обновляем дерево портеджей, чтобы установить spamassassin последней stable версии:
Для работы Razor надо открыть два порта:
TCP 2703 — Исходящий трафик от MTA на Razor серверы
TCP 7 — Исходящий ping от MTA на Razor серверы
DCC (DISTRIBUTED CHECKSUM CLEARING HOUSE) так же является сигнатурным анализатором, принцип работы которого заключается в том, что для каждого входящего сообщения определяется специальная контрольная сумма. Это число отправляется на специальный сервер, где сверяется с базой данных. По проверочной сумме сервер оценивает, как часто сообщение уже регистрировалось у других получателей и параллельно фиксирует увеличение количества таких сообщений. Сообщения с высокой регистрационной суммой DCC могут быть отнесены к категории спама. Регистрационные суммы DCC направляются в виде пакета UDP на сервер DCC, и точно так же происходит получение ответа. В каждом случае пересылается только контрольная сумма, а не само сообщение.
Для работы DCC нужно открыть порт UDP 6277
Настройка
Spamassassin
Для передачи сообщений на проверку, нужно открыть 783 порт.
/etc/mail/spamassassin/local.cf
Разкоментируем две строчки:
Создаем конфигурационный файл:
DCC
Поскольку предполагается что у нас не большой поток сообщений (меньше 100,000 писем в сутки), то самый простой для нас вариант — это когда мы выступаем как DCC-клиент и используем публичные DCC-серверы. Для такой работы уже почти всё готово сразу после установки. Нужно только немного изменить конфигурацию и проверить, что открыт сетевой доступ к публичным DCC серверам. Включаем в конфигурационном файле /etc/dcc/dcc_conf нужный DCC-клиент (DCCM_ENABLE=on для sendmail, или DCCIFD_ENABLE=on для остальных программ)
Для управления и настройки работы DCC-клиента используется cdcc.
В нашем случае, поскольку мы не собираемся поднимать свой сервер DCC, нужно закоментировать строки:
Редактируем /etc/exim/exim.conf
Включаем поддержку spamassassin:
На этом все, в следующий раз, как руки дойдут, напишу про обучение spamassassin.
Установка
В качестве платформы для построения почтового сервера используем Gentoo, MTA - exim.
Для начала обновляем дерево портеджей, чтобы установить spamassassin последней stable версии:
# emerge --syncЗатем устанавливаем непосредственно spamassassin:
# USE="tools" emerge -avD spamassassinПеременная USE команды emerge позволяет включать/выключать поддержку различных функций в устанавливаемых пакетах. Ключ -а указывает на необходимость выдачи запроса на подтверждение перед началом установки, -v включает вывод подробной информации в процессе установки, -D включает установку всех необходимых зависимостей для устанавливаемого пакета. Для spamassassin переменная USE может иметь следующие значения:
- berkdb - поддержка sys-libs/db (berkeleyDB для MySQL)
- doc - расширенная документация (API, Javadoc и т.д.)
- ipv6 - поддержка протокола IP версии 6
- ldap - поддержка LDAP
- mysql - поддержка MySQL
- postgres - поддержка Postgresql
- qmail - поддержка функций для работы с QMail, документация
- sqlite - поддержка sqlite
- ssl - поддержка SSL
- tools - инструменты spamassassin (salern и т.д.)
# equery uses eximДля защиты от спама будем использовать два дополнительных пакета DCC и Razor. Устанавливаем:
[ Searching for packages matching exim... ]
[ Colour Code : set unset ]
[ Legend : Left column (U) - USE flags from make.conf ]
[ : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for mail-mta/exim-4.69-r3 ]
U I
- - X : Adds support for X11
- + dnsdb : Adds support for a DNS search for a record whose domain name is the supplied query
- - domainkeys : Adds support for Yahoo!'s DomainKey sender verification system
- - dovecot-sasl : Adds support for Dovecot's authentication
- + exiscan : Patch providing support for content scanning backward-compatibility
- + exiscan-acl : Patch providing support for content scanning
- - gnutls : Adds support for net-libs/gnutls (TLS 1.0 and SSL 3.0 support)
+ - ipv6 : Adds support for IP version 6
+ + ldap : Adds LDAP support (Lightweight Directory Access Protocol)
- - lmtp : Adds support for lmtp
- - maildir : Adds support for maildir (~/.maildir) style mail spools
- - mbx : Adds support for UW's mbx format
+ + mysql : Adds mySQL Database support
- - nis : Support for NIS/YP services
+ + pam : Adds support PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip
+ + perl : Adds support/bindings for the Perl language
- - postgres : Adds support for the postgresql database
- - radius : Adds support for RADIUS authentication
- - sasl : Adds support for the Simple Authentication and Security Layer
- - spf : Adds support for Sender Policy Framework
- - sqlite : Adds support for sqlite - embedded sql database
- - srs : Adds support for Sender Rewriting Scheme
+ + ssl : Adds support for Secure Socket Layer connections
- + syslog : Enables support for syslog
+ + tcpd : Adds support for TCP wrappers
# emerge razor dccRazor является сигнатурным анализатором, принцип действия которого заключается в следующем. Чтобы определить, является ли сообщение спамом, система рассчитывает его сигнатуру (чтобы не реагировать на незначительные модификации, применяются различные алгоритмы получения нечетких сигнатур) и сверяет ее с базой спама, собираемого по всему миру. Если соответствие находится, то анализируемое письмо считается спамом и обрабатывается согласно дальнейшим настройкам. Если же совпадение не обнаружено, сообщение доставляется получателю как обычно.
Для работы Razor надо открыть два порта:
TCP 2703 — Исходящий трафик от MTA на Razor серверы
TCP 7 — Исходящий ping от MTA на Razor серверы
DCC (DISTRIBUTED CHECKSUM CLEARING HOUSE) так же является сигнатурным анализатором, принцип работы которого заключается в том, что для каждого входящего сообщения определяется специальная контрольная сумма. Это число отправляется на специальный сервер, где сверяется с базой данных. По проверочной сумме сервер оценивает, как часто сообщение уже регистрировалось у других получателей и параллельно фиксирует увеличение количества таких сообщений. Сообщения с высокой регистрационной суммой DCC могут быть отнесены к категории спама. Регистрационные суммы DCC направляются в виде пакета UDP на сервер DCC, и точно так же происходит получение ответа. В каждом случае пересылается только контрольная сумма, а не само сообщение.
Для работы DCC нужно открыть порт UDP 6277
Настройка
Spamassassin
Для передачи сообщений на проверку, нужно открыть 783 порт.
/etc/mail/spamassassin/local.cf
# This is the right place to customize your installation of SpamAssassin./etc/mail/spamassassin/v310.pre
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
# Only a small subset of options are listed below
#
##################################################
# Добавлять метку *****SPAM***** к спам сообщениям
#
rewrite_header Subject *****SPAM*****
# Сохранять спам как MIME вложения (message/rfc822)
# вместо изменения исходного сообщения (0: выкл, 2: использовать text/plain)
#
report_safe 2
# Указываем локальную сеть как доверенную, т.е.
# исходящие письма не проверяем
#
trusted_networks 192.168.0.
# Метод блокировки файлов
#
lock_method flock
# Указываем кол-во баллов, при котором сообщение считается спамом
# (по умолчанию: 5.0)
#
required_score 5.0
# Использовать Bayesian обучение системы (по умолчанию: 1)
#
use_bayes 1
# Путь к базе bayes
#
bayes_path /none/.spamassassin/bayes
# Когда производится обучение по bayes, эта информация падает в
# журнал
#
bayes_learn_to_journal 1
# Указываем сколько чистых писем и писем со спамом должно
# накопится в Bayesian базе прежде чем демон будет пользоваться
# этой базой (по умолчания - 200 не спама и спама)
#
bayes_min_ham_num 1
bayes_min_spam_num 1
# Bayesian авто обучение (default: 1)
# письма распознанные как 100% спам или 100% не спам
# добавляются в базу
bayes_auto_learn 1
# Не использовать сетевые проверки (т.к. делаем это в MTA)
skip_rbl_checks 0
# Использовать Razor
use_razor2 1
# Использовать DCC
use_dcc 1
# Не использовать Pyzor
use_pyzor 0
# Указываем допустимые языки и локали сообщений
#
ok_languages en ru
ok_locales en ru
# Автоматический белый список выключаем, поскольку в него
# зачастую попадают спамеры.
#use_auto_whitelist 0
#auto_whitelist_path /etc/mail/spamassassin/auto-whitelist
#auto_whitelist_file_mode 0666
Разкоментируем две строчки:
loadplugin Mail::SpamAssassin::Plugin::DCCRazor
loadplugin Mail::SpamAssassin::Plugin::Razor2
Создаем конфигурационный файл:
# razor-admin -create -home=/none/.razorРегистрируемся в сети:
# razor-admin -register -user=user@domain.ru -home=/none/.razorРегистрация требуется только в том случае, если Вы хотите активно участвовать в системе Razor, отсылая в нее сообщения определенные Вами как спам, но пропущенные системой.
DCC
Поскольку предполагается что у нас не большой поток сообщений (меньше 100,000 писем в сутки), то самый простой для нас вариант — это когда мы выступаем как DCC-клиент и используем публичные DCC-серверы. Для такой работы уже почти всё готово сразу после установки. Нужно только немного изменить конфигурацию и проверить, что открыт сетевой доступ к публичным DCC серверам. Включаем в конфигурационном файле /etc/dcc/dcc_conf нужный DCC-клиент (DCCM_ENABLE=on для sendmail, или DCCIFD_ENABLE=on для остальных программ)
Для управления и настройки работы DCC-клиента используется cdcc.
Файл map.txt содержит начальный список публичных DCC-серверов, который инициализируется при установке DCC. Этот список можно поменять через cdcc или изменить map.txt и загрузить его:
# cdcc "load /etc/dcc/map.txt
В нашем случае, поскольку мы не собираемся поднимать свой сервер DCC, нужно закоментировать строки:
# local DCC serverЛибо удалить с помощью cdcc:
#127.0.0.1 RTT-1000 ms 32768 2924965012y603
# local greylist server
#127.0.0.1 GREYLIST 32768 2924965012y603
# cdcc "delete 127.0.0.1 Greylist"Получить информацию о доступных сейчас DCC-серверах:
# cdcc "delete 127.0.0.1"
# cdcc "info"Посмотреть статистику работы DCC-серверов:
# 01/13/10 16:03:00 MSK /var/dcc/map
# Re-resolve names after 17:45:03
# 1306.63 ms threshold, 1290.82 ms average 12 total, 12 working servers
IPv6 off
dcc1.dcc-servers.net,- RTT+1000 ms anon
# 152.20.253.5,- dcc.uncw.edu ID 1201
# 100% of 14 requests ok 286.33+1000 ms RTT 100 ms queue wait
# *194.228.41.73,- CTc-dcc1 ID 1030
# 100% of 32 requests ok 195.46+1000 ms RTT 100 ms queue wait
# 207.195.195.223,- SIHOPE-DCC-3 ID 1085
# 88% of 17 requests ok 323.60+1000 ms RTT 100 ms queue wait
# cdcc «status all»Exim
dcc1.dcc-servers.net 194.228.41.73,6277
server-ID 1030 map 16:05:23
version 1.3.87 tracing ANON CLNT
39481336 hash entries 28077642 used 1592202624 DB bytes
100 ms delay 449225 NOPs 86 ADMN 46999 query >50000 clients since 01:02:35
3086861 reports 14266>10 13918>100 13918>1000 13918 many
answers 1938133>10 1804340>100 1610794>1000 1448427 many
0 bad IDs 4 passwds 0 error responses 20139 retransmitted
0 answers rate-limited 0 anonymous 0 rejected reports
flood on 3 streams 2 out active 2 in 5598956 total flooded in
3581212 accepted 2349 stale 2015195 dup 0 white 0 delete
6761968 reports added between Jan 13 01:02:35.143922 CET and Jan 13 14:05:25
Редактируем /etc/exim/exim.conf
Включаем поддержку spamassassin:
spamd_address = 127.0.0.1 783В секции acl_check_content модифицируем заголовки сообщения, по результатам проверки:
#Указываем адрес на который пересылать сообщенияВ секции routers создаем маршрутизатор для перенаправления сообщений помеченных как спам:
#определенные как спам, на случай если это ошибка.
warn message = X-Redirect-To: spam@domain.ru
hosts = !+relay_from_hosts
spam = nobody
#Пишем в заголовки баллы за спам
warn spam = nobody:true
hosts = !+relay_from_hosts
message = X-Spam-Level: $spam_bar
#Пишем в заголовки отчет spamassassin'a
warn spam = nobody:true
hosts = !+relay_from_hosts
condition = ${if >{$spam_score_int}{29}{1}{0}}
message = X-Spam-Status: $spam_report
#Если письмо набрало больше 18 баллов, то не принимаем его
deny message = Message scored $spam_score spam points
# condition = ${if <{$message_size}{100k}{yes}{no}}
spam = nobody:true
condition = ${if >{$spam_score_int}{180}{yes}{no}}
#Роутер пересылающий спам в ящик spam@domain.ruГотово! Добавляем spamassassin в автозапуск и стартуем его:
scan_redirect:
driver = redirect
condition = ${if def:h_X-Redirect-To: {1}{0}}
headers_add = X-Original-Recipient: $local_part@$domain
data = $h_X-Redirect-To:
headers_remove = X-Redirect-to
redirect_router = localserver
# rc-update -a spamd defaultИ на сладкое несколько правил проверки сообщений для exim, здорово прорежающих поток спама(спасибо большое Lissyara). Прописываем в секции acl_check_rcpt:
# /etc/int.d/spamd start
#Отрубаем если запрещенные символы в адресе
deny message = "Incorrect symbols in address"
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
accept local_parts = postmaster
domains = +local_domains
require verify = sender
#Отрубаем если нет HELO
deny message = HELO/EHLO required by SMTP RFC
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
delay = 30s
#Отрубаем хосты у которых в EHLO стоит IP
deny message = We don't allow domain literals. Too much spam...
domains = !+local_domains
condition = ${if isip{$sender_helo_name}{yes}{no}}
delay = 30s
#Отрубаем хосты у которых в EHLO наш адрес.
deny message = Message was delivered by ratware - own
condition = ${if match_domain{sender_helo_name}\
{$primary_hostname:+local_domains:+relay_to_domains}\
{true}{false}}
log_message = remote host used our name in EHLO/HELO.
delay = 30s
#Отрубаем хосты с динамическими адресами
deny message = Go Away! You are spammer.
condition = ${if match{$sender_host_name} \
{bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp} \
{yes}{no}}
#Отрубаем хосты из черных списков
deny message = message from \
$sender_host_address rejected - see http://njabl.org/
log_message = found in $dnslist_domain
dnslists = dnsbl.njabl.org
deny message = Spam blocked see: \
http://www.spamcop.net/w3m?action=checkblock&ip=$sender_host_address
log_message = found in $dnslist_domain
dnslists = bl.spamcop.net
deny message = Spam blocked see: \
http://www.spamhaus.org
log_message = found in $dnslist_domain
dnslists = zen.spamhaus.org
На этом все, в следующий раз, как руки дойдут, напишу про обучение spamassassin.
> redirect_router = localserver // что-то тут не так... откуда роутер localserver? или что это?
ОтветитьУдалитьЗдесь подразумевается роутер, обрабатывающий входящие сообщения. У меня это передача сообщений на внутренний сервер. Выглядит так:
Удалить#Роутер передающий почту на внутренний сервер
localserver:
driver = "manualroute"
domains = +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
route_list=* 192.168.0.XXX
no_more