translate /ru/document/level-0 pages
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
# Простые разговоры о сложном
 | 
			
		||||
 | 
			
		||||
**Эта глава - базовый курс «С нуля», новичкам читать и учить обязательно**
 | 
			
		||||
 | 
			
		||||
::: tip
 | 
			
		||||
Сделано с ❤️ [@ricuhkaen](https://github.com/ricuhkaen)
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
[【Глава 1】 Введение](./ch01-preface.md) - Чужой или свой сервер? Вот в чём вопрос
 | 
			
		||||
 | 
			
		||||
[【Глава 2】 Подготовка](./ch02-preparation.md) - Прежде чем браться за дело, заготовь средства
 | 
			
		||||
 | 
			
		||||
[【Глава 3】 Удалённое подключение](./ch03-ssh.md) - Мост между севером и югом, пропасть превращается в путь
 | 
			
		||||
 | 
			
		||||
[【Глава 4】 Безопасность](./ch04-security.md) - Небрежность в безопасности, и родные будут лить слёзы
 | 
			
		||||
 | 
			
		||||
[【Глава 5】 Создание сайта](./ch05-webpage.md) - Покажи свою красоту
 | 
			
		||||
 | 
			
		||||
[【Глава 6】 Управление сертификатами](./ch06-certificates.md) - Законно то, что с лицензией
 | 
			
		||||
 | 
			
		||||
[【Глава 7】 Xray сервер](./ch07-xray-server.md) - Наконец-то дождались
 | 
			
		||||
 | 
			
		||||
[【Глава 8】 Xray клиенты](./ch08-xray-clients.md) - Новое начало
 | 
			
		||||
 | 
			
		||||
[【Глава 9】 Приложение](./ch09-appendix.md) - Все контрольные точки здесь
 | 
			
		||||
| 
		 After Width: | Height: | Size: 161 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,99 @@
 | 
			
		|||
# 【Глава 1】 Простыми словами
 | 
			
		||||
 | 
			
		||||
## 1.1 Для кого эта документация?
 | 
			
		||||
 | 
			
		||||
В двух словах: для **① новичков без опыта** **② желающих научиться настраивать свой собственный VPS**.
 | 
			
		||||
 | 
			
		||||
## 1.2 Для кого эта документация не предназначена?
 | 
			
		||||
 | 
			
		||||
В том числе, но не ограничиваясь: для всевозможных гуру и экспертов, для тех, кто слишком ленив, чтобы во всём разбираться самостоятельно, для тех, кто уже умеет настраивать VPS, для тех, кто точно решил пользоваться платными VPN-сервисами, для тех, кто предпочитает использовать готовые скрипты... Короче говоря, если у вас есть технические знания или вы не хотите настраивать всё сами, можете смело закрывать эту статью. Скорее всего, она покажется вам бесполезной и даже может вызвать раздражение, а оно вам надо?
 | 
			
		||||
 | 
			
		||||
## 1.3 Важное замечание и другие примечания
 | 
			
		||||
 | 
			
		||||
**Важное замечание:**
 | 
			
		||||
 | 
			
		||||
Я не являюсь техническим экспертом, поэтому в этой статье неизбежны пробелы и неточности. Если вы обнаружите какие-либо ошибки, пожалуйста, дайте мне знать об этом деликатно, без лишних эмоций.
 | 
			
		||||
 | 
			
		||||
**Отказ от ответственности:**
 | 
			
		||||
 | 
			
		||||
Пожалуйста, относитесь к информации, представленной в этой статье, критически и проверяйте её самостоятельно. Я не несу никакой ответственности за любые проблемы или негативные последствия, возникшие в результате использования информации из этой статьи.
 | 
			
		||||
 | 
			
		||||
**Предупреждение о многословности:**
 | 
			
		||||
 | 
			
		||||
Поскольку эта статья предназначена для **новичков без опыта**, многие вещи будут объяснены максимально подробно. Поэтому будьте готовы к тому, что текст будет довольно многословным.
 | 
			
		||||
 | 
			
		||||
## 1.4 Почему самостоятельная настройка  — это сложно?
 | 
			
		||||
 | 
			
		||||
Чтобы ответить на этот вопрос, нужно немного углубиться в историю вопроса.
 | 
			
		||||
 | 
			
		||||
Во-первых, обход блокировок существует уже почти двадцать лет (Шок! Ужас!). Сначала для этого достаточно было пары манипуляций (поправить файл hosts, подключиться по SSH), потом понадобились веб-прокси, затем — собственные протоколы (например, Shadowsocks) и так далее.
 | 
			
		||||
 | 
			
		||||
По мере того, как технологии блокировок совершенствовались на протяжении последних десятилетий, для самостоятельного обхода блокировок теперь нужно уметь:
 | 
			
		||||
 | 
			
		||||
- Разбираться в основных командах Linux.
 | 
			
		||||
- Понимать принципы работы сетевых протоколов.
 | 
			
		||||
- Иметь технические навыки и средства для покупки и управления VPS.
 | 
			
		||||
- Иметь технические навыки и средства для покупки и управления доменными именами.
 | 
			
		||||
- Уметь получать TLS-сертификаты.
 | 
			
		||||
- И многое другое.
 | 
			
		||||
 | 
			
		||||
Всё это превратило некогда простую задачу в пугающее испытание для новичков.
 | 
			
		||||
 | 
			
		||||
Во-вторых, о проблемах новичков.
 | 
			
		||||
 | 
			
		||||
Начинающим пользователям без технического бэкграунда, чтобы разобраться во всех этих премудростях, приходится изучать огромные массивы информации, разбросанной по всему интернету: блогам, форумам, группам в мессенджерах, репозиториям на GitHub, видео на YouTube и так далее. 
 | 
			
		||||
 | 
			
		||||
Вся эта информация часто оказывается противоречивой, неполной или попросту неверной. Новичкам остаётся только гадать, кому верить и как всё это работает на самом деле.
 | 
			
		||||
 | 
			
		||||
В итоге вместо нехватки информации новички сталкиваются с её избытком. После нескольких (скорее всего, неудачных) попыток разобраться во всём этом, их энтузиазм угасает. А если по пути им ещё и «посчастливится» обратиться за помощью не в то место, их могут ещё и высмеять: «Ну ты и нуб, проще уж платным VPN пользоваться, зачем изобретать велосипед?» или «Сначала Linux изучи, потом приходи».
 | 
			
		||||
 | 
			
		||||
В такие моменты остаётся только горько усмехнуться.
 | 
			
		||||
 | 
			
		||||
## 1.5 «Почему бы просто не пользоваться платным VPN?»
 | 
			
		||||
 | 
			
		||||
Во-первых, я хотел бы спросить у любителей подобных советов: разве платные VPN — это панацея?
 | 
			
		||||
 | 
			
		||||
Во-вторых, я считаю, что «не знать» и «не хотеть знать» — это две большие разницы. Конечно, инфантилы, которые хотят всё и сразу, не прилагая никаких усилий, вызывают только раздражение. Но люди, которые искренне хотят разобраться во всём сами, не заслуживают презрения и издёвок. Именно эта нетерпимость к новичкам и побудила меня написать эту статью. 
 | 
			
		||||
 | 
			
		||||
Давайте разберёмся, в чём плюсы и минусы платных VPN-сервисов.
 | 
			
		||||
 | 
			
		||||
**Плюсы:**
 | 
			
		||||
 | 
			
		||||
1. **Простота использования:** сканирование QR-кода, добавление правил в один клик и т.д.
 | 
			
		||||
2. **Большой выбор серверов:** доступ к ресурсам разных стран и регионов; например, выделенные серверы с низкой задержкой (iplc), серверы для онлайн-игр и т.д.
 | 
			
		||||
3. **Множество точек подключения:** выше устойчивость к блокировкам, если один сервер заблокируют, можно подключиться к другому.
 | 
			
		||||
 | 
			
		||||
**Риски:**
 | 
			
		||||
 | 
			
		||||
За удобство приходится платить, и в случае с платными VPN-сервисами риски следующие:
 | 
			
		||||
 | 
			
		||||
1. **VPN-провайдер имеет полный доступ к вашим данным:** всё, что вы делаете в интернете, **обязательно** проходит и **с большой вероятностью** хранится на серверах провайдера. Эти данные никак не защищены пользовательским соглашением или законом о защите персональных данных **(вас могут отслеживать и записывать всё, что вы делаете)**.
 | 
			
		||||
2. **Отсутствие регулирования рынка:** высока вероятность нарваться на мошенников **(провайдер может в любой момент исчезнуть с вашими деньгами)**.
 | 
			
		||||
3. **Давление со стороны регулирующих органов:** крупные VPN-провайдеры, с одной стороны, кажутся более надёжными, но, с другой стороны, чаще привлекают к себе внимание властей. В 2020 году было несколько случаев закрытия и прекращения работы крупных VPN-провайдеров, что привело к серьёзным неудобствам для пользователей **(провайдер может быть вынужден прекратить работу)**.
 | 
			
		||||
4. **Непрозрачность технических решений:** качество предоставляемых услуг может сильно варьироваться, не редки случаи обмана **(низкая скорость, частые обрывы связи, невозможность подключения)**.
 | 
			
		||||
 | 
			
		||||
## 1.6 Так стоит ли настраивать VPN самостоятельно?
 | 
			
		||||
 | 
			
		||||
Теперь, когда вы знаете о плюсах и минусах платных VPN, решать вам. В конце концов, лучший вариант — тот, который подходит именно вам.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
1. Если вы решили воспользоваться платным VPN, можете закрыть эту статью.
 | 
			
		||||
 | 
			
		||||
2. Если же вы решили настроить всё самостоятельно, продолжайте чтение!
 | 
			
		||||
 | 
			
		||||
Цель этой статьи — стать отправной точкой для новичков, предоставить подробное пошаговое руководство по настройке VPN-сервера на VPS, начиная **с ввода первой команды** и заканчивая **успешным подключением к заблокированным ресурсам**. 
 | 
			
		||||
 | 
			
		||||
В процессе настройки вы познакомитесь с основными командами Linux, что станет хорошей базой для дальнейшего изучения этой операционной системы.
 | 
			
		||||
 | 
			
		||||
## 1.7 Немного лирики
 | 
			
		||||
 | 
			
		||||
1. В интернете много дезинформации, поэтому важно научиться критически мыслить, не поддаваться на провокации и не верить всему, что пишут.
 | 
			
		||||
2. Искренне надеюсь, что, получив доступ к свободному интернету, вы сможете узнавать больше нового, наслаждаться разнообразным контентом, знакомиться с интересными людьми и находить единомышленников. 
 | 
			
		||||
3. Ваша личность в интернете — это всё ещё вы. Добиться полной анонимности крайне сложно, поэтому не забывайте о законах вашей страны и стран, IP-адреса которых вы используете. Всегда помните о собственной безопасности.
 | 
			
		||||
 | 
			
		||||
## 1.8 Ваш прогресс
 | 
			
		||||
 | 
			
		||||
> ⬛⬜⬜⬜⬜⬜⬜⬜ 12.5%
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
		 After Width: | Height: | Size: 55 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
# 【Глава 2】 Подготовка
 | 
			
		||||
 | 
			
		||||
Эта глава особенная, поскольку затрагивает финансовые операции. В соответствии с нейтральной позицией проекта, здесь не будет конкретных рекомендаций. Всё, что я могу сделать, — это рассказать, что вам понадобится.
 | 
			
		||||
 | 
			
		||||
## 2.1 Приобретение VPS
 | 
			
		||||
 | 
			
		||||
Вам нужно получить работающий VPS с не заблокированным IP-адресом и выполнить следующие базовые действия в панели управления:
 | 
			
		||||
 | 
			
		||||
1. Установить на VPS операционную систему Debian 10 64-bit.
 | 
			
		||||
2. Записать IP-адрес VPS (в этой статье он будет обозначаться как `"100.200.300.400"`).
 | 
			
		||||
   ::: tip
 | 
			
		||||
   Это **неверный** IP-адрес, используемый только в качестве примера. Не забудьте заменить его на свой реальный IP-адрес.
 | 
			
		||||
   :::
 | 
			
		||||
3. Записать порт (Port) SSH для удалённого подключения к VPS.
 | 
			
		||||
4. Записать имя пользователя и пароль для удалённого подключения по SSH.
 | 
			
		||||
 | 
			
		||||
Выбор и покупка VPS — дело непростое. Рекомендуем сначала изучить этот вопрос и выбрать тариф, который соответствует вашим финансовым возможностям и требованиям к скорости и качеству связи.  Также можно воспользоваться бесплатными (постоянными или временными) предложениями от крупных облачных провайдеров, таких как Oracle Cloud и Google Cloud. Главное — не влезайте в долги.
 | 
			
		||||
 | 
			
		||||
::: tip Пояснение
 | 
			
		||||
Несколько слов о выборе Debian 10 в качестве операционной системы. Что бы вы ни слышали в интернете, какой бы дистрибутив Linux ни советовали вам гуру, все эти споры о том, какой Linux лучше, **не имеют к вам никакого отношения**! Debian 10 — это надёжная и стабильная операционная система, которая отлично подходит для работы VPN-сервера и достаточно оптимизирована (например, имеет специальное ядро для облачных сред и своевременную поддержку BBR). Когда вы освоитесь с Linux, можете попробовать и другие дистрибутивы.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
## 2.2 Выбор доменного имени
 | 
			
		||||
 | 
			
		||||
Вам нужно получить доменное имя и добавить A-запись, указывающую на IP-адрес вашего VPS, в настройках DNS.
 | 
			
		||||
 | 
			
		||||
1. Выберите надёжного международного регистратора доменных имён. Доменная зона (расширение домена) может быть любой, главное — не используйте `.cn`.
 | 
			
		||||
2. В настройках DNS добавьте A-запись, указывающую на IP-адрес вашего VPS (имя A-записи может быть любым, в этой статье оно будет обозначаться как `"a-name"`. Полное доменное имя будет выглядеть как `"a-name.yourdomain.com"`). Должно получиться примерно так:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
::: tip
 | 
			
		||||
Это **не** настоящий URL-адрес. Не забудьте заменить его на свой реальный адрес.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
## 2.3 Необходимое программное обеспечение
 | 
			
		||||
 | 
			
		||||
1. SSH-клиент для удалённого подключения:
 | 
			
		||||
 | 
			
		||||
   - Windows: [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
 | 
			
		||||
   - macOS/Linux: Terminal
 | 
			
		||||
 | 
			
		||||
2. Программа для передачи файлов:
 | 
			
		||||
 | 
			
		||||
   - Windows: [WinSCP](https://winscp.net/eng/index.php)
 | 
			
		||||
   - macOS/Linux: Terminal
 | 
			
		||||
 | 
			
		||||
3. Хороший текстовый редактор:
 | 
			
		||||
   - Windows/macOS/Linux: [VSCode](https://code.visualstudio.com)
 | 
			
		||||
 | 
			
		||||
## 2.4 Ваш прогресс
 | 
			
		||||
 | 
			
		||||
Если вы выполнили все пункты из этого раздела, у вас уже есть всё необходимое, чтобы открыть для себя новый мир. Так чего же мы ждём? Давайте перейдём к следующей главе и сделаем это!
 | 
			
		||||
 | 
			
		||||
> ⬛⬛⬜⬜⬜⬜⬜⬜ 25%
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
		 After Width: | Height: | Size: 91 KiB  | 
| 
		 After Width: | Height: | Size: 50 KiB  | 
| 
		 After Width: | Height: | Size: 58 KiB  | 
| 
		 After Width: | Height: | Size: 19 KiB  | 
| 
		 After Width: | Height: | Size: 25 KiB  | 
| 
		 After Width: | Height: | Size: 3.1 MiB  | 
| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
# 【Глава 3】 Удалённое подключение
 | 
			
		||||
 | 
			
		||||
## 3.1 Удалённое подключение к VPS (PuTTY)
 | 
			
		||||
 | 
			
		||||
Во-первых, поскольку Windows является самой распространённой операционной системой среди новичков, в этой статье мы будем использовать её в качестве примера.
 | 
			
		||||
 | 
			
		||||
Во-вторых, хотя PowerShell и WSL в Windows 10 и выше также предоставляют удобные инструменты для работы по SSH, не все версии Windows имеют эти компоненты. Поэтому в этой статье мы рассмотрим подключение по SSH с помощью старого доброго PuTTY. (После подключения по SSH действия во всех программах будут одинаковыми.)
 | 
			
		||||
 | 
			
		||||
Итак, давайте начнём.
 | 
			
		||||
 | 
			
		||||
1. Перейдите на [официальный сайт](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) PuTTY и скачайте версию, подходящую для вашей операционной системы (в этой статье мы будем использовать 64-битную версию).
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
2. Запустите PuTTY. Откроется главное окно программы. Теперь возьмите [блокнот](./ch02-preparation.md#21-получение-vps), в который вы записывали информацию в предыдущей главе, и введите **IP-адрес** и **порт** вашего VPS в соответствующие поля (на скриншоте ниже). Чтобы не вводить эти данные каждый раз, можно сохранить сеанс (Saved Sessions). В дальнейшем вы сможете загрузить сохранённые настройки одним кликом.
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
3. Рекомендуем установить значение `keepalive` в разделе `Connection` равным `60` секундам, чтобы предотвратить разрыв SSH-соединения, если вы долгое время не будете выполнять никаких действий. Не забудьте снова сохранить настройки.
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
::: warning Внимание
 | 
			
		||||
После любых изменений настроек PuTTY необходимо сохранить сеанс, иначе они будут потеряны при закрытии программы.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
4. Нажмите кнопку "Open", чтобы открыть окно SSH-подключения. Введите имя пользователя и пароль для подключения к вашему VPS (в этой статье предполагается, что имя пользователя по умолчанию — `root`. Обратите внимание, что при вводе пароля в Linux не отображаются символы `******`. Это сделано для того, чтобы скрыть длину пароля. Не пугайтесь, ваша клавиатура в порядке!).
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
## 3.2 Успешное подключение по SSH! Знакомство с командной строкой!
 | 
			
		||||
 | 
			
		||||
1. Если вы всё сделали правильно, вы увидите примерно такой экран, как на рисунке ниже. Это означает, что вы успешно подключились к серверу:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
   Этот экран — аналог «рабочего стола» на удалённом сервере, но здесь нет привычных значков, курсора мыши и ярких цветов. Только текст. Это и есть **командная строка** — *Command Line Interface* или сокращённо *CLI*.
 | 
			
		||||
 | 
			
		||||
   Все дальнейшие действия вам придётся выполнять в командной строке, как хакер в кино. Возможно, поначалу это покажется вам непривычным, но поверьте, в использовании командной строки нет ничего страшного или сложного. По сути, это всего лишь способ взаимодействия с компьютером с помощью текстовых команд вместо графического интерфейса. **Вы пишете команду, а компьютер её выполняет.**
 | 
			
		||||
 | 
			
		||||
2. Теперь можете немного осмотреться и познакомиться с командной строкой. На этом экране уже есть полезная информация, например, версия ядра системы (в данном случае `4.19.37-5`), время последнего входа в систему, IP-адрес и т.д. Конечно, в зависимости от VPS, ваш экран может выглядеть немного иначе.
 | 
			
		||||
 | 
			
		||||
3. Обратите внимание на последнюю строку командной строки. Слева от мигающего курсора находится набор символов. В данном случае это `root@vps-server:~#`. Что это значит? Всё просто:
 | 
			
		||||
 | 
			
		||||
   - Текущий пользователь: `root`.
 | 
			
		||||
   - Имя сервера, на котором работает пользователь `root`: `vps-server`.
 | 
			
		||||
   - Текущий каталог, в котором находится пользователь `root`: `~`.
 | 
			
		||||
   - Символ `#` указывает на то, что после него можно вводить команды.
 | 
			
		||||
 | 
			
		||||
   Первые два пункта интуитивно понятны и не требуют пояснений. Третий пункт относится к файловой системе Linux. Сейчас вам не нужно вдаваться в подробности, достаточно знать, что `~` — это «домашний каталог» текущего пользователя. Четвёртый пункт, символ `#`, также не требует особого внимания. Просто знайте, что в дальнейшем все команды, которые вам нужно будет вводить, будут начинаться с `#` или `$`. Это будет означать, что **после** этого символа нужно ввести команду (поэтому при копировании команд **копируйте только текст после**, без символа `#` или `$`).
 | 
			
		||||
 | 
			
		||||
## 3.3 Первое обновление программного обеспечения Linux!
 | 
			
		||||
 | 
			
		||||
1. Так же, как и ваш телефон, будь то Android или iPhone, Linux нуждается в регулярном обновлении программного обеспечения для получения исправлений безопасности и новых функций. В Linux каждое приложение называется «пакетом» (package). А программа, которая управляет пакетами, называется «менеджером пакетов» (Package Manager). С помощью менеджера пакетов можно устанавливать, обновлять и удалять программы, а также обновлять саму систему Linux. Менеджеры пакетов Linux очень мощные, но сейчас вам достаточно знать, что в Debian используется менеджер пакетов `apt`. Давайте обновим систему с помощью `apt`, чтобы вы познакомились с его основными функциями.
 | 
			
		||||
 | 
			
		||||
2. Базовые команды Linux:
 | 
			
		||||
 | 
			
		||||
   | Номер | Команда     | Описание            |
 | 
			
		||||
   | :----: | :----------: | :----------------- |
 | 
			
		||||
   | `cmd-01` | `apt update`  | Проверить обновления |
 | 
			
		||||
   | `cmd-02` | `apt upgrade` | Установить обновления|
 | 
			
		||||
 | 
			
		||||
3. Введите первую команду, чтобы получить информацию об обновлениях:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   apt update
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
4. Затем введите вторую команду. При появлении запроса на подтверждение установки `(Y/n)` введите `y` и нажмите Enter, чтобы начать установку.
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   apt upgrade
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
5. Весь процесс показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
## 3.4 Ваш прогресс
 | 
			
		||||
 | 
			
		||||
**Поздравляем, вы сделали ещё один важный шаг!** Теперь вы умеете подключаться к своему серверу по SSH! Но что делать после подключения, кроме обновления системы? Узнаем в следующей главе!
 | 
			
		||||
 | 
			
		||||
> ⬛⬛⬛⬜⬜⬜⬜⬜ 37.5%
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
		 After Width: | Height: | Size: 44 KiB  | 
| 
		 After Width: | Height: | Size: 95 KiB  | 
| 
		 After Width: | Height: | Size: 36 KiB  | 
| 
		 After Width: | Height: | Size: 46 KiB  | 
| 
		 After Width: | Height: | Size: 120 KiB  | 
| 
		 After Width: | Height: | Size: 77 KiB  | 
| 
		 After Width: | Height: | Size: 52 KiB  | 
| 
		 After Width: | Height: | Size: 61 KiB  | 
| 
		 After Width: | Height: | Size: 104 KiB  | 
| 
		 After Width: | Height: | Size: 50 KiB  | 
| 
		 After Width: | Height: | Size: 104 KiB  | 
| 
		 After Width: | Height: | Size: 114 KiB  | 
| 
		 After Width: | Height: | Size: 143 KiB  | 
| 
		 After Width: | Height: | Size: 134 KiB  | 
| 
		 After Width: | Height: | Size: 141 KiB  | 
| 
		 After Width: | Height: | Size: 961 KiB  | 
| 
		 After Width: | Height: | Size: 112 KiB  | 
| 
		 After Width: | Height: | Size: 62 KiB  | 
| 
		 After Width: | Height: | Size: 30 KiB  | 
| 
		 After Width: | Height: | Size: 193 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,332 @@
 | 
			
		|||
# 【Глава 4】 Обеспечение безопасности
 | 
			
		||||
 | 
			
		||||
## 4.1 Зачем нужна безопасность?
 | 
			
		||||
 | 
			
		||||
Безопасность Linux-серверов — это обширная и сложная тема. Бесчисленные веб-сайты, приложения, сервисы и даже критически важная инфраструктура построены на базе Linux. За всем этим стоят огромные деньги и коммерческие интересы, что, естественно, привлекает злоумышленников.  В то же время надёжная работа этих сервисов крайне важна, поэтому любые серьёзные уязвимости недопустимы.  Именно поэтому множество специалистов по безопасности изо дня в день ведут борьбу на передовой, обеспечивая стабильную работу цифрового мира, к которому мы все привыкли.
 | 
			
		||||
 | 
			
		||||
Теперь, когда у вас есть собственный VPS-сервер, и вы собираетесь открыть на нём порты для перенаправления трафика, вы фактически оказываетесь на передовой этой борьбы и подвергаетесь тем же рискам.  В то же время, новички, не обладающие достаточными знаниями и информацией, склонны впадать в крайности: либо они считают, что им ничего не угрожает, либо же, наоборот, впадают в паранойю.
 | 
			
		||||
 | 
			
		||||
- Первым я бы посоветовал не относиться к безопасности легкомысленно и изучить этот вопрос более подробно, чтобы потом не пришлось кусать локти.
 | 
			
		||||
 | 
			
		||||
- Вторым я бы посоветовал не паниковать. Ваш сервер вряд ли представляет собой лакомую цель для серьёзных злоумышленников, поэтому вам достаточно базовых мер защиты от автоматических сканеров и ботов, о которых мы и поговорим в этой главе.
 | 
			
		||||
 | 
			
		||||
## 4.2 Какие именно риски существуют?
 | 
			
		||||
 | 
			
		||||
Как мы уже говорили в главе про удалённое подключение, для доступа к вашему VPS достаточно знать четыре вещи: **IP-адрес**, **порт**, **имя пользователя** и **пароль**. Очевидно, что эти четыре элемента нужно защищать в первую очередь.  Давайте разберём каждый из них:
 | 
			
		||||
 | 
			
		||||
1. **IP-адрес**: злоумышленники могут сканировать целые диапазоны IP-адресов в поисках уязвимых серверов.  Ваш IP-адрес — это публичная информация, которую невозможно скрыть.
 | 
			
		||||
 | 
			
		||||
2. **Порт**: если вы используете настройки по умолчанию, то порт SSH равен `22`.
 | 
			
		||||
 | 
			
		||||
3. **Имя пользователя**: если вы используете настройки по умолчанию, то имя пользователя — `root`.
 | 
			
		||||
 | 
			
		||||
4. **Пароль**: пароль не имеет значения по умолчанию. Он либо генерируется автоматически при создании VPS, либо задаётся вами.  Таким образом, если вы не меняли настройки сервера, то три из четырёх элементов уже известны злоумышленникам, и вся безопасность вашего сервера держится на одном только пароле.  Возможны следующие варианты:
 | 
			
		||||
 | 
			
		||||
   - Вы используете автоматически сгенерированный пароль из панели управления VPS.  Такие пароли обычно состоят из случайного набора символов (букв в разных регистрах, цифр и спецсимволов) и достаточно надёжны.
 | 
			
		||||
 | 
			
		||||
   - Вы установили простой пароль, например, `123456`.  Взломать такой сервер не составит труда.
 | 
			
		||||
 | 
			
		||||
   - Вы установили сложный пароль, который используете где-то ещё.  Это тоже небезопасно.  Злоумышленники используют специальные программы, которые перебирают миллионы ранее скомпрометированных паролей из утечек данных.
 | 
			
		||||
 | 
			
		||||
5. Важно понимать, что никакой хакер не будет лично подбирать ваш пароль.  Все атаки выполняются автоматически с помощью специальных скриптов, которые работают круглосуточно.  Пока вы спите, ваш сервер может подвергаться атакам.
 | 
			
		||||
 | 
			
		||||
   Если пароль будет подобран, злоумышленники получат полный доступ к вашему серверу (права пользователя `root`), смогут установить на него вредоносное ПО и использовать его в своих целях (например, для майнинга криптовалюты, рассылки спама, фишинговых атак, организации торрент-трекера, размещения публичных узлов для доступа к даркнету и т.д.).  При этом злоумышленники могут действовать очень скрытно, и вы даже не заметите, что ваш сервер взломан, пока не получите уведомление от хостинг-провайдера о блокировке вашего аккаунта или, что ещё хуже, повестку в суд.
 | 
			
		||||
 | 
			
		||||
6. Не забывайте, что при покупке VPS вы, скорее всего, указывали свои реальные платёжные данные.  А при посещении сайтов и использовании социальных сетей ваш IP-адрес также сохраняется.  Всё это может быть использовано против вас.  **Поэтому, если на вашем сервере произойдёт что-то противозаконное, отвечать за это придётся вам.**
 | 
			
		||||
 | 
			
		||||
## 4.3 Какие меры безопасности нужно предпринять?
 | 
			
		||||
 | 
			
		||||
Исходя из всего вышесказанного, нам нужно защитить **порт**, **имя пользователя** и **пароль**, чтобы снизить риск взлома.  Для этого необходимо:
 | 
			
		||||
 | 
			
		||||
1. Изменить порт SSH на **нестандартный** (отличный от 22) (см. раздел 4.4).
 | 
			
		||||
2. Создать **нового пользователя** (не `root`) и **запретить удалённое подключение по SSH** для пользователя `root` (см. разделы 4.5 и 4.6).
 | 
			
		||||
3. Настроить **аутентификацию по SSH-ключам** и **запретить аутентификацию по паролю** (см. раздел 4.7).
 | 
			
		||||
 | 
			
		||||
Выполняйте эти действия по порядку, чтобы не оказаться случайно заблокированным на своём же сервере.
 | 
			
		||||
 | 
			
		||||
## 4.4 Изменение порта SSH
 | 
			
		||||
 | 
			
		||||
Давайте решим проблему с портом SSH, который по умолчанию равен `22` (обратите внимание: у некоторых хостинг-провайдеров порт SSH по умолчанию уже отличается от 22.  В этом случае вы можете пропустить этот шаг, но можете и изменить порт ещё раз, следуя инструкциям ниже).
 | 
			
		||||
 | 
			
		||||
1. Базовые команды Linux:
 | 
			
		||||
 | 
			
		||||
   | Номер | Команда            | Описание                   |
 | 
			
		||||
   | :----: | :---------------- | :------------------------ |
 | 
			
		||||
   | `cmd-03` | `nano`           | Текстовый редактор      |
 | 
			
		||||
   | `cmd-04` | `systemctl restart` | Перезапуск службы        |
 | 
			
		||||
 | 
			
		||||
2. Важные файлы конфигурации Linux:
 | 
			
		||||
 | 
			
		||||
   | Номер   | Путь к файлу              | Описание                    |
 | 
			
		||||
   | :------ | :----------------------- | :------------------------- |
 | 
			
		||||
   | `conf-01` | `/etc/ssh/sshd_config` | Настройки SSH-сервера      |
 | 
			
		||||
 | 
			
		||||
3. Первое, что нужно сделать, — это открыть файл настроек SSH-сервера (`/etc/ssh/sshd_config`) в текстовом редакторе `nano`.  В Windows вы бы просто нашли этот файл и дважды кликнули по нему.  А как это сделать в Linux?  Если вы внимательно читали предыдущие разделы, то наверняка уже догадались!  Правильно, нужно выполнить команду:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   nano /etc/ssh/sshd_config
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
4. После открытия файла вы увидите интерфейс редактора `nano`.  Обратите внимание на нижнюю часть экрана, где перечислены основные горячие клавиши (на скриншоте ниже выделены красной рамкой).  Не нужно ничего заучивать, всё необходимое всегда перед глазами!
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
5) Второе, что нужно сделать, — это найти строку, начинающуюся с `Port`, и изменить номер порта.  Число после `Port` — это номер порта SSH.  Рекомендуется использовать число в диапазоне от `1024` до `65535` (в этой статье мы будем использовать порт `9753`).  Как это сделать, используя горячие клавиши `nano`?  Вы уже наверняка догадались!  
 | 
			
		||||
 | 
			
		||||
   - Нажмите `Ctrl+W`, чтобы открыть поиск, введите `Port 22` и нажмите Enter.
 | 
			
		||||
   - Замените `22` на `9753`.
 | 
			
		||||
   - Примечание: если в начале строки стоит символ `#`, значит, эта строка закомментирована и не будет применяться.  Вы можете либо раскомментировать её (удалив `#`), либо добавить новую строку без `#` в конце файла, как показано на скриншоте.
 | 
			
		||||
 | 
			
		||||
   ::: warning
 | 
			
		||||
   Использование порта `9753` в этой статье делает его менее безопасным, поскольку злоумышленники могут начать сканировать этот порт в первую очередь.  Кроме того, этот порт может быть заблокирован некоторыми провайдерами.  Поэтому настоятельно рекомендуем использовать другой порт.  У вас в распоряжении более 60 тысяч портов, так что выбрать есть из чего.
 | 
			
		||||
   :::
 | 
			
		||||
 | 
			
		||||
6. Третье, что нужно сделать, — это сохранить изменения и выйти из редактора.
 | 
			
		||||
 | 
			
		||||
   - Как вы уже могли заметить, для сохранения файла используется не `Ctrl+S`, как в большинстве программ.
 | 
			
		||||
   - Горячие клавиши: `Ctrl+O` — сохранить, `Ctrl+X` — выйти.
 | 
			
		||||
 | 
			
		||||
7. И последнее, что нужно сделать, — это перезапустить SSH-сервер, чтобы изменения вступили в силу.
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   systemctl restart ssh
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
8. Весь процесс показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
9. Изменение настроек PuTTY
 | 
			
		||||
 | 
			
		||||
   Теперь, когда вы изменили порт SSH, вам нужно указать новый порт (`9753`) в настройках PuTTY.  Вы ведь помните, где это делается?  (Если нет, вернитесь и перечитайте предыдущие разделы!)
 | 
			
		||||
 | 
			
		||||
## 4.5 Создание нового пользователя
 | 
			
		||||
 | 
			
		||||
Перейдём ко второму шагу — избавлению от пользователя `root`.
 | 
			
		||||
 | 
			
		||||
Прежде всего, нужно понимать, что пользователь `root` в Linux — это не просто администратор.  Это корень системы, её основа, верховный правитель.  Если безопасность учётной записи `root` будет нарушена, под угрозой окажется вся система.
 | 
			
		||||
 | 
			
		||||
1. Базовые команды Linux:
 | 
			
		||||
 | 
			
		||||
   | Номер | Команда       | Описание                            |
 | 
			
		||||
   | :----: | :------------ | :---------------------------------- |
 | 
			
		||||
   | `cmd-05` | `adduser`    | Добавление нового пользователя      |
 | 
			
		||||
   | `cmd-06` | `apt install` | Установка программного обеспечения |
 | 
			
		||||
   | `cmd-07` | `visudo`      | Редактор файла sudoers           |
 | 
			
		||||
 | 
			
		||||
2. Первое, что нужно сделать, — это создать нового пользователя и установить для него пароль.  Имя пользователя может быть любым, в этой статье мы будем использовать имя `vpsadmin`.
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   adduser vpsadmin
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   Следуйте инструкциям на экране.  Обязательно укажите пароль для нового пользователя (и не удивляйтесь, что при вводе пароля символы не отображаются).  Далее система может запросить дополнительную информацию о пользователе.  Можете пропустить эти пункты, нажав Enter.
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
   ::: warning
 | 
			
		||||
   Использование имени пользователя `vpsadmin` в этой статье делает его менее безопасным, поскольку злоумышленники могут начать перебирать пароли для этого имени в первую очередь.  Поэтому, как и в случае с портом, настоятельно рекомендуем использовать другое имя пользователя.
 | 
			
		||||
   :::
 | 
			
		||||
 | 
			
		||||
3. Весь процесс показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
4. Второе, что нужно сделать, — это установить пакет `sudo` (`sudo` позволяет обычным пользователям временно получать права суперпользователя `root`, чтобы выполнять задачи, требующие повышенных привилегий).
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   apt update && apt install sudo
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   Вы, наверное, заметили, что эта строка содержит две команды.  Первая команда, `apt update`, уже знакома вам — она обновляет информацию о доступных пакетах.  Вторая команда, `apt install`, используется для установки программного обеспечения.  В данном случае мы обновляем информацию о пакетах и устанавливаем последнюю версию `sudo`.  Символы `&&` используются для объединения нескольких команд в одну строку.
 | 
			
		||||
 | 
			
		||||
5. Третье, что нужно сделать, — это добавить пользователя `vpsadmin` в группу `sudo`, чтобы он мог использовать команду `sudo`.
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   visudo
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   Добавьте следующую строку в раздел `User Privilege Specification`: `vpsadmin ALL=(ALL) NOPASSWD: ALL`.
 | 
			
		||||
 | 
			
		||||
   ::: warning
 | 
			
		||||
   Обратите внимание на опцию `NOPASSWD`.  Она означает, что пользователю `vpsadmin` не нужно будет вводить пароль при использовании команды `sudo`.  **Это противоречит общепринятым рекомендациям по безопасности.**  Однако я рекомендую сделать именно так, потому что многие новички используют учётную запись `root` именно потому, что им не нужно каждый раз вводить пароль.  Я считаю, что **риски от использования учётной записи `root` гораздо выше**, чем риски от использования `sudo` без пароля.
 | 
			
		||||
 | 
			
		||||
   Если вы всё же хотите, чтобы при каждом использовании `sudo` запрашивался пароль, используйте следующую строку: `vpsadmin ALL=(ALL:ALL) ALL`.
 | 
			
		||||
   :::
 | 
			
		||||
 | 
			
		||||
6. Весь процесс показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
## 4.6 Запрет удалённого подключения по SSH для пользователя root
 | 
			
		||||
 | 
			
		||||
1. Вы уже немного освоились в Linux, поэтому попробуйте сами догадаться, что нужно сделать в первую очередь.  Правильно, нужно снова открыть файл настроек SSH-сервера (`/etc/ssh/sshd_config`) в редакторе `nano`.  Не помните, как это сделать?  Вернитесь и перечитайте предыдущие разделы!  ...  Правильный ответ:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   nano /etc/ssh/sshd_config
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
2. Найдите строку `PermitRootLogin Yes` и замените `yes` на `no`.  Помните, как это сделать?  ...  Правильный ответ:
 | 
			
		||||
 | 
			
		||||
   - Нажмите `Ctrl+W`, чтобы открыть поиск, введите `PermitRootLogin` и нажмите Enter.
 | 
			
		||||
   - Замените `yes` на `no`.
 | 
			
		||||
 | 
			
		||||
3. Сохраните изменения и выйдите из редактора.  Помните, как это сделать? ...  Правильный ответ:
 | 
			
		||||
 | 
			
		||||
   - `Ctrl+O` — сохранить, `Enter` — подтвердить сохранение.
 | 
			
		||||
   - `Ctrl+X` — выйти.
 | 
			
		||||
 | 
			
		||||
4. Перезапустите SSH-сервер, чтобы изменения вступили в силу.  Помните...  Ладно, вот правильный ответ:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   systemctl restart ssh
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
5. Весь процесс показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
6. Теперь при попытке подключения по SSH с помощью PuTTY под пользователем `root` вы получите ошибку.  Используйте имя пользователя `vpsadmin` для подключения.  Для удобства вы можете указать `vpsadmin` в качестве имени пользователя по умолчанию в настройках PuTTY (не забудьте сохранить сеанс!).
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
## 4.7 Настройка аутентификации по SSH-ключам и запрет аутентификации по паролю
 | 
			
		||||
 | 
			
		||||
Перейдём к третьему шагу — защите от подбора пароля.
 | 
			
		||||
 | 
			
		||||
Как мы уже говорили, хакеры не будут подбирать ваш пароль вручную.  Они используют специальные программы и базы данных с миллионами скомпрометированных паролей.  Если вы не используете случайно сгенерированный пароль достаточной длины (например, с помощью менеджера паролей, такого как 1Password или Keychain в macOS), ваш пароль могут подобрать.
 | 
			
		||||
 | 
			
		||||
Конечно, можно использовать длинный и сложный пароль, но такой пароль сложно запомнить и легко ввести неправильно.  Чтобы решить эту проблему, можно вообще отказаться от аутентификации по паролю и использовать более безопасный способ — аутентификацию по SSH-ключам.
 | 
			
		||||
 | 
			
		||||
**Аутентификация по SSH-ключам** основана на использовании пары связанных ключей — **публичного** и **приватного**.  Публичный ключ помещается на сервер, а приватный ключ хранится у вас на компьютере.  При подключении по SSH клиент предъявляет серверу публичный ключ, а сервер, в свою очередь, шифрует с помощью него случайное сообщение и отправляет клиенту.  Клиент расшифровывает сообщение с помощью приватного ключа и отправляет результат обратно на сервер.  Если результат совпадает с ожидаемым, аутентификация считается успешной (таким образом, вам не нужно запоминать и вводить сложный пароль, достаточно лишь защитить свой приватный ключ от кражи).
 | 
			
		||||
 | 
			
		||||
::: warning
 | 
			
		||||
В этой статье мы рассмотрим использование **RSA-ключей**, поскольку они поддерживаются практически всеми SSH-клиентами и до сих пор считаются достаточно надёжными.  Однако это не единственный вариант.
 | 
			
		||||
 | 
			
		||||
Существуют и другие алгоритмы:
 | 
			
		||||
 | 
			
		||||
- **DSA**: этот алгоритм считается небезопасным, поэтому использовать его не рекомендуется.
 | 
			
		||||
- **ECDSA**: этот алгоритм обеспечивает высокий уровень безопасности при меньшем размере ключа, однако существуют подозрения, что в нём есть уязвимости, которые могут быть использованы АНБ.  Поэтому, если вы храните на своём сервере что-то действительно важное, лучше не использовать этот алгоритм.
 | 
			
		||||
- **Ed25519**: этот алгоритм похож на ECDSA, но считается более безопасным, поскольку его код открыт и доступен для изучения.
 | 
			
		||||
 | 
			
		||||
Поэтому, если ваше оборудование и программное обеспечение поддерживают этот алгоритм, рекомендуется использовать именно его.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
Итак, давайте настроим аутентификацию по SSH-ключам.
 | 
			
		||||
 | 
			
		||||
1. Запустите программу **PuTTYgen** (генератор ключей PuTTY).  Она находится в меню «Пуск» --> «Все программы» --> «PuTTY (64-bit)» --> «PuTTYgen».
 | 
			
		||||
 | 
			
		||||
   1. Нажмите кнопку **Generate**, чтобы сгенерировать ключи (поводите курсором мыши по пустому пространству окна, чтобы добавить энтропии).
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
   ::: warning
 | 
			
		||||
   На скриншоте показан пример генерации 2048-битного RSA-ключа.  Однако для достижения уровня безопасности, со comparableного с 256-битным ключом ECDSA/Ed25519, вам нужно сгенерировать 3072-битный RSA-ключ (т.е. ввести значение `3072` в поле «Number of bits in a generated key»).
 | 
			
		||||
   :::
 | 
			
		||||
 | 
			
		||||
   2. Вы можете установить пароль для защиты приватного ключа.
 | 
			
		||||
   3. Нажмите кнопку **Save public key**, чтобы сохранить публичный ключ в файл `id_rsa.pub`.
 | 
			
		||||
   4. Нажмите кнопку **Save private key**, чтобы сохранить приватный ключ в файл `id_rsa` (приватные ключи PuTTY имеют расширение `.ppk`).
 | 
			
		||||
   5. **Важно!** Скопируйте содержимое поля, выделенного красной рамкой (не забудьте прокрутить текст до конца!), и сохраните его в файл `authorized_keys`.  (Если вы будете использовать для этого VSCode, файл будет сохранён с расширением `.txt` — `authorized_keys.txt`.  Это нормально, позже мы переименуем файл).
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
2. Скопируйте публичный ключ на VPS в домашний каталог пользователя `vpsadmin`.
 | 
			
		||||
 | 
			
		||||
   1. Для этого используйте программу **WinSCP**, которую мы установили ранее.
 | 
			
		||||
   2. Скачайте и установите WinSCP с [официального сайта](https://winscp.net/eng/index.php).  При первом запуске программа предложит импортировать настройки из PuTTY.  Согласитесь на импорт.
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
   3. Если вам не предложили импортировать настройки или вы уже настроили WinSCP ранее, настройте подключение к VPS, как показано на скриншоте ниже.
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
   4. В левой части окна WinSCP отображаются файлы и папки на вашем компьютере, а в правой — на VPS.  Перейдите в папку с сохранёнными ключами на вашем компьютере.
 | 
			
		||||
 | 
			
		||||
   5. В правой части окна (VPS) по умолчанию открыт каталог `/home/vpsadmin/`.  Нажмите кнопку «Show hidden files» (скрытые файлы), чтобы отобразить скрытые файлы и папки.
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
   6. щёлкните правой кнопкой мыши в правой части окна (VPS) и создайте новую папку с именем `.ssh` (обратите внимание на точку в начале имени).
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
   7. Скопируйте файл `authorized_keys` в папку `.ssh`.
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
   8. При копировании файла `authorized_keys.txt` переименуйте его в `authorized_keys` (удалите расширение `.txt`).
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
   9. Весь процесс показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
3. Настройте SSH-сервер на использование ключей и отключите аутентификацию по паролю.
 | 
			
		||||
 | 
			
		||||
   1. Базовые команды Linux:
 | 
			
		||||
      | Номер | Команда | Описание                                  |
 | 
			
		||||
      | :----: | :------ | :--------------------------------------- |
 | 
			
		||||
      | `cmd-08` | `sudo`     | Выполнение команды от имени root       |
 | 
			
		||||
      | `cmd-09` | `chmod`    | Изменение прав доступа к файлам и папкам |
 | 
			
		||||
 | 
			
		||||
   2. Подключитесь к VPS по SSH (PuTTY).
 | 
			
		||||
 | 
			
		||||
   3. Измените права доступа к файлу `authorized_keys` на `600` (только владелец может читать и записывать файл).
 | 
			
		||||
 | 
			
		||||
      ```shell
 | 
			
		||||
      chmod 600 ~/.ssh/authorized_keys
 | 
			
		||||
      ```
 | 
			
		||||
 | 
			
		||||
   4. Откройте файл настроек SSH.  Мы уже делали это раньше, но теперь мы работаем не под пользователем `root`, а под пользователем `vpsadmin`.  У этого пользователя нет прав на редактирование системных файлов, поэтому нужно использовать команду `sudo`:
 | 
			
		||||
 | 
			
		||||
      ```shell
 | 
			
		||||
      sudo nano /etc/ssh/sshd_config
 | 
			
		||||
      ```
 | 
			
		||||
 | 
			
		||||
   5. Найдите (`Ctrl+W`) строку `PasswordAuthentication` и измените значение на `no`.
 | 
			
		||||
 | 
			
		||||
   6. Найдите (`Ctrl+W`) строку `PubkeyAuthentication` и измените значение на `yes`.  Сохраните изменения (`Ctrl+O`) и выйдите из редактора (`Ctrl+X`).
 | 
			
		||||
 | 
			
		||||
   7. Перезапустите SSH-сервер (не забудьте, что теперь вам нужно использовать команду `sudo`):
 | 
			
		||||
 | 
			
		||||
      ```shell
 | 
			
		||||
      sudo systemctl restart ssh
 | 
			
		||||
      ```
 | 
			
		||||
 | 
			
		||||
   8. Весь процесс показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
4. Теперь, когда на сервере настроен публичный ключ, нужно указать PuTTY путь к приватному ключу (не забудьте сохранить сеанс!).
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
5. Готово!  Теперь у вас настроена аутентификация по SSH-ключам, а аутентификация по паролю отключена.  Кроме того, вы сохранили имя пользователя и путь к приватному ключу в сеансе PuTTY.  Теперь для подключения к VPS достаточно будет выбрать сохранённый сеанс `VPS-SERVER` и нажать кнопку «Open».
 | 
			
		||||
 | 
			
		||||
   Если вы установили пароль для защиты приватного ключа, вам нужно будет ввести его при подключении, как показано на скриншоте ниже:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
6. Не забудьте настроить аутентификацию по ключам и в WinSCP.  В противном случае вы не сможете подключаться к серверу для передачи файлов:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
::: warning
 | 
			
		||||
Теперь для подключения к вашему серверу по SSH требуется авторизация по ключам.  Мы рассмотрели настройку PuTTY и WinSCP, но существует множество других программ, которые также используют SSH.  Настройте их самостоятельно при необходимости.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
## 4.8 Ваш прогресс
 | 
			
		||||
 | 
			
		||||
На этом этапе ваш VPS защищён базовыми мерами безопасности.  Конечно, это не панацея, но большинство автоматизированных атак вам уже не страшны!
 | 
			
		||||
 | 
			
		||||
Теперь у нас есть надёжный фундамент, и в следующей главе мы можем приступить к установке и настройке необходимых компонентов Xray (а именно, веб-сервера и SSL-сертификата).
 | 
			
		||||
 | 
			
		||||
> ⬛⬛⬛⬛⬜⬜⬜⬜ 50%
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
		 After Width: | Height: | Size: 39 KiB  | 
| 
		 After Width: | Height: | Size: 92 KiB  | 
| 
		 After Width: | Height: | Size: 308 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,195 @@
 | 
			
		|||
# 【Глава 5】 Создание веб-сайта
 | 
			
		||||
 | 
			
		||||
## 5.1 Зачем нужен веб-сайт?
 | 
			
		||||
 | 
			
		||||
Начинающие пользователи могут задаться вопросом: зачем создавать веб-сайт для обхода блокировок?  Я не программист, это же сложно?
 | 
			
		||||
 | 
			
		||||
Начнём с первого вопроса.  Веб-сайт нужен для того, чтобы:
 | 
			
		||||
 | 
			
		||||
1. Получить действующий SSL-сертификат (это очень важно).
 | 
			
		||||
2. Обеспечить маскировку трафика (fallback) и защититься от атак, направленных на выявление VPN-серверов.
 | 
			
		||||
3. Создать сайт-прикрытие (например, блог, облачное хранилище, медиа-портал, игровой сайт), который будет отображаться при прямом доступе к серверу, делая использование VPN менее заметным.
 | 
			
		||||
 | 
			
		||||
Теперь ответим на второй вопрос:
 | 
			
		||||
 | 
			
		||||
1. В этой статье мы создадим максимально простой веб-сайт, состоящий из **одного HTML-файла** и работающий на веб-сервере **Nginx**, чтобы решить поставленные выше задачи.  Это очень просто.
 | 
			
		||||
2. Этот веб-сайт не обязательно должен быть просто прикрытием.  Вы можете развивать его и превратить в полноценный проект.  Всё зависит от ваших желаний и возможностей.
 | 
			
		||||
3. Создание сайта-прикрытия и его продвижение — это отдельная большая тема, которая выходит за рамки этой статьи.  Если вам интересно, вы можете найти информацию об этом в интернете.
 | 
			
		||||
 | 
			
		||||
## 5.2 Подключение к VPS и установка Nginx
 | 
			
		||||
 | 
			
		||||
1. В этом разделе мы будем использовать команды, которые уже были подробно рассмотрены ранее.  Если вы что-то не понимаете, вернитесь и перечитайте предыдущие главы.
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   sudo apt update && sudo apt install nginx
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
2. После завершения установки Nginx запустится автоматически.  Откройте браузер на своём компьютере и введите адрес `http://100.200.300.400:80`.  Если вы увидите страницу, как на скриншоте ниже, значит, Nginx работает.
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
3. Если вы не видите страницу Nginx, возможно, вам нужно настроить Uncomplicated Firewall (UFW), стандартный брандмауэр в Debian, чтобы разрешить трафик на портах HTTP (80) и HTTPS (443).
 | 
			
		||||
 | 
			
		||||
   a. Чтобы проверить, введите:
 | 
			
		||||
   ```shell
 | 
			
		||||
   sudo ufw status
 | 
			
		||||
   ```
 | 
			
		||||
   b. Если вывод команды такой, как показано ниже, это означает, что порты 80 и 443 закрыты.  Выполните действия, описанные в пункте c.
 | 
			
		||||
   ```shell
 | 
			
		||||
   Status: active
 | 
			
		||||
   To                         Action      From
 | 
			
		||||
   --                         ------      ----
 | 
			
		||||
   22/tcp                     ALLOW       Anywhere
 | 
			
		||||
   22/tcp (v6)                ALLOW       Anywhere (v6)
 | 
			
		||||
   ```
 | 
			
		||||
   c. Чтобы открыть порты 80 и 443 для Nginx в UFW, выполните команду:
 | 
			
		||||
   ```shell
 | 
			
		||||
   sudo ufw allow 'Nginx Full'
 | 
			
		||||
   ```
 | 
			
		||||
   d. Снова проверьте статус UFW, выполнив команду из пункта a.  Если вы видите вывод, как показано ниже, значит, трафик для Nginx разрешён, и вы должны увидеть стандартную страницу Nginx.
 | 
			
		||||
   ```shell
 | 
			
		||||
   Status: active
 | 
			
		||||
   To                         Action      From
 | 
			
		||||
   --                         ------      ----
 | 
			
		||||
   22/tcp                     ALLOW       Anywhere
 | 
			
		||||
   Nginx Full                 ALLOW       Anywhere
 | 
			
		||||
   22/tcp (v6)                ALLOW       Anywhere (v6)
 | 
			
		||||
   Nginx Full (v6)            ALLOW       Anywhere (v6)
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
## 5.3 Создание простой веб-страницы
 | 
			
		||||
 | 
			
		||||
1. Базовые команды Linux:
 | 
			
		||||
   | Номер | Команда   | Описание                   |
 | 
			
		||||
   | :----: | :-------- | :------------------------ |
 | 
			
		||||
   | `cmd-10` | `mkdir`  | Создание папки          |
 | 
			
		||||
   | `cmd-11` | `systemctl reload` | Перезагрузка службы        |
 | 
			
		||||
 | 
			
		||||
2. Важные файлы конфигурации Linux:
 | 
			
		||||
   | Номер   | Путь к файлу           | Описание                  |
 | 
			
		||||
   | :------ | :-------------------- | :------------------------- |
 | 
			
		||||
   | `conf-02` | `/etc/nginx/nginx.conf` | Настройки Nginx           |
 | 
			
		||||
 | 
			
		||||
3. Создайте папку `/home/vpsadmin/www/webpage/` для вашего сайта и файл `index.html` внутри неё:
 | 
			
		||||
   ```shell
 | 
			
		||||
   mkdir -p ~/www/webpage/ && nano ~/www/webpage/index.html
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
::: warning
 | 
			
		||||
Если вы используете имя пользователя, отличное от `vpsadmin`, обратите внимание на символ `~` в этой команде (это важно для 5-го шага):
 | 
			
		||||
 | 
			
		||||
- Для пользователей, **отличных от `root`**: `~` эквивалентно `/home/имя_пользователя`.
 | 
			
		||||
- Для пользователя **`root`**: `~` эквивалентно `/root`.
 | 
			
		||||
  :::
 | 
			
		||||
 | 
			
		||||
4. Скопируйте следующий код в файл `index.html` и сохраните его (`Ctrl+O`, `Enter`), затем выйдите из редактора (`Ctrl+X`):
 | 
			
		||||
 | 
			
		||||
   ```html
 | 
			
		||||
   <html lang="">
 | 
			
		||||
     <!-- Text between angle brackets is an HTML tag and is not displayed.
 | 
			
		||||
           Most tags, such as the HTML and /HTML tags that surround the contents of
 | 
			
		||||
           a page, come in pairs; some tags, like HR, for a horizontal rule, stand
 | 
			
		||||
           alone. Comments, such as the text you're reading, are not displayed when
 | 
			
		||||
           the Web page is shown. The information between the HEAD and /HEAD tags is
 | 
			
		||||
           not displayed. The information between the BODY and /BODY tags is displayed.-->
 | 
			
		||||
     <head>
 | 
			
		||||
       <title>Enter a title, displayed at the top of the window.</title>
 | 
			
		||||
     </head>
 | 
			
		||||
     <!-- The information between the BODY and /BODY tags is displayed.-->
 | 
			
		||||
     <body>
 | 
			
		||||
       <h1>Enter the main heading, usually the same as the title.</h1>
 | 
			
		||||
       <p>Be <b>bold</b> in stating your key points. Put them in a list:</p>
 | 
			
		||||
       <ul>
 | 
			
		||||
         <li>The first item in your list</li>
 | 
			
		||||
         <li>The second item; <i>italicize</i> key words</li>
 | 
			
		||||
       </ul>
 | 
			
		||||
       <p>Improve your image by including an image.</p>
 | 
			
		||||
       <p>
 | 
			
		||||
         <img src="https://i.imgur.com/SEBww.jpg" alt="A Great HTML Resource" />
 | 
			
		||||
       </p>
 | 
			
		||||
       <p>
 | 
			
		||||
         Add a link to your favorite
 | 
			
		||||
         <a href="https://www.dummies.com/">Web site</a>. Break up your page
 | 
			
		||||
         with a horizontal rule or two.
 | 
			
		||||
       </p>
 | 
			
		||||
       <hr />
 | 
			
		||||
       <p>
 | 
			
		||||
         Finally, link to <a href="page2.html">another page</a> in your own Web
 | 
			
		||||
         site.
 | 
			
		||||
       </p>
 | 
			
		||||
       <!-- And add a copyright notice.-->
 | 
			
		||||
       <p>© Wiley Publishing, 2011</p>
 | 
			
		||||
     </body>
 | 
			
		||||
   </html>
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
5. Дайте другим пользователям право на чтение этого файла:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   chmod -R a+r .
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
6. Отредактируйте файл `nginx.conf` и перезапустите Nginx, чтобы он открывал созданную нами страницу `index.html` при обращении к порту `80`.
 | 
			
		||||
 | 
			
		||||
   1. Отредактируйте файл `nginx.conf`.
 | 
			
		||||
 | 
			
		||||
      ```shell
 | 
			
		||||
      sudo nano /etc/nginx/nginx.conf
 | 
			
		||||
      ```
 | 
			
		||||
 | 
			
		||||
   2. Добавьте следующий блок кода внутрь блока `http{}` и сохраните изменения (`Ctrl+O`, `Enter`), затем выйдите из редактора (`Ctrl+X`).  (Не забудьте заменить доменное имя на ваше реальное доменное имя, включая поддомен).
 | 
			
		||||
 | 
			
		||||
      ```
 | 
			
		||||
              server {
 | 
			
		||||
                      listen 80;
 | 
			
		||||
                      server_name поддомен.ваш_домен.com;
 | 
			
		||||
                      root /home/vpsadmin/www/webpage;
 | 
			
		||||
                      index index.html;
 | 
			
		||||
              }
 | 
			
		||||
      ```
 | 
			
		||||
 | 
			
		||||
      ::: warning Важно!
 | 
			
		||||
      Как уже говорилось в 3-м шаге, убедитесь, что путь `/home/vpsadmin/www/webpage` соответствует реальному пути к вашему файлу.
 | 
			
		||||
      :::
 | 
			
		||||
 | 
			
		||||
   3. Перезагрузите Nginx, чтобы применить изменения.
 | 
			
		||||
 | 
			
		||||
      ```shell
 | 
			
		||||
      sudo systemctl reload nginx
 | 
			
		||||
      ```
 | 
			
		||||
 | 
			
		||||
   4. Весь процесс настройки показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
   5. Теперь, если вы откроете в браузере адрес `http://поддомен.ваш_домен.com`, вы должны увидеть созданную нами страницу:
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
## 5.4 Распространённые ошибки
 | 
			
		||||
 | 
			
		||||
Вообще, если вы внимательно следовали инструкциям, ошибок быть не должно.  Однако на этом этапе многие пользователи сталкиваются с проблемами.  В чём же дело?  Ответ прост: **невнимательность**.  Здесь возможны только две ошибки, и обе они связаны с невнимательностью.
 | 
			
		||||
 | 
			
		||||
**Ошибки:**
 | 
			
		||||
 | 
			
		||||
- Путь `/home/vpsadmin/www/webpage` в файле `nginx.conf` не соответствует реальному пути к файлу `index.html`.  Nginx не может найти файл.
 | 
			
		||||
- Путь указан верно, но у Nginx нет прав на чтение файла.
 | 
			
		||||
 | 
			
		||||
**Причины:**
 | 
			
		||||
 | 
			
		||||
- Вы работаете не под пользователем `root`, но скопировали команды из статьи без изменений (как будто списали домашнее задание вместе с именем одноклассника).
 | 
			
		||||
- Вы работаете под пользователем `root`.
 | 
			
		||||
 | 
			
		||||
Если у вас возникли проблемы, вернитесь к разделу 5.3 и внимательно перечитайте пункты 3 и 6.2.
 | 
			
		||||
 | 
			
		||||
::: warning
 | 
			
		||||
В предыдущих главах мы много говорили о важности использования пользователя, отличного от `root`, и вся статья написана с учётом этого.  Поэтому проблемы, связанные с использованием `root`, не рассматриваются в рамках этой статьи.
 | 
			
		||||
 | 
			
		||||
Однако я уверен, что те, кто всё-таки работает под `root`, достаточно опытны и смогут решить эти проблемы самостоятельно.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
## 5.5 Ваш прогресс
 | 
			
		||||
 | 
			
		||||
Первый компонент Xray — веб-сайт — готов.  Давайте перейдём ко второму компоненту — SSL-сертификату!
 | 
			
		||||
 | 
			
		||||
> ⬛⬛⬛⬛⬛⬜⬜⬜ 62.5%
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,216 @@
 | 
			
		|||
# 【Глава 6】 Управление сертификатами
 | 
			
		||||
 | 
			
		||||
## 6.1 Получение SSL-сертификата
 | 
			
		||||
 | 
			
		||||
Теперь нам нужно получить действующий SSL-сертификат для нашего доменного имени, чтобы веб-сайт работал по протоколу HTTPS.  Это важнейший инструмент для обеспечения безопасности трафика при использовании современных VPN-сервисов, таких как Xray.
 | 
			
		||||
 | 
			
		||||
::: warning
 | 
			
		||||
Не используйте самоподписанные сертификаты.  Это ненамного упростит задачу, но создаст дополнительные риски (например, возможность атак типа «человек посередине»).
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
Мы будем использовать инструмент для управления сертификатами [`acme.sh`](https://github.com/acmesh-official/acme.sh).  Он простой, лёгкий, эффективный и умеет автоматически обновлять сертификаты.
 | 
			
		||||
 | 
			
		||||
Я уверен, что вы уже освоились с базовыми командами Linux, поэтому скриншоты с выводом команд, которые мы уже использовали ранее, будут опущены.  Если вы забыли, как выполнять ту или иную команду, вернитесь и перечитайте предыдущие главы.
 | 
			
		||||
 | 
			
		||||
## 6.2 Установка `acme.sh`
 | 
			
		||||
 | 
			
		||||
1. Базовые команды Linux:
 | 
			
		||||
   | Номер | Команда     | Описание                       |
 | 
			
		||||
   | :----: | :---------- | :---------------------------- |
 | 
			
		||||
   | `cmd-12` | `wget`     | Загрузка файла из интернета    |
 | 
			
		||||
   | `cmd-13` | `acme.sh` | Управление сертификатами    |
 | 
			
		||||
 | 
			
		||||
2. Запустите скрипт установки:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   wget -O -  https://get.acme.sh | sh
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
3. Сделайте команду `acme.sh` доступной:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   . .bashrc
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
4. Включите автоматическое обновление `acme.sh`:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   acme.sh --upgrade --auto-upgrade
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
5. Весь процесс установки показан на гифке ниже:
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
## 6.3 Тестовый запрос сертификата
 | 
			
		||||
 | 
			
		||||
Перед тем, как запросить настоящий сертификат, давайте сделаем тестовый запрос (`--issue --test`), чтобы убедиться, что всё настроено правильно.  Это позволит избежать превышения лимита на количество запросов Let's Encrypt (например, не более 5 неудачных запросов в час для одного домена и одного аккаунта).
 | 
			
		||||
 | 
			
		||||
1. Команда для тестового запроса сертификата (в этой статье мы будем использовать сертификаты **ECC**, поскольку на сегодняшний день нет причин не использовать их):
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   acme.sh --issue --server letsencrypt --test -d поддомен.ваш_домен.com -w /home/vpsadmin/www/webpage --keylength ec-256
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   ::: warning Пояснение
 | 
			
		||||
   Главное преимущество **ECC-сертификатов** — это меньший размер ключа, что означает более высокий уровень безопасности при том же размере ключа, а также более высокую скорость шифрования и расшифровки.  Например, ECC-256 обеспечивает уровень безопасности, примерно соответствующий RSA-3072, так зачем же отказываться от ECC?  Некоторые утверждают, что рукопожатие TLS с ECC-сертификатами происходит заметно быстрее.  Я считаю, что это преувеличение.  RSA-рукопожатие и так достаточно быстрое, а разница в скорости, если она и есть, составляет всего несколько миллисекунд и практически незаметна.
 | 
			
		||||
 | 
			
		||||
   Конечно, если вам нужно обеспечить совместимость с очень старыми устройствами, то можно использовать и RSA-сертификат.
 | 
			
		||||
   :::
 | 
			
		||||
 | 
			
		||||
2. В случае успеха вы увидите примерно такой вывод:
 | 
			
		||||
 | 
			
		||||
   ```log
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:12 AM EST] Using ACME_DIRECTORY: https://acme-staging-v02.api.letsencrypt.org/directory
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] Using CA: https://acme-staging-v02.api.letsencrypt.org/directory
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] Create account key ok.
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] Registering account: https://acme-staging-v02.api.letsencrypt.org/directory
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] Registered
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] ACCOUNT_THUMBPRINT='CU6qmPKuRqhyTAIrF4swosR375194z_1ddUlWef8xDc'
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] Creating domain key
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] The domain key is here: /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/поддомен.ваш_домен.com.key
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] Single domain='поддомен.ваш_домен.com'
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:13 AM EST] Getting domain auth token for each domain
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:14 AM EST] Getting webroot for domain='поддомен.ваш_домен.com'
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:14 AM EST] Verifying: поддомен.ваш_домен.com
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:23 AM EST] Pending
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:25 AM EST] Success
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:25 AM EST] Verify finished, start to sign.
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:25 AM EST] Lets finalize the order.
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:25 AM EST] Le_OrderFinalize='https://acme-staging-v02.api.letsencrypt.org/acme/finalize/490205995/7730242871'
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:25 AM EST] Downloading cert.
 | 
			
		||||
   [Wed 30 Dec 2022 04:25:25 AM EST] Le_LinkCert='https://acme-staging-v02.api.letsencrypt.org/acme/cert/xujss5xt8i38waubafz2xujss5xt8i38waubz2'
 | 
			
		||||
   [Wed 30 Dec 2022 15:21:52 AM EST] Cert success.
 | 
			
		||||
   --BEGIN CERTIFICAT--
 | 
			
		||||
   sxlYqPvWreKgD5b8JyOQX0Yg2MLoRUoDyqVkd31PthIiwzdckoh5eD3JU7ysYBtN
 | 
			
		||||
   cTFK4LGOfjqi8Ks87EVJdK9IaSAu7ZC6h5to0eqpJ5PLhaM3e6yJBbHmYA8w1Smp
 | 
			
		||||
   wAb3tdoHZ9ttUIm9CrSzvDBt6BBT6GqYdDamMyCYBLooMyDEM4CUFsOzCRrEqqvC
 | 
			
		||||
   2mTTEmhvpojo5rhdTSJxibozyNWTGwoTj0v9pTUeQcGqLIzqi4DowjBHD5guwRid
 | 
			
		||||
   SjAFnm6JT2xUQgWFm58A1gv1OhbH1TRPUUmtE1nFEN7YiSjI4xgxqAXT3CLD2EUb
 | 
			
		||||
   wXlUrO6c75zSsQP4bRMzgOjJUqHtSb6IEqELzt4M7KzL5iCOruCChCo2DZxUwvVX
 | 
			
		||||
   tOoaAyQJzCbTqE6aUqwiKi3gVyoxvDP9mI5JdRYzsDL6GVud7EHPnYeMl9ubLZAK
 | 
			
		||||
   0vg84mbMP3f6mYM4KRa1cqiyOIcQPT4AzGFYVv4sm049bZQg7sd0Bz9CaFvE7yDA
 | 
			
		||||
   1y17XlgCDnsjxl66bqI1vkENN9XT5xeFHONqc18b5fZEKSIvdX7iWPFWp1PyMPpG
 | 
			
		||||
   0pMCP1EymZNFxIMJLgbWqExwLWfPc5Ib3PjBaIqhXPnw6sT2MQSxXwDupq1UJVhV
 | 
			
		||||
   7E3hQRVlwI4CXi6WLHJMNvNRyyK87gCrLH1bKYsPeRVaz77poWBq49zwBCts6hPY
 | 
			
		||||
   IeF4ltGXyANNIOPEi8vy138fRU4LYh81d8FjOtFfJZogMjwhfNvapqxPMsioPlmX
 | 
			
		||||
   TnZu0n7setrVNUEfTMHWqPpDgk5MPrWLA4LapqaDfEX4pwnQJLMwMi6s94z165c0
 | 
			
		||||
   iMRSKA1yU5zqv8aNsDfPoY4OkSPWs4MaXgRRSLBsUfZ15DwQXPk76kegHIyxWvwF
 | 
			
		||||
   tYw9HKR5QCMK66fa0z4aJoFVFLK0IIOGEZOanRFUCnkLUDd3QZ3YU8lEcrj7Uxos
 | 
			
		||||
   haiRNICyC6UfsCJ94a8vcNyMosPv3xBLMp19WXgiFYqEFQkntkv1FLRI35fjeJmg
 | 
			
		||||
   0fmD9VG9bkzGPHihJgQLRlCHasGf6XrdfkSsODAyCUHUHJ0RzqF4YEZMcxDxzuQ2
 | 
			
		||||
   YO7bFwj7S3mUdVPZ6MPasjxdyBjJgEBMch2uy4AhmudXfEBQBye8W6ZI4ztZjLVV
 | 
			
		||||
   FmP4SIuaNUmMe20TjR8b9NVC96AhxOanWT3mRROsdokpKQGTJvl27EHH8KuAbUOc
 | 
			
		||||
   G6KtPy4wslNZNXWcBy9n63RcWak12r7kAIFn38tZxmlw2WUKoRSMAH64GcDTjRQd
 | 
			
		||||
   Am65hBHzvGrj93wEuVNIebvNIsJOlng3HFjpIxVqKGMCIfWIKGDE3YzK3p4LbGZ6
 | 
			
		||||
   NZFQWYJLNVf2M9CCJfbEImPYgvctrxl39H6KVYPCw1SAdaj9NneUqmREOQkKoEB0
 | 
			
		||||
   x6PmNirbMscHhQPSC0JQaqUgaQFgba1ALmzRYAnYhNb0twkTxWbY7DBkAarxqMIp
 | 
			
		||||
   yiLKcBFc5H7dgJCImo7us7aJeftC44uWkPIjw9AKH=
 | 
			
		||||
   --END CERTIFICAT--
 | 
			
		||||
   [Wed 30 Dec 2022 15:21:52 AM EST] Your cert is in  /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/поддомен.ваш_домен.com.cer
 | 
			
		||||
   [Wed 30 Dec 2022 15:21:52 AM EST] Your cert key is in  /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/поддомен.ваш_домен.com.key
 | 
			
		||||
   [Wed 30 Dec 2022 15:21:52 AM EST] The intermediate CA cert is in  /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/ca.cer
 | 
			
		||||
   [Wed 30 Dec 2022 15:21:52 AM EST] And the full chain certs is there:  /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/fullchain.cer
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
3. Обратите внимание, что мы запросили тестовый сертификат, который нельзя использовать в реальной среде.  Он нужен только для проверки корректности настроек.  Если вы посмотрите на вывод команды, то увидите, что сертификат был выпущен сервером `https://acme-staging-v02.api.letsencrypt.org`.  Слово `staging` означает, что это тестовый сервер Let's Encrypt.
 | 
			
		||||
 | 
			
		||||
4. Если на этом этапе возникли ошибки, выполните следующую команду, чтобы увидеть подробную информацию о процессе запроса сертификата:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   acme.sh --issue --server letsencrypt --test -d поддомен.ваш_домен.com -w /home/vpsadmin/www/webpage --keylength ec-256 --debug
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   Мы просто добавили параметр `--debug` в конец команды.
 | 
			
		||||
 | 
			
		||||
5. Если тестовый запрос выполнен успешно, можно переходить к запросу настоящего сертификата (тестовый сертификат удалять не нужно, он будет автоматически перезаписан настоящим сертификатом).
 | 
			
		||||
 | 
			
		||||
## 6.4 Запрос настоящего сертификата
 | 
			
		||||
 | 
			
		||||
1. Команда для запроса настоящего сертификата (мы просто убираем параметр `--test` и добавляем параметр `--force`):
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   acme.sh --set-default-ca --server letsencrypt
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   acme.sh --issue -d поддомен.ваш_домен.com -w /home/vpsadmin/www/webpage --keylength ec-256 --force
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   ::: warning Пояснение
 | 
			
		||||
   Параметр `--force` используется для принудительного обновления сертификата до истечения срока действия старого.  В предыдущем шаге мы получили тестовый сертификат, который всё ещё действителен.  Поэтому нам нужно использовать этот параметр.
 | 
			
		||||
   :::
 | 
			
		||||
 | 
			
		||||
2. В случае успеха вы увидите примерно такой же вывод, как и в предыдущем шаге:
 | 
			
		||||
 | 
			
		||||
   ```log
 | 
			
		||||
   vpsadmin@vps-server:~$ acme.sh --issue -d поддомен.ваш_домен.com -w /home/vpsadmin/www/webpage --keylength ec-256
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Using CA: https://acme-v02.api.letsencrypt.org/directory
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Creating domain key
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] The domain key is here: /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/поддомен.ваш_домен.com.key
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Single domain='поддомен.ваш_домен.com'
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Getting domain auth token for each domain
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Getting webroot for domain='поддомен.ваш_домен.com'
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Verifying: поддомен.ваш_домен.com
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Pending
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Success
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Verify finished, start to sign.
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Lets finalize the order.
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/490205996/7730242872'
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Downloading cert.
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:51 AM EST] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/vsxvk0oldnuobe51ayxz4dms62sk2dwmw9zhuw'
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:52 AM EST] Cert success.
 | 
			
		||||
   --BEGIN CERTIFICAT--
 | 
			
		||||
   sxlYqPvWreKgD5b8JyOQX0Yg2MLoRUoDyqVkd31PthIiwzdckoh5eD3JU7ysYBtN
 | 
			
		||||
   cTFK4LGOfjqi8Ks87EVJdK9IaSAu7ZC6h5to0eqpJ5PLhaM3e6yJBbHmYA8w1Smp
 | 
			
		||||
   wAb3tdoHZ9ttUIm9CrSzvDBt6BBT6GqYdDamMyCYBLooMyDEM4CUFsOzCRrEqqvC
 | 
			
		||||
   2mTTEmhvpojo5rhdTSJxibozyNWTGwoTj0v9pTUeQcGqLIzqi4DowjBHD5guwRid
 | 
			
		||||
   SjAFnm6JT2xUQgWFm58A1gv1OhbH1TRPUUmtE1nFEN7YiSjI4xgxqAXT3CLD2EUb
 | 
			
		||||
   wXlUrO6c75zSsQP4bRMzgOjJUqHtSb6IEqELzt4M7KzL5iCOruCChCo2DZxUwvVX
 | 
			
		||||
   tOoaAyQJzCbTqE6aUqwiKi3gVyoxvDP9mI5JdRYzsDL6GVud7EHPnYeMl9ubLZAK
 | 
			
		||||
   0vg84mbMP3f6mYM4KRa1cqiyOIcQPT4AzGFYVv4sm049bZQg7sd0Bz9CaFvE7yDA
 | 
			
		||||
   1y17XlgCDnsjxl66bqI1vkENN9XT5xeFHONqc18b5fZEKSIvdX7iWPFWp1PyMPpG
 | 
			
		||||
   0pMCP1EymZNFxIMJLgbWqExwLWfPc5Ib3PjBaIqhXPnw6sT2MQSxXwDupq1UJVhV
 | 
			
		||||
   7E3hQRVlwI4CXi6WLHJMNvNRyyK87gCrLH1bKYsPeRVaz77poWBq49zwBCts6hPY
 | 
			
		||||
   IeF4ltGXyANNIOPEi8vy138fRU4LYh81d8FjOtFfJZogMjwhfNvapqxPMsioPlmX
 | 
			
		||||
   TnZu0n7setrVNUEfTMHWqPpDgk5MPrWLA4LapqaDfEX4pwnQJLMwMi6s94z165c0
 | 
			
		||||
   iMRSKA1yU5zqv8aNsDfPoY4OkSPWs4MaXgRRSLBsUfZ15DwQXPk76kegHIyxWvwF
 | 
			
		||||
   tYw9HKR5QCMK66fa0z4aJoFVFLK0IIOGEZOanRFUCnkLUDd3QZ3YU8lEcrj7Uxos
 | 
			
		||||
   haiRNICyC6UfsCJ94a8vcNyMosPv3xBLMp19WXgiFYqEFQkntkv1FLRI35fjeJmg
 | 
			
		||||
   0fmD9VG9bkzGPHihJgQLRlCHasGf6XrdfkSsODAyCUHUHJ0RzqF4YEZMcxDxzuQ2
 | 
			
		||||
   YO7bFwj7S3mUdVPZ6MPasjxdyBjJgEBMch2uy4AhmudXfEBQBye8W6ZI4ztZjLVV
 | 
			
		||||
   FmP4SIuaNUmMe20TjR8b9NVC96AhxOanWT3mRROsdokpKQGTJvl27EHH8KuAbUOc
 | 
			
		||||
   G6KtPy4wslNZNXWcBy9n63RcWak12r7kAIFn38tZxmlw2WUKoRSMAH64GcDTjRQd
 | 
			
		||||
   Am65hBHzvGrj93wEuVNIebvNIsJOlng3HFjpIxVqKGMCIfWIKGDE3YzK3p4LbGZ6
 | 
			
		||||
   NZFQWYJLNVf2M9CCJfbEImPYgvctrxl39H6KVYPCw1SAdaj9NneUqmREOQkKoEB0
 | 
			
		||||
   x6PmNirbMscHhQPSC0JQaqUgaQFgba1ALmzRYAnYhNb0twkTxWbY7DBkAarxqMIp
 | 
			
		||||
   yiLKcBFc5H7dgJCImo7us7aJeftC44uWkPM=
 | 
			
		||||
   --END CERTIFICAT--
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:52 AM EST] Your cert is in  /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/поддомен.ваш_домен.com.cer
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:52 AM EST] Your cert key is in  /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/поддомен.ваш_домен.com.key
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:52 AM EST] The intermediate CA cert is in  /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/ca.cer
 | 
			
		||||
   [Wed 30 Dec 2022 15:22:52 AM EST] And the full chain certs is there:  /home/vpsadmin/.acme.sh/поддомен.ваш_домен.com_ecc/fullchain.cer
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
3. Обратите внимание, что теперь сертификат выдан сервером `https://acme-v02.api.letsencrypt.org` (без слова `staging`), т.е. это настоящий, действующий сертификат.
 | 
			
		||||
 | 
			
		||||
## 6.5 Установка сертификата
 | 
			
		||||
 | 
			
		||||
1. После того, как сертификат получен, его нужно установить в определённое место и указать путь к нему в файле конфигурации:
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   vpsadmin@vps-server:~$ acme.sh --installcert -d поддомен.ваш_домен.com --cert-file /путь/к/папке/cert.crt --key-file /путь/к/папке/cert.key --fullchain-file /путь/к/папке/fullchain.crt --ecc
 | 
			
		||||
   [Mon 14 Feb 2022 03:00:25 PM CST] Installing cert to: /etc/xray/cert/cert.crt
 | 
			
		||||
   [Mon 14 Feb 2022 03:00:25 PM CST] Installing key to: /etc/xray/cert/cert.key
 | 
			
		||||
   [Mon 14 Feb 2022 03:00:25 PM CST] Installing full chain to: /etc/xray/cert/fullchain.crt
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
## 6.6 Ваш прогресс
 | 
			
		||||
 | 
			
		||||
Наконец-то все необходимые компоненты Xray готовы!  Мы подошли к самому интересному — установке и настройке самого Xray!
 | 
			
		||||
 | 
			
		||||
> ⬛⬛⬛⬛⬛⬛⬜⬜ 75%
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
		 After Width: | Height: | Size: 170 KiB  | 
| 
		 After Width: | Height: | Size: 128 KiB  | 
| 
		 After Width: | Height: | Size: 24 KiB  | 
| 
		 After Width: | Height: | Size: 101 KiB  | 
| 
		 After Width: | Height: | Size: 110 KiB  | 
| 
		 After Width: | Height: | Size: 48 KiB  | 
| 
		 After Width: | Height: | Size: 404 KiB  | 
| 
		 After Width: | Height: | Size: 211 KiB  | 
| 
		 After Width: | Height: | Size: 27 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,574 @@
 | 
			
		|||
# 【Глава 7】Настройка Xray на сервере
 | 
			
		||||
 | 
			
		||||
## 7.1 Познать многое, усвоить нужное; копить постепенно, тратить осмотрительно
 | 
			
		||||
 | 
			
		||||
Во время написания этого руководства один знакомый в шутку заметил: "Твое руководство уже 6 глав публикуется, а до Xray всё никак не дойдёт. Кто не знает, подумает, что это руководство "Создание сайта с нуля". (И ведь не поспоришь! 😂)
 | 
			
		||||
 | 
			
		||||
На самом деле такая структура — результат моего осознанного решения. Ведь только заложив прочный фундамент, можно в дальнейшем двигаться вперёд семимильными шагами. Я видел в чатах много новичков, которые не могут правильно использовать даже `nano`, не говоря уже о `WinSCP`. Из-за этого их `config.json`, написанные вручную на удалённом сервере, пестрят ошибками, а поиск и исправление этих ошибок превращается в мучение.
 | 
			
		||||
 | 
			
		||||
::: warning
 | 
			
		||||
Пройдя первые 6 глав, мы вместе с вами преодолели несколько важных этапов: освоили базовые операции Linux, научились удалённо управлять VPS, разобрались с установкой веб-сервера, управлением доменными именами, получением SSL-сертификатов. Оглядываясь назад, разве всё это кажется таким уж сложным? Теперь, имея такой солидный багаж знаний, мы подойдём к установке и настройке Xray с чувством лёгкости и уверенности, ведь всё уже готово!
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
Дальнейшие шаги предельно просты:
 | 
			
		||||
 | 
			
		||||
1. Установка
 | 
			
		||||
2. Настройка (например, установка TLS-сертификата, настройка `config.json`)
 | 
			
		||||
3. Запуск
 | 
			
		||||
4. Оптимизация (например, обновление ядра, включение `bbr`, автоматическое перенаправление `http`-запросов на `https` и т. д.)
 | 
			
		||||
 | 
			
		||||
## 7.2 Установка Xray
 | 
			
		||||
 | 
			
		||||
Xray основан на проекте с открытым исходным кодом [xray-core](https://github.com/XTLS/Xray-core) (лицензия `MPL 2.0`). Запущенный на сервере, скомпилированный бинарный файл этого проекта,  работает как серверная часть Xray; запущенный на локальном компьютере, он становится клиентской частью. Основное различие заключается в **конфигурации**.
 | 
			
		||||
 | 
			
		||||
Для установки воспользуемся официальным скриптом. Он предлагает несколько вариантов установки. Вы можете ознакомиться с ними в [репозитории скриптов](https://github.com/XTLS/Xray-install). **В данном руководстве мы будем использовать установку от имени непривилегированного пользователя**.
 | 
			
		||||
 | 
			
		||||
На момент написания руководства в скрипте есть небольшая ошибка при установке от имени непривилегированного пользователя, поэтому мы выполним эти шаги вручную. Заодно рассмотрим команду удаления файлов в Linux.
 | 
			
		||||
 | 
			
		||||
1.  Базовые команды Linux:
 | 
			
		||||
 | 
			
		||||
    | Номер |   Команда  | Описание        |
 | 
			
		||||
    | :----: | :--------: | :-------------- |
 | 
			
		||||
    | `cmd-14` |    `rm`     | Удаление файлов |
 | 
			
		||||
 | 
			
		||||
2.  Скачиваем установочный скрипт:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    wget https://github.com/XTLS/Xray-install/raw/main/install-release.sh
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
3.  Запускаем установку:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo bash install-release.sh
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
4.  После завершения установки удаляем скрипт:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    rm ~/install-release.sh
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    ::: warning
 | 
			
		||||
    При использовании команды `rm` для удаления файлов по умолчанию подразумевается удаление файлов в текущей директории. Однако **я всё же указал полный путь**: `~/install-release.sh`. Это моя привычка, которая повышает безопасность при использовании `rm`. Думаю, вы слышали истории про "программиста, который удалил базу данных и сбежал". 😉
 | 
			
		||||
    :::
 | 
			
		||||
 | 
			
		||||
5.  Весь процесс показан на гифке:
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
## 7.3 Установка TLS-сертификата для Xray
 | 
			
		||||
 | 
			
		||||
Хотя мы уже получили TLS-сертификат, согласно [официальной документации `acme.sh`](https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E#3-copy%E5%AE%89%E8%A3%85-%E8%AF%81%E4%B9%A6), не рекомендуется использовать полученные файлы сертификата напрямую. Правильный способ — использовать команду `--install-cert` для установки сертификата для нужного приложения. Давайте установим сертификат для `xray-core`.
 | 
			
		||||
 | 
			
		||||
1.  Чтобы избежать проблем с правами доступа при работе от имени непривилегированного пользователя, создадим папку для сертификатов в домашней директории пользователя `vpsadmin`:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    mkdir ~/xray_cert
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
2.  Используем команду `--install-cert` из `acme.sh` для установки (копирования) файлов сертификата:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    acme.sh --install-cert -d sub.yourdomain.com --ecc \
 | 
			
		||||
               --fullchain-file ~/xray_cert/xray.crt \
 | 
			
		||||
               --key-file ~/xray_cert/xray.key
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
3.  По умолчанию файл `xray.key` недоступен для чтения другим пользователям, поэтому нужно выдать права на чтение:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    chmod +r ~/xray_cert/xray.key
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
4.  Процесс довольно простой, поэтому обойдёмся без гифки:
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
5.  `acme.sh` проверяет срок действия сертификата каждые 60 дней и автоматически обновляет его при необходимости. Однако, насколько мне известно, он не устанавливает новый сертификат для `xray-core` автоматически. Поэтому нам нужно добавить автоматическое задание cron, которое будет делать это за нас.
 | 
			
		||||
 | 
			
		||||
    1.  Базовые команды Linux:
 | 
			
		||||
 | 
			
		||||
        | Номер |   Команда   | Описание                               |
 | 
			
		||||
        | :----: | :----------: | :------------------------------------ |
 | 
			
		||||
        | `cmd-15` | `crontab -e` | Редактирование crontab текущего пользователя |
 | 
			
		||||
 | 
			
		||||
    2.  Создаём файл скрипта (`xray-cert-renew.sh`):
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        nano ~/xray_cert/xray-cert-renew.sh
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
    3.  Копируем в него следующий код, заменив `sub.yourdomain.com` на своё доменное имя, и сохраняем файл:
 | 
			
		||||
 | 
			
		||||
        ```bash
 | 
			
		||||
        #!/bin/bash
 | 
			
		||||
 | 
			
		||||
        /home/vpsadmin/.acme.sh/acme.sh --install-cert -d sub.yourdomain.com --ecc --fullchain-file /home/vpsadmin/xray_cert/xray.crt --key-file /home/vpsadmin/xray_cert/xray.key
 | 
			
		||||
        echo "Xray Certificates Renewed"
 | 
			
		||||
 | 
			
		||||
        chmod +r /home/vpsadmin/xray_cert/xray.key
 | 
			
		||||
        echo "Read Permission Granted for Private Key"
 | 
			
		||||
 | 
			
		||||
        sudo systemctl restart xray
 | 
			
		||||
        echo "Xray Restarted"
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
        ::: warning
 | 
			
		||||
        Как заметили пользователи, `acme.sh` имеет команду `reloadcmd`, которая позволяет выполнить произвольную команду после обновления сертификата. Таким образом, можно настроить автоматическую установку сертификата для `Xray`. Однако, поскольку `crontab` — очень полезный и часто используемый инструмент в Linux, в данном руководстве мы будем использовать его для обновления сертификата `Xray`. (Подробнее о команде `reloadcmd` можно прочитать в [документации `acme.sh`](https://github.com/acmesh-official/acme.sh)).
 | 
			
		||||
 | 
			
		||||
        Кроме того, в момент записи гифки в скрипт не была добавлена команда перезапуска `Xray`, поскольку в планах разработчиков `Xray` — поддержка **горячего обновления сертификатов**. Это означает, что `Xray` сможет автоматически обнаруживать обновление сертификата и перезагружать его без необходимости перезапуска. После добавления этой функции я обновлю конфигурацию `config.json`, включив эту настройку, и удалю команду перезапуска из скрипта.
 | 
			
		||||
        :::
 | 
			
		||||
 | 
			
		||||
    4.  Делаем скрипт исполняемым:
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        chmod +x ~/xray_cert/xray-cert-renew.sh
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
    5.  Запускаем `crontab -e`, чтобы добавить задание на автоматическое выполнение `xray-cert-renew.sh` каждый месяц (не используйте `sudo`, так как мы добавляем задание для пользователя `vpsadmin`. При первом запуске `crontab` вам будет предложено выбрать редактор. Выбираем знакомый нам `nano`!):
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        crontab -e
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
    6.  Добавляем следующую строку в конец файла и сохраняем его:
 | 
			
		||||
 | 
			
		||||
        ```
 | 
			
		||||
        # 1:00am, 1st day each month, run `xray-cert-renew.sh`
 | 
			
		||||
        0 1 1 * *   bash /home/vpsadmin/xray_cert/xray-cert-renew.sh
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
    7.  Весь процесс показан на гифке:
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
## 7.4 Настройка Xray
 | 
			
		||||
 | 
			
		||||
Для начала можете ознакомиться с [примерами конфигурации VLESS](https://github.com/XTLS/Xray-examples). В этом руководстве мы будем использовать официальный пример для настройки максимально простого варианта: **один входящий прокси-сервер VLESS + перенаправление с порта 80**. Такая конфигурация обеспечит максимальную скорость и необходимый уровень безопасности в большинстве случаев.
 | 
			
		||||
 | 
			
		||||
1.  Генерируем валидный `UUID` и сохраняем его (грубо говоря, `UUID` — это уникальный идентификатор, который можно сравнить с отпечатком пальца):
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    xray uuid
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
2.  Создаём файлы и папки для логов:
 | 
			
		||||
 | 
			
		||||
    1.  Базовые команды Linux:
 | 
			
		||||
 | 
			
		||||
        | Номер | Команда | Описание                |
 | 
			
		||||
        | :----: | :-----: | :---------------------- |
 | 
			
		||||
        | `cmd-16` | `touch`  | Создание пустого файла |
 | 
			
		||||
 | 
			
		||||
    2.  Создаём папку для логов в домашней директории пользователя `vpsadmin`:
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        mkdir ~/xray_log
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
    3.  Создаём два файла для логов (логи доступа и логи ошибок):
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        touch ~/xray_log/access.log && touch ~/xray_log/error.log
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
        ::: warning
 | 
			
		||||
        Это не стандартное расположение файлов логов `Xray`. Мы используем его, чтобы избежать проблем с правами доступа, которые могут возникнуть у новичков. Когда разберётесь, рекомендуется использовать стандартные пути: `/var/log/xray/access.log` и `/var/log/xray/error.log`.
 | 
			
		||||
        :::
 | 
			
		||||
 | 
			
		||||
    4.  По умолчанию Xray запускается от имени пользователя `nobody`, поэтому нужно дать другим пользователям права на запись в файлы логов (`*.log` — это все файлы с расширением `log`. Здесь проявляются преимущества использования командной строки):
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        chmod a+w ~/xray_log/*.log
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
3.  Создаём файл конфигурации `Xray` с помощью `nano`:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo nano /usr/local/etc/xray/config.json
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
4.  Копируем в него следующий код и вставляем сгенерированный ранее `UUID` в строку 61: `"id": "",` (должно получиться что-то вроде `"id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid"`). В этом файле конфигурации я добавил свои комментарии, чтобы вам было проще понять, за что отвечает каждый модуль.
 | 
			
		||||
 | 
			
		||||
    ```json
 | 
			
		||||
    // ССЫЛКИ:
 | 
			
		||||
    // https://github.com/XTLS/Xray-examples
 | 
			
		||||
    // https://xtls.github.io/config/
 | 
			
		||||
    // Типичный конфигурационный файл, как для сервера, так и для клиента, состоит из 5 основных частей. Разберём их по полочкам:
 | 
			
		||||
    // ┌─ 1_log Настройки логирования - что и куда писать в лог (чтобы было проще искать ошибки)
 | 
			
		||||
    // ├─ 2_dns Настройки DNS - как выполнять DNS-запросы (защита от DNS-спуфинга, защита от слежки, предотвращение маршрутизации трафика на китайские серверы и т. д.)
 | 
			
		||||
    // ├─ 3_routing Настройки маршрутизации - как обрабатывать трафик (фильтрация рекламы, разделение трафика для разных стран)
 | 
			
		||||
    // ├─ 4_inbounds Настройки входящих подключений - какой трафик может поступать на Xray
 | 
			
		||||
    // └─ 5_outbounds Настройки исходящих подключений - куда направлять трафик, исходящий от Xray
 | 
			
		||||
    {
 | 
			
		||||
      // 1_Настройки логирования
 | 
			
		||||
      "log": {
 | 
			
		||||
        "loglevel": "warning", // Уровень детализации логов: "none", "error", "warning", "info", "debug" (от меньшего к большему)
 | 
			
		||||
        "access": "/home/vpsadmin/xray_log/access.log", // Файл для записи логов доступа
 | 
			
		||||
        "error": "/home/vpsadmin/xray_log/error.log" // Файл для записи логов ошибок
 | 
			
		||||
      },
 | 
			
		||||
      // 2_Настройки DNS
 | 
			
		||||
      "dns": {
 | 
			
		||||
        "servers": [
 | 
			
		||||
          "https+local://1.1.1.1/dns-query", // Используем DoH-сервер 1.1.1.1 в первую очередь. Это снижает скорость, но защищает от слежки со стороны интернет-провайдера
 | 
			
		||||
          "localhost"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      // 3_Настройки маршрутизации
 | 
			
		||||
      "routing": {
 | 
			
		||||
        "domainStrategy": "IPIfNonMatch",
 | 
			
		||||
        "rules": [
 | 
			
		||||
          // 3.1 Предотвращение проблем с локальной маршрутизацией: атаки на внутреннюю сеть, неправильная обработка локальных адресов и т. д.
 | 
			
		||||
          {
 | 
			
		||||
            "type": "field",
 | 
			
		||||
            "ip": [
 | 
			
		||||
              "geoip:private" // Условие: адреса из списка "private" в файле geoip (локальные адреса)
 | 
			
		||||
            ],
 | 
			
		||||
            "outboundTag": "block" // Действие: отправить трафик на исходящее подключение "block" (блокировка)
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            // 3.2 Предотвращение прямого подключения к китайским серверам
 | 
			
		||||
            "type": "field",
 | 
			
		||||
            "ip": ["geoip:cn"],
 | 
			
		||||
            "outboundTag": "block"
 | 
			
		||||
          },
 | 
			
		||||
          // 3.3 Блокировка рекламы
 | 
			
		||||
          {
 | 
			
		||||
            "type": "field",
 | 
			
		||||
            "domain": [
 | 
			
		||||
              "geosite:category-ads-all" // Условие: домены из списка "category-ads-all" в файле geosite (рекламные домены)
 | 
			
		||||
            ],
 | 
			
		||||
            "outboundTag": "block" // Действие: отправить трафик на исходящее подключение "block" (блокировка)
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      // 4_Настройки входящих подключений
 | 
			
		||||
      // 4.1 Здесь указан только один простейший входящий прокси-сервер vless+xtls, так как это самый производительный режим Xray. При необходимости вы можете добавить другие прокси-серверы, используя этот шаблон.
 | 
			
		||||
      "inbounds": [
 | 
			
		||||
        {
 | 
			
		||||
          "port": 443,
 | 
			
		||||
          "protocol": "vless",
 | 
			
		||||
          "settings": {
 | 
			
		||||
            "clients": [
 | 
			
		||||
              {
 | 
			
		||||
                "id": "", // Укажите свой UUID
 | 
			
		||||
                "flow": "xtls-rprx-vision",
 | 
			
		||||
                "level": 0,
 | 
			
		||||
                "email": "vpsadmin@yourdomain.com"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "decryption": "none",
 | 
			
		||||
            "fallbacks": [
 | 
			
		||||
              {
 | 
			
		||||
                "dest": 80 // Перенаправлять на порт 80 по умолчанию
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          "streamSettings": {
 | 
			
		||||
            "network": "tcp",
 | 
			
		||||
            "security": "tls",
 | 
			
		||||
            "tlsSettings": {
 | 
			
		||||
              "alpn": "http/1.1",
 | 
			
		||||
              "certificates": [
 | 
			
		||||
                {
 | 
			
		||||
                  "certificateFile": "/home/vpsadmin/xray_cert/xray.crt",
 | 
			
		||||
                  "keyFile": "/home/vpsadmin/xray_cert/xray.key"
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      // 5_Настройки исходящих подключений
 | 
			
		||||
      "outbounds": [
 | 
			
		||||
        // 5.1 Первое исходящее подключение - это правило по умолчанию. freedom - это прямое подключение (VPS и так находится во внешней сети)
 | 
			
		||||
        {
 | 
			
		||||
          "tag": "direct",
 | 
			
		||||
          "protocol": "freedom"
 | 
			
		||||
        },
 | 
			
		||||
        // 5.2 Правило блокировки. Протокол blackhole отправляет трафик в никуда (блокирует его)
 | 
			
		||||
        {
 | 
			
		||||
          "tag": "block",
 | 
			
		||||
          "protocol": "blackhole"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
5.  Весь процесс показан на гифке:
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
## 7.5 Запуск Xray! (и проверка состояния сервиса)
 | 
			
		||||
 | 
			
		||||
Если вы всё делали по инструкции, то должны были избежать двух самых распространённых ошибок: **недостаточно прав для записи в файлы логов** и **недостаточно прав для чтения файлов сертификата**. Так что запуск `Xray` должен пройти без сучка и задоринки.
 | 
			
		||||
 | 
			
		||||
1.  Вводим команду и наслаждаемся историческим моментом запуска `Xray`!!!
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo systemctl start xray
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
2.  Однако просто выполнить команду `start` недостаточно, чтобы убедиться, что сервис `Xray` запущен и работает корректно. Для проверки состояния сервиса используем следующую команду:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo systemctl status xray
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    Видите надпись зелёного цвета `active (running)`? Это означает, что `Xray` запущен и работает.
 | 
			
		||||
 | 
			
		||||
3.  Весь процесс показан на гифке:
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
## 7.6 Базовое управление сервисами с помощью `systemd`
 | 
			
		||||
 | 
			
		||||
Мы уже использовали несколько команд `systemctl`: `start`, `status`, `reload`. Все эти команды используются для управления сервисами в Linux с помощью системы инициализации `systemd`. Давайте рассмотрим ещё несколько полезных команд.
 | 
			
		||||
 | 
			
		||||
1.  Чтобы временно остановить сервис `Xray`, используем команду `stop`:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo systemctl stop xray
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
2.  Чтобы перезапустить сервис `Xray`, используем команду `restart`:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo systemctl restart xray
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
3.  Чтобы запретить автозапуск сервиса `Xray` после перезагрузки, используем команду `disable`:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo systemctl disable xray
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
4.  Чтобы разрешить автозапуск сервиса `Xray` после перезагрузки, используем команду `enable`:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo systemctl enable xray
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
## 7.7 Оптимизация сервера: включение BBR
 | 
			
		||||
 | 
			
		||||
1.  Что говорят о `BBR`
 | 
			
		||||
 | 
			
		||||
Уверен, что, изучая различные способы обхода блокировок, вы не раз сталкивались с аббревиатурой `bbr`. В многочисленных блогах её расхваливают на все лады, наделяя чуть ли не магическими свойствами. Существуют также различные модификации, такие как `bbrplus`, `bbr2`, `магически модифицированный bbr` и т. д. Создаётся ощущение, что это какая-то волшебная палочка, которая превращает тыкву в карету, а медленный интернет — в сверхскоростной.
 | 
			
		||||
 | 
			
		||||
Так что же такое `BBR` на самом деле? Действительно ли он так хорош? И какую версию использовать?
 | 
			
		||||
 | 
			
		||||
2.  `BBR` на самом деле
 | 
			
		||||
 | 
			
		||||
**BBR** = **B**ottleneck **B**andwidth and **R**ound-trip propagation time — это алгоритм управления перегрузками для протокола TCP. Проще говоря, это **регулировщик дорожного движения для интернет-трафика**: когда на дороге нет пробок, каждая машина может двигаться с максимальной скоростью.
 | 
			
		||||
 | 
			
		||||
Так работает ли он? Как правило, разница между включенным и выключенным `BBR` заметна (улучшается скорость, стабильность и снижается пинг), поэтому **настоятельно рекомендуется включить `BBR`**.
 | 
			
		||||
 | 
			
		||||
Однако разница между версиями `BBR` для ядер 4.x и 5.x зачастую не столь существенна и зависит от конкретной ситуации. Решающим фактором, влияющим на качество связи, по-прежнему остаётся качество самого интернет-канала. Поэтому **не стоит гнаться за новейшими версиями `BBR`. Достаточно использовать версию, которая поставляется с вашей версией дистрибутива Linux**.
 | 
			
		||||
 | 
			
		||||
3.  Действительно ли `bbrplus`, `bbr2`, `магически модифицированный bbr` и другие версии с крутыми названиями лучше?
 | 
			
		||||
 | 
			
		||||
Одним словом: **нет! Не используйте их! Все эти названия придуманы только для привлечения внимания!**
 | 
			
		||||
 | 
			
		||||
Обновления `BBR` выпускаются вместе с обновлениями ядра Linux (`Kernel`). Другими словами, если вы используете относительно новое ядро, то у вас уже будет установлена последняя версия `BBR`.
 | 
			
		||||
 | 
			
		||||
А все эти скрипты с крутыми названиями просто скачивают и устанавливают предварительные версии ядра (или даже модифицированные сторонними разработчиками версии) с более новыми версиями `BBR`.
 | 
			
		||||
 | 
			
		||||
Стабильность ядра — это основа стабильной работы сервера. **Незначительное повышение производительности, которое могут дать тестовые версии `BBR`, не стоит того, чтобы рисковать стабильностью сервера.** Используйте последнюю версию ядра, которая поддерживается вашим дистрибутивом Linux. Это обеспечит максимальную стабильность и совместимость вашего сервера.
 | 
			
		||||
 | 
			
		||||
::: warning
 | 
			
		||||
Так называемое "преимущество" модифицированных версий `bbr` **очень недолговечно**. Например, многие скрипты `bbrplus` до сих пор устанавливают ядро версии 4.19, поскольку не обновлялись уже несколько лет. А ведь на дворе уже эпоха Debian 11 с ядром 5.10! То есть, если в январе 2018 года этот скрипт, возможно, и давал какое-то преимущество, то уже к октябрю 2018 года, когда вышла стабильная версия ядра 4.19, он потерял всякий смысл. А сейчас его использование и вовсе можно назвать **даунгрейдом**.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
4.  Какой алгоритм управления очередями использовать: `fq`, `fq_codel`, `fq_pie`, `cake` или какой-то другой?
 | 
			
		||||
 | 
			
		||||
Одним словом: **если не знаете, что выбрать, оставьте `fq`. Этого достаточно, и это не ухудшит качество связи**.
 | 
			
		||||
 | 
			
		||||
5.  Стоит ли использовать "ускорители" типа **锐速**, **Finalspeed**, **LotServer**?
 | 
			
		||||
 | 
			
		||||
Одним словом: **нет! Забудьте о них, как о страшном сне!**
 | 
			
		||||
 | 
			
		||||
Единственная проблема, которую они решают, — это проблема потери пакетов. Если проводить аналогию, то представьте, что вам нужно отправить груз, но машина, которая его везёт, иногда ломается по дороге (теряются пакеты). Эти "ускорители" просто отправляют три одинаковых груза на трёх машинах одновременно. Даже если две машины сломаются, третья всё равно доставит груз. Конечно, если на дороге будет много ваших машин, то вы будете создавать помехи другим участникам движения. Но и они будут создавать помехи вам. А поскольку пропускная способность канала ограничена, то в итоге все будут стоять в пробке.
 | 
			
		||||
 | 
			
		||||
::: warning
 | 
			
		||||
Эти "ускорители" не оптимизируют алгоритмы и не увеличивают скорость соединения. В большинстве своём это просто **увеличители количества отправляемых пакетов**. Для каналов с **очень высокими потерями пакетов** они могут дать незначительный эффект, но **для хороших каналов с низкими потерями пакетов они бесполезны и даже вредны, поскольку увеличивают расход трафика**. Это создаёт ненужную нагрузку на сервер и на каналы других пользователей.
 | 
			
		||||
 | 
			
		||||
Если у вас действительно плохой канал с высокими потерями пакетов, то единственное правильное решение — **сменить провайдера**.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
6.  Я так подробно остановился на `BBR`, потому что вокруг него слишком много мифов и откровенной дезинформации, нацеленной на новичков. Надеюсь, теперь у вас есть чёткое представление о том, что такое `BBR` и как он работает. А теперь давайте установим последнюю версию ядра Debian и включим `BBR`! (Это действительно просто)
 | 
			
		||||
 | 
			
		||||
    1.  Добавляем репозиторий `backports` в Debian 10, чтобы получить доступ к более новым версиям пакетов:
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        sudo nano /etc/apt/sources.list
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
        ::: warning
 | 
			
		||||
        В Debian 10 можно без проблем использовать файл `/etc/apt/sources.list`. Однако, если вы используете другой дистрибутив Linux или не устанавливали систему с нуля по этой инструкции, то рекомендуется создать папку `/etc/apt/sources.list.d/` и добавлять свои файлы конфигурации в неё, например, `/etc/apt/sources.list.d/vpsadmin.list`. Это обеспечит совместимость с другими дистрибутивами и предотвратит потерю настроек при случайном перезаписывании файла `/etc/apt/sources.list`.
 | 
			
		||||
        :::
 | 
			
		||||
 | 
			
		||||
    2.  Добавляем следующую строку в конец файла и сохраняем его:
 | 
			
		||||
 | 
			
		||||
        ```
 | 
			
		||||
        deb http://archive.debian.org/debian buster-backports main
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
    3.  Обновляем список доступных пакетов, ищем последнюю версию ядра Debian и устанавливаем её. Устанавливайте версию ядра, которая подходит для вашей архитектуры (в данном руководстве мы используем `amd64`):
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        sudo apt update && sudo apt -t buster-backports install linux-image-amd64
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
        ::: warning
 | 
			
		||||
        Если ваш VPS поддерживает это, вы можете попробовать установить **специальное ядро для облачных серверов** `linux-image-cloud-amd64`. Его преимущества — это меньший размер и меньшее потребление ресурсов. Однако некоторые пользователи сталкивались с проблемами при установке этого ядра на неподдерживаемые системы, вплоть до невозможности загрузки (ядро не определялось).
 | 
			
		||||
 | 
			
		||||
        Чтобы не попасть в такую ситуацию, перед установкой этого ядра:
 | 
			
		||||
 | 
			
		||||
        - создайте снапшот системы или
 | 
			
		||||
        - убедитесь, что у вас есть доступ к `vnc`-консоли (и вы знаете, как ей пользоваться)
 | 
			
		||||
 | 
			
		||||
        :::
 | 
			
		||||
 | 
			
		||||
    4.  Редактируем файл конфигурации `sysctl.conf` и включаем `BBR`:
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        sudo nano /etc/sysctl.conf
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
        ::: warning
 | 
			
		||||
        В Debian 10 можно без проблем использовать файл `/etc/sysctl.conf`. Однако, если вы используете другой дистрибутив Linux или не устанавливали систему с нуля по этой инструкции, то рекомендуется создать папку `/etc/sysctl.d/` и добавлять свои файлы конфигурации в неё, например, `/etc/sysctl.d/vpsadmin.conf`. Это обеспечит совместимость с другими дистрибутивами, поскольку в некоторых из них, начиная с версии `systemd` 207, параметры из файла `/etc/sysctl.conf` не читаются. Использование отдельного файла конфигурации также предотвратит потерю настроек при случайном перезаписывании файла `/etc/sysctl.conf`.
 | 
			
		||||
        :::
 | 
			
		||||
 | 
			
		||||
    5.  Добавляем следующие строки в конец файла:
 | 
			
		||||
 | 
			
		||||
        ```
 | 
			
		||||
        net.core.default_qdisc=fq
 | 
			
		||||
        net.ipv4.tcp_congestion_control=bbr
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
    6.  Перезагружаем VPS, чтобы изменения вступили в силу:
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        sudo reboot
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
    7.  Весь процесс показан на гифке:
 | 
			
		||||
 | 
			
		||||
        ::: tip
 | 
			
		||||
        На моём VPS поддерживается специальное ядро для облачных серверов, поэтому на гифке я устанавливаю `linux-image-cloud-amd64`. Если вы не уверены, поддерживается ли оно на вашем VPS, то установите обычное ядро `linux-image-amd64`, как показано в пункте 3.
 | 
			
		||||
        :::
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    8.  Проверяем, что `BBR` включен
 | 
			
		||||
 | 
			
		||||
        Чтобы убедиться, что модуль `BBR` загружен, выполните команду:
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        lsmod | grep bbr
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
        В результате вы должны увидеть что-то вроде этого:
 | 
			
		||||
 | 
			
		||||
        ```
 | 
			
		||||
        tcp_bbr
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
        Чтобы убедиться, что алгоритм `fq` используется, выполните команду:
 | 
			
		||||
 | 
			
		||||
        ```shell
 | 
			
		||||
        lsmod | grep fq
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
        В результате вы должны увидеть что-то вроде этого:
 | 
			
		||||
 | 
			
		||||
        ```
 | 
			
		||||
        sch_fq
 | 
			
		||||
        ```
 | 
			
		||||
 | 
			
		||||
## 7.8 Оптимизация сервера: автоматическое перенаправление HTTP на HTTPS
 | 
			
		||||
 | 
			
		||||
1.  Ранее мы настроили веб-сервер на порту 80 и получили TLS-сертификат.
 | 
			
		||||
 | 
			
		||||
    Однако, если вы попытаетесь открыть наш сайт по протоколу HTTP, то заметите, что он не перенаправляется автоматически на HTTPS, как это делают большинство сайтов. Другими словами, в нашей текущей конфигурации HTTP (порт 80) и HTTPS (порт 443) — это два совершенно независимых сайта. Чтобы это исправить, нужно внести некоторые изменения.
 | 
			
		||||
 | 
			
		||||
2.  Открываем файл конфигурации Nginx:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo nano /etc/nginx/nginx.conf
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
3.  В настройках сервера, который слушает порт 80, добавляем следующую строку и сохраняем файл (строки `root` и `index` можно удалить):
 | 
			
		||||
 | 
			
		||||
    ```
 | 
			
		||||
    return 301 https://$http_host$request_uri;
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
4.  Добавляем новый сервер, который будет прослушивать локальный порт и отдавать файлы сайта. В данном примере мы будем использовать порт 8080 (вы можете использовать любой другой порт):
 | 
			
		||||
 | 
			
		||||
    ```
 | 
			
		||||
    server {
 | 
			
		||||
        listen 127.0.0.1:8080;
 | 
			
		||||
        root /home/vpsadmin/www/webpage;
 | 
			
		||||
        index index.html;
 | 
			
		||||
        add_header Strict-Transport-Security "max-age=63072000" always;
 | 
			
		||||
    }
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
5.  Перезапускаем Nginx:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo systemctl restart nginx
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
6.  Изменяем настройки перенаправления в файле конфигурации Xray, заменив порт 80 на 8080 (находим `"dest": 80` и меняем на `"dest": 8080`):
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo nano /usr/local/etc/xray/config.json
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
7.  Перезапускаем Xray:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    sudo systemctl restart xray
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
8.  Весь процесс показан на гифке:
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
9.  Теперь, если вы попытаетесь открыть сайт по адресу `http://sub.yourdomain.com`, он должен автоматически перенаправиться на HTTPS:
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
## 7.9 Оптимизация сервера: более гибкая настройка перенаправления
 | 
			
		||||
 | 
			
		||||
Если вам нужны более гибкие настройки перенаправления, обратитесь к статье [«Разбор функции Fallback»](../level-1/fallbacks-lv1/).
 | 
			
		||||
 | 
			
		||||
## 7.10 Ваши успехи
 | 
			
		||||
 | 
			
		||||
Поздравляю! На этом этапе у вас есть работающий сервер с обходом блокировок и сайт-приманка, который защитит вас от сканирования. Теперь достаточно установить клиентское приложение на ваше устройство — и можно наслаждаться свободным интернетом!
 | 
			
		||||
 | 
			
		||||
> ⬛⬛⬛⬛⬛⬛⬛⬜ 87.5%
 | 
			
		||||
 | 
			
		||||
## 7.11 Важные исправления
 | 
			
		||||
 | 
			
		||||
1.  В первоначальной версии руководства был указан неверный путь к файлу конфигурации `Xray` (`config.json`). Если вы настроили `Xray` по старой инструкции, то он не запустится. Приносим извинения за неудобства!
 | 
			
		||||
 | 
			
		||||
    - Верный путь: `/usr/local/etc/xray/config.json`
 | 
			
		||||
    - Неверный путь: `/usr/local/etc/config.json`
 | 
			
		||||
 | 
			
		||||
    Затронутые разделы:
 | 
			
		||||
 | 
			
		||||
    - 7.4 Настройка Xray - 3. Создание файла конфигурации `Xray` с помощью `nano`
 | 
			
		||||
    - 7.8 Оптимизация сервера: автоматическое перенаправление HTTP на HTTPS - 6. Изменяем настройки перенаправления в файле конфигурации Xray
 | 
			
		||||
 | 
			
		||||
2.  В первоначальной версии руководства была ошибка в настройках Nginx (неверный путь к папке с файлами сайта). Если вы настроили Nginx по старой инструкции, то сайт не будет работать. Приносим извинения за неудобства!
 | 
			
		||||
 | 
			
		||||
    - Верный путь: `root /home/vpsadmin/www/webpage;`
 | 
			
		||||
    - Неверный путь: `root /var/www/website/html`
 | 
			
		||||
 | 
			
		||||
    Затронутые разделы:
 | 
			
		||||
 | 
			
		||||
    - 7.8 Оптимизация сервера: автоматическое перенаправление HTTP на HTTPS - 4. Добавляем новый сервер, который будет прослушивать локальный порт и отдавать файлы сайта.
 | 
			
		||||
| 
		 After Width: | Height: | Size: 335 KiB  | 
| 
		 After Width: | Height: | Size: 686 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,336 @@
 | 
			
		|||
# 【Глава 8】Настройка Xray на клиенте
 | 
			
		||||
 | 
			
		||||
## 8.1 Как работает Xray: краткое описание
 | 
			
		||||
 | 
			
		||||
Чтобы правильно настраивать и использовать `Xray`, важно понимать принципы его работы. Новичкам поможет упрощённая схема, на которой не показаны некоторые сложные моменты:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
Ключевые моменты:
 | 
			
		||||
 | 
			
		||||
1.  Приложение должно самостоятельно или с помощью стороннего инструмента перенаправить трафик на **входящее подключение** (`inbounds`) клиента `Xray`.
 | 
			
		||||
 | 
			
		||||
2.  Поступивший на клиент трафик обрабатывается **модулем маршрутизации** (`routing`) в соответствии с заданными правилами и перенаправляется на разные **исходящие подключения** (`outbounds`) клиента `Xray`, например:
 | 
			
		||||
 | 
			
		||||
    -   Трафик на китайские ресурсы — напрямую (`direct`)
 | 
			
		||||
    -   Трафик на зарубежные ресурсы — через VPS (`proxy`)
 | 
			
		||||
    -   Рекламный трафик — блокируется (`block`)
 | 
			
		||||
 | 
			
		||||
3.  Трафик на зарубежные ресурсы, перенаправленный на VPS, проходит через Великий Китайский Файрвол и попадает на **входящее подключение** (`inbounds`) сервера `Xray`.
 | 
			
		||||
 | 
			
		||||
4.  Как и на клиенте, трафик, поступивший на сервер, обрабатывается **модулем маршрутизации** (`routing`) в соответствии с заданными правилами и перенаправляется на разные **исходящие подключения** (`outbounds`):
 | 
			
		||||
 | 
			
		||||
    -   Поскольку сервер находится за пределами Китая, трафик по умолчанию идёт напрямую, что позволяет получить доступ к заблокированным ресурсам (`direct`).
 | 
			
		||||
    -   При необходимости можно настроить перенаправление трафика на другие VPS (`proxy`).
 | 
			
		||||
    -   На сервере также можно блокировать нежелательный трафик, например, рекламу или торренты (`block`).
 | 
			
		||||
 | 
			
		||||
:::warning Внимание!
 | 
			
		||||
 | 
			
		||||
Важно помнить, что маршрутизация в `Xray` очень гибкая, и описанный выше сценарий — лишь один из множества возможных.
 | 
			
		||||
 | 
			
		||||
Используя файлы `geosite.dat` и `geoip.dat`, можно очень гибко управлять маршрутизацией трафика по доменным именам и IP-адресам. Это гораздо удобнее, чем устаревший `GFWList`, поскольку позволяет очень точно настроить правила: например, можно разрешить прямое подключение к доменам Apple, перенаправить трафик на домены Amazon через прокси-сервер, блокировать доступ к доменам Baidu и т. д.
 | 
			
		||||
 | 
			
		||||
Более подробно о маршрутизации в Xray читайте в статье [«Разбор функции маршрутизации (routing)»](../level-1/routing-lv1-part1.md). Советую сначала дочитать эту главу и настроить базовый клиент, а потом уже углубляться в тонкости маршрутизации.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
## 8.2 Подключение клиента к серверу
 | 
			
		||||
 | 
			
		||||
Теперь, когда вы понимаете принципы работы `Xray`, настройка клиента сводится к тому, чтобы **сообщить ему, как подключиться к вашему VPS**. Это как настроить `PuTTY` для подключения к серверу, только в случае с Xray параметров подключения больше, чем IP-адрес, порт, имя пользователя и пароль.
 | 
			
		||||
 | 
			
		||||
Набор параметров подключения в `Xray` зависит от используемого [протокола](../../config/inbounds/). В главе 7 мы настроили сервер на использование протокола `VLESS` с шифрованием `XTLS`. Посмотрим на файл конфигурации сервера, чтобы узнать, какие параметры нужны для подключения:
 | 
			
		||||
 | 
			
		||||
-   **Адрес сервера**: `sub.yourdomain.com`
 | 
			
		||||
-   **Порт сервера**: `443`
 | 
			
		||||
-   **Протокол**: `vless`
 | 
			
		||||
-   **Поток**: `xtls-rprx-vision` (режим `vision` подходит для всех платформ)
 | 
			
		||||
-   **Идентификатор**: `uuiduuid-uuid-uuid-uuid-uuiduuiduuid`
 | 
			
		||||
-   **Безопасность**: `"allowInsecure": false`
 | 
			
		||||
 | 
			
		||||
Ниже приведен список популярных клиентов Xray для мобильных и настольных устройств. Каждый клиент имеет свой собственный интерфейс, поэтому я не буду делать скриншоты для каждого из них. Внимательно изучите документацию к выбранному клиенту и укажите нужные параметры подключения.
 | 
			
		||||
 | 
			
		||||
:::warning Внимание!
 | 
			
		||||
 | 
			
		||||
Многие клиенты поддерживают как `xray-core`, так и `v2fly-core`. Но по умолчанию может использоваться не тот, который вам нужен. Убедитесь, что вы выбрали нужный инструмент!
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
-   **v2rayN - для Windows**
 | 
			
		||||
 | 
			
		||||
    -   Скачайте последнюю версию из [репозитория на GitHub](https://github.com/2dust/v2rayN/releases)
 | 
			
		||||
    -   Настройте клиент в соответствии с документацией
 | 
			
		||||
 | 
			
		||||
-   **v2rayNG - для Android**
 | 
			
		||||
 | 
			
		||||
    -   Скачайте последнюю версию из [репозитория на GitHub](https://github.com/2dust/v2rayNG/releases)
 | 
			
		||||
    -   Настройте клиент в соответствии с документацией
 | 
			
		||||
 | 
			
		||||
-   **Shadowrocket - для iOS, macOS на базе Apple M1**
 | 
			
		||||
 | 
			
		||||
    -   Создайте учётную запись iCloud **не** в китайском регионе
 | 
			
		||||
    -   Купите приложение в App Store
 | 
			
		||||
    -   Настройте клиент в соответствии с документацией
 | 
			
		||||
 | 
			
		||||
-   **Qv2ray - кроссплатформенный графический интерфейс для Linux, Windows, macOS**
 | 
			
		||||
 | 
			
		||||
    -   Скачайте последнюю версию из [репозитория на GitHub](https://github.com/Qv2ray/Qv2ray/releases) (или более новую версию из раздела [сборок на GitHub](https://github.com/Qv2ray/Qv2ray/actions))
 | 
			
		||||
    -   Изучите документацию на [сайте проекта](https://qv2ray.net/)
 | 
			
		||||
    -   Настройте клиент в соответствии с документацией
 | 
			
		||||
 | 
			
		||||
-   **V2RayXS - клиент для macOS, основанный на V2RayX и использующий xray-core**
 | 
			
		||||
 | 
			
		||||
    -   Скачайте последнюю версию из [репозитория на GitHub](https://github.com/tzmax/v2rayXS/releases)
 | 
			
		||||
    -   Поддерживает импорт ссылок на конфигурации VLESS / VMessAEAD по стандарту, предложенному в [этой задаче](https://github.com/XTLS/Xray-core/issues/91)
 | 
			
		||||
    -   Настройте клиент в соответствии с документацией
 | 
			
		||||
 | 
			
		||||
На этом этапе ваша система готова к работе!
 | 
			
		||||
 | 
			
		||||
## 8.3 Дополнительное задание 1: настройка `xray-core` на ПК вручную
 | 
			
		||||
 | 
			
		||||
Хотя на предыдущем шаге мы уже всё настроили, любознательным и обладающим хорошей памятью читателям наверняка вспомнятся мои слова из предыдущей главы о том, что `xray-core` можно запускать как на сервере, так и на клиенте. Так как же использовать `xray-core` в качестве клиента?
 | 
			
		||||
 | 
			
		||||
Чтобы ответить на этот вопрос, я добавил этот раздел с дополнительным заданием. Оно немного выходит за рамки основного материала и может показаться сложным, но у него есть свои преимущества:
 | 
			
		||||
 | 
			
		||||
-   Вы всегда будете использовать самую последнюю версию `xray-core`, не дожидаясь, пока разработчики клиентов выпустят обновления.
 | 
			
		||||
-   Вы получите максимальную гибкость в настройке маршрутизации (хотя стоит отметить, что Qv2ray имеет мощный редактор маршрутизации, который позволяет настраивать все функции `xray-core`).
 | 
			
		||||
-   Вы сэкономите системные ресурсы (графические клиенты всегда потребляют больше ресурсов, чем консольные).
 | 
			
		||||
 | 
			
		||||
Недостаток этого способа заключается в том, что вам придётся **настраивать клиент вручную, редактируя файл конфигурации**. Но ведь на сервере вы уже делали это, так что ничего сложного здесь нет. Давайте разберёмся по шагам:
 | 
			
		||||
 | 
			
		||||
1.  Скачайте последнюю версию `xray-core` для вашей платформы из [репозитория на GitHub](https://github.com/XTLS/Xray-core/releases) и распакуйте архив в удобное место.
 | 
			
		||||
2.  Создайте пустой файл конфигурации `config.json` в той же папке (думаю, с этим проблем не возникнет).
 | 
			
		||||
3.  Что значит "удобное место"? Это зависит от платформы.
 | 
			
		||||
4.  Заполните файл конфигурации.
 | 
			
		||||
 | 
			
		||||
    -   Я написал пример конфигурации, основанный на схеме из раздела 8.1 (прямое подключение к китайским ресурсам, проксирование трафика на зарубежные ресурсы через VPS, блокировка рекламы) и параметрах подключения из раздела 8.2.
 | 
			
		||||
    -   Замените `uuid` на идентификатор из вашей конфигурации сервера.
 | 
			
		||||
    -   Замените `address` на доменное имя вашего сервера.
 | 
			
		||||
    -   Замените `serverName` на доменное имя вашего сервера.
 | 
			
		||||
    -   Я добавил подробные комментарии к каждому разделу конфигурации.
 | 
			
		||||
 | 
			
		||||
    ```json
 | 
			
		||||
    // ССЫЛКИ:
 | 
			
		||||
    // https://github.com/XTLS/Xray-examples
 | 
			
		||||
    // https://xtls.github.io/config/
 | 
			
		||||
 | 
			
		||||
    // Типичный конфигурационный файл, как для сервера, так и для клиента, состоит из 5 основных частей. Разберём их по полочкам:
 | 
			
		||||
    // ┌─ 1_log          Настройки логирования - что и куда писать в лог (чтобы было проще искать ошибки)
 | 
			
		||||
    // ├─ 2_dns          Настройки DNS - как выполнять DNS-запросы (защита от DNS-спуфинга, защита от слежки, предотвращение маршрутизации трафика на китайские серверы и т. д.)
 | 
			
		||||
    // ├─ 3_routing      Настройки маршрутизации - как обрабатывать трафик (фильтрация рекламы, разделение трафика для разных стран)
 | 
			
		||||
    // ├─ 4_inbounds     Настройки входящих подключений - какой трафик может поступать на Xray
 | 
			
		||||
    // └─ 5_outbounds    Настройки исходящих подключений - куда направлять трафик, исходящий от Xray
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
      // 1_Настройки логирования
 | 
			
		||||
      // В этом примере я закомментировал настройки файлов логов, потому что в Windows, macOS и Linux используются разные пути. Укажите свои пути.
 | 
			
		||||
      "log": {
 | 
			
		||||
        // "access": "/home/local/xray_log/access.log",    // Файл для записи логов доступа
 | 
			
		||||
        // "error": "/home/local/xray_log/error.log",    // Файл для записи логов ошибок
 | 
			
		||||
        "loglevel": "warning" // Уровень детализации логов: "none", "error", "warning", "info", "debug" (от меньшего к большему)
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      // 2_Настройки DNS
 | 
			
		||||
      "dns": {
 | 
			
		||||
        "servers": [
 | 
			
		||||
          // 2.1 Запросы к зарубежным доменам отправляем на зарубежный DNS-сервер
 | 
			
		||||
          {
 | 
			
		||||
            "address": "1.1.1.1",
 | 
			
		||||
            "domains": ["geosite:geolocation-!cn"]
 | 
			
		||||
          },
 | 
			
		||||
          // 2.2 Запросы к китайским доменам отправляем на китайский DNS-сервер и ожидаем получить китайский IP-адрес. Если адрес не китайский, используем следующий DNS-сервер
 | 
			
		||||
          {
 | 
			
		||||
            "address": "223.5.5.5",
 | 
			
		||||
            "domains": ["geosite:cn"],
 | 
			
		||||
            "expectIPs": ["geoip:cn"]
 | 
			
		||||
          },
 | 
			
		||||
          // 2.3 Резервный китайский DNS-сервер
 | 
			
		||||
          {
 | 
			
		||||
            "address": "114.114.114.114",
 | 
			
		||||
            "domains": ["geosite:cn"]
 | 
			
		||||
          },
 | 
			
		||||
          // 2.4 Если все предыдущие DNS-серверы не ответили, используем локальный DNS-сервер
 | 
			
		||||
          "localhost"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      // 3_Настройки маршрутизации
 | 
			
		||||
      // Маршрутизация позволяет перенаправлять трафик, соответствующий определённым условиям, на определённое исходящее подключение (см. раздел 5).
 | 
			
		||||
      "routing": {
 | 
			
		||||
        "domainStrategy": "IPIfNonMatch",
 | 
			
		||||
        "rules": [
 | 
			
		||||
          // 3.1 Блокировка рекламных доменов
 | 
			
		||||
          {
 | 
			
		||||
            "type": "field",
 | 
			
		||||
            "domain": ["geosite:category-ads-all"],
 | 
			
		||||
            "outboundTag": "block"
 | 
			
		||||
          },
 | 
			
		||||
          // 3.2 Прямое подключение к китайским доменам
 | 
			
		||||
          {
 | 
			
		||||
            "type": "field",
 | 
			
		||||
            "domain": ["geosite:cn"],
 | 
			
		||||
            "outboundTag": "direct"
 | 
			
		||||
          },
 | 
			
		||||
          // 3.3 Прямое подключение к китайским IP-адресам
 | 
			
		||||
          {
 | 
			
		||||
            "type": "field",
 | 
			
		||||
            "ip": ["geoip:cn", "geoip:private"],
 | 
			
		||||
            "outboundTag": "direct"
 | 
			
		||||
          },
 | 
			
		||||
          // 3.4 Проксирование трафика на зарубежные домены
 | 
			
		||||
          {
 | 
			
		||||
            "type": "field",
 | 
			
		||||
            "domain": ["geosite:geolocation-!cn"],
 | 
			
		||||
            "outboundTag": "proxy"
 | 
			
		||||
          },
 | 
			
		||||
          // 3.5 Правило по умолчанию
 | 
			
		||||
          // В Xray любой трафик, который не соответствует ни одному из правил маршрутизации, отправляется на первое исходящее подключение (см. раздел 5.1). Поэтому важно разместить настройки прокси-сервера на первом месте.
 | 
			
		||||
          // 3.6 Трафик, который идёт на DNS-сервер 223.5.5.5, отправляем напрямую
 | 
			
		||||
          {
 | 
			
		||||
            "type": "field",
 | 
			
		||||
            "ip": ["223.5.5.5"],
 | 
			
		||||
            "outboundTag": "direct"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      // 4_Настройки входящих подключений
 | 
			
		||||
      "inbounds": [
 | 
			
		||||
        // 4.1 Обычно используется протокол SOCKS5 для локального перенаправления трафика
 | 
			
		||||
        {
 | 
			
		||||
          "tag": "socks-in",
 | 
			
		||||
          "protocol": "socks",
 | 
			
		||||
          "listen": "127.0.0.1", // Адрес, на котором будет слушать SOCKS5-сервер
 | 
			
		||||
          "port": 10800, // Порт, на котором будет слушать SOCKS5-сервер
 | 
			
		||||
          "settings": {
 | 
			
		||||
            "udp": true
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        // 4.2 Некоторые приложения не поддерживают SOCKS. Для них можно использовать HTTP-прокси
 | 
			
		||||
        {
 | 
			
		||||
          "tag": "http-in",
 | 
			
		||||
          "protocol": "http",
 | 
			
		||||
          "listen": "127.0.0.1", // Адрес, на котором будет слушать HTTP-сервер
 | 
			
		||||
          "port": 10801 // Порт, на котором будет слушать HTTP-сервер
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
 | 
			
		||||
      // 5_Настройки исходящих подключений
 | 
			
		||||
      "outbounds": [
 | 
			
		||||
        // 5.1 Настройки прокси-сервера
 | 
			
		||||
        // Этот раздел должен быть первым, как уже было сказано в разделе 3.5. Все правила по умолчанию будут использовать эти настройки.
 | 
			
		||||
        {
 | 
			
		||||
          "tag": "proxy",
 | 
			
		||||
          "protocol": "vless",
 | 
			
		||||
          "settings": {
 | 
			
		||||
            "vnext": [
 | 
			
		||||
              {
 | 
			
		||||
                "address": "sub.yourdomain.com", // Замените на доменное имя вашего сервера
 | 
			
		||||
                "port": 443,
 | 
			
		||||
                "users": [
 | 
			
		||||
                  {
 | 
			
		||||
                    "id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid", // Должен совпадать с идентификатором на сервере
 | 
			
		||||
                    "flow": "xtls-rprx-vision",
 | 
			
		||||
                    "encryption": "none",
 | 
			
		||||
                    "level": 0
 | 
			
		||||
                  }
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          "streamSettings": {
 | 
			
		||||
            "network": "tcp",
 | 
			
		||||
            "security": "tls",
 | 
			
		||||
            "tlsSettings": {
 | 
			
		||||
              "serverName": "sub.yourdomain.com", // Замените на доменное имя вашего сервера
 | 
			
		||||
              "allowInsecure": false, // Запретить использование недоверенных сертификатов
 | 
			
		||||
              "fingerprint": "chrome" // Использовать uTLS для подмены отпечатка браузера Chrome / Firefox / Safari или случайный отпечаток
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        // 5.2 Прямое подключение
 | 
			
		||||
        // Используется, если в настройках маршрутизации указан тег "direct"
 | 
			
		||||
        {
 | 
			
		||||
          "tag": "direct",
 | 
			
		||||
          "protocol": "freedom"
 | 
			
		||||
        },
 | 
			
		||||
        // 5.3 Блокировка трафика
 | 
			
		||||
        // Используется, если в настройках маршрутизации указан тег "block"
 | 
			
		||||
        {
 | 
			
		||||
          "tag": "block",
 | 
			
		||||
          "protocol": "blackhole"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
## 8.4 Дополнительное задание 2: запуск `xray-core` на ПК
 | 
			
		||||
 | 
			
		||||
Итак, мы создали файл конфигурации. Как теперь запустить `xray-core`? Двойной клик по файлу не работает!
 | 
			
		||||
 | 
			
		||||
Во-первых, вам нужно открыть **командную строку**.
 | 
			
		||||
 | 
			
		||||
1.  Пользователи Linux и macOS наверняка знают, как это сделать. Просто найдите приложение **«Терминал»**.
 | 
			
		||||
2.  В Windows используйте **«Командную строку»** или **PowerShell** (пользователи WSL, можете использовать привычный вам **«Терминал»**).
 | 
			
		||||
 | 
			
		||||
Во-вторых, нам нужно **указать `xray` путь к файлу конфигурации `config.json` и запустить его**.
 | 
			
		||||
 | 
			
		||||
1.  В Windows, если файл `xray.exe` находится в папке `C:\Xray-windows-64\`, а файл `config.json` — в той же папке, то команда запуска будет выглядеть так:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    C:\Xray-windows-64\xray.exe -c C:\Xray-windows-64\config.json
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    :::tip
 | 
			
		||||
    Параметр `-c` указывает путь к файлу конфигурации.
 | 
			
		||||
    :::
 | 
			
		||||
 | 
			
		||||
2.  Аналогично, в Linux и macOS, если файл `xray` находится в папке `/usr/local/bin/`, а файл `config.json` — в папке `/usr/local/etc/xray/`, то команда запуска будет выглядеть так:
 | 
			
		||||
 | 
			
		||||
    ```shell
 | 
			
		||||
    /usr/local/bin/xray -c /usr/local/etc/xray/config.json
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    :::tip
 | 
			
		||||
    В каждом системе есть переменные окружения, которые хранят пути к часто используемым папкам. Поэтому указывать полный путь к файлу `xray` не обязательно. Но я всё же указал его для надёжности.
 | 
			
		||||
    :::
 | 
			
		||||
 | 
			
		||||
## 8.5 Дополнительное задание 3: автозапуск `xray-core` на ПК
 | 
			
		||||
 | 
			
		||||
Если вы попробовали запускать `xray-core` вручную, то наверняка заметили следующие недостатки:
 | 
			
		||||
 | 
			
		||||
1.  При каждом запуске `Xray` открывается чёрное окно консоли, что не очень красиво.
 | 
			
		||||
2.  `Xray` не запускается автоматически при загрузке системы, поэтому его приходится запускать вручную каждый раз.
 | 
			
		||||
 | 
			
		||||
Спешу вас обрадовать: **эти проблемы решаемы!** Но как именно их решить, я оставлю вам в качестве домашнего задания (подсказка: загляните в раздел FAQ на сайте документации).
 | 
			
		||||
 | 
			
		||||
## 8.6 Финишная прямая!
 | 
			
		||||
 | 
			
		||||
Уверен, что те, кто дочитал до этого места, — это любознательные и целеустремлённые люди, которые готовы учиться новому! Я от всей души поздравляю вас, ведь вы **самостоятельно, начиная с самых азов, настроили сервер VPS и клиент Xray!** Это огромная победа!
 | 
			
		||||
 | 
			
		||||
Надеюсь, теперь вы больше не боитесь `Linux` и разобрались с тем, как работает `Xray`.
 | 
			
		||||
 | 
			
		||||
**На этом наше повествование завершается!**
 | 
			
		||||
 | 
			
		||||
> ⬛⬛⬛⬛⬛⬛⬛⬛ 100%
 | 
			
		||||
 | 
			
		||||
## 8.7 В бесконечность и далее!
 | 
			
		||||
 | 
			
		||||
**Но это ещё не всё, что может Xray.**
 | 
			
		||||
 | 
			
		||||
`Xray` — это мощный и многофункциональный инструмент, который можно использовать для решения самых разных задач. В этом руководстве мы лишь поверхностно рассмотрели **самые простые** и **наглядные** варианты его настройки.
 | 
			
		||||
 | 
			
		||||
Если вам достаточно и этого, то наслаждайтесь свободой в интернете! Но если ваш пытливый ум жаждет новых знаний, то продолжайте изучать безграничные возможности `Xray`!
 | 
			
		||||
 | 
			
		||||
Дополнительную информацию можно найти здесь:
 | 
			
		||||
 | 
			
		||||
1.  [xtls.github.io](https://xtls.github.io/) — официальная документация
 | 
			
		||||
2.  [Официальная группа в Telegram](https://t.me/projectXray) — активное и дружелюбное сообщество
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
:::tip Вместо послесловия
 | 
			
		||||
 | 
			
		||||
Надеюсь, это небольшое путешествие, в которое я вас отправил, поможет вам сделать интернет лучше.
 | 
			
		||||
 | 
			
		||||
Конечно, со временем информация из этого руководства устареет. Но вы будете расти и развиваться, и, возможно, когда-нибудь, вспоминая это руководство и те цели, которые я ставил перед собой, создавая его, вы передадите свои знания другим, чтобы эта эстафета помощи новичкам не прекращалась.
 | 
			
		||||
 | 
			
		||||
Мы живём в мире, где царят тьма и цензура. Люди бродят в одиночестве в поисках лучика света. И если мы не будем помогать друг другу и поддерживать друг друга на этом пути, то в конце концов нас ждёт лишь печальная картина запустения.
 | 
			
		||||
:::
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
# [Глава 9] Приложение
 | 
			
		||||
 | 
			
		||||
## 1. Индекс основных команд Linux для начинающих
 | 
			
		||||
 | 
			
		||||
| Номер | Название команды | Описание команды | Глава |
 | 
			
		||||
| :------: | :------------------ | :--------------------------- | :----------------------------------------: |
 | 
			
		||||
| `cmd-01` | `apt update` | Обновление списка пакетов | [Глава о удаленном подключении](./ch03-ssh.md) |
 | 
			
		||||
| `cmd-02` | `apt upgrade` | Обновление пакетов системы | [Глава о удаленном подключении](./ch03-ssh.md) |
 | 
			
		||||
| `cmd-03` | `nano` | Текстовый редактор | [Глава о безопасности](./ch04-security.md) |
 | 
			
		||||
| `cmd-04` | `systemctl restart` | Перезапуск сервиса | [Глава о безопасности](./ch04-security.md) |
 | 
			
		||||
| `cmd-05` | `adduser` | Добавление пользователя | [Глава о безопасности](./ch04-security.md) |
 | 
			
		||||
| `cmd-06` | `apt install` | Установка пакета | [Глава о безопасности](./ch04-security.md) |
 | 
			
		||||
| `cmd-07` | `visudo` | Редактор для настройки sudo | [Глава о безопасности](./ch04-security.md) |
 | 
			
		||||
| `cmd-08` | `sudo` | Выполнение команды от имени root | [Глава о безопасности](./ch04-security.md) |
 | 
			
		||||
| `cmd-09` | `chmod` | Изменение прав доступа к файлу/папке | [Глава о безопасности](./ch04-security.md) |
 | 
			
		||||
| `cmd-10` | `mkdir` | Создание папки | [Глава о создании сайта](./ch05-webpage.md) |
 | 
			
		||||
| `cmd-11` | `systemctl reload` | Перезагрузка конфигурации сервиса | [Глава о создании сайта](./ch05-webpage.md) |
 | 
			
		||||
| `cmd-12` | `wget` | Загрузка файла/страницы из сети | [Глава об управлении сертификатами](./ch06-certificates.md) |
 | 
			
		||||
| `cmd-13` | `acme.sh` | Управление сертификатами с помощью acme.sh | [Глава об управлении сертификатами](./ch06-certificates.md) |
 | 
			
		||||
| `cmd-14` | `rm` | Удаление файлов/папок | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `cmd-15` | `crontab -e` | Редактирование crontab текущего пользователя | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `cmd-16` | `touch` | Создание пустого файла | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `cmd-17` | `systemctl` | Базовые команды управления сервисами systemd | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `cmd-18` | `reboot` | Перезагрузка Linux | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
 | 
			
		||||
## 2. Индекс важных конфигурационных файлов Linux
 | 
			
		||||
 | 
			
		||||
| Номер | Расположение файла | Описание файла | Глава |
 | 
			
		||||
| :-------: | :-------------------------------------- | :----------------------------- | :----------------------------------------: |
 | 
			
		||||
| `conf-01` | `/etc/ssh/sshd_config` | Конфигурация SSH сервера | [Глава о удаленном подключении](./ch03-ssh.md) |
 | 
			
		||||
| `conf-02` | `/etc/nginx/nginx.conf` | Конфигурация Nginx | [Глава о создании сайта](./ch05-webpage.md) |
 | 
			
		||||
| `conf-03` | `/etc/apt/sources.list` | Список репозиториев APT | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `conf-04` | `/etc/apt/sources.list.d/vpsadmin.list` | Список пользовательских репозиториев APT | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `conf-05` | `crontab -e` | Crontab текущего пользователя | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `conf-06` | `/etc/sysctl.conf` | Настройки ядра Linux | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `conf-07` | `/etc/sysctl.d/vpsadmin.conf` | Пользовательские настройки ядра Linux | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
 | 
			
		||||
## 3. Индекс важных файлов Xray
 | 
			
		||||
 | 
			
		||||
| Номер | Расположение файла | Описание файла | Глава |
 | 
			
		||||
| :-------: | :----------------------------------- | :------------ | :----------------------------------------: |
 | 
			
		||||
| `xray-01` | `/usr/local/etc/xray/config.json` | Конфигурация Xray | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `xray-02` | `/home/vpsadmin/xray_cert/xray.cert` | TLS сертификат | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `xray-03` | `/home/vpsadmin/xray_cert/xray.key` | TLS ключ | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `xray-04` | `/home/vpsadmin/xray_log/access.log` | Лог доступа Xray | [Глава о Xray сервере](./ch07-xray-server.md) |
 | 
			
		||||
| `xray-05` | `/home/vpsadmin/xray_log/error.log` | Лог ошибок Xray | [Глава о Xray сервере](./ch07-xray-server.md) | 
 | 
			
		||||