Плагин Geo Blocking

Резюме: Плагин Geo Blocking для Discourse

:link: GitHub: GitHub - communiteq/discourse-geo-blocking · GitHub
:arrow_right: Установка: Следуйте руководству по установке плагинов.
:moneybag: Заказчик: Этот плагин спонсируется Sketchfab.

Возможности

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

Плагин использует базу данных MaxMindDB, которая уже доступна в Discourse.

Настройка

  • Включите плагин.
  • Добавьте все сети, которые нужно заблокировать, в geo_blocking_asn_blocklist. Префиксуйте номера символом AS, например AS12345.
  • Добавьте все страны и регионы, которые нужно заблокировать, в geo_blocking_country_region_blocklist. Поддерживаются следующие форматы:
    • Полное название страны (например: Belgium)
    • ISO-код страны (например: JP для Японии)
    • Полное название страны, за которым следует точка и название региона (например: Switzerland.Jura).

  • Если включена опция geo blocking detailed reason, то в сообщении об ошибке будет указано страна/регион или сеть, вызвавшие блокировку пользователя.

в отличие от

  • Для тестирования плагина можно проверить логи geo blocking log blocked и/или geo blocking log allowed, а также просмотреть /logs на вашем форуме.

Полный список поддерживаемых стран и регионов доступен по ссылке list_of_countries_and_regions.txt.

Внимание и ограничения

Если анонимные посетители блокируются, они всё ещё могут получить кэшированную версию главной страницы в течение примерно одной минуты.

Страница ошибки не содержит разделы «Популярное» и «Недавнее», так как это могло бы раскрыть контент заблокированному пользователю.

26 лайков

Спасибо за оперативную работу над этим проектом, Ричард!

4 лайка

Спасибо. Очень полезно.

1 лайк

Я попробую это прямо сейчас. Как я мог это пропустить :woozy_face:

Мне нужно заблокировать несколько стран и автономных систем, но по очевидным причинам я не могу использовать для этой задачи Varnish, как на других моих сайтах. Это решает эту головную боль, если сервис всё ещё работает.

Да, плагин всё ещё поддерживается и работает.

2 лайка

Спасибо за разработку этого полезного плагина, Ричард.

Я внес несколько незначительных изменений, чтобы адаптировать его под свой случай: блокировку определённых URL для пользователей из определённых регионов. Что я сделал, так это в add_model_callback(:application_controller, :before_action) добавил дополнительные правила сопоставления с использованием request.fullpath, например:

return unless request.fullpath.start_with?(*SiteSetting.topic_geo_blocking_exact_paths.split('|'))

Я обнаружил, что такая геоблокировка на уровне URL работает, если я открываю URL, вводя его напрямую в адресной строке браузера. Однако, если я перехожу по этому URL, кликнув по нему на главной странице Discourse, блокировка не срабатывает. (Но после нажатия F5 для обновления страницы она блокируется.)

Не могли бы вы дать мне какой-нибудь совет, как исправить эту проблему? Спасибо.

1 лайк

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

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

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

3 лайка

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

Я настроил несколько заблокированных стран, а затем протестировал доступ через них с помощью VPN, но предупреждения о блокировке не появились.

Возможно, проблема в VPN. Не все VPN работают одинаково?

От этого плагина не ожидается блокировка VPN.

За исключением, очевидно, того, что он будет блокировать выходные узлы VPN в заблокированных географических регионах.

1 лайк

Спасибо за подсказку. Я не учитывал выходные узлы и понятия не имею, где именно на соединениях они находятся. Для меня было достаточно информации «какой у меня IP», так как она совпадала с регионом/страной, для которой тестировалось географическое ограничение.

Итак, давайте перевернём ситуацию: я заблокировал зону, в которой нахожусь, не используя VPN. Я использую другое устройство, на котором могу тестировать как фиксированное, так и сотовое соединение, но всё равно ничего не происходит. Гео-блокировка, как ожидалось, при подключении не срабатывает.

Пожалуйста, имейте в виду, что прокси, VPN или Tor всегда смогут обойти подобные механизмы. Плагин не предназначен для блокировки таких средств. Географическая блокировка применяется либо по юридическим причинам, либо для ограничения доступа случайным посетителям.

Вы это сделали?

1 лайк

5 сообщений были перенесены в новую тему: Проблемы с MaxMindDB

Похоже, здесь используется старый значок fa-user вместо user. Это вызывает множество ошибок.

2 лайка

Исправлено, спасибо за сообщение!

4 лайка

Спасибо за этот отличный плагин.
Если его цель — предотвратить спам или доступ нежелательных стран к публичным страницам, может ли он также предотвратить сканирование вредоносными ботами в случае приватного экземпляра Discourse?

1 лайк

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

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

1 лайк

У нас уже есть боты, которые создают учётные записи :man_shrugging:

Скраперы — это совсем другое дело, ведь они воруют контент. Спам-боты, которые являются проблемой на публичных инстансах, представляют точно такую же проблему для частных форумов. Вот почему мы используем ИИ для сканирования контента.

Для меня географическая блокировка отсекает значительную часть нежелательных звонков и попыток входа. Я могу её использовать, потому что у меня полностью финский форум [1], но глобальный форум, конечно, не может этого сделать.

Каждый «стучащийся» увеличивает нагрузку на веб-сервер, но Discourse отличается от мира PHP. Бот легко может вызвать эффект, похожий на DDoS-атаку на WordPress, и тогда географическая блокировка может стать частью стратегии защиты. Но Discourse, я полагаю, гораздо более устойчив к этому.

Однако против спам-ботов географическая блокировка не помогает, если необходимо разрешить доступ из всех стран.


  1. переводчик может изменить это условие, если когда-нибудь это станет готовым к продакшену решением ↩︎

Спасибо за ваш ответ. Да, действительно, они не получат никаких данных, но я всё ещё вижу их в логах nginx, и они продолжают создавать нежелательные подключения. Поэтому я установил этот простой инструмент для блокировки подключений к VPS из определённых стран ещё до того, как они достигнут экземпляра Docker Discourse: GitHub - friendly-bits/geoip-shell: User-friendly and versatile geoblocker for Linux · GitHub

1 лайк

Да, это отличный инструмент. Обратите внимание, что он вызывает «жесткий» блок, тогда как плагин предоставляет вам красивое и настраиваемое сообщение, которое можно показывать заблокированным пользователям.

2 лайка