Обратный прокси против фишинга: фильтрация входящего трафика

📋 Кратко

Обратный прокси принимает запросы из интернета и передаёт их опубликованным веб-приложениям. Он помогает отсекать подозрительные запросы, вредоносные файлы, аномальных ботов и попытки обойти правила. Но прокси не заменяет защиту почты, DNS, конечных устройств и пользователей. Разбираем безопасную схему, ограничения фильтрации и практический чек-лист внедрения.

⏱ 10 минут чтениясложность
Прокси защищает опубликованные веб-приложения
Прокси защищает опубликованные веб-приложения

🔍 Что именно защищает обратный прокси

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

Доверенные заголовки связывают прокси и приложение
Доверенные заголовки связывают прокси и приложение

Такая схема скрывает прямой адрес приложения. Она также создаёт единое место для проверки веб-трафика. Здесь можно завершить TLS, проверить заголовки, ограничить методы HTTP и записать события.

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

Обратный прокси защищает веб-приложение, а не почтовый ящик пользователя. Фишинговое письмо может привести человека на внешний сайт. Такой сайт не проходит через ваш прокси.

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

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

🧭 Как проходит запрос через защитный контур

Сначала клиент устанавливает соединение с публичным адресом. Прокси принимает TLS-соединение и проверяет его параметры. После этого он сопоставляет запрос с нужным виртуальным узлом.

Защита проверяет сеть, запрос, URL и содержимое
Защита проверяет сеть, запрос, URL и содержимое

Затем система проверяет адрес назначения, заголовок Host, путь и метод HTTP. Правила могут учитывать размер запроса, тип содержимого и частоту обращений. Подозрительный запрос получает отказ или уходит на дополнительную проверку.

Разрешённый запрос прокси передаёт приложению. При этом сервер приложения видит контролируемый маршрут. Администратор должен правильно настроить заголовки X-Forwarded-For и X-Forwarded-Proto.

Нельзя без проверки доверять любому значению X-Forwarded-*. Клиент может подставить такой заголовок сам. Прокси должен удалять внешние значения и добавлять собственные.

Неправильная схема ломает журналы и правила доступа. Приложение может принять ложный IP клиента. Система аудита тогда связывает событие не с тем источником.

Сейчас проверьте один тестовый запрос. Сравните IP клиента в журнале прокси и в журнале приложения. Значения должны соответствовать утверждённой схеме передачи.

🛠️ Какие данные проверяет прокси

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

Фишинг требует защиты почты, DNS и устройств
Фишинг требует защиты почты, DNS и устройств

Фильтр веб-запросов анализирует метод, путь, параметры и заголовки. Он может запретить неожиданный метод для конкретного адреса. Например, форма загрузки не должна принимать произвольные команды вместо ожидаемого запроса.

Фильтр URL оценивает адреса, перенаправления и репутацию домена. Он полезен, когда приложение принимает внешние ссылки. Проверка должна учитывать конечный адрес после цепочки перенаправлений.

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

Эти уровни не заменяют друг друга. Разрешённый сетевой адрес не делает файл безопасным. Корректный тип файла не доказывает, что его содержимое безопасно.

Разделяйте правила по уровням. Сначала проверяйте соединение и адрес. Затем анализируйте запрос. После этого проверяйте файл или содержимое.

Сегодня разделите действующие правила на четыре группы: сеть, веб-запрос, URL и содержимое. У каждой группы назначьте владельца и понятную причину блокировки.

🎯 Почему обратный прокси не блокирует весь фишинг

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

Файлы проверяются до рабочего хранения и исполнения
Файлы проверяются до рабочего хранения и исполнения

Прокси не видит текст письма. Он не оценивает отправителя сообщения. Он также не знает, кто именно нажимает ссылку на личном устройстве.

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

Даже в таком случае одного прокси недостаточно. Нужны шлюз электронной почты, DNS-фильтрация, песочница и защита конечных устройств. Каждый слой видит собственную часть атаки.

