Меню

Настройка exim от спама



Фильтруем спам в Exim с помощью SpamProbe

Архив номеров / 2008 / Выпуск №5 (66) / Фильтруем спам в Exim с помощью SpamProbe

Павел Литвинов

Фильтруем спам в Exim с помощью SpamProbe

Основой почтового сервера в нашей организации был Exim. Он отлично справлялся со своей задачей, при том что работал на достаточно слабом компьютере. Но через какое-то время количество нежелательной почты (спама) в организации возросло до такой степени, что это стало серьезной проблемой. И эту проблему надо было как-то решать.

Выбираем подходящий антиспам-фильтр

Стандартными средствами Exim отсеивалось большое количество спама, но не все. Посему было решено «прикрутить» к нему какой-нибудь антиспам-фильтр. Сказано – сделано. Недолгие поиски в Интернете определили два основных претендента:

Первый хоть и был «раскручен», обладал, на мой взгляд, одним, но весомым недостатком. Учитывая, что эта программа была написана на Perl, она сильно нагружала сервер при большом количестве входящей почты. А если взять в расчет то, что на почтовом сервере еще работал антивирус ClamAV, который и без того слабую машинку буквально вводил в ступор при анализе писем с вложенными файлами, было решено не использовать этот вариант.

Второй мне понравился больше, но я не смог в нем найти «белый список» с возможностью ручного редактирования (не автообучаемый), да и не хотелось устанавливать на и так загруженный компьютер базу данных MySQL, которая была необходима для полноценной работы DSPAM. В общем, и этот вариант мне не подошел.

Начался второй этап поиска. Просматривая порты на момент ключевого слова «SPAM», мне на глаза попался SpamProbe. Что сразу понравилось, программка была написана на C++, была маленькой, шустрой в работе и не требовала установки базы данных, в отличие от DSPAM. К тому же алгоритм работы программы построен на основе математической теоремы Байеса. А ведь именно этот метод статистической фильтрации является наиболее удачным и используется практически всеми спам-фильтрами, в том числе и упомянутыми ранее.

Метод Байеса подразумевает использование статистической, оценочной базы, разделенной на две части, одна из которых содержит черный список слов, а другая – белый. При анализе письма подсчитывается количество совпадений каждого отдельного слова (токена) со списками в базе, и на основании этого вычисляется оценка. Оценка эта колеблется в диапазоне от 0 до 1, где значение 0 означает отсутствие признаков спама, 1 – полную уверенность в том, что это спам.

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

Приступаем к установке и настройке

Установку программы производим, как всегда, из портов:

# make -s install clean

После установки создаем базу, где SpamProbe будет хранить базу данных токенов (слов или словосочетаний, которые с определенной долей вероятности могут присутствовать в письме, содержащем или не содержащем спам):

# spamprobe -d /var/lib/spamprobe create-db

где /var/lib/spamprobe – путь к папке базы данных.

Изучение документации на предмет сопряжения SpamProbe и Exim в виде одного-единственного файла README.txt не дало ровным счетом ничего. Продолжительные поиски в Интернете вывели на блог, где был описан один из способов, который я, в свою очередь, с некоторыми доработками и комментариями предлагаю вашему вниманию.

В конфигурационный файл Exim добавляем следующие строки:

# Specifies access control lists for incoming SMTP mail #

Проблема в том, что я так и не смог заставить полноценно работать системный фильтр не от привилегированного пользователя (root).

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

Теперь создаем непосредственно сам файл системного фильтра /usr/local/etc/spamprobe/exim.filter:

# Ни в коем случае не удаляйте верхнюю строку

# Путь к лог-файлу

# Указываем максимальный размер письма, которое будет подвержено анализу (Кб).

# Число взял из конфигурационного файла DSPAM

add 307200 to n0

# Проверяем письмо только один раз, даже если Exim с первого раза его не сможет доставить.

# Нечего плодить заголовки X-SpamProbe:

if $message_size is above $n0

# Если не нужно вести Лог-файл закомментируйте строку ниже.

logwrite «SPAM FILTER: Размер письма от $return_path превышает $n0 Kb ; Письмо не будет проходить проверку»

# Если не нужно вести лог-файл закомментируйте строку ниже.

logwrite «SPAM FILTER: Письмо от $return_path успешно прошло проверку; $value»

И наконец скрипт msgscore.sh:

# Путь к месту, где почта хранится до момента доставки

# Путь к базе, где SpamProb хранит токены

# Полный путь к программе SpamProbe

# Находим полный путь к нашему письму.

# Если бы не опция » split_spool_directory = true » в конфигурационном файле Exim

# он бы соответствовал переменной ‘$spooldir/$1-D’

path_file=`/usr/bin/find $spooldir -name $1-D -print`

echo «$2» > $spooldir/$1-M

