21.02.2024

fproxy v83 — локальный прокси-сервер для фильтрации http(s)-трафика

Опубликована 83-я версия кэширующего и антиспамного прокси-сервера для персонального использования c гибкими настройками.

Основные функции (всё настраивается):

  1. фильтрация нежелательного контента (белые/чёрные списки на урлы, запрет кук);
  2. принудительное и бессрочное кеширование полученных данных (в основном удобно для картинок и скриптов);
  3. исправление содержимого веб-страниц на лету (правкой исходника на Си, есть пример для замены содержания страниц-клонов stackoverflow ссылкой на оригинал);
  4. чёрные/белые списки сертификатов и certificate pinning по списку;
  5. подмена айпи-адреса/домена/пути/протокола http-запроса по конфигу (такой расширенный вариант /etc/hosts);
  6. http/https-сниффер.

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

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

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

Пример списка блокировки:

deny nosub all share.yandex.ru browser-updater.yandex.net
deny nosub all a.ria.ru # ?
deny nosub spec vk.com query /share.php
deny nosub spec yastatic.net query /pcode/adfox/loader.js query /share2/share.js
deny nosub spec www.youtube.com query /subscribe_widget
deny nosub spec pano.img.ria.ru query /adriver/flashplagin/movie.swf
deny nosub spec a.ria.ru query /ping
deny nosub spec n-ssl.ria.ru query /polling
deny nosub spec apis.google.com query /js/plusone.js
deny nosub spec yandex.ru pref /clck/safeclick/ pref /clck/click/ pref /clck/jclck/
deny all spec query /tnc # index.ru proxied counter exact /tnc.js # index.ru proxied counter query /pixel.gif # some spammers use this

Пример списка роутинга:

https://my.local.site set proxy none set target http://127.0.0.1:1234/localsite set http_host new.host:1234
.intel.com resolve off set proxy socks5://127.0.0.1:3333

В случае обновления с версии более старой чем 78 следует сконвертировать кеш: зайти в рабочую директорию прокси-сервера от юзера (uid/gid) прокси-сервера и выполнить fproxy-cacheconv-78 (по умолчанию эта программа не компилируется).

Изменения с прошлой опублированной версии (80):

  1. fproxy-dashboard теперь имеет опцию для показа размеров контента в байтах а не кбайтах;
  2. поддержка багнутых серверов, игнорирующих заголовок «Connection: close»;
  3. поддержка багнутых серверов, отдающих некорректный заголовок «Content-Encoding: identity»;
  4. отправка TLS-опции ALPN;
  5. улучшение работы TLS-терминатора внешней стороны (клиента): он теперь поддерживает не только TLS, но и обычные соединения,
    поддерживает работу в виде независимого демона с приёмом запросов от основного прокси по сети, а также может пробрасывать свои
    исходящие соединения через другое прокси, таким образом позволяя гибко разделять задачи между узлами в условиях плохого
    интернет-соединения и/или необходимости организовать «выход» трафика где-то на удалённом сервере разной степени доверенности;
    так же новая версия более удобна для использования вручную из командной строки в качестве консольного TLS-клиента с поддержкой
    проксирования;
  6. упрощена сборка, теперь есть Makefile вместо шелл-скриптов
  7. организованы предсобранные .deb-пакеты в репозитории (для версий Debian 8-12)
  8. изменения файла конфигурации, обратно-несовместимые
  9. новый конфиг для управления роутингом запросов, объединивший ранее бывшие отдельными конфиги resolv и включения проброса
    исходящих соединений на удалённый сервер, а так же получивший ряд новых опций: теперь можно для каждого url-а (протокол,
    домен, порт, путь) выбирать через какой клиент, какое прокси он будет отправлен, через чей днс-сервер будет проводиться
    определение его айпи-адреса (включая опциональное делегирование этой задачи внешнему прокси-серверу http или socks5), либо
    прописать адрес вручную, а так же заменить протокол, порт или префикс пути url-а
  10. добавлена поддержка SAN-сертификатов для ip-адресов и в клиенте и в сервере (браузеры с некоторых пор перестали принимать
    ip-адреса в CommonName)

В планах на будущее:

  1. поддержка CGI/FastCGI/.so хуков для mitm-обработки полученного от сайтов контента
  2. менеджер профилей и конфигураций прокси
  3. интерактивное управление проверкой сертификатов удалёных сайтов и списками блокировок

 , , ,

Источник.