Как стать автором
Обновить

Прокси сервер для свободного интернета

Время на прочтение6 мин
Количество просмотров119K
Однажды мне окончательно надоели странички вроде «данный ресурс заблокирован по требованию», которые стали попадаться все чаще и чаще. А еще все больше стало упоминаний про «глубинный интернет», 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 https://github.com/zapret-info/z-i

Вариант с использованием 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 https://github.com/zapret-info/z-i.git
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 - https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv | 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 - https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv | 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://thehiddenwiki.org или гуглим адрес на котором сейчас живет hidden wiki и затем пытаемся зайти по любой из ссылок .onion, например http://3g2upl4pq6kufc4m.onion/ — это поисковая система.
http://zqktlwi4fecvo6ri.onion/wiki/index.php/Main_Page — нецензурированный каталог 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

Финальным этапом тестирования проверяем обход блокировок:
идем на сайт https://antizapret.info/, смотрим список запрещенных ресурсов и пытаемся зайти на несколько выборочных. Страницы должны грузиться без каких-либо проблем.

Ура! Теперь интернет стал больше!
Теги:
Хабы:
Всего голосов 31: ↑28 и ↓3+25
Комментарии48

Публикации