Как поднять собственный VPN на сервере. Ч.2.

by @redterror
Как поднять собственный VPN на сервере. Ч.2.

Продолжаем поднимать собственный VPN на сервере. От теории - к практике. Шаг за шагом.

Проблемы при анонимной покупке VPS

Многие зарубежные компании-хостеры принимают к оплате Bitcoin. Чего не скажешь о российских сервисах, предлагающих арендовать VPS. Хотя и среди Российских можно найти с оплатой данной криптовалютой.

Однако, даже с учетом того, что "белый" хостер принимает к оплате анонимную криптовалюту, многие из них все равно не любят анонимных клиентов. Поэтому при регистрации требуют ввести такие данные как ФИО, страна, город, адрес проживания, e-mail, мобильный телефон (не всегда). Также при регистрации и последующих заходах в личный кабинет логируется ваш IP адрес. Бывают более лояльные хостеры, бывают менее. Так что достаточно просто и анонимно купить VPS получится далеко не всегда.

Казалось бы, что при регистрации можно вбить левые данные, а проблема логирования IP решается проксями или Tor Браузером. НО НЕТ! Дело в том, что у многих таких "белых" хостеров на сайтах внедрены специальные антифрод системы, которые борются с мошенническими транзакциями. Вообще-то, это защита прежде всего от кардеров, но успешно работает и против чересчур анонимных клиентов.

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

1) IP адрес. Он должен быть более-менее чистый и не быть в базе антифрод системы как прокся и прочее. Это важнейший фактор. Как вы понимаете, IP адрес Tor во всех списках, и если у хостера стоит самый хуевый антифрод и есть желание бороться с анонимными клиентами, то через Tor зарегистрироватьмч не получится.

Вы можете использовать хорошие прокси или VPN. В общем, разберетесь.

2) Человек должен соответствовать реальности. Вбивать в ФИО 'ksdjfsjd skdfkk skdgs" примерно такое - не нужно.

3) Адрес должен быть тоже реальным. Не нужно писать улица ленина, в городе залупинс в Афганистане. Ок? Также, если у вас IP российский, значит и адрес тоже должен быть российским.

4) Желательно чтобы адрес соответствовал Zip Code (индексу). В смысле, он должен принадлежать ему.

5) Телефон. Должен иметь разный вид в зависимости от страны. Если Россия, то +7901... и дальше любые цифры. Зарубежные компании (это относится, кстати, не только к хостерам), очень редко присылают смс-код на номер телефона для подтверждения регистрации или чего-то еще, в отличии от российских компаний.

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

VPS с арендой за Bitcoin

Аренду VPS предлагает много хостеров. Нам не нужны большие мощности, поэтому подойдут самые слабые сервера с технологией виртуализации OpenVZ (но лучше KVM или Xen) с малой процессорной мощностью и небольшим количеством оперативной памяти (256-512 mb). Стоить такие сервера могут в среднем 2-5$ в месяц. А если постараться поискать, то можно найти и за 12-18$ за целый год.

Кстати, если вы нашли VPS, который не принимает к оплате Bitcoin или у вас просто их нет, зато есть Qiwi или Яндекс Деньги, то вы можете попытаться заплатить за сервер Виртуальной Кредитной Картой (VCC - Virtual Credit Card). Эти карты можно выпустить на сайте Qiwi и Яндекс Денег соответственно. При этом, естественно, Киви и ЯД должны быть левыми. Но лучше платите Биткоинами.

Для поднятия OpenVPN нам нужно чтобы наш VPS поддерживал TUN/TAP.

Обычно почти все VPS провайдеры предоставляют эту фичу. Где-то она сразу включена, как только создается VPS, где-то приходится включать через панель управления на сайте (если OpenVZ), где-то нужно просить техническую поддержку что бы включили вам TUN/TAP (но это редко).

Что бы найти VPS, нужно ввести правильный запрос в гугле. Запросы лучше делать на англ. языке, чтобы выдавал зарубежных хостеров (если нужно). Запросы могут выглядить следующим образом: "buy vps", "buy cheap vps", "cheapest vps", "cheap openvz vps", "cheap vps <страна>" и подобное.