Веб-шлюз контролирует доступ сотрудников наружу. Шлюз почты проверяет письма и вложения. Песочница открывает подозрительный объект в изолированной среде. Защита устройства замечает запуск вредоносного файла.

Не называйте обратный прокси универсальным антифишингом. Такое название создаёт опасное чувство безопасности. Правильнее считать его фильтром опубликованных веб-сервисов.

Прямо сейчас проверьте, кто отвечает за почту, DNS, веб-доступ и конечные устройства. У каждой зоны должен быть отдельный набор правил и журналов.

🔒 Завершение TLS и проверка маршрута

Прокси часто завершает TLS на внешнем контуре. Дальше он передаёт запрос приложению по внутреннему соединению. Такой переход требует ясной схемы доверия.

Зрелая защита требует тестов, журналов и ответственности
Зрелая защита требует тестов, журналов и ответственности

Приложение должно понимать, использовал ли клиент HTTPS. Для этого прокси передаёт согласованный заголовок. Приложение принимает его только от доверенного прокси.

Проверьте имя узла через заголовок Host. Сервер не должен обслуживать неизвестное имя по умолчанию. Иначе злоумышленник получает лишний маршрут к тому же приложению.

Проверьте также перенаправления. Приложение не должно отправлять пользователя на произвольный внешний адрес. Особое внимание нужно уделить параметрам return, next, redirect и аналогичным полям.

Открытая цепочка перенаправлений помогает маскировать конечный сайт. Она также усложняет проверку репутации URL. Система должна видеть весь маршрут, а не только первый адрес.

Доверяйте только своим прокси в заголовках Host и X-Forwarded-*. Запретите неизвестные имена узлов. Ограничьте внешние перенаправления списком разрешённых адресов.

Сейчас отправьте безопасный тест с неизвестным Host. Убедитесь, что сервер не показывает приложение и возвращает отказ.

⚠️ Вредоносные файлы и опасные формы

Форма загрузки расширяет поверхность атаки. Пользователь отправляет файл, а приложение сохраняет его на сервере. Если проверка слабая, файл может стать точкой входа.

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

Прокси может передать файл на проверку через ICAP. В описанном практическом стенде такой протокол связывает прокси с системой анализа содержимого. Основной объект проверки — база файловых угроз, которая регулярно обновляется.

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

Нужно ограничить размер и число файлов. Следует запретить неожиданные архивы и двойные расширения. Имя файла лучше заменять внутренним идентификатором.

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

Сейчас найдите все функции загрузки в приложении. Для каждой укажите допустимые типы, размер, место хранения и действие при ошибке проверки.

🧱 WAF, SSRF и обход правил

Обратный прокси не равен WAF. WAF (межсетевой экран приложений) понимает больше признаков веб-атаки. Он анализирует параметры и типовые опасные конструкции.

Прокси задаёт маршрут и общий контроль. WAF применяет правила к конкретному приложению. Вместе они дают более точную защиту, чем один слой.

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

Нельзя разрешать приложению обращаться к любой внутренней сети. Составьте список нужных внешних сервисов. Запретите обращения к административным адресам и локальным интерфейсам.

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

Контрабанда запросов возникает, когда прокси и приложение по-разному определяют границы сообщения. Поэтому они должны одинаково обрабатывать длину тела и конфликтующие заголовки.

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

📊 Боты, сканирование и репутация

Автоматизированное сканирование часто предшествует атаке. Бот перебирает страницы, методы и параметры. Он ищет уязвимые маршруты и формы загрузки.

Фильтрация оценивает частоту обращений и повторяемость поведения. Аномальный поток отличается от обычных действий людей. Но одно правило по IP быстро даёт ошибки.

Один адрес может скрывать много пользователей. Один пользователь может менять адрес. Поэтому правила дополняют анализом пути, метода, заголовков и последовательности действий.

Репутационный список помогает принять быстрое решение. Однако список не знает всех новых доменов. Чистый адрес также не доказывает добросовестность отправителя.

Нужны разные действия для разных сигналов. Явно опасный запрос блокируется. Неизвестный объект отправляется на дополнительную проверку. Сомнительный бот получает ограниченный доступ.

