Делаем свой friGate с анонимностью и без рекламы

—

от автора

Введение

Всем хороши плагины вроде популярного friGate, но есть у них один минус — любят встраивать свою рекламу и в перспективе следить за всем, что вы делаете в интернете.

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

Туннелирование с использованием ssh, который предоставляет SOCKS-интерфейс при запуске с ключём -D — весьма популярный способ
Он хорош всем, кроме того, что на постоянно засыпающем и просыпающемся ноутбуке туннель приходится каждый раз перезапускать. Есть решения вроде autossh, но настоящего перфекциониста они не удовлетворят.

Попробуем добиться удобства, аналогичного friGate с использованием сервисов, находящихся полностью под нашим контролем.
Нам понадобятся: выделенный сервер с Linux/FreeBSD (я использовал Ubuntu), letsencrypt, squid и немного магии PAC-файлов.

Squid поддерживает шифрованое соединение с браузером — именно то, что нужно для такого случая.


Установка Squid с поддержкой SSL

В Ubuntu squid собран без поддержки нужных нам ключей (—enable-ssl)
Если у вас другой дистрибутив и с этим всё хорошо (проверить можно запуском команды squid3 -v | grep -E —color "(ssl|tls)" ) — сразу переходите к следующему пункту.
А мы соберем для Ubuntu свой собственный пакет (использована эта инструкция):

sudo apt-get install devscripts build-essential fakeroot libssl-dev apt-get source squid3 sudo apt-get build-dep squid3 

применяем следующие патчи:

--- squid3-3.3.8/debian/rules	2013-11-15 11:49:59.052362467 +0100 +++ squid3-3.3.8/debian/rules.new	2013-11-15 11:49:35.412362836 +0100 @@ -19,6 +19,8 @@  DEB_CONFIGURE_EXTRA_FLAGS := --datadir=/usr/share/squid3 \  		--sysconfdir=/etc/squid3 \  		--mandir=/usr/share/man \ +		--enable-ssl \ +		--enable-ssl-crtd \  		--enable-inline \  		--enable-async-io=8 \  		--enable-storeio="ufs,aufs,diskd,rock" \ 

eng

One file in source code of Squid Proxy needs to be adjusted too (src/ssl/gadgets.cc). This change is needed to prevent Firefox error sec_error_inadequate_key_usage that usually occurs when doing HTTPS filtering with latest Firefox browsers. If you use only Google Chrome, Microsoft Internet Explorer or Apple Safari this step is not required.

--- squid3-3.3.8/src/ssl/gadgets.cc	2013-07-13 09:25:14.000000000 -0400 +++ squid3-3.3.8/src/ssl/gadgets.cc.new	2013-11-26 03:25:25.461794704 -0500 @@ -257,7 +257,7 @@  mimicExtensions(Ssl::X509_Pointer & cert, Ssl::X509_Pointer const & mimicCert)  {      static int extensions[]= { -        NID_key_usage, +        //NID_key_usage,          NID_ext_key_usage,          NID_basic_constraints,          0 

Собираем и устанавливаем:

cd squid3-3.3.8 && dpkg-buildpackage -rfakeroot -b sudo apt-get install squid-langpack  sudo dpkg -i ../squid_common*.deb ../squid_*.deb 

Обретение подписанного сертификата с помощью сервиса letsencrypt.org

Скачиваем скрипты:

git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt ./letsencrypt-auto --help 

Т.к. у меня уже был настроен виртуальный хост apache на нужный домен — простое следование инструкции сделало всю магию:

apachectl stop  #Останавливаем уже работающий apache, т.к. следующая команда запустит свой ./letsencrypt-auto --authenticator standalone --installer apache 

В результате получаем ключ и сертификат в каталоге /etc/letsencrypt/live/<наш домен>/

Настройка Squid

Конфиг — дефолтный, добавляем только опцию https_port
https_port 3129 cert=/etc/letsencrypt/live/example.com/fullchain.pem key=/etc/letsencrypt/live/example.com/privkey.pem

По желанию — acl для доступа только с определенных ip или по паролю.
Например
acl mynet src <ваш_внешний_ip>/32
http_access allow mynet

Запускаем squid

sudo /etc/init.d/squid3 start 

Учим браузер шифрованным соединениям с прокси

Как указано в документации Squid, настроить https-соединение с прокси-сервером в Firefox и Chrome с недавних пор можно, но только с использованием PAC-файла.

The Chrome browser is able to connect to proxies over SSL connections if configured to use one in a PAC file or command line switch. GUI configuration appears not to be possible (yet).
…
The Firefox 33.0 browser is able to connect to proxies over SSL connections if configured to use one in a PAC file. GUI configuration appears not to be possible (yet).

PAC (Proxy Auto Configuration) — это файл, содержащий javascript, исполняемый браузером с целью определить прокси для каждого запроса.
Я использовал следующий код:

var hosts = 'myip.ru internet.yandex.ru'; var blocked = hosts.split(' ');  function FindProxyForURL(url, host) {     var shost = host.split('.').reverse();     shost = shost[1] + '.' + shost[0];     for(var i = 0; i < blocked.length; i++)     {         if( shost == blocked[i] ) return "HTTPS <ваш_прокси_FQDN>:3129";     }     return "DIRECT"; } 

Адреса в списке hosts взяты для теста, разбавьте их нужными вам 😉

Подключаем файл в соответствующем поле настроек браузера ( Preferences -> Advanced -> Network -> Settings ), проверяем как теперь выглядит наш внешний адрес на myip.ru, наслаждаемся стабильной работой.
При этом трафик ходит напрямую на все хосты, кроме указанных в массиве blocked.

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

Заключение

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

ссылка на оригинал статьи https://habrahabr.ru/post/280236/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *