Проксі сервер для вільного інтернету

Одного разу мені остаточно набридли сторінки кшталт «даний ресурс заблоковано на вимогу», які стали траплятися все частіше і частіше. А ще все більше стало згадок про «глибинний інтернет», 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="ТАК"
i2p_user="i2p"
squid_enable="ТАК"
tor_enable="ТАК"
privoxy_enable="ТАК"

Налаштовуємо 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 after the account 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/start tor

Налаштовуємо 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 .*://.*\.лук\/.*

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.ua/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/Головна_сторінка — нецензурированный каталог 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 або Фаєрволом — можна працювати. Статус Testing тримається деякий час після запуску i2p.

Дивимося внизу список рекомендованих сайтів в розділі Eepsites of Interest.
Пробуємо зайти за посиланням:
http://plugins.i2p/
http://anoncoin.i2p/

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

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

Ура! Тепер інтернет став більше!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.