Статья Tor на VPS. Руководство по настройке безопасного веб-сервера

Введение

Продолжение моих статей
Пошаговое руководство по настройке безопасного веб-сервера для скрытой службы в сети TOR. Безопасность вашего VPS сервера - это безопасность всех его пользователей.

Требования

Dedicated server или VPS с минимальной установленной версией Debian> = 8.
Оптимальные параметры для комфортной работы: процессор 1 ГГц, оперативная память 512 МБ, жесткий диск 6 ГБ.
Рекомендуемые параметры: двухъядерный процессор> = 2 ГГц, оперативная память> = 1024, жесткий диск SSD 10GB.
Различные типы серверов по привлекательным ценам вы найдете на просторах интернета.

Советы

Это руководство предназначено для настройки веб-сервера в сети Tor, чтобы пользователям была предоставлена базовая защита и чтобы служба не подвергалась атаке или закрытию.

Безопасность VPS сервера - это еще не все. Важно сохранить анонимность администратора и расположение сервера. Анонимность и хорошая конфигурация предоставляют нам достаточную конфиденциальность и следовательно повышают уровень безопасности. При выборе сервера следует обратить внимание на его параметры, местоположение и способность выполнять платеж в валюте Биткойн. Купите биткойны на любом валютном рынке, а затем отмывайте их, используя специальные сервисы.

Подключитесь к своей странице и панели администратора своего сервера с помощью TorBrowser. Лучшее решение - это Whonix или Tails. Подходящим местом для сервера является страна за пределами ЕС или, если у вас нет денег, тогда места с сильным акцентом на информационную безопасность и затрудняющим быстрый доступ к данным.
Вы подключитесь к вашему серверу, используя протокол SSH, поэтому лучшим решением будет Whonix WorkStation + Whonix Gateway.

Никогда не сообщайте свою личность при подключении к серверу и панели администратора. Чтобы купить сервер не давайте истинной информации.
[doublepost=1489070323,1489069639][/doublepost]Вход и базовая конфигурация

В качестве примеров приводятся такие параметры, как порт, имя пользователя, база данных, пароли. Рекомендую, чтобы в вашей конфигурации были введены ваши параметры и придерживайтесь их в течение всей настройки.

Исходные настройки

Первое подключение
Код:
ssh root@ip_address
Изменение пароля root
Код:
passwd
Обновление системы
Код:
apt-get update && apt-get dist-upgrade
Установка основных пакетов
Код:
apt-get install aptitude nano mc htop iftop sudo fail2ban portsentry
Настройка языка
Код:
dpkg-reconfigure locales
выбрать:
en_US.UTF-8 UTF-8

Конфигурация часовых поясов
Код:
dpkg-reconfigure tzdata
выбрать:
None of the above->UTC

Удаление ненужных приложений по умолчанию
Код:
apt-get purge exim4 exim4-base exim4-config mutt procmail
Редактирование репозиториев
Код:
nano /etc/apt/sources.list
Список должен выглядеть примерно так:
Код:
deb http://httpredir.debian.org/debian jessie main
deb-src http://httpredir.debian.org/debian jessie main
deb http://httpredir.debian.org/debian jessie-updates main
deb-src http://httpredir.debian.org/debian jessie-updates main
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
Создание пользователя
Код:
adduser user_name
Добавление пользователя в sudo
Код:
usermod -g sudo user_name
Следующая команда отредактирует список пользователей и их возможности.
Код:
visudo
Найти запись:
Код:
root ALL=(ALL:ALL) ALL
Добавить в:
Код:
user_name ALL=(ALL:ALL) ALL
Смена хоста (необязательно)
Код:
nano /etc/hosts
Motd (необязательно)
Код:
nano /etc/motd
Issue.net (необязательно)
Код:
nano /etc/issue.net
nano /etc/ssh/sshd_config
Issue.net и MOTD не должны содержать подробную информацию о пользователе или сессии!

Удалить # перед строкой:
Banner /etc/issue.net

Отключение входа от root
nano /etc/ssh/sshd_config

Удалите # перед строкой и установите «нет»:
PermitRootLogin no

Изменить порт SSH
nano /etc/ssh/sshd_config

Изменить порт с 22 на 2282
Port 2282

Перезапустить SSH
service sshd restart