Важна проверка ложных срабатываний. Слишком жёсткое правило блокирует клиентов и ломает API. Слишком мягкое правило пропускает сканирование.

Не стройте защиту только на репутации IP или домена. Сочетайте репутацию с поведением, маршрутом, методом и содержимым запроса.

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

🧪 Как тестировать фильтрацию безопасно

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

Сначала проверяют прямой доступ к приложению. Затем повторяют тот же сценарий через прокси. Сравнение показывает, какое действие добавляет защитный контур.

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

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

Каждый тест получает ожидаемый результат. Например, разрешённый запрос проходит. Запрещённый метод получает отказ. Подозрительный файл не попадает в рабочее хранилище.

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

Сейчас составьте таблицу тестов: сценарий, запрос, ожидаемое решение, фактический результат и запись в журнале.

⚙️ Логи, отказоустойчивость и обновление правил

Фильтрация полезна только при понятной реакции на событие. Прокси должен сообщать, что именно он заблокировал. Одного кода ошибки недостаточно.

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

Централизованный сбор помогает увидеть повторяющуюся атаку. Команда сравнивает события прокси, почты, DNS и конечных устройств. Так она связывает ссылку, переход и попытку загрузки.

Отказоустойчивость требует заранее выбранной политики. При недоступности анализа содержимого система может остановить загрузку. Для критичных страниц допустим только строгий отказ.

Режим пропуска снижает доступность защиты. Его используют только для понятного сценария и короткого времени. Каждый такой случай записывают и разбирают.

Правила регулярно пересматривают. Меняются маршруты, формы, внешние сервисы и типы файлов. Старое исключение может превратиться в дыру.

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

🔐 Безопасность самого прокси

Прокси становится важным узлом. Его компрометация открывает путь к нескольким приложениям. Поэтому управляющий интерфейс нельзя оставлять доступным из интернета.

Административный доступ ограничивают отдельной сетью. Учётные записи получают минимальные права. Все изменения конфигурации попадают в журнал.

Сам прокси не должен доверять внутреннему серверу без проверки. Он проверяет сертификат и имя узла во внутреннем TLS-соединении. Это снижает риск подмены приложения внутри сети.

Компоненты анализа содержимого тоже требуют защиты. XML-парсер отключает внешние сущности и DTD (описания структуры документа). Иначе специально сформированный XML может заставить систему читать внешние ресурсы.

Библиотеки прокси, фильтра и парсера своевременно обновляют. Версию каждого компонента фиксируют в учёте. После обновления повторяют основные тесты.

Нельзя превращать прокси в универсальное место для расшифровки всего трафика. Система должна обрабатывать только нужные протоколы и маршруты. Лишняя инспекция увеличивает сложность и риск ошибки.

Сейчас проверьте доступ к панели управления и список доверенных узлов. Удалите неиспользуемые учётные записи и старые сертификаты.

✅ Практический чек-лист внедрения

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

  • Поставьте обратный прокси перед каждым опубликованным приложением.
  • Запретите неизвестные значения Host и лишние виртуальные узлы.
  • Очистите внешние X-Forwarded-* и добавляйте их только на доверенном контуре.
  • Ограничьте методы HTTP для каждого маршрута.
  • Проверьте цепочки перенаправлений и внешние ссылки.
  • Разделите сетевую проверку, анализ запроса, URL и содержимое.
  • Проверяйте файлы до записи в рабочее хранилище.
  • Запретите исполнение загруженных объектов.
  • Ограничьте исходящие запросы приложения для защиты от SSRF.
  • Подключите почтовый шлюз, DNS-фильтр, песочницу и защиту устройств.
  • Собирайте события прокси и приложения в единую систему мониторинга.
  • Регулярно обновляйте базы угроз, правила и библиотеки.

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

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

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

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

Сейчас проведите короткую проверку по чек-листу. Для каждого пункта зафиксируйте статус, владельца и следующий шаг.

📚 Читайте также

📖 Термины

TLS · WAF · Автоматизированное сканирование · Сетевой трафик · Фишинг

🔗 Источники