Назад | Перейти на главную страницу

Как обнаружить и предотвратить рассылку спама со взломанной учетной записи postfix

Мы размещаем электронную почту и веб-сайты для многочисленных клиентов на выделенном сервере под управлением CentOS и настраиваем через Virtualmin.

Электронная почта обрабатывается через Postfix.

На выходных мы заметили, что учетная запись электронной почты клиента была взломана, а сервер использовался в основном для откачки спама. В результате наш сервер был занесен в черный список, что повлияло на все остальные учетные записи на сервере. Мы полагаем, что настольный компьютер был заражен вредоносным ПО, которое позволило спамерам получить доступ к учетным данным SMTP для данной учетной записи. С этого момента начался открытый сезон.

У меня вопрос: можно ли как-нибудь установить что-нибудь для автоматического обнаружения спамоподобной активности такого рода?

Спасибо

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

на вашем постфиксе main.cf файл:

smtpd_relay_restrictions =
    ...
    permit_mynetworks,
    reject_unknown_reverse_client_hostname,
    permit_sasl_authenticated,
    ...

Имейте в виду, что "smtpd_relay_restrictions" доступны в postfix 2.10, но вы можете применять их и до 2.10, пожалуйста, проверьте Документация.

В моем случае мне нужно было внести 2 изменения:

  1. переместите "permission_sasl_authenticated" вниз в моих правилах. Раньше я очень доверял своим аутентифицированным пользователям.
  2. добавьте правило: «reject_unknown_reverse_client_hostname», поскольку большинство «авторизованных спамеров» сообщают о «неизвестном» хосте (к сожалению, некоторые из них содержали информацию об имени хоста). Я также добавил белый список (используя правило: check_client_access) с некоторых серверов моих клиентов, которые, как известно, не разрешают свой IP -> имя хоста.

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

В качестве примечания, вы можете выполнить обширную проверку (например, проверку rbl, прежде чем разрешать вашим пользователям auth отправлять письма). Но я этого не пробовал.

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

Надеюсь, это поможет тебе.

Если вы используете SASL / TLS для аутентификации пользователей, вы можете настроить различные «пути» через свой сервер. Одним из путей может быть классический порт 25 для входящей почты, который будет проходить через amavisd-new для сканирования на спам и вирусы, и вы можете настроить другой путь, который имеет более разрешительные шаблоны, возможно, с более высоким порогом спама. Вы также можете разрешить или запретить различные типы вложений электронной почты.

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

Как вы это сделаете, зависит от того, какое программное обеспечение у вас установлено в данный момент.

У меня вопрос: можно ли как-нибудь внедрить что-нибудь для автоматического обнаружения подобной спаму активности?

Для вашего варианта использования я бы рекомендовал использовать postfwd. Он имеет гибкую систему правил, которая может выполнять интеллектуальную фильтрацию.

Характеристики

  • Сложные комбинации параметров smtp в одном правиле
  • Макросы / ACL / группы для часто используемых операторов
  • Комбинированный асинхронный поиск dnsbl с произвольными действиями в зависимости от результатов (например, разрешает белые списки DNS или выборочные серые списки на основе результатов поиска rbl)
  • Автоматическая деактивация не отвечающих dnsbls
  • Ограничения скорости на количество и размер сообщений для любого доступного элемента (пользователь, клиент, отправитель, получатель, ...)
  • Система подсчета очков для точного контроля доступа Правила на основе даты и времени
  • Условные переходы к определенным правилам (например, iptables -j)
  • Внутреннее кэширование запросов и поисков по DNS
  • Работает как сетевой демон (не нужно запускать процессы)
  • Встроенная статистика для анализа эффективности правил

Например,

Не допускайте более 20 МБ или 1000 получателей в день для пользователей alice и bob:

id=RULE003
    sasl_username=~/^(alice|bob)$/
    action=size(sasl_username/20971520/86400/REJECT only 20mb per day for $$recipient)
id=RULE004
    sasl_username=~/^(alice|bob)$/
    action=rcpt(sasl_username/100/86400/REJECT only 100 recipients per day for $$sasl_username)

Или вы можете настроить разные политики для разных клиентов

# Class 1: high volume clients
# - per mail: max 30MB, max 200 concurrent recipients
id=CLASS100; client_address=table:/etc/postfwd/class1.cf; action=jump(CLASS101)

# Class 2: medium limited access
# - per mail: max 10MB, max 50 concurrent recipients
# - rate limit: 1000 recipients or 100MB per day
id=CLASS200; client_address=table:/etc/postfwd/class2.cf; action=jump(CLASS201)

# Class 3: very tight limits
# - per mail: max 4MB, max 10 concurrent recipients
# - rate limit: 100 recipients or 20MB per day
id=CLASS300; client_address=table:/etc/postfwd/class3.cf; action=jump(CLASS301)

# Does not fit anywhere? REJECT
id=DEFAULT; action=REJECT please contact postmaster@example.org

И так далее. Единственное ограничение - это ваша фантазия :)

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

1) Установите fail2ban (если у вас его еще нет), чтобы заблокировать неудачные попытки входа в систему с определенных IP-адресов.

2) Отслеживайте (через скрипт) IP-адреса геолокации, подключающиеся к вашему серверу. Если вы обнаружите 2 разные страны менее чем за 1 минуту, заблокируйте учетную запись и уведомите пользователя.

Блокировка учетной записи автоматически заблокирует всех клиентов, пытающихся использовать эту учетную запись.

Этот сценарий оказался эффективным в моем случае, так как я не ожидаю, что мои клиенты окажутся в 2 разных странах менее чем за 1 минуту (мои серверы находятся в Японии).

Однако, если у вас есть почтовые клиенты по всему миру, я бы посоветовал увеличить количество стран, поскольку мобильные устройства потенциально могут показывать такую ​​картину, если кто-то находится на границе двух стран.

Также этот метод подразумевает, что у вас есть возможность напрямую связаться со своими клиентами (по телефону или другим способом помимо их взломанной учетной записи).

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

Скрипт отслеживания можно легко закодировать следующим образом: tail -n0 -F mail.log и передайте каждую строку в сценарий парсера, который будет извлекать IP-адреса и определять их местоположение, используя geoiplookup. Сохраните в базе данных (или файле) учетную запись и последнюю страну / страны, в которых она была обнаружена. Если вы используете учетные записи UNIX, более простой способ заблокировать их - использовать: passwd ACCOUNT -l. Не забудьте отправить вам электронное письмо, чтобы узнать о проблеме.

Если у вас нет навыков написания сценариев или вы не хотите начинать с нуля, дайте мне знать, и я поделюсь своим сценарием.