Как поднять собственный vpn на сервере

Как поднять собственный vpn на сервере

Что такое VPN

VPN расшифровывается как Virtual Private Network (Виртуальная Частная Сеть). Это технология, которая создает виртуальный защищенный канал (или туннель) между вашим устройством (компьютер/смартфон/планшет) и Интернетом.

VPN - это некий сервис, который обычно работает на удаленной машине (сервере).

Зачем нужен VPN

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

VPN позволяет выходить в сеть от пользователя с другим IP адресом, возможно, другой страны, что дает возможность обходить разного рода блокировки или воспользоваться ресурсами, которые доступны только для пользователей определенных стран (допустим существует сайт, который доступен только для пользователей Германии).

Также, если ваш провайдер не предоставляет вам статический IP адрес, VPN может быть использован для создания такого выделенного IP.

Для нас VPN является отличным средством анонимизации и защиты нашего трафика от провайдера.

VPN будет скрывать от вашего провайдера ресурсы, которые вы посещаете. А от ресурсов, которые вы посещаете, VPN будет скрывать ваш реальный IP адрес.

VPN часто используется как средство для сокрытия Tor-траффика от вашего провайдера, ведь запуская VPN, а затем Tor Браузер, ваш трафик имеет цепь VPN -> Tor, что означает, что факт использования Tor скрыт от провайдера, в ваш настоящий IP адрес не палится перед первой (входной) нодой сети Tor.

VPN протоколы

Существует множество разных протоколов VPN.

OpenVPN - это протокол с открытым исходным кодом, использующий библиотеку OpenSSL - поддерживает большое количество шифров, очень безопасный, достаточно гибкий в настройке, может работать на любом порту, быстрый по скорости. Для работы необходимо стороннее ПО (клиенты OpenVPN под разные ОС, об этом ниже). Клиентский файл .ovpn может использоваться на любой ОС, в том числе и мобильных. Везде рекомендую вам именно OpenVPN.

IKEv2 - Тоже очень неплохой протокол с очень высокой степенью защиты, быстрый по скорости. Один из немногих протоколов, поддерживающий устройства Blackberry, но сам по себе поддерживает достаточно мало платформ. Этот протокол встретишь не так часто в VPN сервисах, в отличии от OpenVPN или L2TP. Исходный код не открыт, а это потенциально небезопасно.

PPTP - Этот протокол достаточно старый, один из самых первых. Быстрый по скорости и легкий в настройке, поддерживается почти всеми ОС, однако очень уязвимый и совершенно небезопасный. Несколько раз взламывался спецслужбами. Этот протокол использовать крайне не рекомендуется за исключением случаев, где вам не нужна защита. Это юзать не нужно ни в коем случае!

L2TP/IPsec - Уже лучше, чем PPTP. L2TP также поддерживается многими ОС, в том числе и мобильными и тоже достаточно прост в настройке. IPsec обеспечивает более стойкое шифрование, чем PPTP. Однако, L2TP/IPsec медленнее, чем PPTP или OpenVPN. Не обходит Фаерволлы.

SSTP - Протокол от Microsoft. SSTP с хорошим, стойким шифрованием, доступен только для операционных систем Windows. Как и OpenVPN, позволяет обходить Firewall. Проще в настройке, чем OpenVPN. Без открытого исходного кода, поэтому OpenVPN лучше.

Вывод: если есть возможность, использовать лучше только OpenVPN из-за открытого исходного кода, безопасности и относительной скорости. IKEv2 хороший протокол, безопасный, быстрый, стабильный, но с закрытым исходным кодом. L2TP/IPsec можно использовать вместо PPTP, а PPTP использовать вовсе не рекомендую. SSTP доступен только для Винды, тоже не очень рекомендую.

Бесплатные VPN vs свой VPN vs покупной VPN

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

Идем на сайты, скачиваем конфигурационный файл OpenVPN или получаем инструкцию по подключению, если вы используете другой VPN протокол.

Конфигурационный файл OpenVPN (с расширением .ovpn) нужно "скормить" вашему OpenVPN клиенту (о клиентах я написал ниже).

В чем преимущество бесплатных VPN?

Очевидно, что сама по себе бесплатность является плюсом. Также то, что такими серверами пользуются большое количество людей, прибавляет анонимности. На этом его преимущества заканчиваются.

Данные VPN очень нестабильные. Часто отваливаются. Очень медленные. Использовать их я бы рекомендовал, только если нужно срочно для чего-то и нет других возможностей. Но лучше что бы у вас не было таких ситуаций. Не исключено, что на таких серверах ведутся логи. Да и что на этих серверах ЕЩЕ происходит - никому не известно.

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

Можно воспользоваться собственным VPN. Нужно лишь купить сервер в интернете, зайти на него и поднять там OpenVPN по инструкции.

