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

good-penguin.png

Опубликована 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. интерактивное управление проверкой сертификатов удалёных сайтов и списками блокировок

>>> Подробности

©  Linux.org.ru