Выход и вход
ssh user_name@ip_address -p 2282

Базовая защита сервера

Portsentry
sudo nano /etc/portsentry/portsentry.conf

По умолчанию:
# Use these if you just want to be aware:
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,313
37,32771,32772,32773,32774,40421,49724,54320"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,327
74,31337,54321"

Выше удалите # перед строкой:

# Un-comment these if you are really anal:
TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111,119,138,139,143,512,513,514,515,540,635,1080,1524,20
00,2001,4000,4001,5742,6000,6001,6667,12345,12346,20034,27665,30303,32771,32772,32773,32774,313
37,40421,40425,49724,54320"
UDP_PORTS="1,7,9,66,67,68,69,111,137,138,161,162,474,513,517,518,635,640,641,666,700,2049,31335,
27444,34555,32770,32771,32772,32773,32774,31337,54321"

В этом же файле задайте другие параметры:
BLOCK_UDP="1"
BLOCK_TCP="1"

Удалить # перед строкой:
KILL_HOSTS_DENY="ALL: $TARGET$"

Удалить # перед строкой:
PORT_BANNER="..."

Проверьте, кто уже пытался войти в систему:
sudo cat /var/log/auth.log | grep 'sshd.*Invalid'

Не хорошо, правда? Хакеры пытаются атаковать ваш VPS. Через несколько минут в сети VPS, боты пытаясь сканировать открытые порты и атаковать их, используют атаку типа bruteforce или по словарю.

Fail2ban

cd /etc/fail2ban
cp -v jail.conf jail.local
sudo nano /etc/fail2ban/jail.local

Игнорируемые IP-адреса, разделенные пробелами:
ignoreip = 127.0.0.1 your_ip_address

Время запрета (например, час):
bantime = 3600

Раздел [SSH]
Изменить:
port = ssh

на

port = 2282

Перезапустить fail2ban:
sudo /etc/init.d/fail2ban restart
[doublepost=1489070370][/doublepost]Tor и скрытые сервисы

Установка и настройка

Добавить репозитории для Tor:
sudo nano /etc/apt/sources.list

Добавить:
deb jessie main
deb-src jessie main

Также ключи:
gpg --keyserver keys.gnupg.net --recv 886DDD89

и

gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -

Установка Tor:
sudo apt-get update && sudo apt-get install tor tor-arm

Конфигурация Tor:
sudo nano /etc/tor/torrc

Задать:
SOCKSPort 0

Удалить # перед строкой:
RunAsDaemon 1

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8123

Не забудьте установить собственный порт, например: 8123

Onion домен

Когда вы настроите Tor как указано выше, адрес в домене .onion будет автоматически добавлен для веб-служб в папку:
/var/lib/tor/hidden_service/
Вы найдете два файла: hostname и private_key. Первый содержит onion адрес, назначенный скрытому сервису, второй - закрытый ключ, который подтверждает, что вы владеете этим onion адресом. Не передавайте эти файлы кому-либо и создайте их копию в надежном месте. Если вы измените сервер, будете иметь возможность опубликовать все снова по тому же адресу. Для генерации произвольного адреса используйте Shallot.

Установка веб-сервера + PHP + MySQL

MySQL

Установка и настройка базы данных

Установка базы данных:
apt-get install mysql-server mysql-client

Во время установки вам необходимо назначить пароль root для БД:
New password for the MySQL "root" user: password_for_root
Repeat password for the MySQL "root" user: repeat_password_for_root

Если вас не спросили, вы должны установить его самостоятельно:
sudo mysqladmin -u root -h localhost -p

Создание базы данных
sudo mysqladmin create database_name -u root -p

Создание пользователя базы данных и добавление прав пользователя во вновь созданную базу данных:
sudo mysql -u root -p

Enter password: root_password

mysql> USE mysql;
mysql> INSERT INTO user set Host='localhost', User='user_name',
Password=PASSWORD('user_password');
mysql> FLUSH PRIVILEGES;
mysql> GRANT Select,Insert,Update,Delete,Create,Drop ON database_name.* TO user_name@localhost;
mysql> FLUSH PRIVILEGES;

Другие полезные команды для MySQL