Также существуют различные сайты, на которых можно найти достаточно дешевые VPS.

Дешевые VPS

LowEndBox - сайт, на котором можете посмотреть дешевых VPS провайдеров.

LowEndTalk - этот сайт существует как дополнение к предыдущему. На нем много пользователей, идет активное обсуждение разных VPS провайдеров. Сайт этот очень полезный. На нем можно найти много мелких и не очень предпринимателей, которые подторговывают VPS. Также много полезной инфы, обзоров различных хостеров и прочее. Иногда сам почитываю.

LowEndStock - вот здесь представлены разные дешевые хостеры VPS в таблице.

VPS-List.Cryto - сайт, подобный предыдущему.

CompareVPS - еще один подобный сайт с таблицей, по-моему мнению, хуже LowEndStock.

PoiskVPS.ru - Российский сайт по подбору VPS. Подбирать можно по разым параметрам, например таким как страна размещения сервера или способ оплаты (можно отфильтровать за биткоин, киви или что вам удобно). Полезный сайт. В основном здесь российские хостеры. Цена на VPS начитается от 70 руб./месяц.

Crypto.net - а на этом сайте, по ссылке, автор собрал и переодически обновляет список VPS провайдеров, которые принимают к оплате Bitcoin. Раньше это было более актуально, но сейчас очень большое количество провайдеров принимают Bitcoin.

FreeVPS.us - данный сайт может быть тоже интересен. Можно встретить каких-то VPS провайдеров дешевых. Можно найти и бесплатных или с бесплатным пробным периодом - этому сайт и посвящен.

WebHostingTalk.comp - в дополнение. Большой форум с обсуждением провайдеров VPS/VDS, и хостингов.

На этих сайтах достаточно много информации по дешевым VPS. Заходите, читайте, находите.

Анонимно арендуем VPS за Bitcoin

И вот мы нашли VPS с поддержкой TUN/TAP, теперь нам нужно его арендовать. Я буду показывать аренду VPS в одном из перечисленных выше VPS провайдеров.

Мое соеденение на данным момент такое: на Хост. машине VPN + виртуалка Whonix. Поскольку я писал выше о проблемах аренды VPS через Tor, мне необходим на выходе белый (не Tor) IP.

Я иду на vpngate.net, нахожу там France в списке, скачиваю OpenVPN TCP конфиг (TCP, потому что этот VPN идет после Tor, а он только с TCP). Запускаю VPN на своем Linux (openvpn --config <конфиг.ovpn>).

Так как я выбрал France VPN, с французский IP, это значит что и мой "вирутальный клиент", тоже будет из Франции. И звать его будут никак не Вася Иванов, и жить он будет не в Красноярске.

Я захожу на сайт whoer.net для того чтобы убедиться, что IP действительно определяется из Франции. Там же была показана следующая информация: IP Фрнации, а также был указан город - Audincourt.

Вы можете тоже воспользоваться бесплатным VPN или хорошими проксями/SSH. В моем случае так получилось, что это Франция.

На сайте провайдера, я выбираю нужную мне услугу, в моем случае это VPS за 3$/месяц. Жму "Купить" или "Заказать" и меня перекидывает на страницу с конфигурацией сервера.

Так вводим какую-то информацию о сервере: Hostname, NS префиксы, пароль от root, выбираем операционную систему.

Hostname - вводим что угодно, например site.test

NS префиксы - тоже что угодно, например ns1.site.test, ns1.site.test

Пароль от root - вводим по безопаснее.

Выбираем ОС - выбирайте лучше Debian или Ubuntu (лучше Debian).

Лучше 64 бит. И самые последние доступные версии. Я выбрал Debian 8 x64. Если вы умеете работать с дистрибутивом, например CentOS, то выбирайте что душе угодно. Я все буду показывать на примере Debian.

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

После этого я жму Contune, затем Checkout и попадаю на страницу, где нужно вбивать данные о себе:

Имя, фамилия (придумываем сами, только не Вася Иванов)

Имейл (регаем по новой или юзаем если есть, лучше gmail, yahoo.com, hotmail, outlook, или еще что-то, У ВАС ДОЛЖЕН БЫТЬ ДОСТУП К НЕМУ)

