У компании имеются удаленные партнерские филиалы, равномерно распределенные по всей Западной Европе, использующие один почтовый сервер. К сожалению, бюджет IT-отдела не очень большой, а пользователей достаточно много (около 700 почтовых аккаунтов). Использовался, да и сейчас используется для почты Exchange 2010 с последними обновлениями и более-менее настроенными правилами фильтрации спама, а вот с антивирусом как-то не заладилось. Купленное решение отказывалось нормально работать, раздувая очередь входящей корреспонденции до неприличных размеров и вешая намертво всю почту. (Да, я знаю, что все best practice говорят о необходимости и edge-сервера, и отдельно сервера архивации, но что было на тот момент, то и было.)
Берем инициативу в свои руки. К большому своему удивлению, найти развернутый мануал по решению такой проблемы сходу не удалось, так что возникла идея поделиться своими пробами и ошибками в рунете.
Из того, что было в конечном итоге протестировано и опробовано:
Zentyal, ASSP и Xeams.
Перейдем ко второму нашему кандидату. Anti-Spam SMTP Proxy. Весь набор для проксирования почтового трафика в нем есть, т.е. и Байесовская фильтрация спама, и пенальти очки, и черные/белые списки, и ClamAV и куча-куча всего еще. Есть единственный недостаток: юзабельность. Т.е. веб-интерфейс ASSP это обернутые в какой-то ад конфиги, которые лично мне проще править через консоль. Штука эта простояла у нас около 2х месяцев в продакшене, а потом какой-то из админов что-то поменял в конфигах и все заверте… В общем, мы поймали пару раза .locky и в последний раз актуального бэкапа не нашлось, потому человек ушел в отпуск, а когда пришел уже было поздно. Это заставило нас пересмотреть нашу политику резервного копирования, но об этом в другой раз. К огромному сожалению, отдельного Linux-администратора у нас нет, т.к. почти вся инфраструктура на Microsoft, поэтому ковырять монструозные награмождения через веб-интерфейс для админов была реальная пытка.
После усиленного гугления и пробы еще нескольких продуктов, я остановил свой выбор на Xeams. Да, к большому сожалению, это не OpenSource, а закрытый продукт, однако, он очень дружелюбен к тем администраторам, у которых нет большого опыта в связках Linux&Dovecot&Postfix&etc. Кроме того, он кросплатформенный, так что не возникнет проблем даже у тех, кто с линкусом на вы.
Работать он может в трех режимах:
Stand alone server — да, xeams умееть быть и просто почтовым сервером. На сколько хорошим не могу сказать, потому что эта функция интересовала меня в последнюю очередь.
Spam firewall — в этом режими xeams только принимает весь почтовый трафик на себя и дальше распределяет на корпоративные почтовые сервера.
Hybrid mode — Гибридный режим. Объединяет два других, рекомендую ставить его, поскольку полноценно фильтровать спам он не сможет без пропуска исходящего трафика через себя.