По сравнению с платными VPN-сервисами, свой собственный VPN выходит еще дешевле. Арендовать VPS (Virtual Private Server) можно чуть ли не за 2-3$/месяц в интернете. Что, по-моему, достаточно дешево - нужно лишь поискать.

Конечно же, свой VPN имеет и другие преимущества. Например, у вас будет root-доступ к серверу, поэтому вы можете отключить логирование и 100% быть уверенными в том, что логирование не ведется. В отличии от не своего VPN (бесплатные или платные), где у вас нет root-доступа, а это значит, что вы не можете никак быть уверенны в том, что логирование отключено, как бы вас не убеждали в этом эти сервисы. Вы сам себе хозяин на сервере. Это ваш VPN.

В отличии от бесплатных VPN, свой сервер будет работать гораздо быстрее и стабильнее. Это очень весомый плюс.

Также, поскольку у вас будет свой собственный сервер, туда можно прикрутить что-нибудь помимо OpenVPN, какой-нибудь другой сервис. Например, веб-сервер и разместить там небольшой сайт. Или можно сделать ее Tor-нодой, если провайдер разрешает. Tor relay разрешают чаще чем Tor Exit Node (выходную ноду).

Однако, существует проблема, что на сервере будете находиться вы и только вы один (если вы, конечно, не дадите использовать свой VPN еще пару сотен человек, но тогда и сервер нужен будет мощнее). Такой проблемы нет у бесплатных или платных VPN.

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

Можно воспользоваться услугами платных VPN сервисов которые тоже относительно недорогие (в среднем 5-12$/месяц).

Такие сервисы нужно искать, конечно же, в интернете. Большинство из них принимают к оплате Bitcoin, что несомненно круто. У многих есть свой OpenVPN клиент под какую-то операционную систему, но пользоваться их клиентами не очень рекомендуется из соображений безопасности.

Регистрируетесь и платите за месяц (или год, что выходит дешевле), скачиваете конфигурационный файл OpenVPN (.ovpn), скармливаете его вашему OpenVPN клиенту и всё, у вас будет VPN. Если у вас не OpenVPN, то читаете инструкцию на сайте сервиса по подключению с другим протоколом. Благо на этих сайтах у них хорошие инструкции и все предельной просто и понятно.

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

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

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

Когда вы выбираете себе VPN сервис или VPS, обращайте внимание на то, где зарегистрирована фирма представляющая VPN, а также на то, в каких странах расположены их сервера. Про выбор VPS тоже самое.

Юридический момент в этом деле важен, но здесь я вам не помощник.
Могу сказать лишь то, что использовать VPN расположенный в стране, где вы совершаете преступление, так себе затея. Так что, если вы работаете против России, заказывать сервера в этой стране или пользоваться услугами Российского VPN сервиса КРАЙНЕ нелогично.

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

Ищем и арендуем VPS за Bitcoin

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

Проблемы при анонимной покупке 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 [email protected]

где: 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, потому что у меня как раз такой случай, когда установился не тот дистрибутив.

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

Как поднять собственный vpn на сервере
 

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

Как поднять собственный vpn на сервере

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

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

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

cat /dev/net/tun

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

[email protected]:~# cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state

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

[email protected]:~# cat /dev/net/tun
cat: /dev/net/tun: No such file or directory

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

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

Как поднять собственный vpn на сервере

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

Как поднять собственный vpn на сервере

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

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 [email protected]

где:

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

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

su -

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

Поднимаем OpenVPN вручную

Итак, собственно, поднимаем OpenVPN-server.

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

Обновим систему:

apt-get update &amp;&amp; apt-get dist-upgrade -y
apt-get install -y sudo nano htop curl perl python wget git openssl ca-certificates iptables

И три основных пакета:

apt-get install -y openvpn easy-rsa ufw

После установки пакетов, разархивируем пример конфигурационного файла в папку /etc/openvpn/:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz &gt; /etc/openvpn/server.conf

Файл /etc/openvpn/server.conf - основной серверный конфигурационный файл OpenVPN.

Теперь немного отредактируем его:

nano /etc/openvpn/server.conf