Телефон

Адрес

Zip code

Страна (страну вы знаете по IP)

Область (раскрывающийся список из областей, на которую поделена страна)

Город (город может отображаться на том же whoer.net или других подобных сервисах, а может и не отображаться)

Пароль от аккаунта

Как сгенерировать эти данные? Ведь одно дело, когда у вас IP российский, а другое, когда другой страны, типа Франции. С Россией или Украиной в этом плане как-то проще, тут все понятно.

Для того чтобы подобрать адрес (регион страны, в котором расположен город, адрес, телефон, зип код) я воспользуют гугл картами.

А именно, я открываю Google Maps и вводжу в поиск название города, который у меня отобразился - Audincourt. Меня приблежвает к городу и карты подсвечивают его границы. Я приближаю еще немного сильнее карту и ищу какой-нибудь ОБЪЕКТ (кафе, школа, пиццерия, ресторан или еще что-то). Жму мышкой на этот объект и мне высвечивается инфорамция о нем, а именно:

Полный адрес и Zip Code, телефон (не всегда).

Для того чтобы определить область/штат/регион/провинцию, которой соответствует этот город - я просто гуглю название города и на 1-2 странице будет нужна информация.

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

Выбираю оплату Bitcoin, соглашаюсь с их правилами и жму Checkout или подобнуюю кнопку. На этом этапе начинает работать антифрод система, которая на основе факторов выше (IP, браузер, введенная информация) вычисляет так называемый Risk Score или Fraud Score, и определяет, можно тебе дальше или нельзя.

В моем случае все прошло гладко (обычно так и бывает) и меня перекинуло на страницу с информацией для оплаты bitcoin.

Там будет: число биткоинов к оплате + кошелек, куда платить. Помимо этого, этот Payment gateway (платежный шлюз) Coinfy позволяет платить не только Bitcoin но и другими криптовалютами. На все про все у вас 15 минут (без подтверждений, биткоин нужно лишь отправить). - Идем в ваш биткоин кошелек, копирует кошелек к оплате, копируем сколько битков переводить и переводим. После этого почти моментально страница с инф. к оплате изменит свой вид. - Типа, все нормально, битки идут, и перекинет вас обратно на сайт, на так называемую страницу Order Confirmation.

Еще Order Confirmation вам упадет на имейл. Помимо этого, может упасть на имейл "подтверждалка" - письмо с ссылком, при

переходе по которой, вы подтверждаете свой email. Так что проверяйте.

Начался процесс создания сервера. Длится он обычно не долго. Может минут 15, может час. Ну максимум 2. Если в течении этого времени сервер не создался, то пишите в тех.поддержку, создавая тикет.

Когда VPS создатстся, вам на имейл придет письмо со всей необходимой информацией для коннета на SSH: IP адрес VPS, пароль от root.

Или эта информация будет у вас в личной кабинете на сайте.

Или часть там, часть на имейл.

Также, не везде и не всегда, провайдер предоставляет доступ к VPS Contol Panel. В моем случае он предоставляет. В письме есть инфа для логина.

Заходим на сервер по SSH

После того, как все данные для подключения были высланы вам на почту или вы нашли их в личном кабинете, то для коннекта к серверу вы обладаете всеми данными, а именно:

IP адресс.

Логин: root.

Пароль от root: либо вы указывали при создании сервера, либо был сгенерирован.

Для того чтобы подключиться по SSH на Windows, нужно воспользоваться сторонними программами. Скачивайте на выбор: Putty или Kitty. Работать с этими программами достаточно просто.

На ОС Linux и MacOS все проще.

В терминале вводим:

ssh user@ip

где: ip - IP адрес VPS.

user - username пользователя. При первом подключении / в нашем случае - root.

После нажатия enter, при самом первом коннекте, вам выскочит сообщение:

Are you sure you want to continue connecting (yes/no)?

вручную вводим yes, потом вам предложит ввести пароль от root, который у вас также есть. Если все хорошо, то вы подключились к VPS и вам будет передано управление командной строкой.

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

Если Linux, то ctrl+shift+v вставить в терминале (ctrl+shift+c скопировать из терминала).

