Разговор юзера с сисадмином:
– На мою почту постоянно приходит спам!
– В чем проблема-то? Удалите его и продолжайте работать!
Ситуация стандартная. Но когда такие разговоры повторяются часто, стоит уделить этому вопросу немного своего времени… 30 минут будет вполне достаточно.
Базовые настройки zimbra для фильтрации спама
На сервере уже работает amavis, устанавливать что-то еще не нужно. Выберите письмо, являющееся спамом, и в контекстном меню выберите “Показать оригинал”. Найдите строки, которые начинаются на “X-Spam”:
X-Spam-Flag: NO X-Spam-Score: 1.46 X-Spam-Level: * X-Spam-Status: No, score=1.46 tagged_above=-10 required=6.6 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FORGED_MUA_IMS=1.943, HTML_MESSAGE=0.001, MIME_HTML_ONLY=0.723, RDNS_NONE=0.793, SPF_PASS=-0.001, UPPERCASE_75_100=0.001] autolearn=no autolearn_force=no
Получается следующее: для каждого полученного письма сервер вычисляет его спам-рейтинг (X-Spam-Score: 1.46) и, если этот рейтинг выше определенного порога (required=6.6), помечает его как “спам” или сразу удаляет.
Раз имеется этот порог, значит его можно понизить, отправляя в спам больше писем.
В системе администрирования zimbra заходим в “Глобальные настройки” -> “AS/AV”.
Здесь есть два полезных поля: “Процент удаления” и “Процент меток”, по умолчанию они имеют значения 75 и 33. Значение 100% соответствует X-Spam-Score=20 (75%=15, 50%=10, 25%=5 и т.д. делением на 5). Если нужно порог 6.6 понизить до 4.5 – вместо 33 ставим 22 (4.5 * 5 = 22.5). На своём сервере я установил эти значения в 50 для удаления писем и 20 (X-Spam-Score=4) для установки метки “спам”. Не переусердствуйте, иначе… сами знаете что.
Модуль антиспама постоянно развивается и обучается и спамеры не сидят на месте. Зная как устроены системы борьбы со спамом, спамеры постоянно меняют свое “поведение”, тоже обучаются и развиваются. Есть другой подход в борьбе со спамом: не накапливать базу о спаме, а собрать базу о спамерах в единый “черный список”.
Дополнительные настройки безопасности
Поскольку по капотом у zimbra сидит мощный двигатель Postfix, то Вам доступны все его возможности и настройки безопасности. Начать знакомство можно с документации http://www.postfix.org/smtpd.8.html. Обратите внимание на следующие опции:
- reject_unauth_destination – запрещает пересылку сообщений, если получатель не находится в Вашем домене (настоятельно рекомендую включить);
- reject_unlisted_recipient – включает проверку наличия локального пользователя (получателя письма);
- reject_unverified_sender – включает проверку существования обратного адреса. Т.е. ваш сервер сам установит соединение с указанным доменом отправителя и проверит наличие учетной записи отправителя.
Включаются они с консоли от пользователя zimbra:
zmprov mcf +zimbraMtaRestriction reject_unauth_destination
Подключение “черных списков” в zimbra
DNSBL — DNS blacklist. Готовые и постоянно обновляемые (что очень важно) списки для борьбы со спамерами. Ваш почтовый сервер может обращаться к DNSBL, и проверять в нём наличие IP-адреса отправителя письма, если он есть в базе, то считается что пришел очередной спам.
Админка
Настройка (Configure) -> Глобальные настройки (Global Settings) -> Агент передачи сообщений (MTA)
Добавляем в “Актуальные черные списки” (List of RBLs) подходящие Вам “черные списки”.
CLI
Просмотр действующих ограничений (от пользователя zimbra)
zmprov gacf | grep zimbraMtaRestriction
Установка дополнительного ограничения
zmprov mcf +zimbraMtaRestriction “reject_rbl_client b.barracudacentral.org”
Сами списки ищем в сети, можно посмотреть здесь.
Мониторинг работы “черных списков”
Для проверки работы внесенных изменений рекомендую использовать скрипт dnsblcount. Данный скрипт сканирует переданный ему лог почтового сервера, ищет подстроку “blocked using” (заблокировано с использованием) и генерирует отчет.
Пример запуска скрипта:
/usr/local/bin/dnsblcount /var/log/zimbra.log
Пример работы слегка модифицированной версии этого скрипта:
b.barracudacentral.org 4087 cbl.abuseat.org 1231 bl.spamcop.net 718 sbl.spamhaus.org 37 ===================================== Total DNSBL rejections: 6073 Total amavis rejections: 15117
К оригинальной версии скрипта добавлен подсчет и вывод количества писем отклоненных amavis.
В файл /etc/logrotate.d/zimbra в раздел zimbra.log добавить три строчки (начиная с prerotate и заменив адреса e-mail):
/var/log/zimbra.log { daily missingok notifempty create 0644 syslog adm prerotate /usr/local/bin/dnsblcount /var/log/zimbra.log | sendmail -F mail@example.com admin@example.com endscript postrotate /usr/sbin/service rsyslog restart >/dev/null || true su - zimbra -c "/opt/zimbra/bin/zmswatchctl restart" > /dev/null 2>&1 || true endscript compress }
Теперь скрипт будет запускаться перед ротацией логов и отправлять отчет по работе со спамом на Вашу электронку.
И, собственно, сам скрипт:
#!/usr/bin/perl # dnsblcount # version 20161003 # (c) 2004, 2005, 2006 Jorey Bump, 2016 AS # Описание: # Подсчет DNSBL блокировок в лог-файлах Postfix # Запуск: # dnsblcount /path/to/maillog # dnsblcount /path/to/maillog1 /path/to/maillog2 # dnsblcount /path/to/maillogs* # grep "search string" /path/to/maillog | dnsblcount # Пример для crontab: # 30 5 * * * /usr/local/sbin/dnsblcount /var/log/maillog | mail -s "$HOSTNAME - DNSBL Count" postmaster # Пример строк из лога Postfix 1.1: # Mar 6 06:52:03 mail postfix/smtpd[11873]: reject: RCPT from unknown[208.61.231.102]: 554 Service unavailable; [208.61.231.102] blocked using bl.spamcop.net, reason: Blocked - see http://www.spamcop.net/bl.shtml?208.61.231.102; from=to= # Mar 13 05:47:51 mail postfix/smtpd[28269]: reject: RCPT from mail68.example.info[66.63.191.68]: 554 Service unavailable; [66.63.191.68] blocked using sbl.spamhaus.org, reason: http://www.spamhaus.org/SBL/sbl.lasso?query=SBL12057; from= to= # Пример строк из лога Postfix 2.1: # Apr 17 13:49:07 mail postfix/smtpd[18143]: NOQUEUE: reject: RCPT from c-7209e055.1111-2-64736c10.cust.bredbandsbolaget.se[85.224.9.114]: 554 Service unavailable; Client host [85.224.9.114] blocked using bl.spamcop.net; Blocked - see http://www.spamcop.net/bl.shtml?85.224.9.114; from= to= proto=ESMTP helo= # Пример строк из лога Postfix 2.3: # Dec 25 05:41:28 mail postfix/smtpd[14586]: NOQUEUE: reject: RCPT from unknown[202.43.175.151]: 554 5.7.1 Service unavailable; Client host [202.43.175.151] blocked using bl.spamcop.net; Blocked - see http://www.spamcop.net/bl.shtml?202.43.175.151; from= to= proto=SMTP helo= # Начало: use strict; my ( $amavis, $dnsbl, $dnsbltotal, $ip, $length, $line, $max, %dnsblcount ); my $rule = "="; my $totstr = "Total DNSBL rejections:"; my $totstramavis = "Total amavis rejections:"; $max = length($totstr); # читаем строку со стандартного ввода while ($line = <>) { if (index($line,'reject:') > 0) { if (index($line,'blocked using') < 0) { $amavis += 1; } } if ($line =~ /(\[.*\]) blocked using ([^\s]*)(,|;) /) { $ip = $1; $dnsbl = $2; $dnsblcount{$dnsbl} += 1; $dnsbltotal += 1; } } foreach $dnsbl (sort keys %dnsblcount) { $length = length($dnsbl); if ( $length > $max ) { $max = $length } } foreach $dnsbl (sort { $dnsblcount{$b} <=> $dnsblcount{$a} } keys(%dnsblcount)) { printf "%-${max}s %12s\n", $dnsbl, $dnsblcount{$dnsbl}; } foreach (1..($max + 14)) { printf "%s", $rule; } print "\n"; printf "%-${max}s %12s\n", $totstr, $dnsbltotal; print $totstramavis; printf "%13s\n", $amavis; 1;
Лучшая статья по настройке защиты от спама в Зимбра. Без шуток. Все конкретно по делу и с объяснением. В закладки!
Попробовал скрипт, не отработал. Как можно проверить и найти ошибки не дожидаясь ротации. Версия Zimbra 8.6.0_GA_1153
Что выдает при ручном запуске?
/usr/local/bin/dnsblcount /var/log/zimbra.log
Total DNSBL rejections:
Total amavis rejections: 1667
Значит ни одно письмо не заблокировано по “черным” спискам. Спам-то пробивается на почту?
Пробивается, в логах смотрю такое ощущение что blacklist не работает. Как проверить?
Проверь данные письма по IP-адресу источника на принадлежность к спам-спискам:
1. ищем адрес источника в заголовке письма (правой кнопкой на письме спама -> показать оригинал -> ищем что-нибудь вроде “Received: from [174.47.100.65]”);
2. проверяем IP по спискам: http://www.anti-abuse.org/multi-rbl-check/
3. если IP есть в списке, который Вы используете, то что-то явно не работает…
Покажи вывод коменды
zmprov gacf | grep zimbraMtaRestriction
В списках есть, домен спама.
Вывод команды
zimbraMtaRestriction: reject_invalid_helo_hostname
zimbraMtaRestriction: reject_non_fqdn_sender
zimbraMtaRestriction: reject_unknown_client_hostname
zimbraMtaRestriction: reject_unknown_reverse_client_hostname
zimbraMtaRestriction: reject_unknown_sender_domain
zimbraMtaRestriction: reject_unknown_helo_hostname
zimbraMtaRestriction: reject_rbl_client bl.spamcop.net
zimbraMtaRestriction: reject_rbl_client rbl.rbldns.ru
Что есть в списках? IP-спамера? А он есть в используемых Вами списках bl.spamcop.net или rbl.rbldns.ru?
При вводе команды
zimbra@mail:/root$ zmprov mcf +zimbraMtaRestriction “reject_rbl_client b.barracudacentral.org”
Выдаёт вот такую ерунду:
usage: modifyConfig(mcf) attr1 value1 [attr2 value2…]
For general help, type : zmprov –help
нужно запустить от пользователя zimbra
От пользователя zimbra
Есть в bl.spamcop.net
На сайтах DNS blacklist необходимо регистрироваться?
Не совсем понял про какую регистрацию идет речь? Просто добавляем данные списки и всё.
Думаю стоит добавить эту статью инструкцией по настройке белых списков. Как только я настроил zimbra по данной статье – тут же огреб проблему с тем что перестали доходить письма от клиентов, с которыми работаем 5 лет.
Потому что они попали в один из списков на uribl.com. Или этот список вообще “кривой”. Из за него не проходили письма с google.com. Точнее с домена который висит на googleapps.
Приходил такой отлуп: Client host [mail-yk0-f177.google.com] blocked using multi.uribl.com
Согласен, уже давно её надо доработать. По черным спискам всегда вопрос сложный, нужно добавлять аккуратно. Если какой не подходит – удалять.
Я написал короткий скрипт, который отбирает конкретного пользователя, по параметру reject. Скрипт отрабатывает, отчет не могу отправить. Не поможете, разобраться?
#! /bin/bash
LOG= cd /var/log/
GREP=/bin/grep
AWK=/usr/bin/awk
#SED=/bin/sed
CAT=/bin/cat
#SORT=/bin/sort
#UNIQ=/bin/uniq
test= $CAT $LOG zimbra.log | $GREP test@ | $GREP reject | awk ‘{ print $7$8$12$13$14$17$19$20; }’
echo $test
exit 0
Письмо приходит но пустое, без отчета.
В /var/log/zimbra.log прописал /usr/local/bin/logscript.sh | sendmail -F otchet@labirintlocks.ru admin@labirintlocks.ru
Не могу понять почему нет отчёта?
Как успехи? Разобрался с отправкой почты?
Работает ли отправка письма, если вызвать все с консоли? Как вызываешь скрипт?
Да все нормально, сделал скрипт и вставил его в ротацию логов.
#! /bin/bash
LOG= cd /var/log/
GREP=/bin/grep
AWK=/usr/bin/awk
#SED=/bin/sed
CAT=/bin/cat
#SORT=/bin/sort
#UNIQ=/bin/uniq
test= $CAT $LOG zimbra.log | $GREP rejec | $GREP test@ | $AWK ‘{print $1″ “$2” “$3” “$7” “$11” “$12” “$13” “$14” “$17″ ” $18″ “$19” “$20” “$21” “}’ > /usr/local/bin/scripts/test.txt
echo “Otchet Grechenko” | mutt test2@mail.ru -a /usr/local/bin/scripts/test.txt -s “Otchet”
Может немного кривой, но отрабатывает. Замечания приму, как должное.
Если вызвать с консоли:
/usr/local/bin/logscript.sh | sendmail -F otchet@labirintlocks.ru admin@labirintlocks.ru
письмо приходит тоже пустое?
Да, поэтому и использовал mutt. Я в перле не силен, хотя нужно подучить :). Вопрос на засыпку, не сталкивались с фильтрацией assassin возможно вопрос не по теме, но тем немение он присутствует в пакете zimbra. Я нашел где создаются правила для фильтрации по определенному контенту. Так же написал несколько тестовых правил, пришлось разобраться с регулярными выражениями. Вопрос не в этом, с английским шрифтом проблем нет, а русскую кодировку понимает только utf-8, остальные кодировки пропускает не фильтрует. Не знаю как побороть (: Если есть мысли прошу подсказать…
google spamassassin russian charset
Понял по spamassassin , но в zimbra где править не нашёл 🙁
Уважаемые коллеги! Как Вы решили вопрос по кодировке вложенных файлов с русскими именами, или если есть в архиве письма PDF с русскими символами. Когда все это скачиваешь одним архивом в именах и в самом бывает содержании (заметил в одном файле PDF) кракозябры. Если есть решение, подскажите.
Такого вопроса у нас просто не возникало. Только что специально нашел письмо с большим количеством вложений на русском, скачал, – всё в порядке. А в содержимое вложений сервер точно руки не запускает…
Какая версия ОС на сервере и на клиентах? Пробовали то же самое на другой клиенте?
Подсчет режектов по amavis некорректный – он показывает количество всех обработанных писем этим фильтром, не важно хорошие они или плохие 🙂
Спасибо за информацию, как появится время – проверю
Нашлось время – скрипт исправил
Воспользовался Вашим вариантом скрипта, отработал без ошибок и посчитал по всем пунктам заблокированные письма, но не отправил отчет на e-mail. У меня остальные строчки скрипта немного отличаются, стоит их ли менять? (версия 8.6.0)
/var/log/zimbra.log {
daily
missingok
notifempty
create 0644 zimbra zimbra
prerotate
/usr/local/bin/dnsblcount /var/log/zimbra.log | sendmail -F (от) (кому)
endscript
postrotate
kill -HUP `cat /var/run/syslog*.pid 2> /dev/null` 2> /dev/null || true
endscript
compress
}
За отправку писем отвечает только “sendmail -F (от) (кому)”, остальное точно не оказывает влияния.
Ребята, появилась проблема.
есть три ящика на zimbra (Version 8.7.0_GA_1659.FOSS Jun 28, 2016):
zabbix@test.ru
user1@test.ru
user2@test.ru
При отправке письма с zabbix@test.ru на user2@test.ru письмо попадает во “Входящие”
При отправке письма с zabbix@test.ru на user1@test.ru письмо попадает в папку “СПАМ”
При этом заголовок полученного письма
X-Spam-Flag: NO
X-Spam-Score: -1.101
X-Spam-Level:
X-Spam-Status: No, score=-1.101 required=6.6 tests=[ALL_TRUSTED=-1,
BAYES_40=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1]
autolearn=ham autolearn_force=no
В чем может быть дело?
Можно ли порог в required=6.6 повысить например до 10
Да можно, установите “Процент меток” в настройках в 50%.
Только тогда спама будет приходить больше!
Коллеги валит спам от самого себя. Проблема давнишняя, как поправить?
NOQUEUE: filter: RCPT from unknown[XXX.XXX.XXX.XXX]: :
Если отправилеля не получается определить, то должны помочь правила:
reject_non_fqdn_sender
reject_unknown_sender_domain.
Но это всё пальцем в небо, нужно знать настройки сервера. Дайте вывод команды от пользователя zimbra:
zimbraMtaRestriction: reject_invalid_helo_hostname
zimbraMtaRestriction: reject_non_fqdn_helo_hostname
zimbraMtaRestriction: reject_non_fqdn_sender
zimbraMtaRestriction: reject_unknown_client_hostname
zimbraMtaRestriction: reject_unknown_helo_hostname
zimbraMtaRestriction: reject_unknown_reverse_client_hostname
zimbraMtaRestriction: reject_unknown_sender_domain
zimbraMtaRestriction: reject_rbl_client bl.spamcop.net
zimbraMtaRestriction: reject_rbl_client b.barracudacentral.org
zimbraMtaRestriction: reject_rbl_client zen.spamhaus.org
zimbraMtaRestriction: reject_rbl_client dnsbl.inps.de
zimbraMtaRestriction: reject_rbl_client spam.spamrats.com
zimbraMtaRestriction: reject_rbl_client db.wpbl.info
zimbraMtaRestriction: reject_rbl_client all.s5h.net
zimbraMtaRestriction: reject_rbl_client rbl.megarbl.net
Проблема кстати что письмо со спамом прилетает от mailer-daemon
zimbraMtaRestriction: reject_invalid_hostname
zimbraMtaRestriction: reject_unknown_client
zimbraMtaRestriction: reject_unknown_hostname
zimbraMtaRestriction: reject_unknown_sender_domain
zimbraMtaRestriction: reject_rbl_client bl.spamcop.net
zimbraMtaRestriction: reject_rbl_client relays.mail-abuse.org
zimbraMtaRestriction: reject_rbl_client sbl.spamhaus.org
zimbraMtaRestriction: reject_unauth_destination
zimbraMtaRestriction: reject_unlisted_recipient
zimbraMtaRestriction: reject_unverified_sender
zimbraMtaRestriction: reject_unlisted_sender
zimbraMtaRestriction: reject_sender_login_mismatch