...

среда, 28 января 2015 г.

[Из песочницы] Прокси сервер для свободного интернета

Однажды мне окончательно надоели странички вроде «данный ресурс заблокирован по требованию», которые стали попадаться все чаще и чаще. А еще все больше стало упоминаний про «глубинный интернет», i2p, tor, onion, анонимные p2p сети и вообще повеяло хакерской романтикой детства, когда интернет был чем-то загадочным и был доступен только с двух часов ночи со скоростью 31200…

В общем, была поставлена цель: сделать прокси сервер, через который можно заходить на любые сайты (включая сайты в доменах .i2p и .onion) в обход любых блокировок. Цель обеспечения анонимности не ставилась.


Ужа с ежом удалось скрестить, и вот теперь я, как и 17 лет назад, исследую глубинные слои интернета. Кстати, если говорить про i2p, то скорость по ощущениям не намного больше, чем у интернета 17 лет назад. История циклична.


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


Как это работает:


Основным прокси сервером явлется squid.

Через cache_peer (вышестоящий прокси) squid подключается к i2p и tor. tor является Socks прокси, а squid — http прокси, поэтому между squid и tor встраивается прослойка privoxy.

Также мы имеем обновляемый ACL список всех заблокированных ресурсов в русском интернете.

Squid обрабатывает запросы от браузеров следующим образом:

Если запрашивается URL в домене .i2p, то запрос передается по цепочке в i2p.

Если запрашивается URL в домене .onion, то запрос передается по цепочке в tor.

Если запрашивается запрещенный URL, то запрос передается по цепочке в tor.

Все остальные запросы отправляются напрямую самим squid.


Инструкция как сделать интернет без ограничений своими руками:



В качестве ОС использовалась FreeBSD 10. При наличии рук можно то же самое реализовать на любой *NIX системе

ПО: Squid, tor, i2p, git (не обязательно).

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

В системе только один сетевой интерфейс с ip адресом 192.168.33.192


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


Ставим программы из портов

Установленные порты до начала установки:

compat6x-amd64-6.4.604000.200810_3 Convenience package to install the compat6x libraries

dialog4ports-0.1.5_2 Console Interface to configure ports

perl5.16-5.16.3_18 Practical Extraction and Report Language

pkg-1.4.4 Package manager

portmaster-3.17.7 Manage your ports without external databases or languages


Установка, для всех портов все опции по умолчанию. Возможно потребуется вручную скачать дистрибутив java. Также желающие могут поставить через pkg install.



root@freedom_proxy:~ # portmaster -D www/squid
root@freedom_proxy:~ # portmaster -D security/tor
root@freedom_proxy:~ # portmaster -D security/i2p
root@freedom_proxy:~ # portmaster -D www/privoxy




Если будем использовать GIT, то в дополнение ставим:

root@freedom_proxy:~ # portmaster -D textproc/xmlcatmgr
root@freedom_proxy:~ # portmaster -D devel/git




Получаем установленные версии программ:

squid-3.4.10_2

tor-0.2.5.10_1

i2p-0.9.16

privoxy-3.0.22

В файл /etc/rc.conf прописываем:



i2p_enable="YES"
i2p_user="i2p"
squid_enable="YES"
tor_enable="YES"
privoxy_enable="YES"




Настраиваем i2p:

Создаем пользователя i2p:

root@freedom_proxy:~ # adduser
Username: i2p
Full name: i2p
Uid (Leave empty for default):
Login group [i2p]:
Login group is i2p. Invite i2p into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/i2p]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]: yes
Lock out the account after creation? [no]:




Становимся пользователем i2p и делаем первичную настройку:

root@freedom_proxy:~ # su - i2p
$ /usr/local/sbin/i2prouter install
$ exit




В FreeBSD 10 i2p правильно не заработает, выдаст ошибку “The current version of the Tanuki wrapper does not support FreeBSD 10”, поэтому в файле /usr/local/etc/rc.d/i2p

меняем строчку

command="/usr/local/sbin/i2prouter"




на строчку

command="/home/i2p/i2p/runplain.sh"




а в файле /home/i2p/i2p/runplain.sh

меняем строчку

I2PTEMP="%SYSTEM_java_io_tmpdir"




на

I2PTEMP="/tmp"




Запускаем i2p:

root@freedom_proxy:~ # /usr/local/etc/rc.d/i2p start




Проверяем, что процесс запустился, в списке процессов должна присутствовать java:

root@freedom_proxy:~ # ps -au | grep java
i2p 26809 3.0 3.3 1255096 139080 0 S 1:15PM 0:10.15 /usr/local/openjdk7/bin/java




в файл /etc/hosts прописываем

127.0.0.1 localhost localhost.my.domain i2pconsole




Эта строчка нужна для доступа к консоли управления i2p из браузера.

Настраиваем TOR

в файле /usr/local/etc/tor/torrc раскомментируем строчку



RunAsDaemon 1




Создадим недостающие каталоги и запустим tor:

root@freedom_proxy:~ # touch /var/log/tor
root@freedom_proxy:~ # chmod 666 /var/log/tor
root@freedom_proxy:~ # mkdir /var/run/tor/
root@freedom_proxy:~ # /usr/local/etc/rc.d/tor start




Настраиваем Privoxy

privoxy нам нужен в качестве моста между Squid и Tor

в файле /usr/local/etc/privoxy/config

меняем

listen-address 127.0.0.1:8118




на

listen-address 192.168.33.192:8118




Эта замена необходима для squid. squid привязывает cache-peer к ip адресу и не может иметь больше одного cache-peer на адресе 127.0.0.1