Вход в определенную базу данных:
mysql -u root -p DATABASE_NAME
Удаление базы данных:
mysql> drop database DATABASE_NAME;
Просмотр существующих баз данных:
mysql> show databases;
Проверка базы данных:
mysql> check table example.table;
Восстановление базы данных:
mysql> repair table example.table;
Проверка базы данных:
mysqlcheck -u user_name -p password
Устранение неисправностей и ремонт:
mysqlcheck -u user_name -p --auto-repair
Выход из консоли:
mysql> quit
Архивация базы данных
sudo mysqldump -u root -p DATABASE_NAME > DATABASE_NAME.sql
Восстановить:
sudo mysql -u root -p DATABASE_NAME < DATABASE_NAME.sql
[doublepost=1489070416][/doublepost]WWW

Сервер Lighttpd

sudo apt-get install lighttpd

Местоположение файлов по умолчанию для страницы:
/var/www

Отредактируйте файл конфигурации:
sudo nano /etc/lighttpd/lighttpd.conf

Рекомендуется изменить порт на:
server.port= 8123

PHP

Установка и настройка PHP7

Если вы хотите использовать версию 5, то во всех командах измените значение 7 на 5.
sudo apt-get install php7.0-fpm php7.0

Обработка PHP для Lighttpd:
sudo nano /etc/php/7.0/fpm/php.ini

Изменить:
cgi.fix_pathinfo=0

на:

Активация PHP-FPM:
cd /etc/lighttpd/conf-available/
sudo cp 15-fastcgi-php.conf 15-fastcgi-php.conf.bak
sudo nano 15-fastcgi-php.conf
Измените часть конфигурации так, чтобы она выглядела так:
# /usr/share/doc/lighttpd-doc/fastcgi.txt.gz
#
## Start an FastCGI server for php (needs the php7.0-cgi package)
fastcgi.server += ( ".php" =>
((
"socket" => "/var/run/php/php7.0-fpm.sock",
"broken-scriptfilename" => "enable"
))
)

Включите конфигурацию fastcgi:
sudo lighttpd-enable-mod fastcgi
sudo lighttpd-enable-mod fastcgi-php

sudo ls -l /etc/lighttpd/conf-enabled

Перезапустить сервер Lighttpd:
sudo service lighhtpd restart

Конфигурацию PHP можно проверить, создав файл:
sudo nano /var/www/info.php

Содержимое файла:
<?php
phpinfo();
?>

Перейдите на свою страницу по этому файлу в своем браузере, чтобы увидеть и проверить конфигурацию.
Не забудьте удалить файл с сервера после завершения тестирования.

Стоит установить необходимые модули, такие как поддержка MySQL для PHP.
sudo apt-get -y install php7.0-mysql

Или посмотрите на это:
sudo apt-cache search php7.0

Пример установки модулей:
sudo apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap
php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc
php7.0-xsl php7.0-mbstring php-gettext

Еще один модуль должен быть установлен:
sudo apt-get -y install php-apcu

Перезагрузите сервер FPM и Lighttpd:
sudo service php7.0-fpm reload
sudo service lighttpd reload
[doublepost=1489070457][/doublepost]Поддержка контактной формы
В сети Tor после настройки по умолчанию функции веб-сервера PHP mail не работает,
поэтому любая контактная форма или другое уведомление с сайта не будет работать. Сервер
сам также не сможет присылать нам информацию и всевозможные сообщения об ошибках и нарушения правил безопасности.
Когда будут отправляться сообщения по умолчанию, это может быть простой способ получить информацию о местоположении сервера.
Например путем извлечения подробной информации из заголовка сообщения.
Здесь приходит на помощь Service SSMTP. Не забудьте выбрать поставщика услуг безопасной электронной почты, например Riseup.

Установка:
sudo apt-get install ssmtp

Конфигурация:
sudo nano /etc/ssmtp/ssmtp.conf

Конфигурационный файл для адреса your_address@email.net:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=your_address@email.net
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=mail.email.net:25
# Where will the mail seem to come from?
rewriteDomain=email.net
# The full hostname
hostname=your_address@email.net
UseTLS=Yes
UseSTARTTLS=Yes
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
AuthUser=your_username
AuthPass=password_for_mailbox

Основная почта для сервера:
Код:
sudo nano /etc/ssmtp/revaliases

