Участник:Xlikam/Даркнеты

Материал из Urbanculture
Перейти к: навигация, поиск

Этой статье требуется доработка. Вы можете помочь, исправив и дополнив ее.
Сюда следует добавить: См. TODO.

Тут будет различная информация о сабжах

I2P + Tor[править]

Сеть I2P очень удобна для обеспечения анонимности обмена данными между участниками сети, но только при условии, что все они находятся в ней самой, а не во внешнем интернете. Да, имеются шлюзы для доступа во внешний интернет из I2P, но они имеют множество ограничений и, как правило, работают очень медленно, делая работу во внешнем интернете крайне неудобной. Исправить ситуацию можно посредством связки I2P + Tor. Тогда при выходе за пределы I2P вашу анонимность будет обеспечивать Tor, что гораздо быстрее и удобнее outproxy.

Что для этого необходимо:

  1. Зайти в менеджер туннелей.
  2. В появившемся окне менеджера нажать кнопку создать новый серверный туннель.
  3. Точка доступа: 127.0.0.1. Порт: 8118 (Для HTTP-proxy) или 9050 (прямое обращение к Tor через SOCKS).
  4. Программа connect (пакет connect-proxy в Дебиане и Убунте)
  5. Сохраняем изменения.
  6.  ????
  7. PROFIT!

Скриншоты потом вставлю.

Утилиты командной строки через TOR[править]

Зайти по ssh на обычный сервер:

 ssh -o ProxyCommand='connect -5 -S localhost:9050 %h %p' user@server.com

Зайти по ssh на скрытый сайт:

 ssh -o ProxyCommand='connect -R remote -5 -S localhost:9050 %h %p' user@serverfxnnckztbn.onion

Скачать через TOR:

 curl --socks5 localhost:9050 http://www.fbi.gov/logo.png

Скачать через TOR (с подделкой user agent):

 curl --socks5 localhost:9050 -A "Opera/9.25 (Windows NT 6.0; U; en)" http://www.fbi.gov/logo.png

Зайти на сайт (осторожно, возможна течка DNS, так как там SOCKS4):

 links2 -socks-proxy localhost:9050 http://www.fbi.gov/

Настройка nginx для работы в даркнете[править]

В первую очередь нам понадобится веб-сервер. Я выбрал nginx, так как считаю его наиболее безопасным. Итак, понеслась:

  • Скачиваем исходник последней стабильной версии [1], редактируем файл src/http/ngx_http_header_filter_module.c

Находим строчки:

 static char ngx_http_server_string[] = "Server: nginx" CRLF;
 static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

и меняем их, к примеру, на:

 static char ngx_http_server_string[] = "Server: suckhttpd" CRLF;
 static char ngx_http_server_full_string[] = "Server: suckhttpd/1.0" CRLF;

Разумеется, вместо suckhttpd нужно подставить существующий сервер, желательно с большим количеством уязвимостей (старенький Apache или IIS самое то). Это осложнит определение настоящей версии сервера, взломщики потратят время на проверку сервера на наличие уязвимостей, которых у него может не быть.

  • Собираем сервер, отключив ненужные модули (список всех модулей можно получить, запустив configure c флагом --help):
 # ./configure --without-http_autoindex_module --without-http_ssi_module
 # make
 # make install
  • Конфигурируем сервер
  • Открываем файл /etc/nginx/nginx.conf и добавляем в него строчку «server_tokens off». Это скроет информацию о версии и типе сервера на страницах, отображаемых при ошибочный запросах клиента, что дополнительно повысит его безопасность.

Теперь изменим таймаут для повышения производительности:

 client_body_timeout 10;
 client_header_timeout 10;
 keepalive_timeout 5 5;
 send_timeout 10;

Защитимся от переполнения буфера (ЩИТО?):

 client_body_buffer_size 1K;
 client_header_buffer_size 1k; # увеличить, если сервер будет поддерживать загрузку файлов
 client_max_body_size 1k;
 large_client_header_buffers 2 1k;

Увеличим количество соединений с одного ip-адреса, так как обращаться к серверу будем только с адреса 127.0.0.1:

 limit_conn slimits 40;

На всякий случай оставим только 3 метода обращения к серверу (кому хватит меньше, можно оставить меньше):

 if ($request_method !~ ^(GET|HEAD|POST)$) {
   return 444;
 }

Устанавливаем пароль на нужные нам папки:

 # mkdir /etc/nginx/htpasswd
 # htpasswd -c /etc/nginx/htpasswd/passwd user1 # создаём файл паролей для пользователя user1

Добавляем в nginx.conf

 location /private/ {
   auth_basic "Restricted";
   auth_basic_user_file /etc/nginx/htpasswd/passwd;
 }
  • Скрываем сервер от внешнего интернета. Для этого нужно проследить, чтобы в настройках сайта везде было listen 127.0.0.1:80, а не listen 0.0.0.0:80 или listen 80 (то же самое для порта 443). Можно дополнительно заблокировать порт 80 через iptables (эффект пропадает при перезагрузке):
 iptables -A INPUT -m state --state NEW -p tcp -s 127.0.0.1 --dport 80 -j ACCEPT
 iptables -A INPUT --dport 80 -j REJECT