sed ‘1 s/.*//’ $path_file >> $spooldir/$1-M

$path_spamprobe -8 -d $dbdir score $spooldir/$1-M

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

Рубрика: Администрирование / Администрирование
X-SpamProbe: GOOD 0.9999999 a1c5e42b21f4e60f55596ca70ae48e7f

где GOOD – говорит о том, что ваше письмо с вероятностью 0,9999999 не является спамом. Набор из 32 букв и цифр – уникальный идентификатор письма.

Еще один момент. Пока вы не начнете обучать SpamProbe, все письма будут промаркированы как GOOD.

Если все прошло удачно, приступаем к следующему этапу. Настроим в Exim обработку промаркированных SpamProbe писем. Для этого в секцию ROUTERS CONFIGURATION добавим следующее :

Источник

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

Данные acl’ы я насобирал на просторах интернета. Заметка будет пополняться.

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_content
acl_smtp_helo = acl_check_helo

А вот собственно и сами acl’ы. Замечу, что здесь только запрещающие acl’ы.

Содержимое /etc/exim/vexim-acl-check-content.conf

[exim] Защита от спама : 2 комментария

У меня в блоке acl_check_rcpt:

deny message = [SPF] $sender_host_address is not allowed to send mail from $sender_address_domain.
log_message = SPF check failed.
# set acl_m9 = —ip-address=$sender_host_address —mfrom=$sender_address —helo=$sender_helo_name
set acl_m9 = —scope mfrom —id $sender_address —ip $sender_host_address
set acl_m9 = $>
condition = $<1>>
!hosts = +relay_from_hosts

В hostlist-е relay_from_hosts есть в том числе и 127.0.0.1.

Не подскажет ли глубокоуважаемый автор, почему в логе я вижу такое:

2017-02-20 16:15:02 H=localhost.localdomain (xxxxxx.net.ua) [127.0.0.1] F= rejected RCPT : SPF check failed.

Ведь, по-идее, когда exim дергается с локалхоста, эта SPF-проверка не должна срабатывать….

Либо всё-таки relay_from_hosts не содержит 127.0.0.1, либо где-то ещё есть ACL с тем же лог-сообщением, либо конфиг на диске и конфиг запущенного exim’a отличаются, по крайней мере, на этот ACL. Других вариантов нет.

Источник

Настройка защиты почтового домена от спама и вирусов

ISPmanager позволяет защитить почтовые ящики от нежелательных писем. Для этого используются встроенные средства почтового сервера exim, фильтры Greylisting и SpamAssassin, антивирус ClamAV. Подробнее см. в статье Используемые почтовые серверы.

Встроенные средства exim

Exim позволяет настроить списки разрешённых и запрещённых отправителей. При проверке, если письмо пришло от разрешённого отправителя, то оно будет принято. Если от запрещённого, то отклонено.

Список разрешённых отправителей

Чтобы добавить отправителя в список разрешённых:

  1. Перейдите в Защита от спамаБелый списокСоздать.
  2. Укажите IP-адрес, адрес электронной почты или доменное имя в поле Отправитель. Если указано доменное имя, то будут разрешены все почтовые ящики на этом домене.
  3. Нажмите Ok.

Белый список хранится в /etc/ /whitelist.

Список запрещённых отправителей

Чтобы добавить отправителя в список запрещённых и его письма всегда отклонялись:

  1. Перейдите в Защита от спама → Чёрный список → Создать.
  2. Укажите IP-адрес, адрес электронной почты или доменное имя в поле Отправитель. Если указано доменное имя, то будут запрещены все почтовые ящики на этом домене.
  3. Нажмите Ok.

Чёрный список хранится в /etc/ /blacklist.

DNSBL

DNSBL (DNS blacklist) — списки доменов и IP-адресов, которые, как правило, используются для борьбы со спамом. Exim проверяет наличие почтового домена, с которого отправлено письмо в DNSBL-списках. Если почтовый домен присутствует в списках, то письмо отклоняется.

Чтобы добавить DNSBL-список:

  1. Перейдите в Защита от спама → Список DNSBL → Создать.
  2. Укажите в поле Домен DNSBL адрес чёрного списка.
  3. Нажмите Ok.

Рекомендуем чёрные списки:

Список добавленных DNSBL хранится в /etc/ /dnsbllist.

Greylisting

Greylisting — технология, которая позволяет отклонять нежелательные письма с помощью задержки их принятия. Как правило, спам рассылается с сервера за короткое время и в большом количестве. Greylisting задерживает принятие письма на некоторое время. Почтовый сервер уведомляет отправителя письма, что не может принять его прямо сейчас и просит повторить процедуру через несколько минут. Если сервер–отправитель передаёт не спам–письмо, то он должен сохранить письмо в очереди и повторять пересылку в течение пяти дней. В ISPmanager технология Greylisting обеспечивается с помощью Postgrey.

