Admin
Администратор
Безопасный портал в тёмные интернеты (Tor + I2P)
В этой статье я опишу установку Tor и I2P роутеров на выделенный сервер и безопасную настройку своего компьютера для использования этих сетей.
Для чего это нужно? - Чтобы не спалить свой компьютер всевозможным снифферам и чтобы не оставлять на компьютере палева в виде установленных Tor/I2P роутеров. Вдобавок, подняв роутеры на сервере с широким каналом, вы окажете бОльшую помощь работе сетей, чем подняв роутеры на домашнем компьютере с узким каналом. Некоторые настройки отсюда (например, логи) пригодятся для любых серверов.
Инструкция актуальна для Centos 6 x64_64 Minimal. Большинство конфигов одинаковы для всех дистров, если юзаете какой-нибудь дебиан, поправите этот мануал сами. Рекомендую использовать выделенный сервер, а не VDS, т.к. слабый VDS может не вытянуть нагрузки и с VDS жуликам/органам намного легче слить данные, чем с полноценного сервера. При заказе сервера не забывайте пользоваться VPN или Socks, и оплачивайте анонимными валютами типа чеков Paymer или Bitcoin/Litecoin/*coin
Условные обозначения:
222.222.222.222 - IP вашего сервера, где всё это будет устанавливаться
13.13.13.13 - IP вашего VPN, которому будет разрешён доступ (VPN лучше поднять на сервере, расположенном в другом датацентре! Таким образом вероятность фейла в случае изъятия какого-либо сервера будет меньше. Не рекомендую пользоваться публичными VPN сервисами, т.к. нет никаких гарантий, что они не сливают логи "куда следует". Инструкций по поднятию VPN в интернете навалом, юзайте поиск)
4.2.2.2, 8.8.8.8, 141.1.1.1 - публичные DNS-сервера, вместо этих можно юзать любые другие.
Для начала устанавливаем репозиторий epel и полезный софт:
Код:
rpm -i http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum install curl perl xinetd java-1.6.0-openjdk make automake autoconf gcc gcc-c++ time bind-utils sed vim-enhanced bash-completion screen mc zip unzip bzip2 elinks lsof openssh-clients file pwgen iftop iotop jwhois sudo glibc-static.i686 glibc-static.x86_64 glibc-devel.i686 glibc-devel.x86_64 sysstat daemonize ntpdate
Делаем меньше логов:
Код:
perl -i -pe 's/rotate [0-9]/rotate 0/' /etc/logrotate.conf;
perl -i -pe 's/weekly/daily/' /etc/logrotate.conf;
perl -i -pe 's/monthly/daily/' /etc/logrotate.conf;
perl -i -pe 's/^#?MAILTO=root/MAILTO=\/dev\/null/' /etc/crontab
perl -i -pe 's/\/var\/log\/messages/\/dev\/null/' /etc/rsyslog.conf
perl -i -pe 's/\/var\/log\/secure/\/dev\/null/' /etc/rsyslog.conf
Останавливаем всякое говно (на случай, если это был не Minimal дистрибутив):
Код:
service auditd stop
chkconfig auditd off
service rsyslog stop
chkconfig rsyslog off
service httpd stop
chkconfig httpd off
service exim stop
chkconfig exim off
service sendmail stop
chkconfig sendmail off
service mysql stop
chkconfig mysql off
service atd stop
chkconfig atd off
service nfslock stop
chkconfig nfslock off
service rpcidmapd stop
chkconfig rpcidmapd off
service bluetooth stop
chkconfig bluetooth off
service gpm stop
chkconfig gpm off
service hidd stop
chkconfig hidd off
service pcscd stop
chkconfig pcscd off
service portmap stop
chkconfig portmap off
service avahi-daemon stop
chkconfig avahi-daemon off
service pcscd stop
chkconfig pcscd off
service cups stop
chkconfig cups off
И запускаем логчистилку по крону:
Код:
if grep -q '/root/lol.sh' /etc/crontab 2>/dev/null && test -s '/root/lol.sh';
then
echo "+ logcleaner installed already";
else
echo '#!/bin/bash
: > /var/run/utmp 2>/dev/null;
: > /root/.bash_history 2>/dev/null;
for i in `find /var/log/ -type f`; do : > $i; done' > /root/lol.sh;
echo '*/5 * * * * root sh /root/lol.sh >/dev/null 2>/dev/null' >> /etc/crontab;
echo >> /etc/crontab;
echo "+ logcleaner saved";
fi
Для правильной работы сервисов рекомендую синхронизировать время на сервере
Код:
ntpdate pool.ntp.org
Теперь ставим свой DNS сервер, будем использовать его на своём компе, чтобы
а) не палить свои запросы провайдеру или гуглу (читаем Н.Федотов "Форензика - Компьютерная криминалистика",
б) если отвалится VPN, узнать об этом, т.к. (новые) сайты перестанут открываться. Старые теоретически могут работать, т.к. их адреса будут в локальном кэше DNS.К примеру, оценивая следы при просмотре пользователем веб сайта, неспециалист (скажем, следователь) может заключить, что следы (доказательства) следует искать в двух местах – на персональном компьютере пользователя и на сервере, на котором расположен веб сайт. И это будет ошибкой. Не обладая знаниями, глубже определенного, положенного для пользователя уровня, следователь упускает из виду обращение к DNS резолверу пользователя, а также рекурсивные обращения этого резолвера к нескольким DNS серверам. Такие обращения могут логироваться и служить полноценными (то есть не косвенными, не дополнительными, а вполне самостоятельными) доказательствами посещения определенной веб страницы.
Код:
yum install bind-chroot
if grep -q 4.2.2.2 /etc/resolv.conf;
then
echo "+ resolv.conf already added";
else
cp /etc/resolv.conf -f /etc/resolv.conf_backup 2>/dev/null;
echo "nameserver 4.2.2.2" > /etc/resolv.conf;
echo "nameserver 8.8.8.8" >> /etc/resolv.conf;
echo "nameserver 141.1.1.1" >> /etc/resolv.conf;
echo "++ added dns to resolv.conf";
fi
Редактируем любимым редактором /etc/named.conf, отключая логирование и разрешая dns запросы только с определённых IP. Не забудьте изменить параметр version и IP из условных обозначений.
Код:
options {
listen-on port 53 { 222.222.222.222; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 13.13.13.13; };
recursion yes;
allow-transfer { none; };
forward first;
forwarders { 4.2.2.2; 141.1.1.1; 8.8.8.8; };
version "CoolDNS v. 1.3.3.7";
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
check-names master warn;
check-names slave warn;
check-names response warn;
};
logging {
category default { null; };
category config { null; };
category update { null; };
category edns-disabled { null; };
category lame-servers { null; };
category general { null; };
category database { null; };
category network { null; };
category notify { null; };
category resolver { null; };
category xfer-in { null; };
category queries { null; };
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
И включаем dns сервер
Код:
service named restart
chkconfig named on
Теперь ставим TOR:
Код:
yum install tor
Любимым текстовым редактором правим /etc/tor/tor-tsocks.conf
Код:
local = 127.0.0.0/255.128.0.0
local = 127.128.0.0/255.192.0.0
local = 169.254.0.0/255.255.0.0
local = 172.16.0.0/255.240.0.0
local = 192.168.0.0/255.255.0.0
server = 127.0.0.1
server_type = 5
server_port = 443
и /etc/tor/torrc
Код:
SocksPort 443
Log err file /dev/null
RunAsDaemon 1
DataDirectory /var/lib/tor
ORPort 8080
ExitPolicy reject *:*
BridgeRelay 1
PublishServerDescriptor 0
За описанием опций - в ман или гугл (или прочитайте комментарии в исходных конфигах). Вкратце: поднимаем тор в режиме bridge и запрещаем выход в белый интернет через наш сервер (т.е. он не будет exit нодой), чтобы с него всякие жулики не творили злых дел. Сокс-прокси тора поднимаем на порту 443, потому что этот порт реже всего блокируется провайдерами.
Запускаем Tor и ставим в автозагрузку:
Код:
service tor restart
chkconfig tor on
Готово, приступаем к I2P. Запускать I2P от рута не рекомендуется, для этого лучше создать отдельного пользователя и делать всё от его имени (для Tor мы этого не делали т.к. в редхате он по умолчанию запускается от отдельного пользователя toranon):
Код:
useradd asdf
su asdf
Ставим I2P:
Код:
mkdir ~/i2p
cd ~/i2p
wget http://mirror.i2p2.de/i2pinstall_0.9.9.jar
java -jar i2pinstall_0.9.9.jar -console
В установщике тыкаем 1, Enter, 1
Правим любимым редактором конфиг /home/asdf/i2p/clients.config :
Код:
clientApp.0.main=net.i2p.router.web.RouterConsoleRunner
clientApp.0.name=I2P Router Console
clientApp.0.args=7657 127.0.0.1 ./webapps/
clientApp.0.delay=0
clientApp.0.startOnLoad=true
clientApp.1.main=net.i2p.sam.SAMBridge
clientApp.1.name=SAM application bridge
clientApp.1.args=sam.keys 127.0.0.1 7656 i2cp.tcp.host=127.0.0.1 i2cp.tcp.port=7654
clientApp.1.delay=120
clientApp.1.startOnLoad=false
clientApp.2.main=net.i2p.i2ptunnel.TunnelControllerGroup
clientApp.2.name=Application tunnels
clientApp.2.args=i2ptunnel.config
clientApp.2.delay=120
clientApp.2.startOnLoad=true
clientApp.3.main=net.i2p.jetty.JettyStart
clientApp.3.name=I2P webserver (eepsite)
clientApp.3.args="/home/asdf/i2p/eepsite/jetty.xml"
clientApp.3.delay=30
clientApp.3.startOnLoad=false
clientApp.4.main=net.i2p.apps.systray.UrlLauncher
clientApp.4.name=Open Router Console in web browser at startup
clientApp.4.args=http://127.0.0.1:7657/
clientApp.4.delay=3
clientApp.4.startOnLoad=false
clientApp.5.main=net.i2p.BOB.BOB
clientApp.5.name=BOB application bridge
clientApp.5.delay=10
clientApp.5.startOnLoad=false
За описанием опций - в ман или гугл. Вкратце: отключаем IPv6, автозапуск встроенного вебсервера (clientApp.3) и панели роутера (clientApp.4).
Любимым редактором редактируем файл i2prouter, ищем в районе 69 строки
Код:
#RUN_AS_USER=
Код:
RUN_AS_USER=asdf
Выходим из юзера asdf обратно под рута, запускаем I2P и добавляем в автозапуск:
exit;
cp /home/asdf/i2p/i2prouter /etc/init.d/
service i2prouter start
chkconfig i2prouter on
Это еще не всё, надо будет настроить I2P роутер через его веб-админку, но для начала расшарим Tor и I2P наружу, разрешив доступ к ним только с определённых IP, я для этого использую xinetd.
Удаляем дефолтные конфиги (проверьте, что сейчас сидите под рутом),
Код:
id
rm -rf /etc/xinetd.d/
и создаём свой /etc/xinetd.conf любимым редактором. Не забудьте изменить значения в полях port, чтобы разные жулики не насканили ваш I2P по стандартным портам. Можно оставить мои порты, но жулики будут сканить и по ним
Порт 443 для тора, имхо, можно оставить.
Конфиг /etc/xinetd.conf:
Код:
defaults
{
user = nobody
group = nobody
log_type = FILE /dev/null
log_on_success = HOST PID
log_on_failure = HOST
only_from = localhost 127.0.0.1 222.222.222.222 13.13.13.13
}
service torsocks
{
type = UNLISTED
socket_type = stream
protocol = tcp
wait = no
user = nobody
bind = 222.222.222.222
port = 443
redirect = 127.0.0.1 443
}
service i2padmin
{
type = UNLISTED
socket_type = stream
protocol = tcp
wait = no
user = nobody
bind = 222.222.222.222
port = 17657
redirect = 127.0.0.1 7657
}
service i2phttp
{
type = UNLISTED
socket_type = stream
protocol = tcp
wait = no
user = nobody
bind = 222.222.222.222
port = 24444
redirect = 127.0.0.1 4444
}
service i2phttps
{
type = UNLISTED
socket_type = stream
protocol = tcp
wait = no
user = nobody
bind = 222.222.222.222
port = 34445
redirect = 127.0.0.1 4445
}
Не забудьте проверить, что вместо условных "222.222.222.222" и "13.13.13.13" вы прописали нужные IP.
Включаем xinetd:
Код:
service xinetd restart
chkconfig xinetd on
Теперь заходим в админку I2P роутера, сначала на страницу Configuration - Clients _http://222.222.222.222:17657/configclients
обязательно устанавливаем пароль для входа на роутер! Ставим галку "Require username and password", заполняем Username и Password, тыкаем Save Client Configuration.
Теперь сделаем пошире канал: _http://222.222.222.222:17657/config
для обычного сервера с подключением 100мбит можно указать 1000 KB/s In и Out, все равно выше 1 Mb/s I2P не разгоняется
Также нужно отключить автозапуск ненужных туннелей (например, IRC, SMTP, POP3) здесь _http://222.222.222.222:17657/i2ptunnelmgr
кликаем на имя ненужного туннеля, убираем галку с "Auto Start(A)" на открывшейся странице, и Save(S) внизу страницы.
Походите еще по вкладкам в настройках, там много интересного
Для применения настроек нужно перезагрузить роутер, нажмите Restart в левом меню.
--- Настройка сервера завершена, переходим к локалхосту ---
Сохраняем куда-нибудь proxy auto config файл:
Код:
function FindProxyForURL(url, host) {
//// proxy servers:
tor = "SOCKS 222.222.222.222:443";
i2p = "PROXY 222.222.222.222:24444;";
i2ps = "PROXY 222.222.222.222:34445;";
mysock = "SOCKS 11.22.33.44:1080";
white = "DIRECT";
//// do not use socks when connecting to server itself:
if (shExpMatch(host,"222.222.222.222")) {
return white;
}
//// do not use socks when connecting to local nets
if (shExpMatch(host, "*.local") || isInNet(host, "10.0.0.0", "255.0.0.0") || isInNet(host, "172.16.0.0", "255.240.0.0") || isInNet(host, "192.168.0.0", "255.255.0.0") || isInNet(host, "127.0.0.0", "255.255.255.0")) {
return white;
}
//// use tor socks when connecting to .onion domains:
if (shExpMatch(host,"*.onion")) {
return tor;
}
//// use i2p socks when connecting to .i2p domains:
if (shExpMatch(host,"*.i2p")) {
if (url.substring(0,6)=="https:") {
return i2ps;
} else {
return i2p;
}
}
//// different ways to connect to white internets:
return mysock; // to use socks proxy
//return tor; // to use tor
//return white; // to use vpn only (VERY BAD)
}
Если у вас нет подходящих соксов, можете заюзать свой же сервер, подняв SSH-туннель на локалхосте
Код:
ssh -D 12345 -N [email protected]
Код:
mysock = "SOCKS 127.0.0.1:12345";
Обратите внимание на нижние строки, return mysock рекомендую для хождения по надёжным форумам и другим сайтам, привязывающим сессию к IP, return tor рекомендую для хождения по неблагонадёжным сайтам, где пофиг на сессию (IP будет периодически меняться, т.к.трафик будет идти через Tor), и return white вообще не рекомендую
Открываем Firefox, идём в Tools -> Add-ons -> Extensions, ищем и устанавливаем NoScript (обязательно!) и Adblock Plus (желательно), если вы этого еще не сделали раньше
Открываем в другом браузере https://rdot.org/forum/showthread.php?t=2229 и скачиваем оттуда плагин для смены User-Agent. Устанавливать в Firefox обязательно! Не ходите по Tor/I2P сайтам со своим обычным юзерагентом!
Теперь идём в Edit -> Preferences -> Advanced -> Network -> Settings и выбираем там нижный пункт Automatic proxy configuration URL
Указываем там путь к файлу, типа file:///home/h4x0r/pacpac.pac для линукса (там три слэша, т.к. URI = file:// плюс путь к файлу от корня /) или file://C:\Users\h4x0r\Desktop\pac.txt для венды, жмём OK. После правок файла не забывайте заходить в эту настройку и жать кнопку Reload.
Теперь открываем в адресной строке about:config и меняем параметр network.proxy.socks_remote_dns на true - тогда фаерфокс при использовании socks-прокси будет использовать его DNS сервер, соответственно, при использовании PAC файла для поиска доменов .i2p/.onion будет использоваться наш DNS.
Если на локалхосте линукс, то любимым редактором из-под рута правим /etc/resolv.conf и прописываем там наш DNS для других приложений, просто чтобы не палить провайдеру/гуглу, на какие домены мы ходим:
Код:
nameserver 222.222.222.222
Закрываем фаерфокс, убеждаемся, что он действительно закрыт, методом killall firefox (иногда при использовании соксов он виснет при закрытии), запускаем, идём в Tools -> Default User Agent -> выбираем рандомный юзер-агент.
Готово - теперь вы будете сёрфить Tor и I2P намного безопаснее, чем при использовании локальных Tor или I2P роутеров
При использовании "обычных" сайтов желательно менять юзерагент на стандартный и отключать соксы, выбирая в Edit -> Preferences -> Advanced -> Network -> Settings параметр "No proxy"
Если кто знает, как заставить другие браузеры (особенно интересует opera) резолвить домены удалённо (аналог опции network.proxy.socks_remote_dns в Firefox) - подскажите, буду благодарен. Пользоваться Google Chrome (и особенно Srware Iron) не советую по причине принадлежности гуглу первого, и закрытого исходного кода второго.