Блокировка спамера. Попытки регистрации доменов .<random>.

В последнее время у нас наблюдается массовая регистрация с адресами электронной почты, похожими на @services.cn, которые заполняют очередь нашего MTA недоставленными сообщениями.

Насколько я понимаю, заблокировать домены с использованием подстановочных знаков невозможно (см. Use of an asterisk in blocked email domains prevents registration from any email address - #7 by selase).

Есть ли какой-либо другой способ избежать подобных атак?

Discourse не поддерживает подстановочные знаки в списке заблокированных доменов электронной почты, поэтому прямая блокировка целых шаблонов доменов, таких как @services.cn, невозможна. Однако вы можете предпринять несколько мер для уменьшения или предотвращения таких спам-атак при регистрации:

  1. Уменьшите «макс. количество новых аккаунтов с одного IP»
    Установите этот параметр на 1 или другое низкое значение, чтобы ограничить количество новых аккаунтов, которые могут быть созданы с одного IP-адреса. Это помогает предотвратить массовую регистрацию с одного IP и очень эффективно во время атаки.
  2. Включите hCaptcha при регистрации
    Добавьте проверку CAPTCHA к форме регистрации, включив плагин Discourse hCaptcha. Это усложнит работу ботов и автоматизированной регистрации и доступно во всех тарифных планах хостинга.
  3. Вручную заблокируйте известные вредоносные домены
    Хотя подстановочные знаки не поддерживаются, вы можете явно добавить проблемные домены в список «заблокированных доменов электронной почты».
  4. Требуйте одобрения новых пользователей
    Временно включите настройку «требовать одобрения пользователей». Это поместит все новые регистрации в очередь модерации для ручного одобрения.

Сандру, удалось ли тебе решить свою проблему?

В конечном итоге мы заблокировали эти адреса на уровне Postfix

Это разумное решение! Какой именно wildcard сработал?

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

Я ответил по почте, но не вижу своего ответа здесь. Сейчас нет времени его искать, а веб-интерфейс не позволяет просто вставить текст с сохранением форматирования (я это ненавижу!), так что вам придётся догадываться :slight_smile:

Что ты имеешь в виду под «нельзя вводить преформатированный текст»? strk говорит, что wildcard был /.*@service\..*\.cn/.

Добро пожаловать на Meta, @lnicola! :sunflower:

@strk, возможно, вы не знакомы с тем, как работает предформатированный текст в Discourse. Есть несколько способов сделать это, и это довольно мощный инструмент, когда вы научитесь им пользоваться. См.: Posting code or preformatted text

@tobiaseigen есть небольшая ошибка: если я скопирую этот регулярный выражение как текст и вставлю его в Discourse, оно исказится до /.@service...cn/ (обратные слеши пропадают).

Мы заходим на территорию офф-топа! :rofl:

То, что вы видите, — это не ошибка, а ожидаемое поведение Markdown. Два звездочки, окружающие текст, отображают его как курсив. Поскольку в нём есть @, он показывается как некорректное имя пользователя @username. Как только вы заключите регулярное выражение в обратные кавычки, оно отобразится как предварительно отформатированный текст:

Курсив с именем пользователя: /.@service...cn/
Предварительно отформатированный текст: /.*@service\..*\.cn/

У меня это не работает:

  1. Вставьте /.*@service\..*\.cn/ в текстовый редактор, скопируйте обратно
  2. Откройте обратную кавычку в Discourse, вставьте — вы получите /.@service...cn/
  3. Вставьте как обычный текст (Ctrl-Shift-V) в обратные кавычки — всё равно получится /.@service...cn/
  4. Если скопировать как HTML (из моего комментария выше), вставка работает корректно

Да, я могу воспроизвести описанную вами проблему, используя редактор форматированного текста. Попробуйте сначала переключиться на редактор Markdown, и всё заработает. Не уверен, можно ли что-то с этим сделать.