Статьи

Як налаштувати сервер OpenVPN в Ubuntu 16.04 | DigitalOcean

  1. Як налаштувати сервер OpenVPN в Ubuntu 16.04 Вступ
  2. Необхідні умови
  3. Крок 1. Встановлення OpenVPN
  4. Крок 2. Створення директорії центру сертифікації
  5. Крок 3. Налаштування змінних центру сертифікації
  6. Крок 4. Створення центру сертифікації
  7. Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера
  8. Крок 6. Створення сертифіката і пари ключів для клієнта
  9. Крок 7. Налаштування сервісу OpenVPN
  10. Копіювання файлів в директорію OpenVPN
  11. Налаштування конфігурації OpenVPN
  12. Базова настройка
  13. (За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN
  14. (За бажанням) Налаштування порту і протоколу
  15. (За бажанням) Використання кастомними імені сертифіката і ключа
  16. Крок 8. Налаштування мережевої конфігурації сервера
  17. Налаштування перенаправлення IP
  18. Налаштування правил UFW для приховування з'єднань клієнтів
  19. Відкриття порту OpenVPN і застосування змін
  20. Крок 9. Включення сервісу OpenVPN
  21. Крок 10. Створення інфраструктури настройки клієнтів
  22. Створення структури директорій конфігурації клієнтів
  23. Створення базової конфігурації
  24. Створення скрипта генерації файлів конфігурації
  25. Крок 11. Генерація конфігурацій клієнтів
  26. Доставка конфігурацій клієнтам
  27. Крок 12. Встановлення файлів конфігурацій клієнтів
  28. Windows
  29. з'єднання
  30. Mac OS
  31. з'єднання
  32. Linux
  33. налаштування
  34. iOS
  35. з'єднання
  36. Android
  37. з'єднання
  38. Крок 13. Тестування VPN з'єднання
  39. Крок 14. Відкликання клієнтських сертифікатів
  40. Висновок
  41. Як налаштувати сервер OpenVPN в Ubuntu 16.04
  42. Необхідні умови
  43. Крок 1. Встановлення OpenVPN
  44. Крок 2. Створення директорії центру сертифікації
  45. Крок 3. Налаштування змінних центру сертифікації
  46. Крок 4. Створення центру сертифікації
  47. Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера
  48. Крок 6. Створення сертифіката і пари ключів для клієнта
  49. Крок 7. Налаштування сервісу OpenVPN
  50. Копіювання файлів в директорію OpenVPN
  51. Налаштування конфігурації OpenVPN
  52. Базова настройка
  53. (За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN
  54. (За бажанням) Налаштування порту і протоколу
  55. (За бажанням) Використання кастомними імені сертифіката і ключа
  56. Крок 8. Налаштування мережевої конфігурації сервера
  57. Налаштування перенаправлення IP
  58. Налаштування правил UFW для приховування з'єднань клієнтів
  59. Відкриття порту OpenVPN і застосування змін
  60. Крок 9. Включення сервісу OpenVPN
  61. Крок 10. Створення інфраструктури настройки клієнтів
  62. Створення структури директорій конфігурації клієнтів
  63. Створення базової конфігурації
  64. Як налаштувати сервер OpenVPN в Ubuntu 16.04
  65. Необхідні умови
  66. Крок 1. Встановлення OpenVPN
  67. Крок 2. Створення директорії центру сертифікації
  68. Крок 3. Налаштування змінних центру сертифікації
  69. Крок 4. Створення центру сертифікації
  70. Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера
  71. Крок 6. Створення сертифіката і пари ключів для клієнта
  72. Крок 7. Налаштування сервісу OpenVPN
  73. Копіювання файлів в директорію OpenVPN
  74. Налаштування конфігурації OpenVPN
  75. Базова настройка
  76. (За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN
  77. (За бажанням) Налаштування порту і протоколу
  78. (За бажанням) Використання кастомними імені сертифіката і ключа
  79. Крок 8. Налаштування мережевої конфігурації сервера
  80. Налаштування перенаправлення IP
  81. Налаштування правил UFW для приховування з'єднань клієнтів
  82. Відкриття порту OpenVPN і застосування змін
  83. Крок 9. Включення сервісу OpenVPN
  84. Крок 10. Створення інфраструктури настройки клієнтів
  85. Створення структури директорій конфігурації клієнтів
  86. Створення базової конфігурації
  87. Як налаштувати сервер OpenVPN в Ubuntu 16.04
  88. Необхідні умови
  89. Крок 1. Встановлення OpenVPN
  90. Крок 2. Створення директорії центру сертифікації
  91. Крок 3. Налаштування змінних центру сертифікації
  92. Крок 4. Створення центру сертифікації
  93. Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера
  94. Крок 6. Створення сертифіката і пари ключів для клієнта
  95. Крок 7. Налаштування сервісу OpenVPN
  96. Копіювання файлів в директорію OpenVPN
  97. Налаштування конфігурації OpenVPN
  98. Базова настройка
  99. (За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN
  100. (За бажанням) Налаштування порту і протоколу
  101. (За бажанням) Використання кастомними імені сертифіката і ключа
  102. Крок 8. Налаштування мережевої конфігурації сервера
  103. Налаштування перенаправлення IP
  104. Налаштування правил UFW для приховування з'єднань клієнтів
  105. Відкриття порту OpenVPN і застосування змін
  106. Крок 9. Включення сервісу OpenVPN
  107. Крок 10. Створення інфраструктури настройки клієнтів
  108. Створення структури директорій конфігурації клієнтів
  109. Створення базової конфігурації
  110. Як налаштувати сервер OpenVPN в Ubuntu 16.04
  111. Необхідні умови
  112. Крок 1. Встановлення OpenVPN
  113. Крок 2. Створення директорії центру сертифікації
  114. Крок 3. Налаштування змінних центру сертифікації
  115. Крок 4. Створення центру сертифікації
  116. Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера
  117. Крок 6. Створення сертифіката і пари ключів для клієнта
  118. Крок 7. Налаштування сервісу OpenVPN
  119. Копіювання файлів в директорію OpenVPN
  120. Налаштування конфігурації OpenVPN
  121. Базова настройка
  122. (За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN
  123. (За бажанням) Налаштування порту і протоколу
  124. (За бажанням) Використання кастомними імені сертифіката і ключа
  125. Крок 8. Налаштування мережевої конфігурації сервера
  126. Налаштування перенаправлення IP
  127. Налаштування правил UFW для приховування з'єднань клієнтів
  128. Відкриття порту OpenVPN і застосування змін
  129. Крок 9. Включення сервісу OpenVPN
  130. Крок 10. Створення інфраструктури настройки клієнтів
  131. Створення структури директорій конфігурації клієнтів
  132. Створення базової конфігурації
  133. Створення скрипта генерації файлів конфігурації
  134. Крок 11. Генерація конфігурацій клієнтів
  135. Доставка конфігурацій клієнтам
  136. Крок 12. Встановлення файлів конфігурацій клієнтів
  137. Windows
  138. з'єднання
  139. Mac OS
  140. з'єднання
  141. Linux
  142. налаштування
  143. iOS
  144. з'єднання
  145. Android
  146. з'єднання
  147. Крок 13. Тестування VPN з'єднання
  148. Крок 14. Відкликання клієнтських сертифікатів
  149. Висновок

Як налаштувати сервер OpenVPN в Ubuntu 16.04

Вступ

Хочете мати безпечний і захищений доступ в Інтернет з вашого смартфона або ноутбука при підключенні до незахищеної мережі через WiFi готелю або кафе? Віртуальна приватна мережа (Virtual Private Network, VPN) дозволяє використовувати незахищені мережі таким чином, як якщо б ви працювали в приватній мережі. Весь ваш трафік в цьому випадку проходить через VPN-сервер.

У комбінації з використанням HTTPS-з'єднання описувані далі настройки дозволять вам убезпечити свою приватну інформацію, наприклад, логіни і паролі, а також ваші покупки. Більш того, ви зможете обходити регіональні обмеження і цензуру, а також приховувати своє місцезнаходження і незашифрований HTTP-трафік від незахищеною мережі.

OpenVPN являє собою потужний і гнучко настроюється програмне забезпечення з відкритим вихідним кодом для роботи з Secure Socket Layer (SSL) VPN. У цій статті ми встановимо і налаштуємо OpenVPN сервер, а також навчимося здійснювати до нього доступ з Windows, Mac OS, iOS і Android. Для цього ми виконаємо кілька простих кроків.

Необхідні умови

Перш за все вам необхідно мати сервер з Ubuntu 16.04.

Перед тим, як почати слідувати інструкції, наведені в цій статті, вам необхідно налаштувати окремий, чи не-рутовий (non-root) профіль користувача з привілеями sudo на вашому сервері. Ви можете зробити це згідно з інструкціями, описаним в статті про первинну налаштування сервера на Ubuntu 16.04 . У цій же статті описаний процес налаштування файрвола; далі ми будемо вважати, що файрвол налаштований на вашому сервері.

Коли ви будете готові почати, зайдіть на ваш сервер під створеним вами sudo-користувачем і виконуйте інструкції, наведені нижче.

Крок 1. Встановлення OpenVPN

Спочатку встановимо OpenVPN на наш сервер. OpenVPN доступний в стандартних репозиторіях Ubuntu, ми можемо використовувати apt для його установки. Також ми встановимо пакет easy-rsa, який дозволить нам налаштувати наш власний внутрішній центр сертифікації (certificate authority, CA) для використання з нашої VPN.

Оновимо список пакетів сервера і встановимо необхідні пакети наступними командами:

  • sudo apt-get update
  • sudo apt-get install openvpn easy-rsa

Необхідне програмне забезпечення встановлено і готове до налаштування.

Крок 2. Створення директорії центру сертифікації

OpenVPN це віртуальна приватна мережа, що використовує TLS / SSL. Це означає, що OpenVPN використовує сертифікати для шифрування трафіку між сервером і клієнтами. Для випуску довірених сертифікатів (trusted certificates) нам буде потрібно створити наш власний центр сертифікації.

Для початку скопіюємо шаблонну директорію easy-rsa в нашу домашню директорію за допомогою команди make-cadir:

Далі зайдемо в цю директорію для початку налаштування ЦС:

Крок 3. Налаштування змінних центру сертифікації

Для настройки змінних нашого центру сертифікації нам необхідно відредагувати файл vars. Відкрийте цей файл у текстовому редакторі:

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

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

~ / Openvpn-ca / 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". . .

Замініть значення, виділені червоним, на що-небудь інше, не залишайте їх не заповненими:

~ / Openvpn-ca / vars

. . . export KEY_COUNTRY = "US" export KEY_PROVINCE = "NY" export KEY_CITY = "New York City" export KEY_ORG = "DigitalOcean" export KEY_EMAIL = "[email protected]" export KEY_OU = "Community". . .

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

~ / Openvpn-ca / vars

export KEY_NAME = "server"

Збережіть і закрийте файл.

Крок 4. Створення центру сертифікації

Тепер ми можемо використовувати задані нами змінні і утиліти easy-rsa для створення центру сертифікації.

Переконайтеся, що ви перебуваєте в директорії центру сертифікації і використовуйте команду source до файлу vars:

  • cd ~ / openvpn-ca
  • source vars

Ви повинні побачити наступний висновок:


висновок

NOTE: If you run ./clean-all, I will be doing a rm -rf on / home / sammy / openvpn-ca / keys

Переконаємося, що ми працюємо в "чистому середовищі" виконавши наступну команду:

Тепер ми можемо створити наш кореневої центр сертифікації командою:

Ця команда запустить процес створення ключа і сертифіката кореневого центру сертифікації. Оскільки ми задали всі змінні у файлі vars, всі необхідні значення будуть введені автоматично. Натискайте ENTER для підтвердження вибору:


висновок

Generating a 2048 bit RSA private key ........................................... ............................................... +++ ............................... +++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', The field will be left blank. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean ]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [[email protected]]:

Тепер у нас є центр сертифікації, який ми зможемо використовувати для створення всіх інших необхідних нам файлів.

Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера

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

Почнемо зі створення сертифіката OpenVPN і ключів для сервера. Це можна зробити за допомогою такої команди:

Увага: Якщо раніше ви вибрали ім'я, відмінне від server, вам доведеться трохи змінити деякі інструкції. Наприклад, при копіюванні створених файлів в директорію / etc / openvpn вам доведеться замінити імена на задані вами. Вам також доведеться змінити файл /etc/openvpn/server.conf для того, щоб він вказував на коректні .crt і .key файли.

  • ./build-key-server server

Висновок знову буде містити значення за замовчуванням, передані цій команді (server), а також значення з файлу vars.

Погодьтеся з усіма значеннями за замовчуванням, натискаючи ENTER. Не ставте challenge password. В кінці процесу два рази введіть y для підпису і підтвердження створення сертифіката:


висновок

. . . Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) 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

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

Для завершення цієї команди може знадобитися кілька хвилин.

Далі ми можемо згенерувати підпис HMAC для посилення здатності сервера перевіряти цілісність TSL:

  • openvpn --genkey --secret keys / ta.key

Крок 6. Створення сертифіката і пари ключів для клієнта

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

У цій статті ми створимо ключ і сертифікат тільки для одного клієнта. Якщо у вас кілька клієнтів, ви можете повторювати цей процес скільки завгодно разів. Просто кожен раз передавайте унікальне значення скрипту.

Оскільки ми можемо повернутися до цього кроку пізніше, ми повторимо команду source для файлу vars. Ми будемо використовувати параметр client1 для створення першого сертифікату та ключа.

Для створення файлів без пароля для полегшення автоматичних з'єднань використовуйте команду build-key:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key client1

Для створення файлів, захищених паролем, використовуйте команду build-key-pass:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key-pass client1

В ході процесу створення файлів все значення за замовчуванням будуть введені, ви можете натискати ENTER. Не ставте challenge password і введіть y на запити про підписи і підтвердження створення сертифіката.

Крок 7. Налаштування сервісу OpenVPN

Далі налаштуємо сервіс OpenVPN з використанням створених раніше файлів.

Копіювання файлів в директорію OpenVPN

Нам необхідно скопіювати потрібні нам файли в директорію / etc / openvpn.

Спочатку скопіюємо створені нами файли. Вони знаходяться в директорії ~ / openvpn-ca / keys, в якій вони і були створені. Нам потрібно створити сертифікат і ключ центру сертифікації, сертифікат і ключ сервера, підпис HMAC і файл Diffie-Hellman:

  • cd ~ / openvpn-ca / keys
  • sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem / etc / openvpn

Далі нам необхідно скопіювати і розпакувати файл-приклад конфігурації OpenVPN в конфігураційну директорію, ми будемо використовувати цей файл в якості бази для наших налаштувань:

  • gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Налаштування конфігурації OpenVPN

Тепер, коли наші файли знаходяться на своєму місці, займемося налаштуванням конфігураційного файлу сервера:

  • sudo nano /etc/openvpn/server.conf

Базова настройка

Спочатку знайдемо секцію HMAC пошуком директиви tls-auth. Видаліть ";" для того, щоб розкоментувати рядок з tls-auth. Далі додайте параметр key-direction і встановіть його значення в "0":

/etc/openvpn/server.conf

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

Далі знайдемо секцію шифрування, нас цікавлять закоментовані рядки cipher. Шифр AES-128-CBC забезпечує хороший рівень шифрування і широко підтримується іншими програмними продуктами. Видаліть ";" для раскомментірованія рядки AES-128-CBC:

/etc/openvpn/server.conf

cipher AES-128-CBC

Під цим рядком додайте рядок auth і виберіть алгоритм HMAC. Хорошим вибором буде SHA256:

/etc/openvpn/server.conf

auth SHA256

Нарешті, знайдіть налаштування user і group і видаліть ";" для раскомментірованія цих рядків:

/etc/openvpn/server.conf

user nobody group nogroup

(За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN

Зроблені нами настройки створюють VPN з'єднання між двома машинами, але вони не змушують ці машини використовувати VPN з'єднання. Якщо ви хочете використовувати VPN з'єднання для всього свого трафіку, вам необхідно проштовхнути (push) настройки DNS на клієнтські машини.

Для цього вам необхідно розкоментувати кілька директив. Знайдіть секцію redirect-gateway і видаліть ";" з початку рядка для расскоментірованія redirect-gateway:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Трохи нижче знаходиться секція dhcp-option. Видаліть ";" для обох рядків:

/etc/openvpn/server.conf

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

Це дозволить клієнтам конфігурувати свої настройки DNS для використання VPN з'єднання в якості основного.

(За бажанням) Налаштування порту і протоколу

За замовчуванням OpenVPN використовує порт 1194 і протокол UDP для з'єднання з клієнтами. Якщо вам необхідно змінити порт через будь-яких обмежень для ваших клієнтів, ви можете зробити це змінивши налаштування port. Якщо ви не хостів веб-контент на вашому OpenVPN сервері, ви можете використовувати порт 443, оскільки цей порт зазвичай дозволений для використання в більшості файрволов.

/etc/openvpn/server.conf

# Optional! port 443

Використовуваний протокол може мати обмеження по номеру порту. В цьому випадку змініть proto з UDP на TCP:

/etc/openvpn/server.conf

# Optional! proto tcp

Якщо у вас немає явної необхідності використовувати інший порт, краще залишити обидві ці настройки зі значеннями за замовчуванням.

(За бажанням) Використання кастомними імені сертифіката і ключа

Якщо під час використання команди ./build-key-server трохи вище ви вказали параметр, відмінний від server, поміняйте налаштування cert і key, щоб вони вказували на правильні файли .crt і .key. Якщо ви використовували server, ці настройки повинні виглядати таким чином:

/etc/openvpn/server.conf

cert server .crt key server .key

Збережіть і закрийте файл.

Крок 8. Налаштування мережевої конфігурації сервера

Далі нам необхідно налаштувати мережеву конфігурацію сервера, щоб OpenVPN міг коректно перенаправляти трафік.

Налаштування перенаправлення IP

Спочатку вирішимо сервера перенаправляти трафік. Це ключова функціональність нашого VPN сервера.

Налаштуємо це в файлі /etc/sysctl.conf:

  • sudo nano /etc/sysctl.conf

Знайдіть рядок настройки net.ipv4.ip_forward. Видаліть "#" з початку рядка, щоб розкоментувати її:

/etc/sysctl.conf

net.ipv4.ip_forward = 1

Збережіть і закрийте файл.

Для застосування налаштувань до поточної сесії наберіть команду:

Налаштування правил UFW для приховування з'єднань клієнтів

Якщо ви слідували статті про налаштування Ubuntu 16.04, згаданої на початку цієї статті, у вас повинен бути встановлений і налаштований файрвол UFW. Незалежно від того, чи використовуєте ви файрвол для блокування небажаного трафіку (що вам варто робити практично завжди), в цій статті нам буде потрібно файрвол для маніпулювання з вхідним на сервер трафіком. Ми повинні змінити файл налаштувань для приховування з'єднань (masquerading).

Перед тим, як змінити цей файл, ми повинні знайти публічний інтерфейс мережі (public network interface). Для цього наберіть команду:

Публічний інтерфейс повинен слідувати за словом "dev". Наприклад, в нашому випадку цей інтерфейс називається wlp11s0:


висновок

default via 203.0.113.1 dev wlp11s0 proto static metric 600

Знаючи назву інтерфейсу відкриємо файл /etc/ufw/before.rules і додамо туди відповідні налаштування:

  • sudo nano /etc/ufw/before.rules

Це файл містить настройки UFW, яке застосовуються перед застосуванням правил UFW. Додайте в початок файлу виділені червоним рядки. Це налаштує правила, що застосовуються за замовчуванням, до ланцюжку POSTROUTING в таблиці nat і буде приховувати весь трафік від VPN:

Увага: не забудьте замінити eth0 в рядку -A POSTROUTING на ім'я інтерфейсу, що знайшли ми раніше.

/etc/ufw/before.rules

# # Rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules * nat: POSTROUTING ACCEPT [0: 0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Do not delete these required lines, otherwise there will be errors * filter. . .

Збережіть і закрийте файл.

Тепер ми повинні повідомити UFW, що йому за замовчуванням необхідно вирішувати переслані пакети. Для цього відкрийте файл / etc / default / ufw:

  • sudo nano / etc / default / ufw

Знайдіть у файлі директиву DEFAULT_FORWARD_POLICY. Ми змінимо значення з DROP на ACCEPT:

/ Etc / default / ufw

DEFAULT_FORWARD_POLICY = "ACCEPT"

Збережіть і закрийте файл.

Відкриття порту OpenVPN і застосування змін

Далі налаштуємо сам файрвол для дозволу трафіку в OpenVPN.

Якщо ви не змінювали порт і протокол в файлі /etc/openvpn/server.conf, вам необхідно дозволити трафік UDP для порту 1194. Якщо ви змінили ці настройки, введіть зазначені вами значення.

Навіть ми додамо порт SSH на випадок, якщо ви не зробили цього раніше.

  • sudo ufw allow 1194 / udp
  • sudo ufw allow OpenSSH

Тепер деактивувавши і активуємо UFW для застосування внесених змін:

  • sudo ufw disable
  • sudo ufw enable

Тепер наш сервер налаштований для обробки трафіку OpenVPN.

Крок 9. Включення сервісу OpenVPN

Ми готові включить сервіс OpenVPN на нашому сервері. Ми можемо зробити це за допомогою systemd.

Нам необхідно запустити сервер OpenVPN вказавши ім'я нашого файлу конфігурації в якості змінної після імені файлу systemd. Файл конфігурації для нашого сервера називається / etc / openvpn / server .conf, тому ми додамо @server в кінець імені файлу при його виклику:

  • sudo systemctl start openvpn @ server

Переконаємося, що сервіс успішно запущений командою:

  • sudo systemctl status openvpn @ server

Якщо все вийшло, висновок повинен виглядати приблизно так:


висновок

[email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30 : 05 EDT; 47s ago Docs: man: openvpn (8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart = / usr / sbin / openvpn --daemon ovpn-% i --status /run/openvpn/%i.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid / run / openvpn /% i.pid (code = exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 / usr / sbin / openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/server.conf - writepid /run/openvpn/server.pid May 03 15:30:05 openvpn2 ovpn-server [5856]: / sbin / ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 May 03 15:30:05 openvpn2 ovpn- server [5856]: / sbin / ip route add 10.8.0.0/24 via 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server [5856]: GID set to nogroup May 03 15:30:05 openvpn2 ovpn-server [5856]: UID set to nobody May 03 15:30:05 openvpn2 ovpn -server [5856]: UDPv4 link local (bound): [undef] May 03 15:30:05 openvpn2 ovpn-server [5856]: UDPv4 link remote: [undef] May 03 15:30:05 openvpn2 ovpn-server [ 5856]: MULTI: multi_init called, r = 256 v = 256 May 03 15:30:05 openvpn2 ovpn-server [5856]: IFCONFIG POOL: base = 10.8.0.4 size = 62, ipv6 = 0 May 03 15:30: 05 openvpn2 ovpn-server [5856]: IFCONFIG POOL LIST May 03 15:30:05 openvpn2 ovpn-server [5856]: Initialization Sequence Completed

Ви також можете перевірити доступність інтерфейсу OpenVPN tun0 наступною командою:

Ви повинні побачити конфігурацію інтерфейсу:


висновок

4: tun0: <POINTOPOINT, MULTICAST, NOARP, UP, LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link / none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

Якщо все в порядку, настроєм сервіс на автоматичне включення при завантаженні сервера:

  • sudo systemctl enable openvpn @ server

Крок 10. Створення інфраструктури настройки клієнтів

Далі налаштуємо систему для простого створення файлів конфігурації для клієнтів.

Створення структури директорій конфігурації клієнтів

В домашній директорії створіть структуру директорій для зберігання файлів:

  • mkdir -p ~ / client-configs / files

Оскільки наші файли конфігурації будуть містити клієнтські ключі, ми повинні налаштувати права доступу для створених директорій:

  • chmod 700 ~ / client-configs / files

Створення базової конфігурації

Далі скопіюємо конфігурацію-приклад в нашу директорію для використання в якості нашої базовій конфігурації:

  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~ / client-configs / base.conf

Відкрийте цей файл у текстовому редакторі:

  • nano ~ / client-configs / base.conf

Зробимо кілька змін в цьому файлі.

Спочатку знайдіть директиву remote. Ця директива повідомляє клієнту адресу нашого сервера OpenVPN. Це повинен бути публічний IP адреса вашого сервера OpenVPN. Якщо ви змінили порт, який слухає сервер OpenVPN, змініть порт за замовчуванням тисяча сто дев'яносто чотири на ваше значення:

~ / Client-configs / base.conf

. . . # The hostname / IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194. . .

Переконайтеся, що протокол збігається з настройками сервера:

~ / Client-configs / base.conf

proto udp

Далі розкоментуйте директиви user і group видаляючи ";":

~ / Client-configs / base.conf

# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup

Знайдіть директиви ca, cert і key. Закоментуйте ці директиви, так як ми будемо додавати сертифікати і ключі в самому файлі:

~ / Client-configs / base.conf

# SSL / TLS parms. # See the server config file for more # description. It's best to use # a separate .crt / .key file pair # for each client. A single ca # file can be used for all clients. # Ca ca.crt # cert client.crt # key client.key

Додайте налаштування cipher і auth згідно із заданими у файлі /etc/openvpn/server.conf:

~ / Client-configs / base.conf

cipher AES-128-CBC auth SHA256

Далі додайте директиву key-direction в будь-яке місце в файлі. Вона повинна мати значення "1" для коректної роботи сервера:

~ / Client-configs / base.conf

key-direction 1

Нарешті, додайте кілька закоментувавши рядків. Ми ходимо додати ці рядки в кожен файл конфігурації, але вони будуть включені тільки для клієнтів на Linux, які використовують файл / etc / openvpn / update-resolv-conf. Цей скрипт використовує утиліту resolvconf для оновлення інформації DNS на клієнтах Linux.

~ / Client-configs / base.conf

# Script-security 2 # up / etc / openvpn / update-resolv-conf # down / etc / openvpn / update-resolv-conf

Якщо ваш клієнт працює на Linux і використовує файл / etc / openvpn / update-resolv-conf, ви повинні розкоментувати ці рядки в створеному клієнтському файлі конфігурації OpenVPN.

Збережіть і закрийте файл.

Створення скрипта генерації файлів конфігурації

Тепер створимо простий скрипт для генерації файлів конфігурації з релевантними сертифікатами, ключами і файлами шифрування. Він буде поміщати згенеровані файлу конфігурації в директорію ~ / client-configs / files.

Створіть і відкрийте файл make_config.sh всередині директорії ~ / client-configs:

  • nano ~ / client-configs / make_config.sh

Вставте наступні текст в цей файл:

~ / Client-configs / make_config.sh

#! / Bin / bash # First argument: Client identifier KEY_DIR = ~ / openvpn-ca / keys OUTPUT_DIR = ~ / client-configs / files BASE_CONFIG = ~ / client-configs / base.conf cat $ {BASE_CONFIG} \ <(echo -e '<ca>') \ $ {KEY_DIR} /ca.crt \ <(echo -e '</ ca> \ n <cert>') \ $ {KEY_DIR} / $ {1} .crt \ <( echo -e '</ cert> \ n <key>') \ $ {KEY_DIR} / $ {1} .key \ <(echo -e '</ key> \ n <tls-auth>') \ $ { KEY_DIR} /ta.key \ <(echo -e '</ tls-auth>') \> $ {OUTPUT_DIR} / $ {1} .ovpn

Збережіть і закрийте файл.

Зробіть його виконуваним файлом командою:

  • chmod 700 ~ / client-configs / make_config.sh

Крок 11. Генерація конфігурацій клієнтів

Тепер ми можемо легко згенерувати файли конфігурації клієнтів.

Якщо ви дотримувалися всіх кроків цієї статті, ви створили сертифікат client1.crt і ключ клієнта client1.key командою ./build-key client1 на кроці 6. Ви можете згенерувати конфігурацію для цих файлів перейшовши в директорію ~ / client-configs і використовуючи тільки що створений нами скрипт:

  • cd ~ / client-configs
  • ./make_config.sh client1

Якщо все пройшло успішно, ми повинні отримати файл client1.ovpn в директорії ~ / client-configs / files:

  • ls ~ / client-configs / files

Висновок

client1.ovpn

Доставка конфігурацій клієнтам

Тепер ми повинні перемістити файл конфігурації на клієнтський пристрій. Наприклад, на комп'ютер або смартфон.

Спосіб доставки файлу залежить від операційної системи вашого пристрою і програмного забезпечення, яке ви захочете використовувати для переміщення файлу. Ми рекомендуємо передавати файл по захищеному з'єднанню, наприклад, з використанням SFTP або SCP.

Нижче ми наводимо приклад передачі файлу client1.ovpn з використанням SFTP. Наступну команду можна використовувати на вашому локальному комп'ютері під керуванням Mac OS або Linux. Вона переміщує файл .ovpn в вашу домашню директорію:

  • sftp sammy @ openvpn_server_ip: client-configs / files / client1.ovpn ~ /

Нижче представлено кілька посилань на інструменти та статті про безпечне перенесення файлів з сервера на локальний комп'ютер:

Крок 12. Встановлення файлів конфігурацій клієнтів

Тепер ми поговоримо про те, як встановлювати клієнтські профілі VPN на Windows, Mac OS, iOS і Android. Процес установки унікальний для кожної платформи, тому пропускайте платформи, які ви не плануєте використовувати.

Назва з'єднання OpenVPN залежить від того, як ви називали свій .ovpn файл. У нашому прикладі це буде client1.ovpn.

Windows

установка

Ви можете завантажити клієнт для роботи з OpenVPN для Windows зі сторінки завантажень OpenVPN . Виберіть необхідну вам версію програми.

Увага: установка OpenVPN вимагає адміністраторській облікового запису.

Після установки OpenVPN скопіюйте ваш .ovpn файл в цю директорію:

C: \ Program Files \ OpenVPN \ config

Запустіть OpenVPN, клієнт повинен автоматично побачити ваш профіль.

Клієнт OpenVPN вимагає запуску з правами адміністратора навіть для акаунтів адміністратора. Для запуску зробіть клацання правою кнопкою миші на клієнті і виберіть Run as administrator кожен раз при запуску клієнта. Це також означає, що звичайні користувачі повинні будуть вводити пароль адміністратора для використання OpenVPN.

Для того, щоб додаток OpenVPN завжди запускалося з правами адміністратора, зробіть клацання правою кнопкою миші на іконці клієнта і перейдіть в розділ Properties. У нижній частині вкладки Compatibility натисніть на кнопку Change settings for all users. У вікні, виберіть Run this program as an administrator.

з'єднання

Кожен раз при запуску клієнта OpenVPN Windows буде питати, чи хочете ви дозволити програмі внести зміни в налаштування вашого комп'ютера. Натісніть Так. Запуск клієнта OpenVPN просто поміщає додаток в системний трей, при цьому саме з'єднання не встановлюється автоматично.

Для установки з'єднання зробіть клацання правою кнопкою миші на іконці OpenVPN в системному треї. У контекстному меню виберіть client1 (це наш профіль client1.ovpn) і натисніть Connect.

Відкриється вікно статусу, яке буде відображати лог з'єднання. Коли буде припинено з'єднання ви побачите відповідне повідомлення.

Закрити VPN з'єднання можна точно так же: зробіть клацання правою кнопкою миші на іконці OpenVPN в системному треї, виберіть профіль клієнта і натисніть Disconnect.

Mac OS

установка

Tunnelblick - це безкоштовний OpenVPN клієнт для Mac OS з відкритим вихідним кодом. Ви можете завантажити його з сторінки завантажень Tunnelblick . Зробіть подвійне клацання на завантаженому .dmg файлі і виконуйте вказівки в процесі установки.

В кінці процесу установки Tunnelblick запитає, чи є у вас конфігураційні файли. Найпростіше відповісти No і завершити установку Tunnelblick. Відкрийте Finder і зробіть подвійне клацання на client1.ovpn. Tunnelblick встановить клієнтський профіль. Для цього необхідно мати права адміністратора.

з'єднання

Запустіть Tunnelblick подвійним клацанням з папки Applications. Після запуску в панелі меню в правій верхній частині екрану з'явиться іконка Tunnelblick. Для установки з'єднання натисніть на іконку, а потім Connect. Далі виберіть з'єднання client1.

Linux

установка

Залежно від використовуваної вами версії Linux, ви можете використовувати найрізноманітніші програми для установки з'єднання. Можливо, це вміє робити навіть ваш менеджер вікон.

Найбільш універсальним способом установки з'єднання, тим не менш, є програмне забезпечення OpenVPN.

В Ubuntu або Debian ви можете встановити його точно так само, як і на сервері:

  • sudo apt-get update
  • sudo apt-get install openvpn

У CentOS ви можете активувати EPEL репозиторії і потім ввести наступні команди:

  • sudo yum install epel-release
  • sudo yum install openvpn

налаштування

Спочатку перевірте, чи містить ваш дистрибутив скрипт / etc / openvpn / update-resolv-conf:


Висновок

update-resolve-conf

Далі відредагуйте отриманий з сервера файл конфігурації клієнта OpenVPN:

Якщо вам вдалося знайти файл update-resolv-conf, розкоментуйте наступні рядки файлу:

client1.ovpn

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

Якщо ви використовуєте CentOS, змініть group з nogroup на nobody:

client1.ovpn

group nobody

Збережіть і закрийте файл.

Тепер ви можете з'єднатися з VPN використовуючи команду openvpn наступним чином:

  • sudo openvpn --config client1 .ovpn

В результаті ви підключіться до сервера.

iOS

установка

Знайдіть в iTunes App Store офіційний клієнт OpenVPN Connect і встановіть його. Для перенесення файлу конфігурації клієнта на ваш пристрій, підключіть пристрій до комп'ютера.

Запустіть iTunes на комп'ютері і виберіть iPhone> apps. Знайдіть секцію File Sharing і натисніть на додаток OpenVPN. Перенесіть ваш файл .ovpn в праву частину вікна OpenVPN Documents.

ovpn в праву частину вікна OpenVPN Documents

Далі запустіть додаток OpenVPN на iPhone. Ви отримаєте повідомлення, що новий профіль готовий до імпорту. Натисніть на зелений плюсик для імпорту профілю.

Натисніть на зелений плюсик для імпорту профілю

з'єднання

OpenVPN готовий до використання з новим профілем. Для установки з'єднання потягніть слайдер Connect в позицію On. Для зупинки з'єднання перемістіть цей же слайдер в положення Off.

Увага

Перемикач VPN в додатку Settings можна використовувати для установки з'єднання з VPN. Якщо ви спробуєте це зробити, ви отримаєте повідомлення про те, що це можливо тільки в додатку OpenVPN.

Android

установка

Відкрийте Google Play Store. Знайдіть і встановіть офіційний додаток OpenVPN Android OpenVPN Connect .

Передати профіль з комп'ютера на телефон можна підключивши Android пристрій до комп'ютера через USB і скопіювавши файл. Ви також можете перемістити файл профілю за допомогою SD карти, скопіювавши профіль на карту і вставивши карту в Android пристрій.

Відкрийте програму OpenVPN і натисніть на меню для імпорту профілю.

Далі знайдіть файл в файловій системі (в нашому прикладі це / sdcard / Download /) і виберіть знайдений файл. Додаток повідомить, що профіль був імпортований.

з'єднання

Для установки з'єднання натисніть кнопку Connect. Вам буде поставлено питання, чи довіряєте ви з додатком OpenVPN. Дайте відповідь OK для установки з'єднання. Для зупинки з'єднання зайдіть в додаток OpenVPN і виберіть Disconnect.

Крок 13. Тестування VPN з'єднання

Після того, як все встановлено і налаштовано, переконаємося, що все працює правильно. Без установки з'єднання з VPN відкрийте браузер і зайдіть на DNSLeakTest .

Цей сайт поверне IP адреса, призначений вам вашим Інтернет-провайдером. Для того, щоб перевірити, які DNS сервера використовуються, натисніть на Extended Test.

Тепер встановіть з'єднання, використовуючи ваш VPN клієнт і обновіть сторінку в браузері. Що видається вам IP адреса повинна бути зовсім іншою. Тепер для всіх в Інтернеті ви використовуєте цей новий IP адреса. Натисніть Extended Test ще раз, щоб перевірити ваші настройки DNS і переконайтеся, що тепер ви використовуєте DNS сервера вашого VPN.

Крок 14. Відкликання клієнтських сертифікатів

Час від часу, вам може знадобитися відкликати клієнтський сертифікат для запобігання доступу до сервера VPN &

Для цього треба зайти в вашу директорію центру сертифікації і введіть команди:

  • cd ~ / openvpn-ca
  • source vars

Далі використовуйте команду revoke-full з ім'ям клієнта, сертифікат якого ви хочете відкликати:

Висновок результатів роботи цієї команди буде закінчуватися помилкою 23. Це нормально. В результаті роботи буде створено файл crl.pem в директорії keys з необхідною для відкликання сертифікату інформацією.

Перемістіть цей файл в директорію / etc / openvpn:

  • sudo cp ~ / openvpn-ca / keys / crl.pem / etc / openvpn

Далі відкрийте файл конфігурації сервера OpenVPN:

  • sudo nano /etc/openvpn/server.conf

Додайте в кінець файлу рядок crl-verify. Сервер OpenVPN перевірятиме список відкликаних сертифікатів кожен раз, коли хтось встановлює з'єднання з сервером.

/etc/openvpn/server.conf

crl-verify crl.pem

Збережіть і закрийте файл.

Перезапустіть OpenVPN для завершення процесу відкликання сертифікату:

  • sudo systemctl restart openvpn @ server

Тепер клієнт не зможе встановлювати з'єднання з сервером OpenVPN використовуючи старий сертифікат.

Для відкликання додаткових сертифікатів виконайте наступні кроки:

  1. Згенеруйте новий список відкликаних сертифікатів використовуючи команду source vars в директорії ~ / openvpn-ca і виконуючи команду revoke-full з ім'ям клієнта.

  2. Скопіюйте новий список відкликаних сертифікатів в директорію / etc / openvpn перезаписавши тим самим старий список.

  3. Перезапустіть сервіс OpenVPN.

Ця процедура може бути використана для відкликання будь-яких створених вами раніше сертифікатів.

Висновок

Вітаємо! Тепер ви можете безпечно виходити в Інтернет, весь ваш трафік захищений від прослушки цензорів і зловмисників.

Для конфігурації додаткових клієнтів повторіть кроки 6 і 11-13 для кожного нового пристрою. Для відкликання доступу того чи іншого клієнта використовуйте крок 14.

Як налаштувати сервер OpenVPN в Ubuntu 16.04

Вступ

Хочете мати безпечний і захищений доступ в Інтернет з вашого смартфона або ноутбука при підключенні до незахищеної мережі через WiFi готелю або кафе? Віртуальна приватна мережа (Virtual Private Network, VPN) дозволяє використовувати незахищені мережі таким чином, як якщо б ви працювали в приватній мережі. Весь ваш трафік в цьому випадку проходить через VPN-сервер.

У комбінації з використанням HTTPS-з'єднання описувані далі настройки дозволять вам убезпечити свою приватну інформацію, наприклад, логіни і паролі, а також ваші покупки. Більш того, ви зможете обходити регіональні обмеження і цензуру, а також приховувати своє місцезнаходження і незашифрований HTTP-трафік від незахищеною мережі.

OpenVPN являє собою потужний і гнучко настроюється програмне забезпечення з відкритим вихідним кодом для роботи з Secure Socket Layer (SSL) VPN. У цій статті ми встановимо і налаштуємо OpenVPN сервер, а також навчимося здійснювати до нього доступ з Windows, Mac OS, iOS і Android. Для цього ми виконаємо кілька простих кроків.

Необхідні умови

Перш за все вам необхідно мати сервер з Ubuntu 16.04.

Перед тим, як почати слідувати інструкції, наведені в цій статті, вам необхідно налаштувати окремий, чи не-рутовий (non-root) профіль користувача з привілеями sudo на вашому сервері. Ви можете зробити це згідно з інструкціями, описаним в статті про первинну налаштування сервера на Ubuntu 16.04 . У цій же статті описаний процес налаштування файрвола; далі ми будемо вважати, що файрвол налаштований на вашому сервері.

Коли ви будете готові почати, зайдіть на ваш сервер під створеним вами sudo-користувачем і виконуйте інструкції, наведені нижче.

Крок 1. Встановлення OpenVPN

Спочатку встановимо OpenVPN на наш сервер. OpenVPN доступний в стандартних репозиторіях Ubuntu, ми можемо використовувати apt для його установки. Також ми встановимо пакет easy-rsa, який дозволить нам налаштувати наш власний внутрішній центр сертифікації (certificate authority, CA) для використання з нашої VPN.

Оновимо список пакетів сервера і встановимо необхідні пакети наступними командами:

  • sudo apt-get update
  • sudo apt-get install openvpn easy-rsa

Необхідне програмне забезпечення встановлено і готове до налаштування.

Крок 2. Створення директорії центру сертифікації

OpenVPN це віртуальна приватна мережа, що використовує TLS / SSL. Це означає, що OpenVPN використовує сертифікати для шифрування трафіку між сервером і клієнтами. Для випуску довірених сертифікатів (trusted certificates) нам буде потрібно створити наш власний центр сертифікації.

Для початку скопіюємо шаблонну директорію easy-rsa в нашу домашню директорію за допомогою команди make-cadir:

Далі зайдемо в цю директорію для початку налаштування ЦС:

Крок 3. Налаштування змінних центру сертифікації

Для настройки змінних нашого центру сертифікації нам необхідно відредагувати файл vars. Відкрийте цей файл у текстовому редакторі:

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

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

~ / Openvpn-ca / 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". . .

Замініть значення, виділені червоним, на що-небудь інше, не залишайте їх не заповненими:

~ / Openvpn-ca / vars

. . . export KEY_COUNTRY = "US" export KEY_PROVINCE = "NY" export KEY_CITY = "New York City" export KEY_ORG = "DigitalOcean" export KEY_EMAIL = "[email protected]" export KEY_OU = "Community". . .

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

~ / Openvpn-ca / vars

export KEY_NAME = "server"

Збережіть і закрийте файл.

Крок 4. Створення центру сертифікації

Тепер ми можемо використовувати задані нами змінні і утиліти easy-rsa для створення центру сертифікації.

Переконайтеся, що ви перебуваєте в директорії центру сертифікації і використовуйте команду source до файлу vars:

  • cd ~ / openvpn-ca
  • source vars

Ви повинні побачити наступний висновок:


висновок

NOTE: If you run ./clean-all, I will be doing a rm -rf on / home / sammy / openvpn-ca / keys

Переконаємося, що ми працюємо в "чистому середовищі" виконавши наступну команду:

Тепер ми можемо створити наш кореневої центр сертифікації командою:

Ця команда запустить процес створення ключа і сертифіката кореневого центру сертифікації. Оскільки ми задали всі змінні у файлі vars, всі необхідні значення будуть введені автоматично. Натискайте ENTER для підтвердження вибору:


висновок

Generating a 2048 bit RSA private key ........................................... ............................................... +++ ............................... +++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', The field will be left blank. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean ]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [[email protected]]:

Тепер у нас є центр сертифікації, який ми зможемо використовувати для створення всіх інших необхідних нам файлів.

Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера

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

Почнемо зі створення сертифіката OpenVPN і ключів для сервера. Це можна зробити за допомогою такої команди:

Увага: Якщо раніше ви вибрали ім'я, відмінне від server, вам доведеться трохи змінити деякі інструкції. Наприклад, при копіюванні створених файлів в директорію / etc / openvpn вам доведеться замінити імена на задані вами. Вам також доведеться змінити файл /etc/openvpn/server.conf для того, щоб він вказував на коректні .crt і .key файли.

  • ./build-key-server server

Висновок знову буде містити значення за замовчуванням, передані цій команді (server), а також значення з файлу vars.

Погодьтеся з усіма значеннями за замовчуванням, натискаючи ENTER. Не ставте challenge password. В кінці процесу два рази введіть y для підпису і підтвердження створення сертифіката:


висновок

. . . Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) 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

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

Для завершення цієї команди може знадобитися кілька хвилин.

Далі ми можемо згенерувати підпис HMAC для посилення здатності сервера перевіряти цілісність TSL:

  • openvpn --genkey --secret keys / ta.key

Крок 6. Створення сертифіката і пари ключів для клієнта

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

У цій статті ми створимо ключ і сертифікат тільки для одного клієнта. Якщо у вас кілька клієнтів, ви можете повторювати цей процес скільки завгодно разів. Просто кожен раз передавайте унікальне значення скрипту.

Оскільки ми можемо повернутися до цього кроку пізніше, ми повторимо команду source для файлу vars. Ми будемо використовувати параметр client1 для створення першого сертифікату та ключа.

Для створення файлів без пароля для полегшення автоматичних з'єднань використовуйте команду build-key:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key client1

Для створення файлів, захищених паролем, використовуйте команду build-key-pass:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key-pass client1

В ході процесу створення файлів все значення за замовчуванням будуть введені, ви можете натискати ENTER. Не ставте challenge password і введіть y на запити про підписи і підтвердження створення сертифіката.

Крок 7. Налаштування сервісу OpenVPN

Далі налаштуємо сервіс OpenVPN з використанням створених раніше файлів.

Копіювання файлів в директорію OpenVPN

Нам необхідно скопіювати потрібні нам файли в директорію / etc / openvpn.

Спочатку скопіюємо створені нами файли. Вони знаходяться в директорії ~ / openvpn-ca / keys, в якій вони і були створені. Нам потрібно створити сертифікат і ключ центру сертифікації, сертифікат і ключ сервера, підпис HMAC і файл Diffie-Hellman:

  • cd ~ / openvpn-ca / keys
  • sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem / etc / openvpn

Далі нам необхідно скопіювати і розпакувати файл-приклад конфігурації OpenVPN в конфігураційну директорію, ми будемо використовувати цей файл в якості бази для наших налаштувань:

  • gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Налаштування конфігурації OpenVPN

Тепер, коли наші файли знаходяться на своєму місці, займемося налаштуванням конфігураційного файлу сервера:

  • sudo nano /etc/openvpn/server.conf

Базова настройка

Спочатку знайдемо секцію HMAC пошуком директиви tls-auth. Видаліть ";" для того, щоб розкоментувати рядок з tls-auth. Далі додайте параметр key-direction і встановіть його значення в "0":

/etc/openvpn/server.conf

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

Далі знайдемо секцію шифрування, нас цікавлять закоментовані рядки cipher. Шифр AES-128-CBC забезпечує хороший рівень шифрування і широко підтримується іншими програмними продуктами. Видаліть ";" для раскомментірованія рядки AES-128-CBC:

/etc/openvpn/server.conf

cipher AES-128-CBC

Під цим рядком додайте рядок auth і виберіть алгоритм HMAC. Хорошим вибором буде SHA256:

/etc/openvpn/server.conf

auth SHA256

Нарешті, знайдіть налаштування user і group і видаліть ";" для раскомментірованія цих рядків:

/etc/openvpn/server.conf

user nobody group nogroup

(За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN

Зроблені нами настройки створюють VPN з'єднання між двома машинами, але вони не змушують ці машини використовувати VPN з'єднання. Якщо ви хочете використовувати VPN з'єднання для всього свого трафіку, вам необхідно проштовхнути (push) настройки DNS на клієнтські машини.

Для цього вам необхідно розкоментувати кілька директив. Знайдіть секцію redirect-gateway і видаліть ";" з початку рядка для расскоментірованія redirect-gateway:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Трохи нижче знаходиться секція dhcp-option. Видаліть ";" для обох рядків:

/etc/openvpn/server.conf

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

Це дозволить клієнтам конфігурувати свої настройки DNS для використання VPN з'єднання в якості основного.

(За бажанням) Налаштування порту і протоколу

За замовчуванням OpenVPN використовує порт 1194 і протокол UDP для з'єднання з клієнтами. Якщо вам необхідно змінити порт через будь-яких обмежень для ваших клієнтів, ви можете зробити це змінивши налаштування port. Якщо ви не хостів веб-контент на вашому OpenVPN сервері, ви можете використовувати порт 443, оскільки цей порт зазвичай дозволений для використання в більшості файрволов.

/etc/openvpn/server.conf

# Optional! port 443

Використовуваний протокол може мати обмеження по номеру порту. В цьому випадку змініть proto з UDP на TCP:

/etc/openvpn/server.conf

# Optional! proto tcp

Якщо у вас немає явної необхідності використовувати інший порт, краще залишити обидві ці настройки зі значеннями за замовчуванням.

(За бажанням) Використання кастомними імені сертифіката і ключа

Якщо під час використання команди ./build-key-server трохи вище ви вказали параметр, відмінний від server, поміняйте налаштування cert і key, щоб вони вказували на правильні файли .crt і .key. Якщо ви використовували server, ці настройки повинні виглядати таким чином:

/etc/openvpn/server.conf

cert server .crt key server .key

Збережіть і закрийте файл.

Крок 8. Налаштування мережевої конфігурації сервера

Далі нам необхідно налаштувати мережеву конфігурацію сервера, щоб OpenVPN міг коректно перенаправляти трафік.

Налаштування перенаправлення IP

Спочатку вирішимо сервера перенаправляти трафік. Це ключова функціональність нашого VPN сервера.

Налаштуємо це в файлі /etc/sysctl.conf:

  • sudo nano /etc/sysctl.conf

Знайдіть рядок настройки net.ipv4.ip_forward. Видаліть "#" з початку рядка, щоб розкоментувати її:

/etc/sysctl.conf

net.ipv4.ip_forward = 1

Збережіть і закрийте файл.

Для застосування налаштувань до поточної сесії наберіть команду:

Налаштування правил UFW для приховування з'єднань клієнтів

Якщо ви слідували статті про налаштування Ubuntu 16.04, згаданої на початку цієї статті, у вас повинен бути встановлений і налаштований файрвол UFW. Незалежно від того, чи використовуєте ви файрвол для блокування небажаного трафіку (що вам варто робити практично завжди), в цій статті нам буде потрібно файрвол для маніпулювання з вхідним на сервер трафіком. Ми повинні змінити файл налаштувань для приховування з'єднань (masquerading).

Перед тим, як змінити цей файл, ми повинні знайти публічний інтерфейс мережі (public network interface). Для цього наберіть команду:

Публічний інтерфейс повинен слідувати за словом "dev". Наприклад, в нашому випадку цей інтерфейс називається wlp11s0:


висновок

default via 203.0.113.1 dev wlp11s0 proto static metric 600

Знаючи назву інтерфейсу відкриємо файл /etc/ufw/before.rules і додамо туди відповідні налаштування:

  • sudo nano /etc/ufw/before.rules

Це файл містить настройки UFW, яке застосовуються перед застосуванням правил UFW. Додайте в початок файлу виділені червоним рядки. Це налаштує правила, що застосовуються за замовчуванням, до ланцюжку POSTROUTING в таблиці nat і буде приховувати весь трафік від VPN:

Увага: не забудьте замінити eth0 в рядку -A POSTROUTING на ім'я інтерфейсу, що знайшли ми раніше.

/etc/ufw/before.rules

# # Rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules * nat: POSTROUTING ACCEPT [0: 0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Do not delete these required lines, otherwise there will be errors * filter. . .

Збережіть і закрийте файл.

Тепер ми повинні повідомити UFW, що йому за замовчуванням необхідно вирішувати переслані пакети. Для цього відкрийте файл / etc / default / ufw:

  • sudo nano / etc / default / ufw

Знайдіть у файлі директиву DEFAULT_FORWARD_POLICY. Ми змінимо значення з DROP на ACCEPT:

/ Etc / default / ufw

DEFAULT_FORWARD_POLICY = "ACCEPT"

Збережіть і закрийте файл.

Відкриття порту OpenVPN і застосування змін

Далі налаштуємо сам файрвол для дозволу трафіку в OpenVPN.

Якщо ви не змінювали порт і протокол в файлі /etc/openvpn/server.conf, вам необхідно дозволити трафік UDP для порту 1194. Якщо ви змінили ці настройки, введіть зазначені вами значення.

Навіть ми додамо порт SSH на випадок, якщо ви не зробили цього раніше.

  • sudo ufw allow 1194 / udp
  • sudo ufw allow OpenSSH

Тепер деактивувавши і активуємо UFW для застосування внесених змін:

  • sudo ufw disable
  • sudo ufw enable

Тепер наш сервер налаштований для обробки трафіку OpenVPN.

Крок 9. Включення сервісу OpenVPN

Ми готові включить сервіс OpenVPN на нашому сервері. Ми можемо зробити це за допомогою systemd.

Нам необхідно запустити сервер OpenVPN вказавши ім'я нашого файлу конфігурації в якості змінної після імені файлу systemd. Файл конфігурації для нашого сервера називається / etc / openvpn / server .conf, тому ми додамо @server в кінець імені файлу при його виклику:

  • sudo systemctl start openvpn @ server

Переконаємося, що сервіс успішно запущений командою:

  • sudo systemctl status openvpn @ server

Якщо все вийшло, висновок повинен виглядати приблизно так:


висновок

[email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30 : 05 EDT; 47s ago Docs: man: openvpn (8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart = / usr / sbin / openvpn --daemon ovpn-% i --status /run/openvpn/%i.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid / run / openvpn /% i.pid (code = exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 / usr / sbin / openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/server.conf - writepid /run/openvpn/server.pid May 03 15:30:05 openvpn2 ovpn-server [5856]: / sbin / ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 May 03 15:30:05 openvpn2 ovpn- server [5856]: / sbin / ip route add 10.8.0.0/24 via 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server [5856]: GID set to nogroup May 03 15:30:05 openvpn2 ovpn-server [5856]: UID set to nobody May 03 15:30:05 openvpn2 ovpn -server [5856]: UDPv4 link local (bound): [undef] May 03 15:30:05 openvpn2 ovpn-server [5856]: UDPv4 link remote: [undef] May 03 15:30:05 openvpn2 ovpn-server [ 5856]: MULTI: multi_init called, r = 256 v = 256 May 03 15:30:05 openvpn2 ovpn-server [5856]: IFCONFIG POOL: base = 10.8.0.4 size = 62, ipv6 = 0 May 03 15:30: 05 openvpn2 ovpn-server [5856]: IFCONFIG POOL LIST May 03 15:30:05 openvpn2 ovpn-server [5856]: Initialization Sequence Completed

Ви також можете перевірити доступність інтерфейсу OpenVPN tun0 наступною командою:

Ви повинні побачити конфігурацію інтерфейсу:


висновок

4: tun0: <POINTOPOINT, MULTICAST, NOARP, UP, LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link / none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

Якщо все в порядку, настроєм сервіс на автоматичне включення при завантаженні сервера:

  • sudo systemctl enable openvpn @ server

Крок 10. Створення інфраструктури настройки клієнтів

Далі налаштуємо систему для простого створення файлів конфігурації для клієнтів.

Створення структури директорій конфігурації клієнтів

В домашній директорії створіть структуру директорій для зберігання файлів:

  • mkdir -p ~ / client-configs / files

Оскільки наші файли конфігурації будуть містити клієнтські ключі, ми повинні налаштувати права доступу для створених директорій:

  • chmod 700 ~ / client-configs / files

Створення базової конфігурації

Далі скопіюємо конфігурацію-приклад в нашу директорію для використання в якості нашої базовій конфігурації:

  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~ / client-configs / base.conf

Відкрийте цей файл у текстовому редакторі:

  • nano ~ / client-configs / base.conf

Зробимо кілька змін в цьому файлі.

Спочатку знайдіть директиву remote. Ця директива повідомляє клієнту адресу нашого сервера OpenVPN. Це повинен бути публічний IP адреса вашого сервера OpenVPN. Якщо ви змінили порт, який слухає сервер OpenVPN, змініть порт за замовчуванням 1194 на ваше значення:

~ / Client-configs / base.conf

. . . # The hostname / IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194. . .

Переконайтеся, що протокол збігається з настройками сервера:

~ / Client-configs / base.conf

proto udp

Далі розкоментуйте директиви user і group видаляючи ";":

~ / Client-configs / base.conf

# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup

Знайдіть директиви ca, cert і key. Закоментуйте ці директиви, так як ми будемо додавати сертифікати і ключі в самому файлі:

~ / Client-configs / base.conf

Як налаштувати сервер OpenVPN в Ubuntu 16.04

Вступ

Хочете мати безпечний і захищений доступ в Інтернет з вашого смартфона або ноутбука при підключенні до незахищеної мережі через WiFi готелю або кафе? Віртуальна приватна мережа (Virtual Private Network, VPN) дозволяє використовувати незахищені мережі таким чином, як якщо б ви працювали в приватній мережі. Весь ваш трафік в цьому випадку проходить через VPN-сервер.

У комбінації з використанням HTTPS-з'єднання описувані далі настройки дозволять вам убезпечити свою приватну інформацію, наприклад, логіни і паролі, а також ваші покупки. Більш того, ви зможете обходити регіональні обмеження і цензуру, а також приховувати своє місцезнаходження і незашифрований HTTP-трафік від незахищеною мережі.

OpenVPN являє собою потужний і гнучко настроюється програмне забезпечення з відкритим вихідним кодом для роботи з Secure Socket Layer (SSL) VPN. У цій статті ми встановимо і налаштуємо OpenVPN сервер, а також навчимося здійснювати до нього доступ з Windows, Mac OS, iOS і Android. Для цього ми виконаємо кілька простих кроків.

Необхідні умови

Перш за все вам необхідно мати сервер з Ubuntu 16.04.

Перед тим, як почати слідувати інструкції, наведені в цій статті, вам необхідно налаштувати окремий, чи не-рутовий (non-root) профіль користувача з привілеями sudo на вашому сервері. Ви можете зробити це згідно з інструкціями, описаним в статті про первинну налаштування сервера на Ubuntu 16.04 . У цій же статті описаний процес налаштування файрвола; далі ми будемо вважати, що файрвол налаштований на вашому сервері.

Коли ви будете готові почати, зайдіть на ваш сервер під створеним вами sudo-користувачем і виконуйте інструкції, наведені нижче.

Крок 1. Встановлення OpenVPN

Спочатку встановимо OpenVPN на наш сервер. OpenVPN доступний в стандартних репозиторіях Ubuntu, ми можемо використовувати apt для його установки. Також ми встановимо пакет easy-rsa, який дозволить нам налаштувати наш власний внутрішній центр сертифікації (certificate authority, CA) для використання з нашої VPN.

Оновимо список пакетів сервера і встановимо необхідні пакети наступними командами:

  • sudo apt-get update
  • sudo apt-get install openvpn easy-rsa

Необхідне програмне забезпечення встановлено і готове до налаштування.

Крок 2. Створення директорії центру сертифікації

OpenVPN це віртуальна приватна мережа, що використовує TLS / SSL. Це означає, що OpenVPN використовує сертифікати для шифрування трафіку між сервером і клієнтами. Для випуску довірених сертифікатів (trusted certificates) нам буде потрібно створити наш власний центр сертифікації.

Для початку скопіюємо шаблонну директорію easy-rsa в нашу домашню директорію за допомогою команди make-cadir:

Далі зайдемо в цю директорію для початку налаштування ЦС:

Крок 3. Налаштування змінних центру сертифікації

Для настройки змінних нашого центру сертифікації нам необхідно відредагувати файл vars. Відкрийте цей файл у текстовому редакторі:

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

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

~ / Openvpn-ca / 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". . .

Замініть значення, виділені червоним, на що-небудь інше, не залишайте їх не заповненими:

~ / Openvpn-ca / vars

. . . export KEY_COUNTRY = "US" export KEY_PROVINCE = "NY" export KEY_CITY = "New York City" export KEY_ORG = "DigitalOcean" export KEY_EMAIL = "[email protected]" export KEY_OU = "Community". . .

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

~ / Openvpn-ca / vars

export KEY_NAME = "server"

Збережіть і закрийте файл.

Крок 4. Створення центру сертифікації

Тепер ми можемо використовувати задані нами змінні і утиліти easy-rsa для створення центру сертифікації.

Переконайтеся, що ви перебуваєте в директорії центру сертифікації і використовуйте команду source до файлу vars:

  • cd ~ / openvpn-ca
  • source vars

Ви повинні побачити наступний висновок:


висновок

NOTE: If you run ./clean-all, I will be doing a rm -rf on / home / sammy / openvpn-ca / keys

Переконаємося, що ми працюємо в "чистому середовищі" виконавши наступну команду:

Тепер ми можемо створити наш кореневої центр сертифікації командою:

Ця команда запустить процес створення ключа і сертифіката кореневого центру сертифікації. Оскільки ми задали всі змінні у файлі vars, всі необхідні значення будуть введені автоматично. Натискайте ENTER для підтвердження вибору:


висновок

Generating a 2048 bit RSA private key ........................................... ............................................... +++ ............................... +++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', The field will be left blank. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean ]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [[email protected]]:

Тепер у нас є центр сертифікації, який ми зможемо використовувати для створення всіх інших необхідних нам файлів.

Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера

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

Почнемо зі створення сертифіката OpenVPN і ключів для сервера. Це можна зробити за допомогою такої команди:

Увага: Якщо раніше ви вибрали ім'я, відмінне від server, вам доведеться трохи змінити деякі інструкції. Наприклад, при копіюванні створених файлів в директорію / etc / openvpn вам доведеться замінити імена на задані вами. Вам також доведеться змінити файл /etc/openvpn/server.conf для того, щоб він вказував на коректні .crt і .key файли.

  • ./build-key-server server

Висновок знову буде містити значення за замовчуванням, передані цій команді (server), а також значення з файлу vars.

Погодьтеся з усіма значеннями за замовчуванням, натискаючи ENTER. Не ставте challenge password. В кінці процесу два рази введіть y для підпису і підтвердження створення сертифіката:


висновок

. . . Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) 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

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

Для завершення цієї команди може знадобитися кілька хвилин.

Далі ми можемо згенерувати підпис HMAC для посилення здатності сервера перевіряти цілісність TSL:

  • openvpn --genkey --secret keys / ta.key

Крок 6. Створення сертифіката і пари ключів для клієнта

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

У цій статті ми створимо ключ і сертифікат тільки для одного клієнта. Якщо у вас кілька клієнтів, ви можете повторювати цей процес скільки завгодно разів. Просто кожен раз передавайте унікальне значення скрипту.

Оскільки ми можемо повернутися до цього кроку пізніше, ми повторимо команду source для файлу vars. Ми будемо використовувати параметр client1 для створення першого сертифікату та ключа.

Для створення файлів без пароля для полегшення автоматичних з'єднань використовуйте команду build-key:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key client1

Для створення файлів, захищених паролем, використовуйте команду build-key-pass:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key-pass client1

В ході процесу створення файлів все значення за замовчуванням будуть введені, ви можете натискати ENTER. Не ставте challenge password і введіть y на запити про підписи і підтвердження створення сертифіката.

Крок 7. Налаштування сервісу OpenVPN

Далі налаштуємо сервіс OpenVPN з використанням створених раніше файлів.

Копіювання файлів в директорію OpenVPN

Нам необхідно скопіювати потрібні нам файли в директорію / etc / openvpn.

Спочатку скопіюємо створені нами файли. Вони знаходяться в директорії ~ / openvpn-ca / keys, в якій вони і були створені. Нам потрібно створити сертифікат і ключ центру сертифікації, сертифікат і ключ сервера, підпис HMAC і файл Diffie-Hellman:

  • cd ~ / openvpn-ca / keys
  • sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem / etc / openvpn

Далі нам необхідно скопіювати і розпакувати файл-приклад конфігурації OpenVPN в конфігураційну директорію, ми будемо використовувати цей файл в якості бази для наших налаштувань:

  • gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Налаштування конфігурації OpenVPN

Тепер, коли наші файли знаходяться на своєму місці, займемося налаштуванням конфігураційного файлу сервера:

  • sudo nano /etc/openvpn/server.conf

Базова настройка

Спочатку знайдемо секцію HMAC пошуком директиви tls-auth. Видаліть ";" для того, щоб розкоментувати рядок з tls-auth. Далі додайте параметр key-direction і встановіть його значення в "0":

/etc/openvpn/server.conf

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

Далі знайдемо секцію шифрування, нас цікавлять закоментовані рядки cipher. Шифр AES-128-CBC забезпечує хороший рівень шифрування і широко підтримується іншими програмними продуктами. Видаліть ";" для раскомментірованія рядки AES-128-CBC:

/etc/openvpn/server.conf

cipher AES-128-CBC

Під цим рядком додайте рядок auth і виберіть алгоритм HMAC. Хорошим вибором буде SHA256:

/etc/openvpn/server.conf

auth SHA256

Нарешті, знайдіть налаштування user і group і видаліть ";" для раскомментірованія цих рядків:

/etc/openvpn/server.conf

user nobody group nogroup

(За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN

Зроблені нами настройки створюють VPN з'єднання між двома машинами, але вони не змушують ці машини використовувати VPN з'єднання. Якщо ви хочете використовувати VPN з'єднання для всього свого трафіку, вам необхідно проштовхнути (push) настройки DNS на клієнтські машини.

Для цього вам необхідно розкоментувати кілька директив. Знайдіть секцію redirect-gateway і видаліть ";" з початку рядка для расскоментірованія redirect-gateway:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Трохи нижче знаходиться секція dhcp-option. Видаліть ";" для обох рядків:

/etc/openvpn/server.conf

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

Це дозволить клієнтам конфігурувати свої настройки DNS для використання VPN з'єднання в якості основного.

(За бажанням) Налаштування порту і протоколу

За замовчуванням OpenVPN використовує порт 1194 і протокол UDP для з'єднання з клієнтами. Якщо вам необхідно змінити порт через будь-яких обмежень для ваших клієнтів, ви можете зробити це змінивши налаштування port. Якщо ви не хостів веб-контент на вашому OpenVPN сервері, ви можете використовувати порт 443, оскільки цей порт зазвичай дозволений для використання в більшості файрволов.

/etc/openvpn/server.conf

# Optional! port 443

Використовуваний протокол може мати обмеження по номеру порту. В цьому випадку змініть proto з UDP на TCP:

/etc/openvpn/server.conf

# Optional! proto tcp

Якщо у вас немає явної необхідності використовувати інший порт, краще залишити обидві ці настройки зі значеннями за замовчуванням.

(За бажанням) Використання кастомними імені сертифіката і ключа

Якщо під час використання команди ./build-key-server трохи вище ви вказали параметр, відмінний від server, поміняйте налаштування cert і key, щоб вони вказували на правильні файли .crt і .key. Якщо ви використовували server, ці настройки повинні виглядати таким чином:

/etc/openvpn/server.conf

cert server .crt key server .key

Збережіть і закрийте файл.

Крок 8. Налаштування мережевої конфігурації сервера

Далі нам необхідно налаштувати мережеву конфігурацію сервера, щоб OpenVPN міг коректно перенаправляти трафік.

Налаштування перенаправлення IP

Спочатку вирішимо сервера перенаправляти трафік. Це ключова функціональність нашого VPN сервера.

Налаштуємо це в файлі /etc/sysctl.conf:

  • sudo nano /etc/sysctl.conf

Знайдіть рядок настройки net.ipv4.ip_forward. Видаліть "#" з початку рядка, щоб розкоментувати її:

/etc/sysctl.conf

net.ipv4.ip_forward = 1

Збережіть і закрийте файл.

Для застосування налаштувань до поточної сесії наберіть команду:

Налаштування правил UFW для приховування з'єднань клієнтів

Якщо ви слідували статті про налаштування Ubuntu 16.04, згаданої на початку цієї статті, у вас повинен бути встановлений і налаштований файрвол UFW. Незалежно від того, чи використовуєте ви файрвол для блокування небажаного трафіку (що вам варто робити практично завжди), в цій статті нам буде потрібно файрвол для маніпулювання з вхідним на сервер трафіком. Ми повинні змінити файл налаштувань для приховування з'єднань (masquerading).

Перед тим, як змінити цей файл, ми повинні знайти публічний інтерфейс мережі (public network interface). Для цього наберіть команду:

Публічний інтерфейс повинен слідувати за словом "dev". Наприклад, в нашому випадку цей інтерфейс називається wlp11s0:


висновок

default via 203.0.113.1 dev wlp11s0 proto static metric 600

Знаючи назву інтерфейсу відкриємо файл /etc/ufw/before.rules і додамо туди відповідні налаштування:

  • sudo nano /etc/ufw/before.rules

Це файл містить настройки UFW, яке застосовуються перед застосуванням правил UFW. Додайте в початок файлу виділені червоним рядки. Це налаштує правила, що застосовуються за замовчуванням, до ланцюжку POSTROUTING в таблиці nat і буде приховувати весь трафік від VPN:

Увага: не забудьте замінити eth0 в рядку -A POSTROUTING на ім'я інтерфейсу, що знайшли ми раніше.

/etc/ufw/before.rules

# # Rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules * nat: POSTROUTING ACCEPT [0: 0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Do not delete these required lines, otherwise there will be errors * filter. . .

Збережіть і закрийте файл.

Тепер ми повинні повідомити UFW, що йому за замовчуванням необхідно вирішувати переслані пакети. Для цього відкрийте файл / etc / default / ufw:

  • sudo nano / etc / default / ufw

Знайдіть у файлі директиву DEFAULT_FORWARD_POLICY. Ми змінимо значення з DROP на ACCEPT:

/ Etc / default / ufw

DEFAULT_FORWARD_POLICY = "ACCEPT"

Збережіть і закрийте файл.

Відкриття порту OpenVPN і застосування змін

Далі налаштуємо сам файрвол для дозволу трафіку в OpenVPN.

Якщо ви не змінювали порт і протокол в файлі /etc/openvpn/server.conf, вам необхідно дозволити трафік UDP для порту 1194. Якщо ви змінили ці настройки, введіть зазначені вами значення.

Навіть ми додамо порт SSH на випадок, якщо ви не зробили цього раніше.

  • sudo ufw allow 1194 / udp
  • sudo ufw allow OpenSSH

Тепер деактивувавши і активуємо UFW для застосування внесених змін:

  • sudo ufw disable
  • sudo ufw enable

Тепер наш сервер налаштований для обробки трафіку OpenVPN.

Крок 9. Включення сервісу OpenVPN

Ми готові включить сервіс OpenVPN на нашому сервері. Ми можемо зробити це за допомогою systemd.

Нам необхідно запустити сервер OpenVPN вказавши ім'я нашого файлу конфігурації в якості змінної після імені файлу systemd. Файл конфігурації для нашого сервера називається / etc / openvpn / server .conf, тому ми додамо @server в кінець імені файлу при його виклику:

  • sudo systemctl start openvpn @ server

Переконаємося, що сервіс успішно запущений командою:

  • sudo systemctl status openvpn @ server

Якщо все вийшло, висновок повинен виглядати приблизно так:


висновок

[email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30 : 05 EDT; 47s ago Docs: man: openvpn (8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart = / usr / sbin / openvpn --daemon ovpn-% i --status /run/openvpn/%i.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid / run / openvpn /% i.pid (code = exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 / usr / sbin / openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/server.conf - writepid /run/openvpn/server.pid May 03 15:30:05 openvpn2 ovpn-server [5856]: / sbin / ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 May 03 15:30:05 openvpn2 ovpn- server [5856]: / sbin / ip route add 10.8.0.0/24 via 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server [5856]: GID set to nogroup May 03 15:30:05 openvpn2 ovpn-server [5856]: UID set to nobody May 03 15:30:05 openvpn2 ovpn -server [5856]: UDPv4 link local (bound): [undef] May 03 15:30:05 openvpn2 ovpn-server [5856]: UDPv4 link remote: [undef] May 03 15:30:05 openvpn2 ovpn-server [ 5856]: MULTI: multi_init called, r = 256 v = 256 May 03 15:30:05 openvpn2 ovpn-server [5856]: IFCONFIG POOL: base = 10.8.0.4 size = 62, ipv6 = 0 May 03 15:30: 05 openvpn2 ovpn-server [5856]: IFCONFIG POOL LIST May 03 15:30:05 openvpn2 ovpn-server [5856]: Initialization Sequence Completed

Ви також можете перевірити доступність інтерфейсу OpenVPN tun0 наступною командою:

Ви повинні побачити конфігурацію інтерфейсу:


висновок

4: tun0: <POINTOPOINT, MULTICAST, NOARP, UP, LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link / none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

Якщо все в порядку, настроєм сервіс на автоматичне включення при завантаженні сервера:

  • sudo systemctl enable openvpn @ server

Крок 10. Створення інфраструктури настройки клієнтів

Далі налаштуємо систему для простого створення файлів конфігурації для клієнтів.

Створення структури директорій конфігурації клієнтів

В домашній директорії створіть структуру директорій для зберігання файлів:

  • mkdir -p ~ / client-configs / files

Оскільки наші файли конфігурації будуть містити клієнтські ключі, ми повинні налаштувати права доступу для створених директорій:

  • chmod 700 ~ / client-configs / files

Створення базової конфігурації

Далі скопіюємо конфігурацію-приклад в нашу директорію для використання в якості нашої базовій конфігурації:

  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~ / client-configs / base.conf

Відкрийте цей файл у текстовому редакторі:

  • nano ~ / client-configs / base.conf

Зробимо кілька змін в цьому файлі.

Спочатку знайдіть директиву remote. Ця директива повідомляє клієнту адресу нашого сервера OpenVPN. Це повинен бути публічний IP адреса вашого сервера OpenVPN. Якщо ви змінили порт, який слухає сервер OpenVPN, змініть порт за замовчуванням 1194 на ваше значення:

~ / Client-configs / base.conf

. . . # The hostname / IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194. . .

Переконайтеся, що протокол збігається з настройками сервера:

~ / Client-configs / base.conf

proto udp

Далі розкоментуйте директиви user і group видаляючи ";":

~ / Client-configs / base.conf

# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup

Знайдіть директиви ca, cert і key. Закоментуйте ці директиви, так як ми будемо додавати сертифікати і ключі в самому файлі:

~ / Client-configs / base.conf

Як налаштувати сервер OpenVPN в Ubuntu 16.04

Вступ

Хочете мати безпечний і захищений доступ в Інтернет з вашого смартфона або ноутбука при підключенні до незахищеної мережі через WiFi готелю або кафе? Віртуальна приватна мережа (Virtual Private Network, VPN) дозволяє використовувати незахищені мережі таким чином, як якщо б ви працювали в приватній мережі. Весь ваш трафік в цьому випадку проходить через VPN-сервер.

У комбінації з використанням HTTPS-з'єднання описувані далі настройки дозволять вам убезпечити свою приватну інформацію, наприклад, логіни і паролі, а також ваші покупки. Більш того, ви зможете обходити регіональні обмеження і цензуру, а також приховувати своє місцезнаходження і незашифрований HTTP-трафік від незахищеною мережі.

OpenVPN являє собою потужний і гнучко настроюється програмне забезпечення з відкритим вихідним кодом для роботи з Secure Socket Layer (SSL) VPN. У цій статті ми встановимо і налаштуємо OpenVPN сервер, а також навчимося здійснювати до нього доступ з Windows, Mac OS, iOS і Android. Для цього ми виконаємо кілька простих кроків.

Необхідні умови

Перш за все вам необхідно мати сервер з Ubuntu 16.04.

Перед тим, як почати слідувати інструкції, наведені в цій статті, вам необхідно налаштувати окремий, чи не-рутовий (non-root) профіль користувача з привілеями sudo на вашому сервері. Ви можете зробити це згідно з інструкціями, описаним в статті про первинну налаштування сервера на Ubuntu 16.04 . У цій же статті описаний процес налаштування файрвола; далі ми будемо вважати, що файрвол налаштований на вашому сервері.

Коли ви будете готові почати, зайдіть на ваш сервер під створеним вами sudo-користувачем і виконуйте інструкції, наведені нижче.

Крок 1. Встановлення OpenVPN

Спочатку встановимо OpenVPN на наш сервер. OpenVPN доступний в стандартних репозиторіях Ubuntu, ми можемо використовувати apt для його установки. Також ми встановимо пакет easy-rsa, який дозволить нам налаштувати наш власний внутрішній центр сертифікації (certificate authority, CA) для використання з нашої VPN.

Оновимо список пакетів сервера і встановимо необхідні пакети наступними командами:

  • sudo apt-get update
  • sudo apt-get install openvpn easy-rsa

Необхідне програмне забезпечення встановлено і готове до налаштування.

Крок 2. Створення директорії центру сертифікації

OpenVPN це віртуальна приватна мережа, що використовує TLS / SSL. Це означає, що OpenVPN використовує сертифікати для шифрування трафіку між сервером і клієнтами. Для випуску довірених сертифікатів (trusted certificates) нам буде потрібно створити наш власний центр сертифікації.

Для початку скопіюємо шаблонну директорію easy-rsa в нашу домашню директорію за допомогою команди make-cadir:

Далі зайдемо в цю директорію для початку налаштування ЦС:

Крок 3. Налаштування змінних центру сертифікації

Для настройки змінних нашого центру сертифікації нам необхідно відредагувати файл vars. Відкрийте цей файл у текстовому редакторі:

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

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

~ / Openvpn-ca / 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". . .

Замініть значення, виділені червоним, на що-небудь інше, не залишайте їх не заповненими:

~ / Openvpn-ca / vars

. . . export KEY_COUNTRY = "US" export KEY_PROVINCE = "NY" export KEY_CITY = "New York City" export KEY_ORG = "DigitalOcean" export KEY_EMAIL = "[email protected]" export KEY_OU = "Community". . .

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

~ / Openvpn-ca / vars

export KEY_NAME = "server"

Збережіть і закрийте файл.

Крок 4. Створення центру сертифікації

Тепер ми можемо використовувати задані нами змінні і утиліти easy-rsa для створення центру сертифікації.

Переконайтеся, що ви перебуваєте в директорії центру сертифікації і використовуйте команду source до файлу vars:

  • cd ~ / openvpn-ca
  • source vars

Ви повинні побачити наступний висновок:


висновок

NOTE: If you run ./clean-all, I will be doing a rm -rf on / home / sammy / openvpn-ca / keys

Переконаємося, що ми працюємо в "чистому середовищі" виконавши наступну команду:

Тепер ми можемо створити наш кореневої центр сертифікації командою:

Ця команда запустить процес створення ключа і сертифіката кореневого центру сертифікації. Оскільки ми задали всі змінні у файлі vars, всі необхідні значення будуть введені автоматично. Натискайте ENTER для підтвердження вибору:


висновок

Generating a 2048 bit RSA private key ........................................... ............................................... +++ ............................... +++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', The field will be left blank. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean ]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [[email protected]]:

Тепер у нас є центр сертифікації, який ми зможемо використовувати для створення всіх інших необхідних нам файлів.

Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера

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

Почнемо зі створення сертифіката OpenVPN і ключів для сервера. Це можна зробити за допомогою такої команди:

Увага: Якщо раніше ви вибрали ім'я, відмінне від server, вам доведеться трохи змінити деякі інструкції. Наприклад, при копіюванні створених файлів в директорію / etc / openvpn вам доведеться замінити імена на задані вами. Вам також доведеться змінити файл /etc/openvpn/server.conf для того, щоб він вказував на коректні .crt і .key файли.

  • ./build-key-server server

Висновок знову буде містити значення за замовчуванням, передані цій команді (server), а також значення з файлу vars.

Погодьтеся з усіма значеннями за замовчуванням, натискаючи ENTER. Не ставте challenge password. В кінці процесу два рази введіть y для підпису і підтвердження створення сертифіката:


висновок

. . . Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) 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

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

Для завершення цієї команди може знадобитися кілька хвилин.

Далі ми можемо згенерувати підпис HMAC для посилення здатності сервера перевіряти цілісність TSL:

  • openvpn --genkey --secret keys / ta.key

Крок 6. Створення сертифіката і пари ключів для клієнта

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

У цій статті ми створимо ключ і сертифікат тільки для одного клієнта. Якщо у вас кілька клієнтів, ви можете повторювати цей процес скільки завгодно разів. Просто кожен раз передавайте унікальне значення скрипту.

Оскільки ми можемо повернутися до цього кроку пізніше, ми повторимо команду source для файлу vars. Ми будемо використовувати параметр client1 для створення першого сертифікату та ключа.

Для створення файлів без пароля для полегшення автоматичних з'єднань використовуйте команду build-key:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key client1

Для створення файлів, захищених паролем, використовуйте команду build-key-pass:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key-pass client1

В ході процесу створення файлів все значення за замовчуванням будуть введені, ви можете натискати ENTER. Не ставте challenge password і введіть y на запити про підписи і підтвердження створення сертифіката.

Крок 7. Налаштування сервісу OpenVPN

Далі налаштуємо сервіс OpenVPN з використанням створених раніше файлів.

Копіювання файлів в директорію OpenVPN

Нам необхідно скопіювати потрібні нам файли в директорію / etc / openvpn.

Спочатку скопіюємо створені нами файли. Вони знаходяться в директорії ~ / openvpn-ca / keys, в якій вони і були створені. Нам потрібно створити сертифікат і ключ центру сертифікації, сертифікат і ключ сервера, підпис HMAC і файл Diffie-Hellman:

  • cd ~ / openvpn-ca / keys
  • sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem / etc / openvpn

Далі нам необхідно скопіювати і розпакувати файл-приклад конфігурації OpenVPN в конфігураційну директорію, ми будемо використовувати цей файл в якості бази для наших налаштувань:

  • gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Налаштування конфігурації OpenVPN

Тепер, коли наші файли знаходяться на своєму місці, займемося налаштуванням конфігураційного файлу сервера:

  • sudo nano /etc/openvpn/server.conf

Базова настройка

Спочатку знайдемо секцію HMAC пошуком директиви tls-auth. Видаліть ";" для того, щоб розкоментувати рядок з tls-auth. Далі додайте параметр key-direction і встановіть його значення в "0":

/etc/openvpn/server.conf

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

Далі знайдемо секцію шифрування, нас цікавлять закоментовані рядки cipher. Шифр AES-128-CBC забезпечує хороший рівень шифрування і широко підтримується іншими програмними продуктами. Видаліть ";" для раскомментірованія рядки AES-128-CBC:

/etc/openvpn/server.conf

cipher AES-128-CBC

Під цим рядком додайте рядок auth і виберіть алгоритм HMAC. Хорошим вибором буде SHA256:

/etc/openvpn/server.conf

auth SHA256

Нарешті, знайдіть налаштування user і group і видаліть ";" для раскомментірованія цих рядків:

/etc/openvpn/server.conf

user nobody group nogroup

(За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN

Зроблені нами настройки створюють VPN з'єднання між двома машинами, але вони не змушують ці машини використовувати VPN з'єднання. Якщо ви хочете використовувати VPN з'єднання для всього свого трафіку, вам необхідно проштовхнути (push) настройки DNS на клієнтські машини.

Для цього вам необхідно розкоментувати кілька директив. Знайдіть секцію redirect-gateway і видаліть ";" з початку рядка для расскоментірованія redirect-gateway:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Трохи нижче знаходиться секція dhcp-option. Видаліть ";" для обох рядків:

/etc/openvpn/server.conf

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

Це дозволить клієнтам конфігурувати свої настройки DNS для використання VPN з'єднання в якості основного.

(За бажанням) Налаштування порту і протоколу

За замовчуванням OpenVPN використовує порт 1194 і протокол UDP для з'єднання з клієнтами. Якщо вам необхідно змінити порт через будь-яких обмежень для ваших клієнтів, ви можете зробити це змінивши налаштування port. Якщо ви не хостів веб-контент на вашому OpenVPN сервері, ви можете використовувати порт 443, оскільки цей порт зазвичай дозволений для використання в більшості файрволов.

/etc/openvpn/server.conf

# Optional! port 443

Використовуваний протокол може мати обмеження по номеру порту. В цьому випадку змініть proto з UDP на TCP:

/etc/openvpn/server.conf

# Optional! proto tcp

Якщо у вас немає явної необхідності використовувати інший порт, краще залишити обидві ці настройки зі значеннями за замовчуванням.

(За бажанням) Використання кастомними імені сертифіката і ключа

Якщо під час використання команди ./build-key-server трохи вище ви вказали параметр, відмінний від server, поміняйте налаштування cert і key, щоб вони вказували на правильні файли .crt і .key. Якщо ви використовували server, ці настройки повинні виглядати таким чином:

/etc/openvpn/server.conf

cert server .crt key server .key

Збережіть і закрийте файл.

Крок 8. Налаштування мережевої конфігурації сервера

Далі нам необхідно налаштувати мережеву конфігурацію сервера, щоб OpenVPN міг коректно перенаправляти трафік.

Налаштування перенаправлення IP

Спочатку вирішимо сервера перенаправляти трафік. Це ключова функціональність нашого VPN сервера.

Налаштуємо це в файлі /etc/sysctl.conf:

  • sudo nano /etc/sysctl.conf

Знайдіть рядок настройки net.ipv4.ip_forward. Видаліть "#" з початку рядка, щоб розкоментувати її:

/etc/sysctl.conf

net.ipv4.ip_forward = 1

Збережіть і закрийте файл.

Для застосування налаштувань до поточної сесії наберіть команду:

Налаштування правил UFW для приховування з'єднань клієнтів

Якщо ви слідували статті про налаштування Ubuntu 16.04, згаданої на початку цієї статті, у вас повинен бути встановлений і налаштований файрвол UFW. Незалежно від того, чи використовуєте ви файрвол для блокування небажаного трафіку (що вам варто робити практично завжди), в цій статті нам буде потрібно файрвол для маніпулювання з вхідним на сервер трафіком. Ми повинні змінити файл налаштувань для приховування з'єднань (masquerading).

Перед тим, як змінити цей файл, ми повинні знайти публічний інтерфейс мережі (public network interface). Для цього наберіть команду:

Публічний інтерфейс повинен слідувати за словом "dev". Наприклад, в нашому випадку цей інтерфейс називається wlp11s0:


висновок

default via 203.0.113.1 dev wlp11s0 proto static metric 600

Знаючи назву інтерфейсу відкриємо файл /etc/ufw/before.rules і додамо туди відповідні налаштування:

  • sudo nano /etc/ufw/before.rules

Це файл містить настройки UFW, яке застосовуються перед застосуванням правил UFW. Додайте в початок файлу виділені червоним рядки. Це налаштує правила, що застосовуються за замовчуванням, до ланцюжку POSTROUTING в таблиці nat і буде приховувати весь трафік від VPN:

Увага: не забудьте замінити eth0 в рядку -A POSTROUTING на ім'я інтерфейсу, що знайшли ми раніше.

/etc/ufw/before.rules

# # Rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules * nat: POSTROUTING ACCEPT [0: 0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Do not delete these required lines, otherwise there will be errors * filter. . .

Збережіть і закрийте файл.

Тепер ми повинні повідомити UFW, що йому за замовчуванням необхідно вирішувати переслані пакети. Для цього відкрийте файл / etc / default / ufw:

  • sudo nano / etc / default / ufw

Знайдіть у файлі директиву DEFAULT_FORWARD_POLICY. Ми змінимо значення з DROP на ACCEPT:

/ Etc / default / ufw

DEFAULT_FORWARD_POLICY = "ACCEPT"

Збережіть і закрийте файл.

Відкриття порту OpenVPN і застосування змін

Далі налаштуємо сам файрвол для дозволу трафіку в OpenVPN.

Якщо ви не змінювали порт і протокол в файлі /etc/openvpn/server.conf, вам необхідно дозволити трафік UDP для порту 1194. Якщо ви змінили ці настройки, введіть зазначені вами значення.

Навіть ми додамо порт SSH на випадок, якщо ви не зробили цього раніше.

  • sudo ufw allow 1194 / udp
  • sudo ufw allow OpenSSH

Тепер деактивувавши і активуємо UFW для застосування внесених змін:

  • sudo ufw disable
  • sudo ufw enable

Тепер наш сервер налаштований для обробки трафіку OpenVPN.

Крок 9. Включення сервісу OpenVPN

Ми готові включить сервіс OpenVPN на нашому сервері. Ми можемо зробити це за допомогою systemd.

Нам необхідно запустити сервер OpenVPN вказавши ім'я нашого файлу конфігурації в якості змінної після імені файлу systemd. Файл конфігурації для нашого сервера називається / etc / openvpn / server .conf, тому ми додамо @server в кінець імені файлу при його виклику:

  • sudo systemctl start openvpn @ server

Переконаємося, що сервіс успішно запущений командою:

  • sudo systemctl status openvpn @ server

Якщо все вийшло, висновок повинен виглядати приблизно так:


висновок

[email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30 : 05 EDT; 47s ago Docs: man: openvpn (8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart = / usr / sbin / openvpn --daemon ovpn-% i --status /run/openvpn/%i.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid / run / openvpn /% i.pid (code = exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 / usr / sbin / openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/server.conf - writepid /run/openvpn/server.pid May 03 15:30:05 openvpn2 ovpn-server [5856]: / sbin / ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 May 03 15:30:05 openvpn2 ovpn- server [5856]: / sbin / ip route add 10.8.0.0/24 via 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server [5856]: GID set to nogroup May 03 15:30:05 openvpn2 ovpn-server [5856]: UID set to nobody May 03 15:30:05 openvpn2 ovpn -server [5856]: UDPv4 link local (bound): [undef] May 03 15:30:05 openvpn2 ovpn-server [5856]: UDPv4 link remote: [undef] May 03 15:30:05 openvpn2 ovpn-server [ 5856]: MULTI: multi_init called, r = 256 v = 256 May 03 15:30:05 openvpn2 ovpn-server [5856]: IFCONFIG POOL: base = 10.8.0.4 size = 62, ipv6 = 0 May 03 15:30: 05 openvpn2 ovpn-server [5856]: IFCONFIG POOL LIST May 03 15:30:05 openvpn2 ovpn-server [5856]: Initialization Sequence Completed

Ви також можете перевірити доступність інтерфейсу OpenVPN tun0 наступною командою:

Ви повинні побачити конфігурацію інтерфейсу:


висновок

4: tun0: <POINTOPOINT, MULTICAST, NOARP, UP, LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link / none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

Якщо все в порядку, настроєм сервіс на автоматичне включення при завантаженні сервера:

  • sudo systemctl enable openvpn @ server

Крок 10. Створення інфраструктури настройки клієнтів

Далі налаштуємо систему для простого створення файлів конфігурації для клієнтів.

Створення структури директорій конфігурації клієнтів

В домашній директорії створіть структуру директорій для зберігання файлів:

  • mkdir -p ~ / client-configs / files

Оскільки наші файли конфігурації будуть містити клієнтські ключі, ми повинні налаштувати права доступу для створених директорій:

  • chmod 700 ~ / client-configs / files

Створення базової конфігурації

Далі скопіюємо конфігурацію-приклад в нашу директорію для використання в якості нашої базовій конфігурації:

  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~ / client-configs / base.conf

Відкрийте цей файл у текстовому редакторі:

  • nano ~ / client-configs / base.conf

Зробимо кілька змін в цьому файлі.

Спочатку знайдіть директиву remote. Ця директива повідомляє клієнту адресу нашого сервера OpenVPN. Це повинен бути публічний IP адреса вашого сервера OpenVPN. Якщо ви змінили порт, який слухає сервер OpenVPN, змініть порт за замовчуванням 1194 на ваше значення:

~ / Client-configs / base.conf

. . . # The hostname / IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194. . .

Переконайтеся, що протокол збігається з настройками сервера:

~ / Client-configs / base.conf

proto udp

Далі розкоментуйте директиви user і group видаляючи ";":

~ / Client-configs / base.conf

# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup

Знайдіть директиви ca, cert і key. Закоментуйте ці директиви, так як ми будемо додавати сертифікати і ключі в самому файлі:

~ / Client-configs / base.conf

Як налаштувати сервер OpenVPN в Ubuntu 16.04

Вступ

Хочете мати безпечний і захищений доступ в Інтернет з вашого смартфона або ноутбука при підключенні до незахищеної мережі через WiFi готелю або кафе? Віртуальна приватна мережа (Virtual Private Network, VPN) дозволяє використовувати незахищені мережі таким чином, як якщо б ви працювали в приватній мережі. Весь ваш трафік в цьому випадку проходить через VPN-сервер.

У комбінації з використанням HTTPS-з'єднання описувані далі настройки дозволять вам убезпечити свою приватну інформацію, наприклад, логіни і паролі, а також ваші покупки. Більш того, ви зможете обходити регіональні обмеження і цензуру, а також приховувати своє місцезнаходження і незашифрований HTTP-трафік від незахищеною мережі.

OpenVPN являє собою потужний і гнучко настроюється програмне забезпечення з відкритим вихідним кодом для роботи з Secure Socket Layer (SSL) VPN. У цій статті ми встановимо і налаштуємо OpenVPN сервер, а також навчимося здійснювати до нього доступ з Windows, Mac OS, iOS і Android. Для цього ми виконаємо кілька простих кроків.

Необхідні умови

Перш за все вам необхідно мати сервер з Ubuntu 16.04.

Перед тим, як почати слідувати інструкції, наведені в цій статті, вам необхідно налаштувати окремий, чи не-рутовий (non-root) профіль користувача з привілеями sudo на вашому сервері. Ви можете зробити це згідно з інструкціями, описаним в статті про первинну налаштування сервера на Ubuntu 16.04 . У цій же статті описаний процес налаштування файрвола; далі ми будемо вважати, що файрвол налаштований на вашому сервері.

Коли ви будете готові почати, зайдіть на ваш сервер під створеним вами sudo-користувачем і виконуйте інструкції, наведені нижче.

Крок 1. Встановлення OpenVPN

Спочатку встановимо OpenVPN на наш сервер. OpenVPN доступний в стандартних репозиторіях Ubuntu, ми можемо використовувати apt для його установки. Також ми встановимо пакет easy-rsa, який дозволить нам налаштувати наш власний внутрішній центр сертифікації (certificate authority, CA) для використання з нашої VPN.

Оновимо список пакетів сервера і встановимо необхідні пакети наступними командами:

  • sudo apt-get update
  • sudo apt-get install openvpn easy-rsa

Необхідне програмне забезпечення встановлено і готове до налаштування.

Крок 2. Створення директорії центру сертифікації

OpenVPN це віртуальна приватна мережа, що використовує TLS / SSL. Це означає, що OpenVPN використовує сертифікати для шифрування трафіку між сервером і клієнтами. Для випуску довірених сертифікатів (trusted certificates) нам буде потрібно створити наш власний центр сертифікації.

Для початку скопіюємо шаблонну директорію easy-rsa в нашу домашню директорію за допомогою команди make-cadir:

Далі зайдемо в цю директорію для початку налаштування ЦС:

Крок 3. Налаштування змінних центру сертифікації

Для настройки змінних нашого центру сертифікації нам необхідно відредагувати файл vars. Відкрийте цей файл у текстовому редакторі:

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

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

~ / Openvpn-ca / 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". . .

Замініть значення, виділені червоним, на що-небудь інше, не залишайте їх не заповненими:

~ / Openvpn-ca / vars

. . . export KEY_COUNTRY = "US" export KEY_PROVINCE = "NY" export KEY_CITY = "New York City" export KEY_ORG = "DigitalOcean" export KEY_EMAIL = "[email protected]" export KEY_OU = "Community". . .

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

~ / Openvpn-ca / vars

export KEY_NAME = "server"

Збережіть і закрийте файл.

Крок 4. Створення центру сертифікації

Тепер ми можемо використовувати задані нами змінні і утиліти easy-rsa для створення центру сертифікації.

Переконайтеся, що ви перебуваєте в директорії центру сертифікації і використовуйте команду source до файлу vars:

  • cd ~ / openvpn-ca
  • source vars

Ви повинні побачити наступний висновок:


висновок

NOTE: If you run ./clean-all, I will be doing a rm -rf on / home / sammy / openvpn-ca / keys

Переконаємося, що ми працюємо в "чистому середовищі" виконавши наступну команду:

Тепер ми можемо створити наш кореневої центр сертифікації командою:

Ця команда запустить процес створення ключа і сертифіката кореневого центру сертифікації. Оскільки ми задали всі змінні у файлі vars, всі необхідні значення будуть введені автоматично. Натискайте ENTER для підтвердження вибору:


висновок

Generating a 2048 bit RSA private key ........................................... ............................................... +++ ............................... +++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', The field will be left blank. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean ]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [[email protected]]:

Тепер у нас є центр сертифікації, який ми зможемо використовувати для створення всіх інших необхідних нам файлів.

Крок 5. Створення сертифіката, ключа і файлів шифрування для сервера

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

Почнемо зі створення сертифіката OpenVPN і ключів для сервера. Це можна зробити за допомогою такої команди:

Увага: Якщо раніше ви вибрали ім'я, відмінне від server, вам доведеться трохи змінити деякі інструкції. Наприклад, при копіюванні створених файлів в директорію / etc / openvpn вам доведеться замінити імена на задані вами. Вам також доведеться змінити файл /etc/openvpn/server.conf для того, щоб він вказував на коректні .crt і .key файли.

  • ./build-key-server server

Висновок знову буде містити значення за замовчуванням, передані цій команді (server), а також значення з файлу vars.

Погодьтеся з усіма значеннями за замовчуванням, натискаючи ENTER. Не ставте challenge password. В кінці процесу два рази введіть y для підпису і підтвердження створення сертифіката:


висновок

. . . Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) 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

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

Для завершення цієї команди може знадобитися кілька хвилин.

Далі ми можемо згенерувати підпис HMAC для посилення здатності сервера перевіряти цілісність TSL:

  • openvpn --genkey --secret keys / ta.key

Крок 6. Створення сертифіката і пари ключів для клієнта

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

У цій статті ми створимо ключ і сертифікат тільки для одного клієнта. Якщо у вас кілька клієнтів, ви можете повторювати цей процес скільки завгодно разів. Просто кожен раз передавайте унікальне значення скрипту.

Оскільки ми можемо повернутися до цього кроку пізніше, ми повторимо команду source для файлу vars. Ми будемо використовувати параметр client1 для створення першого сертифікату та ключа.

Для створення файлів без пароля для полегшення автоматичних з'єднань використовуйте команду build-key:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key client1

Для створення файлів, захищених паролем, використовуйте команду build-key-pass:

  • cd ~ / openvpn-ca
  • source vars
  • ./build-key-pass client1

В ході процесу створення файлів все значення за замовчуванням будуть введені, ви можете натискати ENTER. Не ставте challenge password і введіть y на запити про підписи і підтвердження створення сертифіката.

Крок 7. Налаштування сервісу OpenVPN

Далі налаштуємо сервіс OpenVPN з використанням створених раніше файлів.

Копіювання файлів в директорію OpenVPN

Нам необхідно скопіювати потрібні нам файли в директорію / etc / openvpn.

Спочатку скопіюємо створені нами файли. Вони знаходяться в директорії ~ / openvpn-ca / keys, в якій вони і були створені. Нам потрібно створити сертифікат і ключ центру сертифікації, сертифікат і ключ сервера, підпис HMAC і файл Diffie-Hellman:

  • cd ~ / openvpn-ca / keys
  • sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem / etc / openvpn

Далі нам необхідно скопіювати і розпакувати файл-приклад конфігурації OpenVPN в конфігураційну директорію, ми будемо використовувати цей файл в якості бази для наших налаштувань:

  • gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Налаштування конфігурації OpenVPN

Тепер, коли наші файли знаходяться на своєму місці, займемося налаштуванням конфігураційного файлу сервера:

  • sudo nano /etc/openvpn/server.conf

Базова настройка

Спочатку знайдемо секцію HMAC пошуком директиви tls-auth. Видаліть ";" для того, щоб розкоментувати рядок з tls-auth. Далі додайте параметр key-direction і встановіть його значення в "0":

/etc/openvpn/server.conf

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

Далі знайдемо секцію шифрування, нас цікавлять закоментовані рядки cipher. Шифр AES-128-CBC забезпечує хороший рівень шифрування і широко підтримується іншими програмними продуктами. Видаліть ";" для раскомментірованія рядки AES-128-CBC:

/etc/openvpn/server.conf

cipher AES-128-CBC

Під цим рядком додайте рядок auth і виберіть алгоритм HMAC. Хорошим вибором буде SHA256:

/etc/openvpn/server.conf

auth SHA256

Нарешті, знайдіть налаштування user і group і видаліть ";" для раскомментірованія цих рядків:

/etc/openvpn/server.conf

user nobody group nogroup

(За бажанням) Проштовхування змін DNS для перенаправлення всього трафіку через VPN

Зроблені нами настройки створюють VPN з'єднання між двома машинами, але вони не змушують ці машини використовувати VPN з'єднання. Якщо ви хочете використовувати VPN з'єднання для всього свого трафіку, вам необхідно проштовхнути (push) настройки DNS на клієнтські машини.

Для цього вам необхідно розкоментувати кілька директив. Знайдіть секцію redirect-gateway і видаліть ";" з початку рядка для расскоментірованія redirect-gateway:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Трохи нижче знаходиться секція dhcp-option. Видаліть ";" для обох рядків:

/etc/openvpn/server.conf

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

Це дозволить клієнтам конфігурувати свої настройки DNS для використання VPN з'єднання в якості основного.

(За бажанням) Налаштування порту і протоколу

За замовчуванням OpenVPN використовує порт 1194 і протокол UDP для з'єднання з клієнтами. Якщо вам необхідно змінити порт через будь-яких обмежень для ваших клієнтів, ви можете зробити це змінивши налаштування port. Якщо ви не хостів веб-контент на вашому OpenVPN сервері, ви можете використовувати порт 443, оскільки цей порт зазвичай дозволений для використання в більшості файрволов.

/etc/openvpn/server.conf

# Optional! port 443

Використовуваний протокол може мати обмеження по номеру порту. В цьому випадку змініть proto з UDP на TCP:

/etc/openvpn/server.conf

# Optional! proto tcp

Якщо у вас немає явної необхідності використовувати інший порт, краще залишити обидві ці настройки зі значеннями за замовчуванням.

(За бажанням) Використання кастомними імені сертифіката і ключа

Якщо під час використання команди ./build-key-server трохи вище ви вказали параметр, відмінний від server, поміняйте налаштування cert і key, щоб вони вказували на правильні файли .crt і .key. Якщо ви використовували server, ці настройки повинні виглядати таким чином:

/etc/openvpn/server.conf

cert server .crt key server .key

Збережіть і закрийте файл.

Крок 8. Налаштування мережевої конфігурації сервера

Далі нам необхідно налаштувати мережеву конфігурацію сервера, щоб OpenVPN міг коректно перенаправляти трафік.

Налаштування перенаправлення IP

Спочатку вирішимо сервера перенаправляти трафік. Це ключова функціональність нашого VPN сервера.

Налаштуємо це в файлі /etc/sysctl.conf:

  • sudo nano /etc/sysctl.conf

Знайдіть рядок настройки net.ipv4.ip_forward. Видаліть "#" з початку рядка, щоб розкоментувати її:

/etc/sysctl.conf

net.ipv4.ip_forward = 1

Збережіть і закрийте файл.

Для застосування налаштувань до поточної сесії наберіть команду:

Налаштування правил UFW для приховування з'єднань клієнтів

Якщо ви слідували статті про налаштування Ubuntu 16.04, згаданої на початку цієї статті, у вас повинен бути встановлений і налаштований файрвол UFW. Незалежно від того, чи використовуєте ви файрвол для блокування небажаного трафіку (що вам варто робити практично завжди), в цій статті нам буде потрібно файрвол для маніпулювання з вхідним на сервер трафіком. Ми повинні змінити файл налаштувань для приховування з'єднань (masquerading).

Перед тим, як змінити цей файл, ми повинні знайти публічний інтерфейс мережі (public network interface). Для цього наберіть команду:

Публічний інтерфейс повинен слідувати за словом "dev". Наприклад, в нашому випадку цей інтерфейс називається wlp11s0:


висновок

default via 203.0.113.1 dev wlp11s0 proto static metric 600

Знаючи назву інтерфейсу відкриємо файл /etc/ufw/before.rules і додамо туди відповідні налаштування:

  • sudo nano /etc/ufw/before.rules

Це файл містить настройки UFW, яке застосовуються перед застосуванням правил UFW. Додайте в початок файлу виділені червоним рядки. Це налаштує правила, що застосовуються за замовчуванням, до ланцюжку POSTROUTING в таблиці nat і буде приховувати весь трафік від VPN:

Увага: не забудьте замінити eth0 в рядку -A POSTROUTING на ім'я інтерфейсу, що знайшли ми раніше.

/etc/ufw/before.rules

# # Rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules * nat: POSTROUTING ACCEPT [0: 0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Do not delete these required lines, otherwise there will be errors * filter. . .

Збережіть і закрийте файл.

Тепер ми повинні повідомити UFW, що йому за замовчуванням необхідно вирішувати переслані пакети. Для цього відкрийте файл / etc / default / ufw:

  • sudo nano / etc / default / ufw

Знайдіть у файлі директиву DEFAULT_FORWARD_POLICY. Ми змінимо значення з DROP на ACCEPT:

/ Etc / default / ufw

DEFAULT_FORWARD_POLICY = "ACCEPT"

Збережіть і закрийте файл.

Відкриття порту OpenVPN і застосування змін

Далі налаштуємо сам файрвол для дозволу трафіку в OpenVPN.

Якщо ви не змінювали порт і протокол в файлі /etc/openvpn/server.conf, вам необхідно дозволити трафік UDP для порту 1194. Якщо ви змінили ці настройки, введіть зазначені вами значення.

Навіть ми додамо порт SSH на випадок, якщо ви не зробили цього раніше.

  • sudo ufw allow 1194 / udp
  • sudo ufw allow OpenSSH

Тепер деактивувавши і активуємо UFW для застосування внесених змін:

  • sudo ufw disable
  • sudo ufw enable

Тепер наш сервер налаштований для обробки трафіку OpenVPN.

Крок 9. Включення сервісу OpenVPN

Ми готові включить сервіс OpenVPN на нашому сервері. Ми можемо зробити це за допомогою systemd.

Нам необхідно запустити сервер OpenVPN вказавши ім'я нашого файлу конфігурації в якості змінної після імені файлу systemd. Файл конфігурації для нашого сервера називається / etc / openvpn / server .conf, тому ми додамо @server в кінець імені файлу при його виклику:

  • sudo systemctl start openvpn @ server

Переконаємося, що сервіс успішно запущений командою:

  • sudo systemctl status openvpn @ server

Якщо все вийшло, висновок повинен виглядати приблизно так:


висновок

[email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30 : 05 EDT; 47s ago Docs: man: openvpn (8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart = / usr / sbin / openvpn --daemon ovpn-% i --status /run/openvpn/%i.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid / run / openvpn /% i.pid (code = exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 / usr / sbin / openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd / etc / openvpn --script-security 2 --config /etc/openvpn/server.conf - writepid /run/openvpn/server.pid May 03 15:30:05 openvpn2 ovpn-server [5856]: / sbin / ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 May 03 15:30:05 openvpn2 ovpn- server [5856]: / sbin / ip route add 10.8.0.0/24 via 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server [5856]: GID set to nogroup May 03 15:30:05 openvpn2 ovpn-server [5856]: UID set to nobody May 03 15:30:05 openvpn2 ovpn -server [5856]: UDPv4 link local (bound): [undef] May 03 15:30:05 openvpn2 ovpn-server [5856]: UDPv4 link remote: [undef] May 03 15:30:05 openvpn2 ovpn-server [ 5856]: MULTI: multi_init called, r = 256 v = 256 May 03 15:30:05 openvpn2 ovpn-server [5856]: IFCONFIG POOL: base = 10.8.0.4 size = 62, ipv6 = 0 May 03 15:30: 05 openvpn2 ovpn-server [5856]: IFCONFIG POOL LIST May 03 15:30:05 openvpn2 ovpn-server [5856]: Initialization Sequence Completed

Ви також можете перевірити доступність інтерфейсу OpenVPN tun0 наступною командою:

Ви повинні побачити конфігурацію інтерфейсу:


висновок

4: tun0: <POINTOPOINT, MULTICAST, NOARP, UP, LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link / none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

Якщо все в порядку, настроєм сервіс на автоматичне включення при завантаженні сервера:

  • sudo systemctl enable openvpn @ server

Крок 10. Створення інфраструктури настройки клієнтів

Далі налаштуємо систему для простого створення файлів конфігурації для клієнтів.

Створення структури директорій конфігурації клієнтів

В домашній директорії створіть структуру директорій для зберігання файлів:

  • mkdir -p ~ / client-configs / files

Оскільки наші файли конфігурації будуть містити клієнтські ключі, ми повинні налаштувати права доступу для створених директорій:

  • chmod 700 ~ / client-configs / files

Створення базової конфігурації

Далі скопіюємо конфігурацію-приклад в нашу директорію для використання в якості нашої базовій конфігурації:

  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~ / client-configs / base.conf

Відкрийте цей файл у текстовому редакторі:

  • nano ~ / client-configs / base.conf

Зробимо кілька змін в цьому файлі.

Спочатку знайдіть директиву remote. Ця директива повідомляє клієнту адресу нашого сервера OpenVPN. Це повинен бути публічний IP адреса вашого сервера OpenVPN. Якщо ви змінили порт, який слухає сервер OpenVPN, змініть порт за замовчуванням 1194 на ваше значення:

~ / Client-configs / base.conf

. . . # The hostname / IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194. . .

Переконайтеся, що протокол збігається з настройками сервера:

~ / Client-configs / base.conf

proto udp

Далі розкоментуйте директиви user і group видаляючи ";":

~ / Client-configs / base.conf

# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup

Знайдіть директиви ca, cert і key. Закоментуйте ці директиви, так як ми будемо додавати сертифікати і ключі в самому файлі:

~ / Client-configs / base.conf

# SSL / TLS parms. # See the server config file for more # description. It's best to use # a separate .crt / .key file pair # for each client. A single ca # file can be used for all clients. # Ca ca.crt # cert client.crt # key client.key

Додайте налаштування cipher і auth згідно із заданими у файлі /etc/openvpn/server.conf:

~ / Client-configs / base.conf

cipher AES-128-CBC auth SHA256

Далі додайте директиву key-direction в будь-яке місце в файлі. Вона повинна мати значення "1" для коректної роботи сервера:

~ / Client-configs / base.conf

key-direction 1

Нарешті, додайте кілька закоментувавши рядків. Ми ходимо додати ці рядки в кожен файл конфігурації, але вони будуть включені тільки для клієнтів на Linux, які використовують файл / etc / openvpn / update-resolv-conf. Цей скрипт використовує утиліту resolvconf для оновлення інформації DNS на клієнтах Linux.

~ / Client-configs / base.conf

# Script-security 2 # up / etc / openvpn / update-resolv-conf # down / etc / openvpn / update-resolv-conf

Якщо ваш клієнт працює на Linux і використовує файл / etc / openvpn / update-resolv-conf, ви повинні розкоментувати ці рядки в створеному клієнтському файлі конфігурації OpenVPN.

Збережіть и закрійте файл.

Створення скрипта генерації файлів конфігурації

Тепер створимо простий скрипт для генерації файлів конфігурації з релевантними сертифікатами, ключами і файлами шифрування. Він буде поміщати згенеровані файлу конфігурації в директорію ~ / client-configs / files.

Створіть і відкрийте файл make_config.sh всередині директорії ~ / client-configs:

  • nano ~ / client-configs / make_config.sh

Вставте наступні текст в цей файл:

~ / Client-configs / make_config.sh

#! / Bin / bash # First argument: Client identifier KEY_DIR = ~ / openvpn-ca / keys OUTPUT_DIR = ~ / client-configs / files BASE_CONFIG = ~ / client-configs / base.conf cat $ {BASE_CONFIG} \ <(echo -e '<ca>') \ $ {KEY_DIR} /ca.crt \ <(echo -e '</ ca> \ n <cert>') \ $ {KEY_DIR} / $ {1} .crt \ <( echo -e '</ cert> \ n <key>') \ $ {KEY_DIR} / $ {1} .key \ <(echo -e '</ key> \ n <tls-auth>') \ $ { KEY_DIR} /ta.key \ <(echo -e '</ tls-auth>') \> $ {OUTPUT_DIR} / $ {1} .ovpn

Збережіть и закрійте файл.

Зробіть його виконуваним файлом командою:

  • chmod 700 ~ / client-configs / make_config.sh

Крок 11. Генерація конфігурацій клієнтів

Тепер ми можемо легко згенерувати файли конфігурації клієнтів.

Якщо ви дотримувалися всіх кроків цієї статті, ви створили сертифікат client1.crt і ключ клієнта client1.key командою ./build-key client1 на кроці 6. Ви можете згенерувати конфігурацію для цих файлів перейшовши в директорію ~ / client-configs і використовуючи тільки що створений нами скрипт:

  • cd ~ / client-configs
  • ./make_config.sh client1

Якщо все пройшло успішно, ми повинні отримати файл client1.ovpn в директорії ~ / client-configs / files:

  • ls ~ / client-configs / files

Висновок

client1.ovpn

Доставка конфігурацій клієнтам

Тепер ми повинні перемістити файл конфігурації на клієнтський пристрій. Наприклад, на комп'ютер або смартфон.

Спосіб доставки файлу залежить від операційної системи вашого пристрою і програмного забезпечення, яке ви захочете використовувати для переміщення файлу. Ми рекомендуємо передавати файл по захищеному з'єднанню, наприклад, з використанням SFTP або SCP.

Нижче ми наводимо приклад передачі файлу client1.ovpn з використанням SFTP. Наступну команду можна використовувати на вашому локальному комп'ютері під керуванням Mac OS або Linux. Вона переміщує файл .ovpn в вашу домашню директорію:

  • sftp sammy @ openvpn_server_ip: client-configs / files / client1.ovpn ~ /

Нижче представлено кілька посилань на інструменти та статті про безпечне перенесення файлів з сервера на локальний комп'ютер:

Крок 12. Встановлення файлів конфігурацій клієнтів

Тепер ми поговоримо про те, як встановлювати клієнтські профілі VPN на Windows, Mac OS, iOS і Android. Процес установки унікальний для кожної платформи, тому пропускайте платформи, які ви не плануєте використовувати.

Назва з'єднання OpenVPN залежить від того, як ви називали свій .ovpn файл. У нашому прикладі це буде client1.ovpn.

Windows

установка

Ви можете завантажити клієнт для роботи з OpenVPN для Windows зі сторінки завантажень OpenVPN . Виберіть необхідну вам версію програми.

Увага: установка OpenVPN вимагає адміністраторській облікового запису.

Після установки OpenVPN скопіюйте ваш .ovpn файл в цю директорію:

C: \ Program Files \ OpenVPN \ config

Запустіть OpenVPN, клієнт повинен автоматично побачити ваш профіль.

Клієнт OpenVPN вимагає запуску з правами адміністратора навіть для акаунтів адміністратора. Для запуску зробіть клацання правою кнопкою миші на клієнті і виберіть Run as administrator кожен раз при запуску клієнта. Це також означає, що звичайні користувачі повинні будуть вводити пароль адміністратора для використання OpenVPN.

Для того, щоб додаток OpenVPN завжди запускалося з правами адміністратора, зробіть клацання правою кнопкою миші на іконці клієнта і перейдіть в розділ Properties. У нижній частині вкладки Compatibility натисніть на кнопку Change settings for all users. У вікні, виберіть Run this program as an administrator.

з'єднання

Кожен раз при запуску клієнта OpenVPN Windows буде питати, чи хочете ви дозволити програмі внести зміни в налаштування вашого комп'ютера. Натісніть Так. Запуск клієнта OpenVPN просто поміщає додаток в системний трей, при цьому саме з'єднання не встановлюється автоматично.

Для установки з'єднання зробіть клацання правою кнопкою миші на іконці OpenVPN в системному треї. У контекстному меню виберіть client1 (це наш профіль client1.ovpn) і натисніть Connect.

Відкриється вікно статусу, яке буде відображати лог з'єднання. Коли буде припинено з'єднання ви побачите відповідне повідомлення.

Закрити VPN з'єднання можна точно так же: зробіть клацання правою кнопкою миші на іконці OpenVPN в системному треї, виберіть профіль клієнта і натисніть Disconnect.

Mac OS

установка

Tunnelblick - це безкоштовний OpenVPN клієнт для Mac OS з відкритим вихідним кодом. Ви можете завантажити його з сторінки завантажень Tunnelblick . Зробіть подвійне клацання на завантаженому .dmg файлі і виконуйте вказівки в процесі установки.

В кінці процесу установки Tunnelblick запитає, чи є у вас конфігураційні файли. Найпростіше відповісти No і завершити установку Tunnelblick. Відкрийте Finder і зробіть подвійне клацання на client1.ovpn. Tunnelblick встановить клієнтський профіль. Для цього необхідно мати права адміністратора.

з'єднання

Запустіть Tunnelblick подвійним клацанням з папки Applications. Після запуску в панелі меню в правій верхній частині екрану з'явиться іконка Tunnelblick. Для установки з'єднання натисніть на іконку, а потім Connect. Далі виберіть з'єднання client1.

Linux

установка

Залежно від використовуваної вами версії Linux, ви можете використовувати найрізноманітніші програми для установки з'єднання. Можливо, це вміє робити навіть ваш менеджер вікон.

Найбільш універсальним способом установки з'єднання, тим не менш, є програмне забезпечення OpenVPN.

В Ubuntu або Debian ви можете встановити його точно так само, як і на сервері:

  • sudo apt-get update
  • sudo apt-get install openvpn

У CentOS ви можете активувати EPEL репозиторії і потім ввести наступні команди:

  • sudo yum install epel-release
  • sudo yum install openvpn

налаштування

Спочатку перевірте, чи містить ваш дистрибутив скрипт / etc / openvpn / update-resolv-conf:


Висновок

update-resolve-conf

Далі відредагуйте отриманий з сервера файл конфігурації клієнта OpenVPN:

Якщо вам вдалося знайти файл update-resolv-conf, розкоментуйте наступні рядки файлу:

client1.ovpn

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

Якщо ви використовуєте CentOS, змініть group з nogroup на nobody:

client1.ovpn

group nobody

Збережіть и закрійте файл.

Тепер ви можете з'єднатися з VPN використовуючи команду openvpn наступним чином:

  • sudo openvpn --config client1 .ovpn

В результаті ви підключіться до сервера.

iOS

установка

Знайдіть в iTunes App Store офіційний клієнт OpenVPN Connect і встановіть його. Для перенесення файлу конфігурації клієнта на ваш пристрій, підключіть пристрій до комп'ютера.

Запустіть iTunes на комп'ютері і виберіть iPhone> apps. Знайдіть секцію File Sharing і натисніть на додаток OpenVPN. Перенесіть ваш файл .ovpn в праву частину вікна OpenVPN Documents.

ovpn в праву частину вікна OpenVPN Documents

Далі запустіть додаток OpenVPN на iPhone. Ви отримаєте повідомлення, що новий профіль готовий до імпорту. Натисніть на зелений плюсик для імпорту профілю.

Натисніть на зелений плюсик для імпорту профілю

з'єднання

OpenVPN готовий до використання з новим профілем. Для установки з'єднання потягніть слайдер Connect в позицію On. Для зупинки з'єднання перемістіть цей же слайдер в положення Off.

Увага

Перемикач VPN в додатку Settings можна використовувати для установки з'єднання з VPN. Якщо ви спробуєте це зробити, ви отримаєте повідомлення про те, що це можливо тільки в додатку OpenVPN.

Android

установка

Відкрийте Google Play Store. Знайдіть і встановіть офіційний додаток OpenVPN Android OpenVPN Connect .

Передати профіль з комп'ютера на телефон можна підключивши Android пристрій до комп'ютера через USB і скопіювавши файл. Ви також можете перемістити файл профілю за допомогою SD карти, скопіювавши профіль на карту і вставивши карту в Android пристрій.

Відкрийте програму OpenVPN і натисніть на меню для імпорту профілю.

Далі знайдіть файл в файловій системі (в нашому прикладі це / sdcard / Download /) і виберіть знайдений файл. Додаток повідомить, що профіль був імпортований.

з'єднання

Для установки з'єднання натисніть кнопку Connect. Вам буде поставлено питання, чи довіряєте ви з додатком OpenVPN. Дайте відповідь OK для установки з'єднання. Для зупинки з'єднання зайдіть в додаток OpenVPN і виберіть Disconnect.

Крок 13. Тестування VPN з'єднання

Після того, як все встановлено і налаштовано, переконаємося, що все працює правильно. Без установки з'єднання з VPN відкрийте браузер і зайдіть на DNSLeakTest .

Цей сайт поверне IP адреса, призначений вам вашим Інтернет-провайдером. Для того, щоб перевірити, які DNS сервера використовуються, натисніть на Extended Test.

Тепер встановіть з'єднання, використовуючи ваш VPN клієнт і обновіть сторінку в браузері. Що видається вам IP адреса повинна бути зовсім іншою. Тепер для всіх в Інтернеті ви використовуєте цей новий IP адреса. Натисніть Extended Test ще раз, щоб перевірити ваші настройки DNS і переконайтеся, що тепер ви використовуєте DNS сервера вашого VPN.

Крок 14. Відкликання клієнтських сертифікатів

Час від часу, вам може знадобитися відкликати клієнтський сертифікат для запобігання доступу до сервера VPN &

Для цього треба зайти в вашу директорію центру сертифікації і введіть команди:

  • cd ~ / openvpn-ca
  • source vars

Далі використовуйте команду revoke-full з ім'ям клієнта, сертифікат якого ви хочете відкликати:

Висновок результатів роботи цієї команди буде закінчуватися помилкою 23. Це нормально. В результаті роботи буде створено файл crl.pem в директорії keys з необхідною для відкликання сертифікату інформацією.

Перемістіть цей файл в директорію / etc / openvpn:

  • sudo cp ~ / openvpn-ca / keys / crl.pem / etc / openvpn

Далі відкрийте файл конфігурації сервера OpenVPN:

  • sudo nano /etc/openvpn/server.conf

Додайте в кінець файлу рядок crl-verify. Сервер OpenVPN перевірятиме список відкликаних сертифікатів кожен раз, коли хтось встановлює з'єднання з сервером.

/etc/openvpn/server.conf

crl-verify crl.pem

Збережіть и закрійте файл.

Перезапустіть OpenVPN для завершення процесу відкликання сертифікату:

  • sudo systemctl restart openvpn @ server

Тепер клієнт не зможе встановлювати з'єднання з сервером OpenVPN використовуючи старий сертифікат.

Для відкликання додаткових сертифікатів виконайте наступні кроки:

  1. Згенеруйте новий список відкликаних сертифікатів використовуючи команду source vars в директорії ~ / openvpn-ca і виконуючи команду revoke-full з ім'ям клієнта.

  2. Скопіюйте новий список відкликаних сертифікатів в директорію / etc / openvpn перезаписавши тим самим старий список.

  3. Перезапустіть сервіс OpenVPN.

Ця процедура може бути використана для відкликання будь-яких створених вами раніше сертифікатів.

Висновок

Вітаємо! Тепер ви можете безпечно виходити в Інтернет, весь ваш трафік захищений від прослушки цензорів і зловмисників.

Для конфігурації додаткових клієнтів повторіть кроки 6 і 11-13 для кожного нового пристрою. Для відкликання доступу того чи іншого клієнта використовуйте крок 14.

Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate?
Y / n]: y 1 out of 1 certificate requests certified, commit?
Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate?
Y / n]: y 1 out of 1 certificate requests certified, commit?
Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate?
Y / n]: y 1 out of 1 certificate requests certified, commit?
Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate?
Y / n]: y 1 out of 1 certificate requests certified, commit?
Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate?
Y / n]: y 1 out of 1 certificate requests certified, commit?

Новости