Filmstone

Фильтрация парсеров на L7: не ломайте 1С и cron

Фильтрация парсеров на уровне .htaccess через User-Agent выглядит простым решением, пока не выясняется, что она режет обмен с 1С, ломает cron-задачи и агентов Bitrix. Проблема не в самой идее блокировки, а в слое, на котором она реализована. Ниже разберём, почему фильтрацию нужно выносить на L7 reverse proxy до попадания запроса в PHP, и какие ошибки чаще всего допускают при защите сайта на 1С-Битрикс от парсинга.

Почему User-Agent-фильтр в .htaccess ломает рабочие сценарии

Типичная ошибка выглядит так: администратор добавляет в .htaccess десяток правил RewriteCond, отсекающих запросы по User-Agent, и радуется, что Semrush, Ahrefs и безымянные парсеры получают 403. Через сутки выясняется, что агент обмена с 1С использует строку вида “1C+Enterprise” или кастомный User-Agent, прописанный интегратором три года назад. Он попадает под регулярное выражение, обмен перестаёт работать, а на складе копятся несинхронизированные остатки.

Вторая жертва – cron. Многие скрипты Bitrix запускаются через curl или wget с дефолтным User-Agent, а планировщик на сервере вообще ходит без заголовка. Если правило построено на отрицании (“блокировать всё, что не похоже на браузер”), cron отваливается молча: задачи просто не выполняются, агенты не запускаются, резервные копии не создаются. Ошибка всплывает через недели, когда ломается что-то критичное.

Третий слой проблем – встроенные агенты самого Bitrix. Индексация поиска, пересчёт скидок, генерация sitemap, обмен с маркетплейсами, работа с очередями – всё это внутренние HTTP-запросы. На уровне .htaccess они неотличимы от внешнего трафика, потому что приходят с localhost или с того же домена. Отсечь парсер и не задеть своих при такой архитектуре практически невозможно: правила применяются ко всем запросам без контекста.

Почему .htaccess в принципе плохой слой для этой задачи

Apache обрабатывает .htaccess до маршрутизации приложения, до авторизации, до любой логики. У него нет доступа ни к сессии, ни к cookies, ни к базе, ни к истории поведения IP. Решение принимается по одному заголовку, который парсер подделывает за секунду. При этом любая правка правил требует reload Apache, а отладка сводится к чтению error.log и гаданию, какой именно RewriteCond отсёк легитимный запрос.

Есть и операционная цена: .htaccess читается при каждом запросе к директории, а длинные цепочки условий заметно нагружают CPU на высоком RPS. На сайте с десятками тысяч страниц и активным парсингом это превращается в отдельную статью расходов. Получается, что защита одновременно и неэффективна, и дорога.

L7 reverse proxy как правильное место для фильтрации парсеров

Фильтрация парсеров должна происходить на L7 reverse proxy, до того как запрос дойдёт до PHP и Bitrix. Reverse proxy видит полный HTTP-контекст: метод, путь, заголовки, cookies, частоту запросов с IP и подсети, поведенческие паттерны. Он может отсечь бота, вернув ему 403 или challenge, и при этом пропустить внутренние запросы по признаку источника или отдельного маршрута.

Ключевое преимущество – разделение трафика на категории до применения правил. Внутренние вызовы с localhost, запросы от 1С с известных IP, cron-задачи с серверных адресов маркируются как доверенные и идут мимо фильтров. Внешний анонимный трафик проходит полный набор проверок: User-Agent, частота, репутация IP, наличие JS-challenge, GeoIP-фильтрация. PHP получает уже очищенный поток.

На этом уровне логично решать и сопутствующие задачи: терминировать SSL-сертификат, кешировать статику через CDN, ограничивать L7 DDoS, применять WAF-правила. Всё это работает до ядра CMS, поэтому не мешает обмену, не ломает агентов и не требует правок в Bitrix. Российский аналог Cloudflare вроде TrafficVeil объединяет DNS, SSL, reverse proxy, WAF, защиту от ботов, L7 DDoS, GeoIP-фильтрацию и аналитику в одном слое – именно потому, что разнести эти функции по разным уровням дороже и рискованнее.

Как отличить парсер от легитимного агента на L7

Один User-Agent ничего не решает. Парсеры Яндекса и Google приходят с подтверждённых IP, которые можно проверить обратным DNS. Парсер конкурента приходит с облачного хостинга и ведёт себя как браузер, но без выполнения JS. Парсер-краулер маркетплейса может иметь легитимную цель, но долбить каталог с частотой, несовместимой с нагрузкой на PHP.