# sSMTP aliases
#
# Format:
local_account:eek:utgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
www-data:your_address@email.net:mail.email.net:25
Отправка тестового сообщения:
Код:
echo test | sudo ssmtp -s "test" test@host.tld
Конфигурация php.ini:
Код:
sudo nano /etc/php7/cgi/php.ini
Изменить строку, она должна выглядеть так:
Код:
sendmail_path = /usr/sbin/ssmtp -t
Брандмауэр

Соответствующие записи в конфигурации Lighttpd, введенные в предыдущих главах и простая конфигурация брандмауэра UFW позволит отразить стандартные атаки DoS/DDoS и увеличить уровень безопасности нашего сервера.

Установка и настройка UFW

Установка:
sudo apt-get install ufw

Статус проверки:

sudo ufw status

Результат:

Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere

Введя параметры по умолчанию для входящего трафика, заблокируйте все:
sudo ufw default deny incoming

Для исходящего трафика, разрешение на все:
sudo ufw default allow outgoing

Разрешение на подключение к SSH по ранее настроенному порту:
sudo ufw allow 2282/tcp

Также доступ к веб-серверу по предварительно сконфигурированному порту:
sudo ufw allow 8123/tcp

Включение защиты от открытия всех возможных портов:
sudo nano /etc/ufw/before.rules

После строк:

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines

добавьте:

# Limit to 10 concurrent connections on port 80 per IP
-A ufw-before-input -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j DROP

и:

# Limit to 20 connections on port 80 per 2 seconds per IP
-A ufw-before-input -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A ufw-before-input -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 2 --hitcount
20 -j DROP

Запуск межсетевого экрана:
sudo ufw enable

Проверка брандмауэра и настроенных сервисов:
sudo ufw status

Дополнительная информация

Управление базой данных
Не устанавливайте и не используйте phpMyAdmin, только излишне подвергать сервер атаке.
За каждую дополнительную услугу на сервере в сети Tor возникает дополнительная возможность нарушения
безопасности. Наиболее предпочтительным и безопасным способом управления базой данных на сервере будет использование
DBeaver . Это универсальный инструмент для управления многими популярными базами данных.
А также позволяет вам подключаться через SSH. Можно установить на Whonix Workstation.

Загрузка файлов на сервер

Для загрузки файлов на сервер используйте shell-соединение или sFTP, используя Midnight Commander. Помещение FTP-сервера в сеть Tor, как в случае с phpMyAdmin, является еще одной уязвимостью для атак. И FTP-сервер и PhpMyAdmin можно безопасно настроить. Но зачем искушать судьбу. Выберите в MC Left> SFTP connection... или Shell-connection...
Предоставьте свою регистрационную информацию, подключите и поместите пароль. Перемещение файлов между локальным компьютером и сервером вы должны использовать так:
Код:
user_name@ip_address:ssh_port
Движок

Неважно, как вы защищаете сервер, если используете плохо написанный блог или форум, то взлом на сервере для заинтересованного лица не займет много времени. Всегда обновляйте свой движек до последней версии. Проанализируйте, какие плагины вы устанавливаете. Используйте антиспамовые системы. Сеть Tor - медленная, поэтому не создавайте красивых цветные страницы с миллионами орнаментов. Люди, посещающие скрытые службы, ориентированы на содержание, а не на красоту.
[doublepost=1489071476][/doublepost]P. S. Это последняя статья из этого цикла.
 
Добрая половина хлам.
Хоть бы проверяли, что постите.
Хотя зачем, скопипастил и все, зачем заморачиваться.
 
Handbook, не раскрывающий подводных камней.
Может распишешь как сделать VPN+Tor ? :)

И хорошо бы оформить участки кода в нужном виде.
Сплошной текст плохо воспринимается.
 
VPN+Tor сделать легко.

Давай Tor+VPN ))
я делал так , ставил видалию , встроенным фаером запрещал все исходящие коннекты кроме tor.exe , и так получал доступ в сеть , потом шло уже vpn соединение. но тут есть трабла в том что при смене выходной ноды рвался коннект , тут в настройках тора надо поставить одну постоянную выходную ноду (в сети где то мануал был), тогда коннект не рвется .
[doublepost=1495794279,1495794150][/doublepost]вот вроде про ту же тему статья
 
Как раз по теме вот статья
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!