Больше года назад мы начали делать инструмент «для себя». Сегодня это полноценный сервис, который проксирует и защищает реальные сайты, отражая миллионы вредоносных запросов, — и всё это создано с расчётом на обычного пользователя. Рассказываю, как это вышло — честно и без маркетинга.
Что такое TrafficVeil
TrafficVeil — облачный сервис, который защищает сайт от вредоносного трафика: ботов, парсеров, DDoS-атак уровня L7, попыток взлома и спама. Работает как «умный охранник» между интернетом и вашим сайтом — пропускает настоящих посетителей и блокирует вредителей.
Мы делали систему максимально простой в настройке. Если вы не знаете, как правильно защитить сайт, есть автоматические сценарии, которые сделают это за вас, и ИИ-бот, который поможет разобраться с любой настройкой.
С чего всё началось: 300 сайтов и каша в логах
Идея родилась из реальной проблемы. У меня была сетка PBN из 300 сайтов, и анализировать логи каждого вручную было невыносимо долго. Готовые решения на рынке не подходили по разным причинам — не буду углубляться.
Так был заложен первый камень будущего сервиса: мы с командой написали анализатор логов, который парсил и структурировал данные о каждом визите — какой IP зашёл, на какую страницу, с каким браузером, в какое время. Раньше это был просто поток цифр, теперь — структура, и картина получилась, мягко говоря, интересная.
Одни скрипты методично долбились в xmlrpc.php — файл WordPress, через который чаще всего ломают сайты. Другие пытались записать что-то в папку uploads. Третьи читали debug.log и error.log — а там иногда лежат пароли от базы данных и другая чувствительная информация. И таких «умных» запросов были не десятки, а сотни видов.
Мы начали фиксировать адреса, с которых приходил весь этот мусор. За год набралась база больше миллиона «плохих» IP — адреса, с которых никогда не приходило ничего хорошего, только сканеры, спамеры и взломщики.
Логичным следующим шагом стала фильтрация входящего трафика прямо на входе, а не постфактум. Звучит просто — на деле оказалось совсем не так.
Второй толчок: блокировка Cloudflare в России
Пока мы строили защиту от ботов, случилось ещё одно: РКН начал блокировать Cloudflare, и часть наших сайтов в зоне .ru перестала открываться для российских пользователей. Около 60% нашей PBN-сетки было именно в зоне .ru — проблема оказалась серьёзной.
Понадобилось собственное решение для проксирования. Так к задаче защиты добавилась задача надёжной доставки трафика — независимо от того, что происходит с зарубежными CDN-провайдерами. Эти две задачи, защита и проксирование, и легли в основу TrafficVeil.
Как это работает: от DNS до вашего сервера
Мы написали собственный DNS-сервер. Когда владелец сайта прописывает у регистратора наши NS-записи — это занимает около 30 секунд — наш DNS начинает отвечать на все запросы об этом сайте. Отвечает не реальным IP хостинга, а адресом нашего прокси-сервера.
С этого момента реальный адрес сервера скрыт полностью: ни в WHOIS, ни в DNS-чекерах — везде виден только наш IP. Атаковать хостинг напрямую становится невозможно, потому что никто не знает, где он находится.
На сегодня в системе 20 выделенных серверов и около 180 IP-адресов. С ростом числа подключённых сайтов будет расти и инфраструктура.
Дальше в дело вступает наш фильтр — прокси-слой, который стоит между посетителем и сайтом.
Семь уровней проверки: что происходит с каждым запросом
Мы написали собственный reverse proxy на Go — не взяли готовый Nginx или HAProxy, потому что нужна была полная гибкость: возможность вставить любую логику в любом месте цепочки обработки запроса.
Каждый HTTP-запрос, прежде чем попасть на сайт, проходит несколько уровней проверки.
Уровень 1. Проверка SSL
Первым делом пропускаются запросы от Let's Encrypt для автоматического выпуска SSL-сертификатов. Без этого автоматизация SSL не работает.
Уровень 2. Логирование
Каждый запрос без исключений записывается в базу: IP-адрес, страна, браузер, запрошенная страница, время ответа и, если запрос заблокирован, причина блокировки. Всё это доступно в личном кабинете.
Уровень 3. Проверка по базам вредоносных IP
Один из ключевых уровней. IP каждого посетителя проверяется сразу по нескольким базам: собственная база, которую мы собирали больше года; открытые базы IPsum и Bitwire; база фейковых Google-ботов — да, существуют боты, которые представляются поисковым роботом Google, но им не являются; база известных сканеров и другие источники.
В памяти системы загружено более 8,5 миллионов адресов. Проверка происходит за O(1) — мгновенно, независимо от размера базы, с помощью структуры данных Bloom Filter. Если IP есть в базе — запрос не проходит.
Уровень 4. Геофильтрация
Если сайт работает на российскую аудиторию, а запросы тысячами идут из Китая или Бразилии — скорее всего, это не клиенты. Можно заблокировать целые страны или, наоборот, настроить белый список и пускать трафик только из нужных регионов.
Дополнительно можно блокировать целые автономные системы и дата-центры — например, пускать только реальных пользователей и блокировать запросы с хостинг-провайдеров. Настраивается одним переключателем.
Уровень 5. WAF — защита от взлома
WAF (Web Application Firewall) ловит попытки взлома через уязвимости в коде сайта. Мы интегрировали Coraza WAF v3 с полным набором правил OWASP CRS v4 — один из самых авторитетных стандартов веб-безопасности. Более 100 правил блокировки закрывают SQL-инъекции, XSS-атаки, Remote Code Execution, Path Traversal, PHP-инъекции.
Есть четыре уровня строгости: от минимальной защиты, которая почти не влияет на работу сайта, до параноидального режима, где блокируется любой подозрительный запрос.
Уровень 6. Rate Limiting
Сто запросов в секунду с одного IP — это точно не живой человек, даже самый быстрый читатель не переключается между страницами с такой скоростью. Мы ограничиваем частоту запросов по IP алгоритмом Sliding Window на Redis. Лимиты настраиваются отдельно для каждого домена — в секунду, минуту, час. Превысившие лимит автоматически блокируются.
Уровень 7. JS Challenge — умная капча
Собственная разработка, которой мы особенно гордимся. Никакого Google reCAPTCHA с выбором светофоров — мы сделали «невидимую капчу».
При первом обращении браузер посетителя получает вычислительную задачу, которую нужно решить для получения токена доступа. Настоящий браузер решает её за доли секунды незаметно для пользователя. Бот — не может: большинство ботов и скриптов на Python, Go, curl не выполняют JavaScript вообще. Сложность задачи настраивается для каждого домена отдельно, от 1 до 8.
Если запрос прошёл все семь уровней — он попадает на сайт. Если нет — отсекается, и сервер даже не узнаёт о попытке. Средний оверхед всей цепочки — 10–15 миллисекунд, посетители ничего не замечают.
Защита WordPress: отдельная история
WordPress — самая популярная CMS в мире и поэтому самая атакуемая. Для неё мы сделали отдельный middleware, который закрывает самые распространённые дыры.
• xmlrpc.php — заблокирован полностью. Это файл, через который чаще всего ломают WordPress, и большинству владельцев он вообще не нужен
• wp-login.php — защищён от брутфорса: количество попыток входа с одного IP ограничено, после превышения — блокировка
• Author enumeration — закрыт. Через него можно узнать логины пользователей и затем подбирать к ним пароли
• debug.log, error.log и другие чувствительные файлы — недоступны снаружи, хотя именно в них иногда хранятся пароли от баз данных
Весь функционал включается одной кнопкой при выборе профиля WordPress.
Готовые профили: защита в один клик
Мы понимали с самого начала: не все владельцы сайтов хотят разбираться в настройках WAF, rate limiting и баз блокировок. Большинству нужно просто нажать кнопку и получить защищённый сайт.
• WordPress — блокировка xmlrpc, защита страницы входа, подключение WAF и базы вредоносных IP
• WooCommerce — всё из профиля WordPress плюс защита оформления заказа и корзины, блокировка парсеров цен. Особенно актуально для магазинов, у которых конкуренты собирают прайс через парсеры
• 1С-Битрикс — защита административной панели /bitrix/admin/, белый список для 1С-обмена
• MODX — защита /manager/, блокировка /connectors/
• DLE — защита admin.php, блокировка SQL-инъекций
• Drupal — защита /admin/ и /user/
• Строгий режим — максимальная паранойя: все базы блокировок подключены, JS Challenge включён для всех посетителей. Используется во время серьёзных атак
• Лёгкий режим — минимальная защита для тех, кому важно не мешать работе сайта
Выбрал профиль, нажал кнопку — всё настроено: rate limiting, WAF, базы блокировок и защита специфических файлов работают сразу.
Надёжность: что если один сайт упал
Когда через один прокси работают сотни сайтов, возникает нетривиальная задача: что делать, если один из них «завис»? Без специальной архитектуры прокси будет ждать ответа от зависшего сервера, занимая ресурсы, и постепенно всё больше соединений зависнет в ожидании — пострадают все остальные сайты, включая исправные.
Мы решили это через изоляцию доменов. Каждый домен получает свой пул ресурсов: собственный HTTP-клиент, ограничение на количество параллельных запросов (по умолчанию 50 на домен) и Circuit Breaker.
Circuit Breaker — это «автоматический выключатель». Если сервер начинает отвечать ошибками, он срабатывает, и прокси прекращает отправлять туда запросы. Через 60 секунд делается одна контрольная попытка: если сервер ожил, работа восстанавливается в штатном режиме, если нет — отключение повторяется.
В итоге падение одного сайта не задевает остальные — они продолжают работать как обычно.
Аналитика: что происходит с сайтом прямо сейчас
Каждый запрос через прокси записывается в ClickHouse — специализированную базу для аналитики, которая обрабатывает миллиарды строк за секунды. Сохраняется всё: IP, страна, браузер, запрошенный путь, статус ответа, время обработки, причина блокировки.
На основе этих данных в личном кабинете строится дашборд:
• Сколько запросов пришло на каждый сайт — в разбивке по времени
• Сколько из них заблокировано и по какой причине — IP-база, WAF, rate limit, геофильтрация и так далее
• Топ атакующих IP с полной информацией: страна, провайдер, автономная система
• География трафика на карте мира
• Живая лента событий в реальном времени через WebSocket
Отдельно есть раздел логов, где можно найти конкретный запрос, отфильтровать по любому параметру и разобрать его до деталей — это помогает понять, почему заблокировался запрос или откуда пришла атака.
SSL и домены: полная автоматизация
Когда у тебя сотни доменов, вручную следить за сертификатами — это ад: каждый нужно выпустить, вовремя продлить и не забыть ни про один. Мы автоматизировали это полностью.
При добавлении домена SSL-сертификат через Let's Encrypt выпускается автоматически, Nginx-конфиг генерируется и применяется сам. Продление тоже происходит автоматически: уведомления приходят за 30 и 7 дней до истечения, но это просто для информации — сертификат обновится без участия пользователя.
Отдельно работает мониторинг WHOIS: система следит за сроками регистрации доменов и присылает уведомление в Telegram за неделю до окончания, в день истечения и в день удаления домена из реестра. Для тех, кто управляет сотнями доменов, это спасение — перехватить домен из-за случайной просрочки больше не получится.
Уведомления приходят в Telegram, по email, через Webhook в Slack или Discord — как удобно.
Немного о технической стороне
Бэкенд и прокси написаны на Go с использованием Gin, GORM и fasthttp. Go выбрали не случайно: он даёт отличную производительность при работе с большим количеством параллельных соединений, что критично для прокси-сервера.
Фронтенд — Next.js с React, TypeScript и Ant Design. Личный кабинет работает как обычное веб-приложение, данные обновляются в реальном времени через WebSocket.
Для баз данных используем три инструмента под разные задачи: PostgreSQL хранит операционные данные — настройки, домены, пользователей; Redis отвечает за кэш, rate limiting и хранение блокировок, работая в памяти; ClickHouse хранит логи и аналитику, легко перемалывая миллиарды строк.
WAF построен на Coraza v3 с правилами OWASP CRS v4. DNS — собственный авторитативный сервер на Go. Инфраструктура: Docker, Nginx, Let's Encrypt, мониторинг через Prometheus и Grafana.
Redis работает в отказоустойчивом кластере: три sentinel-узла, один master и два replica. PostgreSQL — master плюс replica.
Итого: больше года пути
От анализатора логов для собственной PBN-сетки до полноценного SaaS-сервиса защиты сайтов прошло больше года. Было сложно, были бессонные ночи — особенно когда разбирались с автоматизацией SSL на множестве VPS-серверов. Были моменты, когда казалось, что проще взять готовое решение.
Но в итоге получился сервис, который делает нормальную защиту сайта доступной по адекватной цене даже для тех, кто не разбирается в технических деталях. Нажал кнопку «WordPress» — сайт защищён. Прописал NS-записи — реальный IP скрыт. Всё остальное работает само.