Чтобы добавить отправителя в список разрешённых и его письма не проверялись с помощью Greylisting:

  1. Перейдите в Защита от спама → Белый список (Greylisting) → Создать.
  2. Укажите IP-адрес, адрес электронной почты или доменное имя в поле Отправитель. Если указано доменное имя, то будут разрешены все почтовые ящики на этом домене.

Белый список хранится в /etc/postfix/postgrey_whitelist_clients для CentOS и в /etc/postgrey/whitelist_clients для Debian и Ubuntu .

SpamAssassin

SpamAssassin анализирует содержимое писем. После анализа в заголовки письма добавляются строки, в которых указан уровень спама. В почтовом клиенте можно настроить фильтры, которые будут учитывать результаты анализа SpamAssassin. Например, для почтового клиента Mozilla Thunderbird:

  1. Перейдите в Инструменты → Фильтры сообщений.
  2. Выберите почтовый ящик в Фильтры для.
  3. Нажмите Создать.
  4. Укажите Имя фильтра.
  5. Настройте фильтр:

    Нажмите Тема и выберите Настроить в выпадающем меню признаков.

    Создание правила фильтрации

    Выберите Содержит в типе условия.

    Создание правила фильтрации

    В качестве значения признака укажите уровень спама, при превышении которого к письму будет применён фильтр. Уровень указывается от 1 до 10 символами «*». Рекомендуем уровень 7 — «*******».

    Создание правила фильтрации

    ClamAV

    ClamAV — антивирус, который проверяет вложенные в письма файлы. Если письмо содержит заражённый файл, то оно отклоняется.

    Порядок проверки

    По умолчанию проверка выполняется в следующем порядке:

    • проверка на наличие адреса в белом списке ClamAv;
    • проверка на наличие адреса в белом списке Exim;
    • проверка на наличие адреса в чёрном списке Exim;
    • проверка на наличие адреса в DNSBL-списках Exim;
    • сканирование письма с помощью антивируса ClamAv;
    • проверка с помощью SpamAssassin.

    Источник

    Одминский блог

    Блог о технологиях, технократии и методиках борьбы с граблями

    Борьба со спамом в MTA EXIM на основе ACL

    Как говорят знающие люди, хуже спама может быть только борьба со спамом. Но тем не менее с тем ужасным потоком, что обрушивается на незащищенного пользователя, необходимо что то делать, т.к. иначе конечному пользователю приходится тратить часы на разборы тех словесных завалов, что валятся ему в ящик.
    Можно сколь угодно долго рассуждать относительно этичности использования RBL листов, но внедрение их автоматически снижает нагрузку спама в разы, тем более что для рассылок последнее время очень часто используются бот-сети, полностью иммулирующие нормальное соединение.

    В этой связи MTA Exim имеет большое подспорье, в виде ACL листов, которые позволяют отсекать спам на основе стоп-слов, заголовков SMTP диалога, использования HELO в диалоге и многое другое.
    Ниже я привожу используемую мной конфигурацию файла exim.conf c фрагментом раздела ACL. Небольшие комментарии, надеюсь помогут разобраться, хотя все должно быть понятно из описания логирования:

    # Отбиваем всякие пакости на основе проверки содержимого письма
    acl_check_virus:
    deny message = Message rejected: virus found. NO PASARAN!(Ernesto Che Guevara).
    hosts = *
    demime = *
    malware = *
    accept

    acl_check_rcpt:
    accept hosts = :
    accept local_parts =
    deny hosts =

    # Задаем почтовые адреса для внутреннего использования, с закрытой внешней пересылкой
    deny message = SRY, but address not permitted for external use!
    hosts = !+relay_from_hosts
    local_parts = all
    !authenticated = *

    # пропускаем почту через RBL
    deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text\
    If you think that the system is mistaken, please report details to abuse@odminblog.ru

    !authenticated = *
    log_message = found in $dnslist_domain
    dnslists = relays.mail-abuse.org

    deny message = rejected, $sender_host_address Open Proxy, see: $dnslist_domain\n$dnslist_text\
    If you think that the system is mistaken, please report details to abuse@odminblog.ru

    !authenticated = *
    log_message = found in $dnslist_domain
    dnslists = dnsbl.void.ru

    deny message = Spam blocked see:http://www.spamcop.net/w3m?action=checkblock&ip=$sender_host_address\
    If you think that the system is mistaken, please report details to abuse@odminblog.ru

    !authenticated = *
    log_message = found in $dnslist_domain
    dnslists = bl.spamcop.net

    deny message = host is listed in $dnslist_domain
    !authenticated = *
    log_message = found in $dnslist_domain
    dnslists = opm.blitzed.org

    deny message = rejected, $sender_host_address is listed in: http://relays.osirusoft.com/cgi-bin/rbcheck.cgi \
    If you think that the system is mistaken, please report details to abuse@odminblog.ru
    !authenticated = *
    !local_parts = abuse # Эта строка задает игнорирование данного правила для заданных адресов
    log_message = found in spamguard.leadmon.net
    dnslists = spamguard.leadmon.net

    deny message = rejected, $sender_host_address is listed in: http://www.spamsources.fabel.dk/ \
    If you think that the system is mistaken, please report details to abuse@odminblog.ru
    !authenticated = *
    !local_parts = abuse
    log_message = found in http://www.spamsources.fabel.dk/
    dnslists = spamsources.fabel.dk

    deny message = rejected, $sender_host_address is listed in: http://www.spamhaus.org/ \
    If you think that the system is mistaken, please report details to abuse@odminblog.ru
    !authenticated = *
    !local_parts = abuse
    log_message = found in http://www.spamhaus.org/
    dnslists = sbl.spamhaus.org : \
    xbl.spamhaus.org : \
    pbl.spamhaus.org : \
    sbl-xbl.spamhaus.org : \
    zen.spamhaus.org

    # Проводим процедуру обратного звонка, т.е. при поступлении запроса на отправку от отпределенного адреса, происходит встречный запрос к серверу отправителя
    verify = sender/callout=90s,maxwait=120s
    verify = recipient/defer_ok/callout=90s/callout_defer_ok
    message = The sender cannot be verified. Check your email-client settings! \
    If you think that the system is mistaken, please report details to abuse@odminblog.ru
    !local_parts = abuse
    !sender_domains = +domains_disable_senderverify # в данном списке, объявленом в главной конфигурации, мы задаем исключения для доменов

    deny message = rejected, $sender_host_address is listed in: http://mail-abuse.org/ \
    If you think that the system is mistaken, please report details to abuse@odminblog.ru
    !authenticated = *
    !local_parts = abuse
    log_message = found in www.mail-abuse.org
    dnslists = blackholes.mail-abuse.org : \
    dialup.mail-abuse.org

    # Проверяем диалог на соответствие RFC
    deny message = HELO/EHLO required by SMTP RFC
    condition = $<>>
    delay = TEERGRUBE

    # Проверяем корректность IP адреса отправителя, проверка направлена на манипуляции с HELO
    deny message = Forged IP detected in HELO-$sender_helo_name
    hosts = !+relay_from_hosts
    log_message = Forged IP detected in HELO: $sender_helo_name
    !authenticated = *
    condition = $<$interface_address>>
    delay = TEERGRUBE

    # Проверяем корректность IP адреса отправителя, проверка направлена на манипуляции с HELO
    deny message = Forged IP detected in HELO -$sender_helo_name != $sender_host_address
    hosts = !+relay_from_hosts
    !authenticated = *
    condition = $<\N^\d+(\.\d+)<3>$\N> >
    condition = $ <$sender_host_address>>
    delay = TEERGRUBE

    deny message = Forged hostname detected in HELO -$sender_helo_name
    hosts = !+relay_from_hosts
    !authenticated = *
    log_message = Forged hostname detected in HELO -$sender_helo_name
    condition = $ <+local_domains>>
    delay = TEERGRUBE

    # Отбиваем больше одного пустого отправителя
    deny message = Only one recipient accepted for NULL sender
    senders = :
    condition = $<$rcpt_count> <1><1>>
    delay = TEERGRUBE

    ####### Данный раздел перекрывает большие листы рассылки и перебор пользователей
    .ifdef ALLOWEDRCPTFAIL
    drop message = too many unknown users ($ failed recipients)
    log_message = Dictionary attack ($ failed recipients).
    condition = $<$rcpt_fail_count><$> <1><0>>
    delay = $s
    domains = +local_domains
    hosts = !+relay_from_hosts
    !authenticated = *
    .endif
    deny message = unknown user
    log_message = Teergrube: dictionary attack ($ failed recipients)
    condition = $<$rcpt_fail_count> <0><1><0>>
    delay = $s
    domains = +local_domains
    !verify = recipient

    deny hosts = !+localadds:!+hosts_disable_callback:*
    sender_domains = !+envdomain_disable_callback:!+domains_callback_norandom:!+domains_disable_senderverify:*
    local_parts = !+noenvfromcallback
    !verify = sender/callout=90s,random
    delay = TEERGRUBE

    # Проводим обратный звонок, для всех кроме специально заданных доменов и хостов
    deny hosts = !+localadds:!+hosts_disable_callback:*
    sender_domains = !+domains_callback_norandom:!+domains_disable_senderverify
    local_parts = !+noenvfromcallback
    !verify = sender/callout=90s
    delay = TEERGRUBE

    ############### Проводим проверки на уровне SMTP диалога

    Источник

    Читайте также:  Настройка клапанов на ваз 2114 когда делать
    Adblock
    detector