Если Windows и вы используете Putty/Kitty, то вставить в консоль можно по нажатию на ПКМ.

Такое бывает, но иногда дистрибутив созданного сервера не совпадает с тем, который вы выбирали, когда делали заказ. Поэтому, если вы зашли на сервер по SSH и ввели команду

apt-get update

И вам выдало ошибку о том, что apt-get такой команды нет, и при этом введя, например

yum update

И пошел какой-то процесс, это означает, что вместо Debian/Ubuntu у вас установился CentOS. Пугаться не нужно.

Для этого вам просто напросто нужно переустановить ОС. Сделать это можно из VPS Control Panel, данные о котором пришли все в том же письме, если провайдер предоставляет эту фичу, или из личного кабинета на сайте провайдера. Ищем там что-то вроде "Reinstall OS" или "Rebuild" и переустанавливаем, если это нужно, на Debian/Ubuntu.

Покажу на своем примере VPS Control Panel, потому что у меня как раз такой случай, когда установился не тот дистрибутив.

Перехожу на сайт, ввожу логин и пароль (все это на почте)

 

Находим Reinstall, жмем, выбираем ОС, вводим новый пароль от root (или старый), и переустанавливаем. Все автоматически.


После этого сервер выключится и начнется переустановка OC. Займет она минут 5-10. Новые данные для подключения упадут на почту: IP будет тот же, логин root, изменится лишь пароль, если вы вводили новый.

Проверяем TUN/TAP на VPS

Для начала, елси поднимать мы будем именно OpenVPN, который как я писал выше, требует TUN/TAP, то нужно проверить, включен он или нет. Для этого в терминале вводим следующую команду:

cat /dev/net/tun

И если вам выдает:

root@ppVPS:~# cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state

То это значит, что он включен и можно работать дальше. А если вывод такой:

root@ppVPS:~# cat /dev/net/tun
cat: /dev/net/tun: No such file or directory

То выключен. Значит, нам надо его включить. Делается это в панеле упаравления VPS либо в личном кабинете на сайте провайдера. Либо, по запросу в тех. поддержку.

Я захожу в VPS Control Panel, введя логин и пароль, ищу нужную кнопку, в моем случае это VPS Configuration.


Затем ставлю галочку на Enable TUN/TAP.


После этого сервер перезагрузится. Подключитесь к нему по-новой в введите:

cat /dev/net/tun

Должно вывести:

cat: /dev/net/tun: File descriptor in bad state

Если так, то все нормально. Если нет, то вы что-то сделали не так.






Первичная настройка VPS

Далее, перед поднятием непосредственно OpenVPN, было бы неплохо произвести какую-то первичную настройку на сервере: обновить пакеты - поставить нужные пакеты, отключить ненужные сервисы, создать пользователя, настроить sshd_config (поменять порт, запретить коннет от root).

Поскольку я показываю на примере дистрибутива Debian, вводимые команды будут для этого дистибутива и для дистрибутивов основанных на Debian (Ubuntu).

Обновляем пакеты:

apt-get update &amp;&amp; apt-get dist-upgrade -y

Ставим нужные пакеты:

apt-get install -y nano sudo htop curl perl python wget git openvpn openssl easy-rsa iptables ca-certificates ufw

где:

nano - консольный редактор. Обычно стоит изначально, но не всегда.

htop - консольный диспетчер задач.

openvpn - пакет openvpn. Нужно для поднятия OpenVPN.

easy-rsa - скрипты для легкой генерации ключей. Нужно для поднятия OpenVPN.

git - понадобится, если будете поднимать OpenVPN скриптом (далее в статье).

Еще можно поставить следующие пакеты, но не обязательно:

apt-get install build-essential make automake autoconf pkg-config

Далее, нам нужно создать пользователя:

useradd -m -s /bin/bash pp-ruloh

где:

useradd - команда, создающая пользователя.

-m - создает домашнюю папку пользователя (по пути /home/<имя пользователя>/), по-умолчанию имеет такое же название, как и имя пользователя

-s - указывает, какой shell использовать

pp-ruloh - имя пользователя.