Файл длиный, с большим количесвом комментариев (все, что идет в строчке после символа # - комментарий). Строки, которые начинаются с символа ; в данном файле - тоже комментарии.

Частичный разбор конфига будет ниже в статье.

Редактируем. В самом верху сразу будет port:

port 1194

Я поменяю порт на какой-нибудь совсем не стандартный:

port 16122

(Диапазон от 0 до 65000), я выбрал рандомно. Не займите порт, который слушает другой сервис, например в моем случае sshd случает 1488.

Идем дальше. Выбираем протокол - пара строк ниже:

proto udp

И видим, что она никак не закоментированная. Потому что по-умолчанию OpenVPN будет работать по UDP. Если вам нужен TCP, выше есть строчка proto tcp - раскоментируйте ее, удалите символ ; в нчале строки, а proto udp закоментируйте, добавив символ #. Оба нельзя, или то или другое. Я буду показывать на примере UDP, поэтому оставляю как есть.

Опускаемся ниже в конфиге и находим строку:

dh dh1024.pem

Меняем на dh2048.pem:

dh dh2048.pem

Идем ниже и находим закоментированную строку:

;push "redirect-gateway def1 bypass-dhcp"

Раскоментируем:

push "redirect-gateway def1 bypass-dhcp"

Еще чуть ниже находим две раскоментированные строки рядом:

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Это то, какой DNS будет использоваться. По-умолчанию прописаны сервера OpenDNS, но можем прописать публичные сервера Google:

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Можете оставить и OpenDNS.

Идем дальше и натыкаемся на строку

;tls-auth ta.key 0 # This file is secret

Просто раскоментируем:

tls-auth ta.key 0 # This file is secret

Листаем ниже и находим строку:

;cipher AES-128-CBC   # AES

Это шифрование. Раскоментируем строку и переделаем на AES-256-CBC:

cipher AES-256-CBC

Еще чуть ниже в файле находим две закоментированные строки:

;user nobody
;group nogroup

Раскоментим их:

user nobody
group nogroup

Далее, ниже находим строку, которая начинается со слова status и переделываем ее в следующий вид:

#status /dev/null 2&gt;&amp;1

Закоментированная.

Еще чуть ниже, находим строку, которая начинается со слова log, и придаем ей такой вид:

log /dev/null 2&gt;&amp;1

Не закоментированная. Это логи. Отключить логирование OpenVPN нельзя в привычном понимании, поскольку если закоментировать строку, то по-умолчанию будет писаться в syslog файл (/var/log/syslog).

Строку

;log-append

не трогаем

Еще чуть ниже, verb 3 меняем на:

verb 0

Сохраняем, закрываем. Мы еще вернемся к этому файлу позже.

Теперь включаем перенаправление пакетов, вводим команду:

echo 1 &gt; /proc/sys/net/ipv4/ip_forward

Затем:

cat /proc/sys/net/ipv4/ip_forward

Если возвращает единицу, значит все ОК.

Теперь надо чтобы изменения были и при перезагрузке сервера, поэтому редактирум файл /etc/sysctl.conf:

nano /etc/sysctl.conf

Ищем строку:

#net.ipv4.ip_forward=1

Раскоментируем ее:

net.ipv4.ip_forward=1

Если такой строки в файле нет вообще, добавьте вручную.

Настроим Firewall

Ранее мы установили пакет ufw. Теперь нам нужно добавить некоторые правила. Во-первых, нам нужно дать разрешить траффик на SSH. Я ввожу:

ufw allow 1488

Поскольку у меня sshd слушает порт 1488, если вы не меняли и у вас sshd слушает 22 порт, то вводите:

ufw allow ssh

Далее, нам нужно разрешить траффик на порт, который будет слушать OpenVPN, в моем случае это port 16122, потому что я менял его в конфиг. файле (выше):

ufw allow 16122/udp

Поскольку OpenVPN будет слушать UDP порт, я в конце добавил /udp. Если у вас OpenVPN настроен не на UDP, а на TCP, без слеша на конце (или /tcp).

Если вы ничего не меняли в конфиге, то у вас слушает порт 1194 UDP, а значит:

ufw allow 1194/udp

Теперь нужно изменить Forward Policy, редактируем файл /etc/default/ufw:

nano /etc/default/ufw

Ищем строку:

DEFAULT_FORWARD_POLICY="DROP"

И меняем ее значение на:

DEFAULT_FORWARD_POLICY="ACCEPT"

Теперь нам нужно разобраться с сетевыми интерфейсами, вводим команду:

ip addr

Команда выведет ваши интерфейсы. Там будет интерфейс lo и еще какой-нибудь, например eth0 или venet0. В моем случае интерфейс называется venet0 (ибо OpenVZ). У меня такой вывод:

1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: venet0: &lt;BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UNKNOWN 
    link/void 
    inet 127.0.0.2/32 scope host venet0
    inet МОЙ IP/32 brd МОЙ IP scope global venet0:0

Вам нужен интерфейс, который показывает ваш внешний IP. Из кода выше понятно, что venet0 показывает внешний IP. (inet МОЙ IP)

Далее, что нужно редактировать файл /etc/ufw/before.rules:

nano /etc/ufw/before.rules

И куда-нибудь наверх, вставляем следующее:

# START
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o &lt;ВАШ ИНТЕРФЕЙС&gt; -j MASQUERADE
COMMIT
# END

где вместо <ВАШ ИНТЕРФЕЙС> пишем интерфейс, в моем случае это venet0 и получилось так:

# START
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o venet0 -j MASQUERADE
COMMIT
# END

После всего этого включаем ufw:

ufw enable

Cмотрим на наши правила:

ufw status

Выводом покажет правила, которые вы создавали выше, у меня так:

[email protected]:~# ufw status
Status: active

To                  Action      From
--                  ------      ----
1488                ALLOW       Anywhere
16122/udp           ALLOW       Anywhere
1488                ALLOW       Anywhere (v6)
16122/udp           ALLOW       Anywhere (v6)

где 1488 - для SSH и 16122 - UDP опенвпн.

Отключить ufw можно так:

ufw disable

Генерируем ключи для сервера. Ранее мы ставили пакет easy-rsa. Теперь копируем папку со скриптами easy-rsa в папку openvpn:

cp -r /usr/share/easy-rsa/ /etc/openvpn

внутри папки easy-rsa создаем папку keys:

mkdir /etc/openvpn/easy-rsa/keys

Теперь сгенерируем Diffie-Hellman длиной 2048 и поместим его в /etc/openvpn:

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Еще сгенерируем файл ta.key в папку /etc/openvpn, для tls-auth:

openvpn --genkey --secret /etc/openvpn/ta.key

Далее...

Переходим в папку easy-rsa:

cd /etc/openvpn/easy-rsa

Тут лежит файл vars с какими-то переменными, редактируем его:

nano vars

Крутим вниз пока не наткнемся на блок:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"

# X509 Subject Field
export KEY_NAME="EasyRSA"

В первых 6 строках можете менять значения, можете оставить как есть. Я оставлю как есть. Пофиг. Главное нельзя оставлять их пустыми.

Но конкретно здесь нас интересует строка

export KEY_NAME="EasyRSA"

Здесь значение меняем на server, что бы было вот так:

export KEY_NAME="server"

Можно поменять на любое другое, но не ебем мозг и меняем как я, потому что иначе вам придется менять значения в server.conf.

Если дали название отличное от server - запомните его.

Вот так. Сохраняем, закрываем файл.

Далее вводим следующее:

source vars

Далее, вводим:

./clean-all &amp;&amp; ./build-ca

Будет предлогать вводить какие-то значения, но мы их меняли (или не меняли) в файле vars. Просто везде жмем Enter и все. При этом, дойдя до пункта Name, нажимая Enter будет то имя, которое вы указывали ранее в KEY_NAME у меня это server.

Следующим делом вводим:

./build-key-server &lt;ИМЯ В KEY_NAME&gt;

где: <ИМЯ В KEY_NAME> - это то имя, которое вы давали в файле vars. Если ничего не давали, то по-умолчанию там было Easy-RSA. Я давал имя server, поэтому:

./build-key-server server

Точно таким же образом, везде жмем Enter. Даже там, где предложит ввести 'A challenge password', жмем enter.

Потом дважды вводим символ y, где попросит:

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

В конце вы увидите:

Write out database with 1 new entries
Data Base Updated

Теперь нам нужно переместить все сгенерированные ключи и сертификаты в папку /etc/openvpn.

Всё добро находится в папке /etc/oepnvpn/easy-rsa/keys. Нас интересуют 3 файла (исплючая dh2048.pem и ta.key, которые мы сгенерировали ранее) - ca.crt, server.crt, server.key,

где файлы server.crt и server.key - имеют название, которое вы указывали в KEY_NAME, я указывал server, помним да.

Перемещаем их следующим образом:

cp /etc/openvpn/easy-rsa/keys/{ca.crt,server.crt,server.key} /etc/openvpn/

Идем обратно в папку openvpn:

cd /etc/openvpn

Вводим к консоли ls и смотрим, какие файлы лежат. На данный момент должны быть следующие файлы: ca.crt, dh2048.pem (который мы генерировали ранее), server.conf (основной конфиг), server.crt, server.key и ta.key Еще может быть файл update-resolv-conf.

[email protected]:/etc/openvpn# ls
ca.crt	dh2048.pem  easy-rsa  server.conf  server.crt  server.key  update-resolv-conf

Теперь запускаем openvpn:

systemctl start openvpn

или

/etc/init.d/openvpn start

Проверяем, запустился ли:

systemctl status openvpn

или

/etc/init.d/openvpn status

Должно гореть зелененьким (лол), вы увидите надпись:

Active: active (exited) since

Проверяем, слушает ли порт:

netstat -tulpn | grep vpn

Должно вывести один сервис, который слушает на порту, который вы указывали.

У меня вывод такой:

udp  0   0 0.0.0.0:16122   0.0.0.0:*     484/openvpn

Все проверили, молодцы. Теперь остановим:

systemctl stop openvpn

или

/etc/init.d/openvpn stop

Делаем клиента, генерируем ключи.

Для начала нам нужно скопировать пример конфиг. файла для клиента.
Скопируем его в папочку /etc/openvpn/easy-rsa/keys и переименуем (даем расширение .ovpn):

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

Редактируем файл клиента:

nano /etc/openvpn/easy-rsa/keys/client.ovpn

Листаем файл вниз, натыкаемся на строку

remote my-server-1 1194

где: my-server-1 - IP адрес вашего сервера. Тот, что пришел вам на почту или смотрите по команде ip addr | grep inet и ищите. 1194 - Порт, на котором слушает OpenVPN на вашем сервере, в моем случа это 16122.

Меняйте эту строку, я меняю:

remote 111.222.111.222 16122

Листаем ниже, находим строку:

ns-cert-type server

стираем ее и меняем на:

remote-cert-tls server

Еще чуть ниже строка:

;cipher x

Меняем шифрование на то, которое вы указывали в server.conf. Я указывал AES-256-CBC:

cipher AES-256-CBC

Если вы в server.conf ничего не указывали, то эту строку не трогайте.

Все. Сохраняем и закрываем.

Теперь нужно сгенерировать ключи и серты для клиента.

Перейдем в папку easy-rsa:

cd /etc/openvpn/easy-rsa

Генерим:

./build-key client1

где: client1 - название клиента. Может быть любым. Я сделал client1.

Таким же образом, как и с сервом, везде жмем Enter. И соглашаемся, нажимая y, там где это нужно.

Клиентский конфиг состоит из:

.ovpn файла. В моем случае это client.ovpn.

файла ca.crt - который общий для сервера и все клиентов.

файл ta.key - тоже общий для сервера и клиента. Это для tls-auth, что не обязательно.

файлов client1.crt и client1.key - которые индивидуальные для каждого клиента.

Дело в том, что все эти файлы нужны .ovpn конфигу, без них он не будет работать. Но не будем же мы их везде вместе таскать! Поэтому есть возможность все эти файлы строить в .ovpn конфиг, чтобы был один единый файл и все.

Нужно проделать кое-какие манипуляции, поэтому для удобства создаем папку client1:

mkdir /etc/openvpn/easy-rsa/keys/client1

Нужно скопировать туда конфиг.файл .ovpn и все серты и ключи,
по аналогии с сервером, файлы client1.crt и client1.key имеют названия специфические, в зависимости от того, какое вы указывали имя клиента, выполняя команду выше. Я назвал client1 поэтому у меня они называются именно так.

Копируем:

cp /etc/openvpn/easy-rsa/keys/{ca.crt,client1.crt,client1.key} /etc/openvpn/easy-rsa/keys/client1

За одно копируем client.ovpn (называться может как угодно, хоть xuy.ovpn):

cp /etc/openvpn/easy-rsa/keys/client.ovpn /etc/openvpn/easy-rsa/keys/client1

И не забываем про ta.key, которые лежит в папке openvpn:

cp /etc/openvpn/ta.key /etc/openvpn/easy-rsa/keys/client1/

Переходим в папку client1:

cd /etc/openvpn/easy-rsa/keys/client1

На данный момент там находится 5 файлов:

ca.crt client.ovpn (конфиг файл) client1.crt client1.key ta.key

Теперь нужно быть внимательнее! В особенности с именами файлов.
Внедряем содержимое нужных файлов в наш конфиг .ovpn.

По очереди, в том порядке, в котором это у меня, выполняем следующие команды.

Для ca.crt:

echo '' &gt;&gt; client.ovpn
cat ca.crt &gt;&gt; client.ovpn
echo '' &gt;&gt; client.ovpn

где client.ovpn название конфиг файла.

Теперь для client1.crt:

echo '' &gt;&gt; client.ovpn
cat client1.crt &gt;&gt; client.ovpn
echo '' &gt;&gt; client.ovpn

где client1.crt - серт. файл, которые генерировали выше.

Теперь для client1.key:

echo '' &gt;&gt; client.ovpn
cat client1.key &gt;&gt; client.ovpn
echo '' &gt;&gt; client.ovpn

Теперь для ta.key, нужно для tls-auth:

echo 'key-direction 1' &gt;&gt; client.ovpn
echo '' &gt;&gt; client.ovpn
cat ta.key &gt;&gt; client.ovpn
echo '' &gt;&gt; client.ovpn

Таким образом, все ключи и сертификаты теперь в одном файле .ovpn, и он может работать сам по себе.

Теперь нужно еще немного отредактировать файл client.ovpn:

nano client.ovpn

Листаем, пока не наткнемся на блок:

ca ca.crt
cert client.crt
key client.key

Нам это не нужно, поэтому закоментируем их:

#ca ca.crt
#cert client.crt
#key client.key

Собственно, конфиг клиента готов. Он будет работать, если вы запустите его на OpenVPN клиенте вашего устройства.

Можем запускать OpenVPN:

systemctl start openvpn

или

/etc/init.d/openvpn start

После любых манупуляций в файле server.conf, для того что бы применились изменения, нужно перезапускать OpenVPN:

systemctl restart openvpn

или

/etc/init.d/openvpn restart

Но я хочу еще проделать какие-то модификации на server.conf и client.ovpn

Для начала я хотел бы привести оба конфига в более читабельный и простой вид, а именно, удалить все комментарии и пустые строки.

Сделать это легко. Но для начала, на всякий случай, сделаем backup:

server.conf

cp /etc/openvpn/server.conf /etc/openvpn/server.conf.bak

и client.ovpn:

cp /etc/openvpn/easy-rsa/keys/client1/client.ovpn /etc/openvpn/easy-rsa/keys/client1/client.ovpn.bak

теперь одной командой удаляем все комментарии (# и ; в начале строки) и пустые строки:

server.conf

sed -i '/^[#;]\|^$/ d' /etc/openvpn/server.conf

client.ovpn

sed -i '/^[#;]\|^$/ d' /etc/openvpn/easy-rsa/keys/client1/client.ovpn

И оба наших конфига примут более читабельный вид.

Открываем server.conf

nano /etc/openvpn/server.conf

И куда-нибудь в середину прихерачим следующее:

sndbuf 0
rcvbuf 0
topology subnet
auth SHA512

И на клиенте.

nano /etc/openvpn/easy-rsa/keys/client1/client.ovpn

Куда-нибудь в конфиг, до начала сертификатов и ключей:

sndbuf 0
rcvbuf 0
keepalive 10 120
auth SHA512

Таким образом, мой конфиг server.conf выглядит так:

port 16122
proto udp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
auth SHA512
comp-lzo
persist-key
persist-tun
log /dev/null 2&gt;&amp;1
verb 0

А client.ovpn так (Безключей и сертификатов):

client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 111.222.111.222 14500
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA512
keepalive 10 120
comp-lzo
verb 3

Можете использовать эти конфиги.

Разберем немного конфиг.

proto udp

Какой протокол юзать, TCP или UDP?

UDP обычно работает быстрее.

TCP более надежный, стабильный, лучше обходит фаерволл - например можно повестить на порт 443.

UDP, также можно повесить на порт, который обычно не блокируют - 53.

Если вас не блокируют, то лучше я думаю UDP. Сам юзаю UDP. На сервере и клиенте должен быть указан один протокол.

Port 16122

На какой порт повесить? Лучше на нестандартный, как у меня. Или замаскировать под какой-то сервис - 443/ssl для tcp и 53/dns для udp

cipher AES-256-CBC

Какое шифрование использовать?

Используйте AES-256-CBC или AES-128-CBC. Если явно не задать, то по-умолчанию будет исопльзоваться Blowfish (cipher BF-CBC).
Этот параметр должен быть и на сервере и на клиенте. Если на сервере есть, на клиенте нет или они отличаются, может не законнектить.

auth SHA512

Если не задавать, будет использоваться auth SHA1. Используйте auth SHA512 или auth SHA256. Этот параметр должен быть и на сервере и на клиенте. Если на сервере есть, на клиенте нет или они отличаются, может не законнектить.

#status /dev/null 2&gt;&amp;1

По умолчанию будет записываться в файл какой-то, какие клиенты сейчас онлайн. Чтобы ничего не писало, нужно закомментировать строку. Я также ЗАЧЕМ то написал /dev/null 2>&1 ...

log /dev/null 2&gt;&amp;1

Это то самое логирование OpenVPN которое для безопасности лучше выключить. Дело в том, что выключить его нельзя, а если закоментировать, то логи будут писаться в /var/log/syslog
Поэтому я раскоментировал и сказал писать в /dev/null.

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Какие DNS юзать?

Юзайте паблик DNS от Google (8.8.8.8 и 8.8.4.4.) или от OpenDNS (208.67.222.222 и 208.67.220.220).

Утечка DNS под Windows и Linux

Если вы будете юзать этот конфиг на Windows, в конфиг добавляем следующую строку:

setenv opt block-outside-dns

Да, вот так просто. Под MacOS с Tunnelblick все норм.

А под Linux есть файл update-resolv-conf, который находится в папке /etc/openvpn на клиентской машине. Файл может иметь название или update-resolv-conf или update-resolv-conf.sh. Поэтому на клиентском Линукс вводим в терминале:

ls /etc/openvpn | grep update

И узнаем название файла.

Далее, в конфиг .ovpn нужно вставить следующие строки:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

где update-resolv-conf - название файла, которое вы получили выше.

Перекидываем конфиг .ovpn с серва на клиент.

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

Если вы создавали пользователя и запрещали ssh коннект от рута, то первым делом нужно поместить .ovpn конфиг в домашнюю папку созданного пользователя. У меня это был pp-ruloh

cp /etc/openvpn/easy-rsa/keys/client1/client.ovpn /home/pp-ruloh

Изменить права у файла:

chown pp-ruloh:pp-ruloh /home/pp-ruloh/client.ovpn

Linux. Будем юзать sftp.

sftp -P 1488 [email protected]

где 1488 - порт на котором слушает sshd.

Как законнектились, мы уже будем в домашней папке pp-ruloh. Можем посмотреть файлы - вводим ls.

копируем конфиг:

get client.ovpn ~/

Windows, linux, MacOS: скачиваем программу для работы по FTP - FileZilla
и подключаемся к серву по sftp. Нужено будет указать port sftp (у меня 1488), пользователя (pp-ruloh, ибо руту зарпетили). Копируем файл куда хотим и радуемся. Как пользоваться программой разберетесь сами.

Поднимаем OpenVPN скриптом

Поднять OpenVPN вручную вам не под силу? Не отчаивайтесь, у меня для вас хорошие новости!

На Github существует Open Source скрипт, который позволяет быстро и легко поднять OpenVPN сервер на вашем VPS. Скрипт называтся openvpn-install, и вот ссылка на Github. И этого скрипта есть куча форков, которые вы можете изучить.

Посмотреть исходный код можно здесь. Приступим. Работаем под пользователем root или суперпользователем.

Для начала, обновим систему:

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

Если вы уже пытались поднять OpenVPN вручную, но у вас ничего не получилось, то нужно сначала его полностью снести. Удаляем openvpn:

apt-get remove --purge openvpn

удаляем папку:

rm -rf /etc/openvpn/

выключаем ufw:

ufw disable

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

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

Скачиваем скрипт в домашнюю папку root:

git clone https://github.com/Nyr/openvpn-install.git ~/nyr-openvpn

Переходим туда:

cd ~/nyr-openvpn/

Запускаем скрипт:

bash openvpn-install.sh

И вы попадете в так называемый Инсталятор. Где нужно будет отвечать на вопросы или что-то вписывать. Для перехода на следующий этап установки жмите Enter.

Первый делом, предложит ввести внешний IP адрес, но вероятнее всего скрипт сам его определит:

IP address: 111.222.111.222

Следующий этап, выбрать протокол. Я жму 1 и выбираю UDP. Далее, выбираете порт. Я поставлю, например 14000. После этого предложит выбрать DNS сервера. Выбор будет из Google, OpenDNS или текущих, которые на VPS и еще каких-то. Я выбираю OpenDNS, жму 3. После этого предложит ввести имя клиента. Я введу "pp-ruloh". Далее начнется скачивание-утановка пакетов, генерация ключей, сертификатов и конфигурационных файлов. когда все закончится, он поместит конфиг. в домашнюю папку юзера, от имени которого запсукался скрипт. То есть, сейчас конфиг лежит по адресу:

/root/

Собственно, на этом конфигурация OpenVPN скриптом завершается. Можно уже сейчас взять новый конфиг и использовать. Интересно, чего он там такого сгенерировал вам, посмотрим на конфиг pp-ruloh.ovpn:

nano ~/pp-ruloh.ovpn

(без ключей и сертификатов)

client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 111.222.111.222 14000
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
setenv opt block-outside-dns
key-direction 1
verb 3

Все вроде бы нормально, да лучше auth SHA512 явно указать. Поэтому добавим

auth SHA512

Вот так:

client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 111.222.111.222 14000
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA512
comp-lzo
setenv opt block-outside-dns
key-direction 1
verb 3

Обратите внимание, что скрипт уже запихнул фичу для предотвращения утечки DNS под клиент Windows:

setenv opt block-outside-dns

Если у вас Linux или MacOS - эту строку лучше закомментировать.

Теперь посмотрим на серверный конфиг server.conf:

nano /etc/openvpn/server.conf
port 14000
proto udp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem

Здесь также добавляем auth SHA512 (а то работать не будет, если на клиенте указан а на серве нет), делаем verb 0. Также нужно проделать следующее. Нужно закомментировать строку.

status openvpn-status.log

И добавить log:

log /dev/null 2&gt;&amp;1

Где-то выше писал, зачем он нужен. Получилось так:

port 14000
proto udp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
cipher AES-256-CBC
auth SHA512
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
#status openvpn-status.log
log /dev/null 2&gt;&amp;1
verb 0
crl-verify crl.pem

Берем клиентский файл-конфиг и помещаем на ваше устройство. Об этом я писал выше.

При повторном запуске скрипта из-под рута:

bash /root/nyr-openvpn/openvpn-install.sh

Скрипт предложит создать нового клиент, удалить существующего (не сможет больше коннектиться) или удалить OpenVPN.

Клиенты OpenVPN под разные ОС

Поскольку OpenVPN не встроен по-умолчанию ни в одну популярную ОС, то требуется установить сторонее ПО - клиент OpenVPN.

Windows

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

Далее, помещаете ваш .ovpn файл в папку config, в установленной папке OpenVPN. В общем, если устанавливать OpenVPN GUI по-умолчанию в папку Program Files, то адрес такой:

C:\Program Files\OpenVPN\config

В эту папку кидаем конфиги .ovpn. Потом из трея можно запускать VPN. Все достаточно просто.

Linux

На Линукс в репозиориях вашего дистрибутива пакет скорее всего будет называется "openvpn" (еще может openvpn-client), и ставится следующим образом:

sudo apt-get install openvpn

Если у вас Debian-подобные дистрибутивы (Debian, Ubuntu, Mint). Если у вас дистрибутив другой линейки - сами разберетесь как ставить.

Работает это следующим образом. У вас есть .ovpn файл, далее вы в терминале вводите команду:

sudo openvpn --config &lt;путь до файла .ovpn&gt;

где <путь до файла .ovpn>, собственно, путь до файла .ovpn.

Или можете скормить файл network-manager ' у.

MacOS

Под MacOS из клиентов OpenVPN я знаю только Tunnelblick. Скачать его можно здесь. Устанавливается просто, требует права суперпользователя. По-умолчанию будет отпрыать файлы с расширением .ovpn. Будет иконка в трее, там конектимся. Можно настроить, что бы коннектился к OpenVPN сразу при загрузке системы. Когда соеденение обрывается с VPN, интернет пропадает. В этом случае нужно вручную отсоеденяться от VPN.

Android

Официальный клиент OpenVPN Connect под Android доступен для скачивания на Google Play

iOS

Для iOS клиент скачиваем из AppStore.

Клиенты, предоставляемые провайдером VPN. Некоторые провайдеры предоставляеют свой собственный OpenVPN клиент под разные ОС и платформы. Использовать их или нет, решать вам. Но это потенциально не очень безопасно.

Запрещаем весь траффик не через OpenVPN на клиенте

Правила iptables. Только для адептов Луникса. Что делать если VPN внезапно отключился? Или вы забыли его включить вообще? Обычно, когда внезапно обнаруживаешь, что траффик идет не через VPN, и при этом ты не используешь Whonix, то через 3 секунды понимаешь что твои штаны полны говна. Что нужно делать чтобы явно ограничить весь траффик?

А вот и сами правила:

# запрещаем все входящие и исходящие
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# разрешаем уже установленные соединения и локалхост
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# разрешаем соединения до VPN (VPN_IP заменить на ip вашего VPN сервера)
iptables -A OUTPUT -d VPN_IP -j ACCEPT

# разрешаем любые соединения через VPN
iptables -A OUTPUT -o tun+ -j ACCEPT

В конце:

# разрешаем любые соединения через VPN
iptables -A OUTPUT -i tun+ -j ACCEPT

Было изменено на:

# разрешаем любые соединения через VPN
iptables -A OUTPUT -i tun+ -j ACCEPT

Есть у нас правила, че дальше? Теперь открываем терминал в вашем Линуксе

И создаем файл, который назовем vpn.rules:

touch ~/vpn-rules.sh

Поместим туда все правила:

nano ~/vpn-rules.sh

В самом верху файла пишем:

#!/bin/sh

Далее, правила из кода выше. Копируете - вставляете, меняете

# разрешаем соединения до VPN (VPN_IP заменить на ip вашего VPN сервера)
iptables -A OUTPUT -d VPN_IP -j ACCEPT

там где VPN_IP на IP вашего сервера (указан в .ovpn конфиге).

Сохраняете - закрываете.

Запсукае скрипт из под рута или sudo:

sudo sh ~/vpn-rules.sh

Теперь у нас применились правила. Можете проверить - без VPN инет работать не будет. Этот скрипт можно запускать каждый раз. А можно сохранить правила:

sudo iptables-save &gt; /etc/iptables/iptables.rules

И сделать сервис iptables автозапускающимся при загрузки системы:

systemctl enable iptables

На этом все.

Боремся с детектом OpenVPN

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

Заходим на browserleaks.com

И смотрим строку "TCP/IP OS Fingerprinting"

Что делать?

Если у вас, как у меня, конфиг UDP, то можно проделать следующее. Мне помогает, если прописать

mssfix 0

На клиенте .ovpn и сервере server.conf

image_pdfimage_print

Подписаться на новые темы

3 КОММЕНТАРИИ

  1. Полезная статья. Можно добавить, что key-direction стоит использовать в конфигах, ca.key не стоит хранить на сервере, а вместо гуглa поднять собственный или использовать dnscrypt.

  2. Для избежания ситуации — впн отвалился и у вас полные штаны, хорошо справляется обычный виндовский firewall просто и надежно. Ну или можно установить и настроить comodo.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Anonymous