Этим мы скроем наш сервер от прямых подключений.

  • Перезагружаем сервер:
 /etc/init.d/nginx reload

Шифрование диска[править]

Truecrypt[править]

Для ещё большей паранойи разместим каталог сервера на отдельном разделе диска или даже флешке, шифрованном truecrypt-ом. Скачиваем установщик truecrypta отсюда. Устанавливаем, запускаем, форматируем флешку для работы с truecrypt-ом. Осторожно, при этом находящиеся на флешке данные будут удалены, а не зашифрованы.

  1. Create Volume
  2. Create a volume within a partition/drive
  3. Hidden truecrypt volume
  4. Select drive
  5. Выбираем алгоритм хеширования и шифрования, лучше всего AES и SHA-512
  6. Задаём пароль посложнее или выбираем один или несколько ключевых файлов. Ключевой файл можно сгенерировать или выбрать в качестве такового любой файл или даже папку (в таком случае все находящиеся в ней файлы станут ключевыми).
  7. Жмём Format и начинаем быстро двигать мышкой, чем дольше — тем лучше

После окончания форматирования она будет автоматически смонтирована как /dev/mapper/truecryptX, где X — число от 1 до 50 Монтируем её через Select drive — Mount, правим /etc/fstab, предварительно переместив файлы сервера

 # tar -zxvf se-ngix_1_0_10.tar.gz
 # cd se-ngix_1_0_10/nginx
 # make
 # /usr/sbin/semodule -i nginx.pp

LUKS[править]

todo

PHP[править]

Если вы всё-таки решили использовать на вашем сайте язык PHP, что довольно опасно, то стоит настроить его должным образом. Редактируем файл /etc/php/php.ini

 disable_functions = phpinfo, system, mail, exec # отключение опасных функций
 max_execution_time = 10
 max_input_time = 60
 memory_limit = 8M
 post_max_size = 8M
 upload_max_filesize = 2M
 display_errors = Off
 safe_mode = On
 sql.safe_mode = On
 safe_mode_exec_dir = /secured/ # путь к каталогу, из которого можно выполнять внешние команды
 expose_php = Off
 log_errors = On # логи
 allow_url_fopen = Off

Создаём eepsite[править]

  • Теперь, когда наш сервер достаточно защищён, создаём серверные туннели к http и https.
  • Там же отключаем неиспользуемые туннели, если таковые имеются.
  • Регистрация в DNS.

Заходим на сайт stats.i2p и регистрируемся там.

Создаём onion site[править]

  • Устанавливаем TOR.
  • Убедиться, что «SocksPort 0» (то есть тор работает только как сервер, а не как клиент).
  • Редактируем /etc/tor/torrc: HiddenServiceDir и HiddenServicePort соответствуют папке с ключом к сайту и таблицей соответствия портов. По умолчанию несколько таких записей уже есть, но они закомментированы.
 HiddenServiceDir /var/lib/tor/hidden_service/
 HiddenServicePort 80 127.0.0.1:80
 HiddenServicePort 22 127.0.0.1:22

В этом примере проброшены 80 (HTTP) и 22 (SSH) порты. Для большей безопасности имеет смысл для SSH-сервера выделить отдельный onion site (на том же компьютере), дабы управление сайтом было сложнее соотнести с самим сайтом.

  • Если есть публичный IP-адрес, имеет смысл поднять промежуточную ноду тора, чтобы запутать прослушивающих дополнительным трафиком:
 ORPort 9001
 ExitPolicy reject *:*

Имей в виду, что IP-адрес попадет в публичный список серверов тора. Увеличится или уменьшится при этом риск — решать тебе.

  • Перезапустить тор:
 /etc/init.d/tor reload

Есть программа для создания ключей onion-сайта с именем, заданным шаблоном. Например, для «^lurkmore» может получиться «lurkmore77r3lur3.onion», если немного подождать.

SSL[править]

Для пущей паранойи можно использовать SSL (в принципе, данные так надежно шифруются, что на пути между клиентом и скрытым сайтом их невозможно прочитать или подменить). Но SSL не повредит, от греха подальше.

Создаём сертификат:

 # cd /etc/nginx
 # openssl genrsa -des3 -out server.key 1024
 # openssl req -new -key server.key -out server.csr
 # cp server.key server.key.org
 # openssl rsa -in server.key.org -out server.key
 # openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Пишем в nginx.conf:

 server {
   listen 127.0.0.1:443;
   server_name localhost;
   ssl on;
   ssl_certificate /etc/nginx/server.crt;
   ssl_certificate_key /etc/nginx/server.key;
   access_log /etc/nginx/logs/ssl.access.log;
   error_log /etc/nginx/logs/ssl.error.log;
 }

TODO[править]