После создания юзера, вам ОБЯЗАТЕЛЬНО нужно создать ему пароль, потому что мы будем использовать этого юзера для коннекта по ssh, поэтому вводим команду:

passwd pp-ruloh

Предложит дважды ввести пароль. При вводе не будет отображаться. Как вставлять в терминале я писал вышел.

Далее, нужно отключить лишние сервисы. Вводим команду:

netstat -tulpn

Для того что бы посмотреть, какие сервисы запущены. На данном этапе в идеале должен быть запущен только sshd. Поскольку у меня установлена Debian-minimal, то у меня так и есть и команда

netstat -tulpn

Выдает мне только

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      204/sshd        
tcp6       0      0 :::22                   :::*                    LISTEN      204/sshd

Но обычно может быть запущен какой-нибудь веб-сервер, mail-server, еще что-то... Не знаю, что запущено у вас, поэтому по-очереди вводите следующие команды:

/etc/init.d/apache2 stop
update-rc.d apache2 disable
/etc/init.d/postfix stop
update-rc.d postfix disable 
/etc/init.d/nginx stop
update-rc.d nginx disable
/etc/init.d/exim4 stop
update-rc.d exim4 disable
/etc/init.d/rpcbind stop 
update-rc.d rpcbind disable
/etc/init.d/nfs-common stop 
update-rc.d nfs-common disable
/etc/init.d/rsyslog stop
update-rc.d rsyslog disable

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

Далее, можно настроить sshd. Из соображений безопасности поменяем порт со стандартного на нестандартный и запретим коннект от root.

Редактируем файл /etc/ssh/sshd_config при помощи nano:

nano /etc/ssh/sshd_config

Вкратце расскажу основные горячие клавиши при работе с консольным редактором nano.

nano <путь до файла> - открываем файл в nano.

Ctrl+O - сохранить. Записать изменения в файл. Жмем Ctrl+O, потом Enter.

Ctrl+X - выйти из nano.

Ctrl+K - вырезать целую строку. Будет скопировано в буфер обмена.

Ctrl+U - вставить вырезанную строку, которая находится в буфере обмена.

Ctrl+W - поиск по файлу. Поиск в редаткоре, вводим че нужно -> жмем интер.

Если хотим скопировать часть текста, в самом редакторе выделяем мышкой нужный текст и жмем комбинацию Ctrl+Shift+C. Это скопировать.

Для того того чтобы вставить текст, который сейчас находится в буфере обмена, жмем комбинацию Ctrl+Shift+V.

Не забывайте вводить sudo nano если редактируете файл, к которому у вас нет прав на запись.

Ищем строку Port (будет где-то наверху), и меняем ее значение на другое, отличное от 22, в диапазоне от 1024 до 64000.

Port 1488

Далее, ищем строку PermitRootLogin и меняем ее значение с yes на no:

PermitRootLogin no

Ищем строку PermitEmptyPasswords и проверяем, чтобы там было no:

PermitEmptyPasswords no

Можно еще, но не обязательно, запретить коннект всем пользователям по SSH кроме того, которого мы создали выше. Для этого где-нибудь в файле, например внизу, пишем следующее:

AllowUsers pp-ruloh

После AllowUsers имя юзера.

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

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

После всех манипуляций в файле /etc/ssh/sshd_config, перезапускаем:

systemctl restart sshd

или

service sshd restart

Изменения применятся.

Следующий ваш коннект по SSH будет выглядить следующим образом:

ssh -p 1488 user@ip

где:

-p 1488 - порт SSH, который вы указывали в /etc/ssh/sshd_config

user - пользователь, отличный от root. Под рутом не получится подключиться.

Если у вас винда, то в PUTTY/KITTY тоже меняете порт. Теперь вы будете коннектиться по SSH на сервер через этого юзера. У него нет почти никаких прав, он даже не суперпользователь. Поэтому, для того чтобы производить какие-то манипуляции на сервера, нужно залогиниться под рутом. Для этого под обычным юзером вводим:

su -

И вводим пароль от root. Все - можете делать что хотите. Чтобы выйти из-под рута, вводите exit.

В следующей статье рассмотрим, как поднять OpenVPN вручную, а так же настроить собственный Firewall.

July 21, 2018
by @redterror