Так как у нас уже был почтовый сервер, то использовался вариант SMTP-Proxy
Установка производилась на чистую машину с Ubuntu 14.04. Единственное, что необходимо было доставить, так это Java, на которой, собственно, работает движок Xeams.
sudo apt-get update && upgrade
sudo apt-get install libc6-i386
sudo update-alternatives --config java
sudo apt-get install default-jre
java -version
Xeams использует ClamAV, правда, рекомендует ставить его на отдельную машину, но в процессе использования на одной машине никаких проблем замечено не было. Если необходимо позже переконфигурировать настройки ClamAV, то это тоже можно сделать без проблем.
sudo apt-get install clamav-daemon
Качаем архив с инсталлятором отсюда. Распаковываем, даем права и выполняем.
wget http://www.xeams.com/files/XeamsLinux64.tar
tar -xf ./XeamsLinux64.tar
chmod +x ./Install.sh
./Install.sh
Если все прошло успешно, Web-Interface будет доступен по 5272 порту.
Главная страница содержит отчеты, графики и основные параметры потребления ресурсов. Мы дали машине 8Гб RAM, пиковая нагрузка несколько раз достигала 6, так что такие цифры вполне оправданы.
Переходим к самой настройке. На Firewall весь трафик на 25 порт заворачиваем на IP нашего Xeams на порт 2525. Это сделано потому, что у нас Xeams не только получает, но через него и отправляется почта, так что входящая приходит на 2525й порт, а исходящая на 25й порт.
В целом, настройка Xeams простая и достаточно удобная. На которые моменты все-таки, хотелось бы обратить внимание:
Указываем порт для http/https web-доступа.
DNS, если указан в настройках самой машины, то можно не указывать
И адрес, для ежедневных отчетов.
На вкладке Advanced необходимо указать HELO (как правило, можно просто скопировать из настроек имеющегося почтового сервера), чтобы самим не попасть в СпамЛисты.
Используйте только Closing relay и пропишите адреса и хосты, с которых можно будет отправлять почту без аутентификации.
Со стороны Exchange это выглядит вот так, где закрашенным прописан адрес smtp-relay
Здесь все просто, указываем порты, на которые принимается почта, указываем адрес пересылки и порт. В нашем случае, это адрес корпоративного Exchange
href=«ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA»>Грейлистинге
Если у Вас поднят Active Directory, то его без проблем можно интегрировать в Xeams. Зачем? Хотя бы для того, чтобы пользователи не мучали Вас в первое время, что у них не доходит почта. Пользователь без проблем сможет зайти и проверить свой почтовый ящик, просмотреть свой спам и прописать свои black/whitelist:
Кроме этого, это предоставляет возможность использовать SMTP только аутентифицированным пользователям. В общем, удобно.
чуть ниже я расскажу о некоторых нюансах его использования.
Спамфильтры.
У Xeams достаточно большой набор спамфильтров:
Real-time Black-hole servers (RBL). Каждому списку можно выставить свои очки значимости, на основе которых, Xeams определяет благонадежность письма.
Из адаптивных фильтров используется Bayesian Analysis, которая вполне справляется с возложенными на нее функциями. Были опасения, что работать он будет плохо, из-за большого количества языков переписки (русский, немецкий, английский, испанский, итальянский, польский, греческий), однако, процент ложных срабатываний достаточно низок.
Auto Learn Sender. Отличная вещь, именно из-за него мы пропускаем весь исходящий почтовый трафик через Xeams, который анализирует адреса получателей и принимает их во внимание, когда выносит окончательную оценку благонадежности письма.
Остальные фильтры страндартны и я не думаю, что их необходимо описывать в этой статье, которая и так уже получилась раздутой.
Теперь несколько слов хотелось бы уделить не совсем очевидным нюансам:
После нескольких дней использования, мы изменили стандартные настройки фильтров и конфигурацию очков:
и Bayesian Score подняли до 115.
Самым распрастраненнным ложным срабатыванием являлась проблема правильной кодировки, так как, все-таки, Xeams заточен на английский язык, решилась отключением этой настройки.
По умолчанию, ClamAV НЕ проверяет вложения макросов в документах Ofiice, т.е. новомодный .locky может спокойно пройти,
исправить это можно одной строчкой:
echo 'ScanOLE2 true' >> /etc/clamav/clamd.conf
cat /etc/clamav/clamd.conf
#Automatically Generated by clamav-base postinst
#To reconfigure clamd run #dpkg-reconfigure clamav-base
#Please read /usr/share/doc/clamav-base/README.Debian.gz for details
TCPSocket 3310
# TemporaryDirectory is not set to its default /tmp here to make overriding
# the default with environment variables TMPDIR/TMP/TEMP possible
User clamav
AllowSupplementaryGroups true
ScanMail true
ScanArchive true
ArchiveBlockEncrypted false
MaxDirectoryRecursion 15
FollowDirectorySymlinks false
FollowFileSymlinks false
ReadTimeout 180
MaxThreads 12
MaxConnectionQueueLength 15
LogSyslog true
LogRotate true
LogFacility LOG_LOCAL6
LogClean false
LogVerbose false
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /var/lib/clamav
SelfCheck 3600
Foreground false
Debug false
ScanPE true
MaxEmbeddedPE 10M
ScanOLE2 true
ScanPDF true
ScanHTML true
MaxHTMLNormalize 10M
MaxHTMLNoTags 2M
MaxScriptNormalize 5M
MaxZipTypeRcg 1M
ScanSWF true
DetectBrokenExecutables false
ExitOnOOM false
LeaveTemporaryFiles false
AlgorithmicDetection true
ScanELF true
IdleTimeout 30
PhishingSignatures true
PhishingScanURLs true
PhishingAlwaysBlockSSLMismatch false
PhishingAlwaysBlockCloak false
PartitionIntersection false
DetectPUA false
ScanPartialMessages false
HeuristicScanPrecedence false
StructuredDataDetection false
CommandReadTimeout 5
SendBufTimeout 200
MaxQueue 100
ExtendedDetectionInfo true
OLE2BlockMacros false
ScanOnAccess false
AllowAllMatchScan true
ForceToDisk false
DisableCertCheck false
DisableCache false
MaxScanSize 100M
MaxFileSize 25M
MaxRecursion 10
MaxFiles 10000
MaxPartitions 50
MaxIconsPE 100
StatsEnabled false
StatsPEDisabled true
StatsHostID auto
StatsTimeout 10
StreamMaxLength 25M
LogFile /var/log/clamav/clamav.log
LogTime true
LogFileUnlock false
LogFileMaxSize 0
Bytecode true
BytecodeSecurity TrustSigned
BytecodeTimeout 60000
OfficialDatabaseOnly false
CrossFilesystems true
OnAccessMaxFileSize 25M
В целом, через две недели после использования и анализа спама, возможного спама, можно сказать, что 98% спама действительно не проходит.
Буду рад предложениям, комментариям и критике в комментах.
Комментарии (23)
ZiggiPop
15.07.2016 17:27>он очень дружелюбен к тем администраторам, у которых нет большого опыта в связках Linux&Dovecot&Postfix&etc.
Вы не смотрели в сторону Roundcube? Устанавливается c зависимостями буквально одним шелл-скриптом install.sh, удобен в администрировании и, вроде, имеет из коробки все необходимое вам. Есть даже такая штука, как Bitnami Roundcube Stack, которая в одном из вариантов представляет собой виртуальную машину с готовым почтовым сервером внутри.sergio_deschino
15.07.2016 19:29+2У нас стоит Exchange и он всем устраивает, кроме проблемы спама, поэтому в данном случае он не особо нужен.
KonstantinSamsonov
16.07.2016 15:07Я решил для себя вопрос давным давно ORF spam filter + Symantec для Exchange
navion
21.07.2016 19:35ORF сам почти не фильтрует, это просто удобный интерфейс для настройки и подключения сторонних RBL.
ESA намного эффективней — после базовой настройки даже на info в день приходит всего пара откровенно спамереских писем.
n1nj4p0w3r
15.07.2016 19:54postfix+rspamd+clamav-milter
Зачем вам imap,pop3,etc. в фильтрующем релее?
Зачем недостаточно компетентным админам дали доступ шариться в продакшн-системе?
Причем тут разработка?merlin-vrn
15.07.2016 20:05Вообще-то rspamd идёт в комплекте с rmilter, который и rspamd и clamav подключает к postfix одним milter-ом. Мне понравилось.
sergio_deschino
16.07.2016 01:23Разработка теперь, к сожалению, включает и банальное администрирование.
К большому сожалению, мы не живем в идеальном мире, где все админы одинаково хорошо разбираются в чанге и стандартных линуховых продуктах и где бюджеты не всегда выделяются целесообразно.
imap, pop3, etc, в фильтрующем релее потому очень гетерогенная среда у почтовых клиентов, начиная от outlook и заканчивая клиентом в мфу.n1nj4p0w3r
16.07.2016 01:32+1Если админ не разбирается — он делает виртуалку и изучает незнакомый продукт там и это не «идеальный мир», а вполне разумное решение проблемы отсутствия необходимого опыта.
Exchange поддерживает pop3 и imap для доступа к ящикам, если вы используете релей еще и как сервер почтовых ящиков, то вы что-то делаете не так и устраиваете зоопарк который в будущем вам аукнется.
Зачем мфу нужен почтовый ящик для меня загадка.sergio_deschino
16.07.2016 02:01МФУ умеет факсы и сканировать на почту, собственно для этого именно.
А где, простите, Вы увидели релей, который дает доступ к почтовым ящикам по pop3 и imap?merlin-vrn
16.07.2016 13:33Для отправки сканов на почту вообще-то не нужен ни POP3, ни IMAP — то есть, не нужен вообще никакой ящик. Нужен только SMTP-сервер, который будет релеить почтовое сообщение (скорее всего, с аутентификацией). Например, в Xerox 3300MFP вообще даже настроек именно ящика (приёма почты) нет — только настройки SMTP для отправки.
В технологии e-mail вообще не существует такого понятия, как «ящик отправителя». Есть «адрес отправителя», envelope from, который вполне может быть не ассоциирован ни с каким ящиком (т.е. почта по этому адресу может вообще не приниматься сервером). Например, разнообразные «noreply@domain.com».sergio_deschino
16.07.2016 15:10Факсы оно умеет не только принимать и отсылать через SMTP, но и наоборот, принимать почту и слать факсы.
n1nj4p0w3r
22.07.2016 02:07Факсы разве не по телефонной линии передают?
Зачем МФУ принимать почту понятнее не стало.merlin-vrn
22.07.2016 09:00Чтобы отправить её потом по факсу. Видимо, он дозванивается, человеческим голосом говорит той стороне: «примите факс, Зиночка», а потом «стартую». А если не туда попал — извиняется и вешает трубку, а в ответном емейле пишет, что телефон неправильный.
Факсы — это такой невменяемый пережиток прошлого, что будь моя воля, законодательно бы запретил их использовать. Ребят, 2016 год на дворе, оглянитесь.
awsswa59
17.07.2016 12:34Сделал гораздо проще — поставил на тужу машину mDaemon — и сменил 25 порт у Exchange.
Свои клиенты идут на 587 порт сразу на Exchange.
В Exchange сделал конектор — все отправлять через mDaemon
В mDaemon завел домены — все для firma.ru пересылать на адрес Exchange
Никаких настроек — все работает из коробкиsergio_deschino
17.07.2016 12:36У нас была проблема в том, что локальное рещение вешало всю очередь, поэтому пришлось разнести, а на винде ставить что-то не хотелось.
tweky
18.07.2016 15:45Вы написали:
«Самым распрастраненнным ложным срабатыванием являлась проблема правильной кодировки, так как, все-таки, Xeams заточен на английский язык, решилась отключением этой настройки»
Не понял, какой именно?sergio_deschino
19.07.2016 00:39Если не изменяет память, то Base Encode 64, самый первый фильтр. Завтра посмотрю в конфиге.
tweky
19.07.2016 09:17Удалось ли посмотреть?
Я полагаю это либо «Base64 Filter» (он же самый первый), либо «UUEncode filter», верно?
gre
98% процентов спама отсекается. а есть абсолютные цифры — сколько спама прошло? Понятно, что они будут неточными. Но хотя бы порядок.
sergio_deschino
Скажем так. Ежедневно приходят отчеты о «лидерах» по количеству спама (первое место стабильно удерживает пользователь с 98% отбракованных писем) и жалуется только пользователь из топ-3, присылая по два-пять писем в день.