Как создать свой личный VPN.
Сегодня мы с вами научимся создавать свой личный VPN сервер, а также узнаем для чего вообще нужны сервера и какие их виды существуют, что такое порты и протокол SSH.
Для начала немного теории. Когда компьютеры только появились, то у них не было дисплеев и клавиатуры с мышкой, а также монитора. Их нужно было как-то настраивать. Нужно было некое устройство с помощью которого человек бы мог взаимодействовать с компьютером. Такое устройство прослойку принято называть терминалом. Так он выглядит в Kali Linux сейчас:
На первых порах терминалами стали телетайпы. Это такие печатные машинки которые соединяются по электрическому проводу с компьютером для отправки и получения текстовых сообщений на простом листе бумаги. Это было дико неудобно и медленно. Для начала вам нужно было напечатать запрос, а далее на листе бумаги компьютер вам печатал ответ. Вот как это выглядело. Посмотрите видео до конца, чтобы понять:
Далее придумали первые компьютеры более похожие на современные. У него появился монитор, с помощью электронно лучевой трубки ответ стал приходить не на лист бумаги, а на дисплей экрана, печатную машинку же заменила клавиатура. Но в нём всё ещё не было графического интерфеса, а на экране был исключительно терминал:
Время не стояло на месте. И теперь мы имеем компьютер вот в таком виде:
Стали также появляться графические интерфейсы в привычном нам виде, а сам терминал остался, но приобрёл вот такой вот вид. Покажу на примере Kali Linux. Вот так выглядит это всё сейчас:
Раньше нужно было сидеть исключительно перед компьютером для взаимодействия с ним. Но позже был придуман протокол TELNET (Teletype Network), чтобы работники могли подключаться по нему удалённо из дома по телетайпу. Ведь не хранить же такой компьютер вам дома:
К тому же теперь на таком компьютере могло работать разом очень много людей. Раньше подключение происходило через телефонную сеть, многие из вас кто постарше это помнят.
С помощью протокола TELNET можно удалённо подключаться со своего компьютера к другому удалённому компьютеру и работать на нём. По умолчанию TELNET использует порт TCP 23. При подключении по TELNET, с помощью текстовых команд в терминале, вы можете говорить удалённому компьютеру что нужно делать. Всё было бы просто замечательно, но TELNET был разработан в 1969 году, как вы уже поняли из названия, для тех самых первых телетайпов. А в те времена на безопасность было вообще пофиг. Дело в том, что все команды которые вы вбиваете по TELNET, включая пароли, передаются в открытом виде без шифрования, а значит любой кто перехватит трафик сможет узнать всё, что вы делали на компьютере. Поэтому сегодня TELNET для использования к удалённым устройствам не используется.
Придумали более его усовершенствованную версию, протокол SSH (Secure Shell - защищённая оболочка). SSH это тот же TELNET, но с несколькими отличиями. Он работает на 22 порту и всё что вы вводите при передаче будет зашифровано, даже если кто-то перехватит ваш трафик, то он не сможет его расшифровать и прочитать.
Чтобы подключаться к удалённым устройствам как по TELNET, так и по SSH нужны две вещи. Во-первых удалённое устройство должно выступать как TELNET/SSH сервер, то есть иметь у себя программное обеспечение которое будет понимать эти протоколы, а во-вторых у вас должен быть TELNET/SSH клиент с помощью которого вы сможете инициировать соединения. В Kali Linux в качестве такого клиента уже выступает терминал, в Windows же примером такой программы может служить PuTTY, выглядит она вот так:
У вас наверняка возник вопрос что такое порт и зачем он нужен. Эта тема довольно простая, но в тоже время очень важно чтобы вы понимали концепцию. Многие новички не знают что такое порт и из-за этого возникает много проблем когда вы хотите куда-то подключиться. Когда вы поймёте концепцию порта, то многие вещи станут для вас очевидными. Порт - это номер который мы даём приложению или службе, программе, работающих внутри компьютера. Как вы уже знаете, внутри компьютера есть множество приложений и программ:
У вас может быть браузер или фотошоп, клиент телеграма, какие-нибудь игры и так далее. Порт это номер этих приложений.
Разберу на простом примере. Когда мы хотим отправить обычное бумажное письмо человеку, то мы указываем его адрес проживания и получателя письма.
На примере компьютера адрес проживания это IP, а получатель письма это порт, ведь в одном доме может проживать несколько человек и мы указываем кому это письмо предназначено. Порт выполняет эту самую роль. В вашем компьютере, как в большом доме, живёт много получателей. Если вы отправили запрос из браузера, то и ответ вы получите в этот же браузер. Ответ не должен приходить в телеграм или ватсап. Ответ придёт на тот порт с которого был отправлен запрос. Это абсолютно логично. Теперь вы знаете что именно порты отвечают за эту логику.
Когда вам поступает письмо, то кто-то смотрит и говорит: "Это письмо для мамы (icq), а это письмо для папы (телеграм), а это - разбудите дедушку (для steam)." Когда запрос достигает компьютера, то идёт проверка какой программе это предназначено. Таких портов может быть до 65535.
Ещё есть такое понятие как сокет. Это ip + port вместе. Например: 54.239.33.90:80. В таком виде выдают proxy после покупки. Двоеточие показывает где заканчивается ip и начинается порт. Думаю с этим всё понятно.
Давайте теперь разберёмся что такое VPS и VDS. Для многих данные термины непонятны. Но на самом деле это способ за сущие копейки получить в своё распоряжение часть или даже весь компьютер в любой точке мира с удалённым доступом к нему, а вы сможете управлять им даже с телефона сидя на лавочке в парке. И да, это вполне полноценный компьютер, на нём можно настроить свой личный VPN и даже поднимать собственные сайты, сервера, ставить ботнет.
VDS - virtual dedicated server (отсюда сокращённое название - дедик).
Выглядят в наши дни они примерно вот так:
VPS это кусочек мощного сервера. За несколько долларов у вас появляется возможность заиметь несколько процессорных ядер, гигабайты ОЗУ и жёсткий диск, а также собственный IP адрес который не будет меняться со временем. При этом VPS это лучшее олицетворение коммунизма в интернете, ведь вместе с вами на одном сервере будут работать другие люди и возможно даже их сайты. Если вы, например, арендовали пару ядер от 10-ядерного компьютера, то значит на одном физическом сервере с вами будут тусить ещё 4 человека. Безопасно ли это? В целом да, у каждого будет доступ только к своим ядрам и свои гигабайты памяти, а также личный IP. Но это всё же накладывает некоторое ограничение. Разумеется у каждого хостера, сервиса который будет предоставлять вам VPS они будут свои, у кого-то будет полнейшая свобода действий включая возможность размещать любые сайты:
А кто-то будет запрещать даже VPN для личного пользования:
Поэтому внимательно читайте условия прежде чем покупать себе сервер.
С другой стороны, если вам не хочется делить с кем-то компьютер и нужен диск на терабайт, 10 ядер и ещё большем количество ОЗУ, то тогда вам нужно арендовать VDS. Это будет стоить дороже, вместо 10$ придётся отдать уже 50$, но зато вы получите личный мощный компьютер с минимумом ограничений.
Поднимать свой VPN лучше всего на Linux Debian, а не Linux Ubuntu. Ubuntu не стоит выбирать из-за нестабильности и требовательности к ресурсам, если вы конечно не хотите огребсти проблем с работой вашего сервера. К тому же Ubuntu изначально создавалась именно как пользовательская система, а не как серверная. Debian же надёжен и стабилен. Также обязательно проверьте чтобы на вашем сервере поддерживалась виртуализация KVM (это можно увидеть при покупке).
Теперь поговорим с вами о выборе лучшего хостинг провайдера. По настоящему хороший и анонимный хостинг должен иметь возможность оплаты криптовалютой для анонимности. Но сразу скажу что большинство данных хостингов добавляет оплату криптовалютой лишь для коммерческого хода, чтобы привлечь больше клиентов совершенно не заботясь об их анонимности, а порой даже препятствую анонимной регистрации.
Как же выбрать хороший хостинг? Во-первых сервис должен принимать криптовалюту напрямую, а не пользоваться услугами посредников, так как подобные сервисы препятствуют анонимной оплате. Кроме того, нужно чтобы имелась оплата не только биткоинами, но и более анонимными альткоинами по типу Monero или Zcash. Также обязательным условием должно быть то, что сервис не должен использовать гугл капчу, подгружать скрипты гугл статистики, гугл менеджмента и тому подобные гадости. Также он не должен подгружать иные скрипты других коммерческих корпораций, причём это должно касаться не только главной страницы, но и всех последующих страниц отвечающих за регистрацию. Также сервис не должен защищаться облачной структурой CloudFlare, так как подобная защита препятствует приобретению услуг анонимно через сеть Tor. Кроме того у сервиса должно иметься собственное зеркало внутри сети Tor. Само собой сервис не должен требовать от пользователя абсолютно любых личных данных и номер телефона. Также сервер должен находиться в стране не входящей в договор 14 глаз и при этом не попадать под юрисдикцию той страны в которой вы живёте.
В идеале вы зарегистрировались на левую почту которой у вас даже нет и не просят подтвердить регистрацию, сразу же купили сервер без указания вообще каких-либо данных, оплатили его криптовалютой и пользуетесь.
Как пример анонимного сервиса (ничего лишнего и при регистрации не нужна даже почта, можно вставить левую): https://host4coins.net
А вот список всех сервисов которые поддерживают оплату криптовалютой:
Данный список регулярно обновляется энтузиатсами, а потому информация указанная в нём всегда будет актуальной.
Перед тем как заходить на какой-либо хостинг и покупать сервер советую пропустить у себя трафик через сеть Tor:
sudo apt install tor sudo systemctl start tor git clone https://github.com/ruped24/toriptables2
sudo toriptables2.py -l
sudo toriptables2.py -f
Гайд по покупке сервера я расписывать тут не буду. Это всё очень легко делается, не сложнее чем купить кроссовки в магазине одежды.
Итак. Мы выбрали хостера и купили свой сервер. Первым делом мы должны приконнектиться к нему по ssh. Открываем терминал:
sudo ssh ip
Отлично. Мы приконнектились к серверу:
Теперь создадим на нём наш VPN. Качаем установщик openvpn:
wget https://git.io/vpn -O openvpn-install.sh
ls
bash ./openvpn-install.sh
Использовать протокол будем UDP. Выбираем единичку:
Используем по умолчанию дефолтный DNS:
Придумываем имя. Можете написать что угодно:
Далее жмём любую кнопку на клавиатуре для завершения:
Проверяем создался ли наш файлик:
ls
Он создался. Теперь посмотрим в какой директории он лежит:
pwd
Можно выходить. Открываем терминал по новой. Теперь нам нужно скопировать наш файлик с сервера на наш компьютер:
scp root@111.111.111.11:/root/Alina.ovpn /home Скопировать имя_пользователя_нашего_сервера@IP_нашего_сервера:путь_к_файлу_на_сервере /каталог_на_нашем_компьютере_куда_нужно_скопировать
Заходим в каталог куда мы копировали файл и проверяем, что всё успешно скачалось:
Теперь нам нужно запустить наш VPN:
Далее выбираем наш файлик который мы скопировали и сохраняем:
Как видим всё отлично работает. Мы создали свой собственный VPN сервер. Он обошёлся мне всего лишь в 2$ и он лично мой, а не публичный. Взяла его лишь только для теста, чтобы показать вам. А самое главное он в разы быстрее, чем если бы вы покупали какой-нибудь VPN за 10$ в месяц у какой-то компании.
Теперь давайте немного защитим наш сервер.
Есть два варианта подключения к нашему серверу. Это по паролю, вводим ip адрес и пароль, далее коннектимся.
Второй вариант это использовать ssh ключи. Ssh ключи это пара ключей, публичный и приватный. Ключ это всего навсего тестовый файл с последовательностью некоторых символов которые и составляют наш ключ. Это очень длинная последовательность.
Зная ваш ip адрес сервера его легко можно сбрутить. Наверняка вы видели очень много тем по продаже дедиков на различных теневых форумах, их взламывают именно таким способом. SSH ключ же подобрать нереально. Поэтому нужно использовать именно данный способ. Это первый момент. И второй момент если мы логинимся постоянно по паролю, то нам нужно его постоянно помнить и вводить при каждом заходе. В случае же с ssh ключами, нам их помнить не нужно, они будут лежать в домашней директории в папке .ssh, соответственно они каждый раз при логине автоматически берутся оттуда и нам не нужно каждый раз этот пароль вводить.
Для того, чтобы настроить доступ к серверу по ssh ключам, нам нужно эти ключи в первую очередь сгенерировать. Для этого пишем:
ssh-keygen
Вылезет окошко, в нём ничего вводить не надо, просто нажмите несколько раз enter. После этого наши ключи сгенерируются.
В терминале будет написано куда именно они сгенерировались:
Перейдём в нужный нам каталог:
cd адрес/.ssh
Проверим, что ключи создались:
ls
id_rsa это наш приватный ключ, а id_rsa.pub наш публичный ключ.
Давайте теперь скопируем наш публичный ключ на наш сервер:
ssh-copy-id root@ip_сервера
После этого попробуем залогиниться:
Собственно всё. Теперь мы можем логиниться по ssh ключу на наш сервер без пароля.
Но данная возможность логиниться по паролю всё равно осталась. Её нужно отключить, потому что это небезопасно, пароль будут подбирать и такую возможность на всех серверах обязательно нужно отключать. Для этого на сервере необходимо отредактировать файл:
nano /etc/ssh/sshd_config
Откроется тестовый файл. Немного листаем стрелочкам вниз и находим вот такой вот параметр PasswordAuthentication:
Сохраняем (Ctrl + O) и Enter. Выходим из редактора (Ctrl + X).
После этого перезапускаем ssh:
service ssh restart
Всё. После этого доступ на сервер по паролю будет запрещён. Только свои ключи не потеряйте, сделайте их копии куда-нибудь на флешку, иначе при переустановке системы или если ваш компьютер сгорит, то вы потеряете доступ к своему серверу.