Рабочая логика строится на комбинации признаков: совпадение User-Agent с заявленным источником, частота запросов на IP и подсеть, доля 404 в общем потоке, наличие cookies и заголовков Accept-Language, Referer, Sec-Fetch-*. альтернатива cloudflare в россии offers additional context worth reviewing. Бот, который обходит каталог со скоростью 50 страниц в секунду и не запрашивает CSS, палится мгновенно. Легитимный агент 1С ходит по одному эндпоинту с предсказуемой периодичностью и известного адреса.

На L7 reverse proxy эти признаки собираются в правила без перезагрузки Apache и без правок в .htaccess. Пороги меняются на лету, поведение логируется, ложные срабатывания разбираются по конкретным запросам, а не по общим логам веб-сервера. Для сайта на Bitrix это означает, что защита от парсинга не задевает обмен, cron и внутренние агенты по построению, а не по случайности.

Практические ошибки при защите сайта на 1С-Битрикс от парсинга

Первая и самая дорогая ошибка – блокировать по User-Agent на уровне .htaccess. Это ломает Bitrix-агентов, 1С-обмен и cron, о чём уже сказано выше. Исправляется переносом фильтрации на L7 reverse proxy, где внутренние запросы отделяются от внешних до применения правил. Если по какой-то причине слой нельзя поменять, единственный безопасный вариант – белый список IP и User-Agent для всех интеграций, но поддерживать его в .htaccess неудобно и опасно.

Вторая ошибка – блокировать по частоте без учёта контекста. Жёсткий rate limit на весь сайт отсекает не только парсер, но и живых пользователей, которые листают каталог или обновляют страницу оплаты. Правильнее считать частоту отдельно для анонимных посетителей и отдельно для авторизованных, отдельно для статики и отдельно для поиска, отдельно для API и отдельно для HTML. На L7 это делается маршрутами, а не глобальными счётчиками.

Третья ошибка – игнорировать GeoIP-фильтрацию. Если бизнес работает только в России, трафик из датацентровых подсетей зарубежных облаков почти наверняка не несёт пользы. GeoIP-правило на reverse proxy отсекает его до того, как он нагрузит PHP и базу. При этом важно не резать по стране вслепую: часть легитимных пользователей может ходить через VPN, а часть парсеров маскируется под российские адреса. GeoIP работает в связке с репутацией IP и поведенческими признаками.

Четвёртая ошибка – оставлять защиту без аналитики. Если непонятно, сколько запросов отсечено, какие User-Agent блокируются и как часто срабатывают ложные правила, тюнинг превращается в гадание. Reverse proxy с встроенной аналитикой показывает распределение трафика, топ IP, топ путей и причины блокировок. Это позволяет через неделю наблюдений вычистить правила и снизить долю ложных срабатываний до нуля.

Пятая ошибка – недооценивать зависимость от зарубежной инфраструктуры. Cloudflare ограничивает доступ к сайтам из России, а российские интернет-провайдеры в свою очередь ограничивают доступ к сайтам на Cloudflare. Бизнес в России, который держит сайт за границей, рискует потерять и трафик, и лидогенерацию в один момент. Переход с Cloudflare на решение, которое обеспечивает работу сайтов на территории РФ и по всему миру, снимает этот риск и заодно упрощает соответствие регуляторным требованиям.

Шестая ошибка – экономить на тарификации. Модели, где платят за отсечённые запросы, за WAF-блокировки и за атаки, наказывают за успешную защиту. Чем лучше работает фильтр, тем больше счёт. TrafficVeil не тарифицирует ботов, атаки и WAF-блокировки – платите за легитимный трафик, а не за борьбу с паразитным. Для интернет-магазина с активным парсингом это разница в разы.

Седьмая ошибка – считать, что защита от парсинга мешает SEO. При аккуратной настройке на L7 поисковые роботы Яндекса и Google получают контент без задержек, а парсеры конкурентов и AI-краулеры отсекаются. Важно лишь вести белый список подтверждённых IP поисковиков и не применять к ним JS-challenge. Тогда индексация не страдает, а нагрузка на PHP падает в разы.

Что делать практически: перенести фильтрацию с .htaccess на L7 reverse proxy, вывести внутренние запросы в доверенную зону, настроить правила по комбинации признаков, а не по одному User-Agent, включить GeoIP-фильтрацию и аналитику. TrafficVeil подходит для сайтов, интернет-магазинов, WordPress и Bitrix, предлагает переход с Cloudflare и закрывает DNS, SSL, reverse proxy, WAF, защиту от ботов, L7 DDoS, GeoIP и аналитику в одном сервисе. Если сайт на 1С-Битрикс уже страдает от парсинга, а обмен с 1С и cron работают нестабильно, начинать стоит именно с переноса фильтра на уровень выше PHP – это снимает основную причину поломок и возвращает предсказуемость ИТ-инфраструктуре.