Затем находим фрагмент с примерами forward и добавляем строку



forward-socks4a / 127.0.0.1:9050 .




Точка в конце строки обязательна!

Запускаем privoxy:



root@freedom_proxy:~ # /usr/local/etc/rc.d/privoxy start




Настраиваем Squid

В начало файла /usr/local/etc/squid/squid.conf прописываем строки:

acl russia_block_urls url_regex "/usr/local/etc/squid/zapret-urls.txt"
acl i2p_urls url_regex -i .*://.*\.i2p\/.*
acl onion_urls url_regex -i .*://.*\.onion\/.*

cache_peer 127.0.0.1 parent 4444 4444 no-digest allow-miss no-query
cache_peer_access 127.0.0.1 allow i2p_urls

cache_peer 192.168.33.192 parent 8118 8118 no-digest allow-miss no-query
cache_peer_access 192.168.33.192 allow onion_urls
cache_peer_access 192.168.33.192 allow russia_block_urls

never_direct allow onion_urls
never_direct allow i2p_urls
never_direct allow russia_block_urls
never_direct deny all
always_direct deny onion_urls
always_direct deny i2p_urls
always_direct deny russia_block_urls
always_direct allow all




Создаем пустой файл /usr/local/etc/squid/zapret-urls.txt

root@freedom_proxy:~ # touch /usr/local/etc/squid/zapret-urls.txt




Запускаем squid.

root@freedom_proxy:~ # /usr/local/etc/rc.d/squid start




Настраиваем закачку списка запрещенных URL

Будем использовать в качестве источника сайт https://antizapret.info, а вернее регулярно обновляемый csv список, доступный через git-hub http://ift.tt/1DgME4s

Вариант с использованием git

root@freedom_proxy:~ # mkdir /root/zapret-info

Создаем файл /root/zapret-info/getzapretinfo.sh



#!/bin/sh
cd /root/zapret-info/zapret-info
rm -rf z-i
/usr/local/bin/git clone http://ift.tt/1CyKxKL
cat z-i/dump.csv | sed 1d | cut -d ';' -f 3 | tr "\|" "\n" |sed 's/^[ \t]*//;s/[ \t]*$//' |uniq > /usr/local/etc/squid/zapret-urls.txt




Делаем файл исполняемым:

root@freedom_proxy:~ # chmod +x /root/zapret-info/getzapretinfo.sh




Вариант без git и временных файлов:

fetch -o - http://ift.tt/1DgMFW4 | sed 1d | cut -d ';' -f 3 | tr "\|" "\n" |sed 's/^[ \t]*//;s/[ \t]*$//' |uniq > /usr/local/etc/squid/zapret-urls.txt




В обоих вариантах мы получаем из интернета файл dump.csv, затем производим с ним действия:

“sed 1d” — отрезаем первую строку

“cut -d ';' -f 3“ — вырезаем все, кроме третьей колонки.

tr "\|" "\n" — заменяем символ | на символ переноса строки

sed 's/^[ \t]*//;s/[ \t]*$//' — обрезаем пробелы и табуляцию

uniq — удаляем дублирующиеся строки.

Результат записываем в /usr/local/etc/squid/zapret-urls.txt

в crontab прописываем резулярное обновление файла:



1 2 * * * root fetch -o - http://ift.tt/1DgMFW4 | sed 1d | cut -d ';' -f 3 | tr "\|" "\n" |sed 's/^[ \t]*//;s/[ \t]*$//' |uniq > /usr/local/etc/squid/zapret-urls.txt


Проверяем работу прокси:

В любимом браузере прописываем прокси сервер 192.168.33.192 порт 3128 и начинаем проверять.


Заходим на адрес http://hideme.ru/ip/ и смотрим что указано в пункте прокси, должно быть что-то вроде “Вы используете прокси-сервер 1.1 localhost (squid/3.4.10) и ваш настоящий IP: XX.XX.XX.XX”

Squid работает.


Теперь проверяем работу TOR.

Заходим на сайт http://ift.tt/1f8V8iy или гуглим адрес на котором сейчас живет hidden wiki и затем пытаемся зайти по любой из ссылок .onion, например http://ift.tt/LgwySj — это поисковая система.

http://ift.tt/1iJRX3q — нецензурированный каталог onion сайтов c преферансомъ и куртизанками.

Если все настроено правильно, мы увидим искомую страницу.

Если прокси выдал ошибку “Соединение с 192.168.33.192 не удалось” — у нас не запущен privoxy, либо некорректно настроена связка squid — privoxy.

Если мы видим ошибку 503 от privoxy (Privoxy was unable to socks4a-forward your request ), то возможны два варианта: мы ввели адрес несуществующего сервера, либо проблемы с tor. Для точной диагностики рекомендуется проверить десяток onion ссылок. Если ни одна на работает — внимательно читаем файл ошибок tor.


Проверяем работу i2p:

Заходим по адресу http://i2pconsole:7657/home

Слева под логотипом i2p указан статус сети. Если статус OK или Firewalled — можно работать. Статус Testing держится некоторое время после запуска i2p.


Cмотрим внизу список рекомендуемых сайтов в разделе Eepsites of Interest.

Пробуем зайти по ссылкам:

http://plugins.i2p/

http://anoncoin.i2p/


Для настройки i2p заходим на адрес http://i2pconsole:7657/console


Финальным этапом тестирования проверяем обход блокировок:

идем на сайт http://ift.tt/1DgMH00, смотрим список запрещенных ресурсов и пытаемся зайти на несколько выборочных. Страницы должны грузиться без каких-либо проблем.


Ура! Теперь интернет стал больше!


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий