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

Остаточний посібник із налаштування безпечного сервера OpenVPN в Ubuntu 20.04

Віртуальна приватна мережа (VPN) дозволяє вам безпечно та приватно підключатися до віддаленої приватної мережі, наприклад, до вашої офісної мережі, або до Інтернету таким чином, ніби ви безпосередньо підключені до приватної мережі.

VPN працює в архітектурі сервер-клієнт. Сервер VPN розгорнутий на комп’ютері та загальнодоступний через Інтернет. Сервер VPN можна налаштувати, щоб дозволити підключення до приватної локальної мережі, наприклад, офісної мережі, або дозволити підключення до Інтернету. Користувач підключається до сервера VPN за допомогою клієнта VPN на своїй локальній машині. Зв'язок між сервером VPN і клієнтом відбувається за допомогою безпечного протоколу тунелювання. Для Інтернету здається, ніби призначенням трафіку є сервер VPN; однак трафік проходить до клієнта через сервер.

VPN має багато застосувань у повсякденному житті, як-от безпечне підключення до загальнодоступної мережі Wi-Fi, яка часто скомпрометована або обходить географічні обмеження на певних веб-сайтах, підключаючись до VPN, розташованої в країні, яка дозволена веб-сайтом.

OpenVPN — це широко використовувана реалізація VPN, яка дозволяє використовувати широкий спектр конфігурацій та опцій. Він використовує протокол Secure Sockets Layer (SSL) для шифрування даних і попередньо спільних ключів, імені користувача/пароля або сертифікатів для аутентифікації клієнта VPN. У цій статті ми розглянемо, як налаштувати VPN-сервер і VPN-клієнт на Ubuntu 20.04.

Установка

OpenVPN доступний в офіційних сховищах Ubuntu в пакеті openvpn. Цей пакет встановлює як сервер OpenVPN, так і клієнт.

sudo apt встановити openvpn

Як згадувалося раніше, OpenVPN використовує сертифікати SSL для шифрування даних між сервером і клієнтом. Нам потрібно налаштувати власний центр сертифікації (CA) для видачі сертифікатів для VPN. Зауважте, що це має бути налаштовано на іншому комп’ютері, ніж той, де налаштовано OpenVPN; Причина в тому, що якщо він знаходиться на тому ж сервері і якщо його зламано, зловмисник може отримати доступ до приватного ключа і таким чином атакувати VPN-з'єднання.

Ми будемо використовувати інструмент під назвою «Easy-RSA», щоб налаштувати центр сертифікації. Щоб встановити його, виконайте наступне на машині CA, сервері OpenVPN і клієнтській машині, оскільки для налаштування CA потрібна конфігурація на всіх трьох.

sudo apt install easy-rsa

Тепер ми спочатку налаштуємо центр сертифікації на машині CA та виконаємо деякі необхідні кроки налаштування для цього на машині сервера Open VPN.

Налаштування центру сертифікації

Початкове налаштування на машині CA

Тепер цей пакет встановлює команду під назвою make-cadir який використовується для створення папки для конфігурації центру сертифікації. Давайте створимо папку за допомогою цього та увійдіть у папку.

make-cadir cert_authority && cd cert_authority

Відкрийте названий файл вар створений у цьому каталозі. Цей файл містить деякі змінні конфігурації, які нам потрібно змінити. Значення, які потрібно змінити, знаходяться в рядках 91-96 після коментаря про Організаційні поля який описує ці поля. Розкоментуйте рядки та заповніть відповідні значення замість зразкових значень.

Збережіть та вийдіть із файлу. Якщо ви використовуєте редактор vim, натисніть вихід, тип :wq і натисніть Введіть щоб зберегти та вийти.

Далі запускаємо easyrsa програму в каталозі для налаштування інфраструктури відкритих ключів (PKI), яка буде використовуватися для генерації відкритих ключів і сертифікатів.

./easyrsa init-pki

Наступним кроком буде створення ключа CA та сертифіката. Коли команда запросить пароль, введіть пароль для ключа CA. Крім того, введіть загальне ім’я, коли буде запропоновано. Якщо залишити це поле порожнім, використовуватиметься ім’я за замовчуванням Easy-RSA CA name.

./easyrsa build-ca

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

Тепер у нас є налаштування PKI. Наступним кроком є ​​створення ключа сервера та сертифіката на машині, який ми будемо використовувати як сервер OpenVPN. Цей сертифікат пізніше буде підписаний CA-машиною.

Створення ключа сервера та сертифіката на серверній машині

Ми вже встановили Easy RSA на серверній машині. Тепер виконайте три кроки на серверній машині, які ми раніше виконували на машині CA, а саме. створення каталогу ЦС за допомогою make-cadir і переходячи всередину, змінюючи змінні в вар файл і створення PKI за допомогою ./easyrsa init-pki команда.

Далі нам потрібно запустити команду для створення запиту і ключа сертифіката сервера.

./easyrsa gen-req server nopass

Зауважте, що ми пройшли цей варіант nopass щоб команда не пропонувала нам ввести пароль для ключа сервера. Він все одно запитуватиме загальне ім’я для сервера, яке ви можете ввести будь-що, або залишити його порожнім для імені за замовчуванням (сервер) бути використаним.

Перемістіть згенерований ключовий файл усередину /etc/openvpn каталог.

sudo mv pki/private/server.key /etc/openvpn

Надішліть запит на сертифікат на машину ЦС. Ми будемо використовувати команду scp Для цієї мети.

scp pki/reqs/server.req user@CA_MACHINE_HOSTNAME:/directory

На знімку екрана вище хост 45.79.125.41 є машиною CA. Ми скопіювали сертифікат у каталог /root.

Тепер сертифікат сервера скопійовано на машину ЦС. Наступний крок – повернутися до машини ЦС і підписати цей сертифікат.

Підписання сертифіката сервера в ЦС

Спочатку перевіримо, чи скопійовано файл запиту сертифіката із сервера на машину CA. Перейдіть до каталогу, куди ми скопіювали файл (/root в моєму прикладі) і запустіть ls.

:~# cd /root && ls cert_authority server.req

Як бачимо, файл server.req присутній. Далі перейдіть до каталогу CA та імпортуйте цей запит.

cd cert_authority ./easyrsa import-req /root/server.req сервер

Щоб підписати цей запит, виконайте таку команду.

Сервер сервера ./easyrsa sign-req

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

Введіть фразу так, і пароль для ключа CA, коли буде запропоновано.

Тепер ми можемо видалити файл запиту на сертифікат і скопіювати згенерований сертифікат для сервера, а також відкритий сертифікат ЦС назад на машину сервера.

rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root

Далі нам потрібно виконати ще кілька кроків, щоб забезпечити безпечне з’єднання VPN.

Генерація параметрів DH

Обмін ключами DH (Diffie-Hellman) — це алгоритм, що забезпечує безпечний обмін криптоключами через незахищений канал. Спочатку перемістимо отриманий сертифікат і публічний сертифікат ЦС /etc/openvpn.

mv /root/ca.crt /root/server.crt /etc/openvpn

Перейдіть до папки CA на серверній машині та виконайте таку команду, щоб згенерувати параметри DH. Генерація може зайняти багато часу.

./easyrsa gen-dh

Тепер перемістіть згенерований файл до /etc/openvpn.

mv /root/cert_authority/pki/dh.pem /etc/openvpn

Генерація ключів TA

OpenVPN використовує ще один додатковий захід безпеки, використовуючи ключ аутентифікації TLS. Щоб згенерувати ключ аутентифікації TLS, виконайте:

openvpn --genkey --секретний tls_auth.key

І перемістіть ключ до /etc/openvpn.

mv tls_auth.key /etc/openvpn

Конфігурація ключа сервера та налаштування центру сертифікації завершено. Тепер перейдемо до фактичної конфігурації VPN-сервера.

Конфігурація сервера OpenVPN

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

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz

Відкрийте файл за допомогою vim або будь-якого редактора на ваш вибір.

cd /etc/openvpn vim server.conf

Ми повинні ввести загальні назви ключів і сертифікатів, які ми згенерували раніше. Перейти до рядка №. 78. Оскільки ми використовували всі імена за замовчуванням, ми залишаємо їх без змін. Потім перевірте ім’я файлу параметрів DH у рядку 85. Ми використали ім’я dh.pem, тому давайте змінимо його.

Далі давайте змінимо привілеї для сервера OpenVPN. Перейдіть до рядка 274 і 275 і видаліть провідну ; розкоментувати.

Аналогічно перейдіть до рядка 192 і видаліть крапку з комою. Ця директива дозволяє трафіку всіх клієнтів проходити через VPN.

Збережіть та вийдіть із файлу.

Змініть право власності на папку /etc/openvpn на root.

sudo chown -R root:root /etc/openvpn

Налаштування мережі та брандмауера

Нам потрібно дозволити переадресацію IP на сервері, щоб дозволити пересилання пакетів від та до клієнта VPN. Розкоментуйте рядок 28 /etc/sysctl.conf:

Збережіть та вийдіть із файлу.

Перезапустіть systemctl щоб ці зміни відбулися.

sudo sysctl -p

Нам потрібно налаштувати трансляцію мережевих адрес (NAT) на сервері за допомогою брандмауера UFW, щоб дозволити клієнту VPN отримати доступ до Інтернету за допомогою IP-адреси сервера VPN. По-перше, давайте включимо пересилання пакетів у конфігурації брандмауера. відчинено /etc/default/ufw і змініть змінну в рядку 19 на ПРИЙНЯТИ.

Збережіть та вийдіть із файлу.

Тепер додайте до файлу наступні правила /etc/ufw/before.rules перед фільтр рядок у файлі.

*nat :ПРОСТАНОВЛЕННЯ ПРИЙНЯТИ [0:0] -A ПОСТРАУТУВАННЯ -s 10.8.0.0/8 -o -j КОМІТ МАСКОВАННЯ

Введіть свій мережевий інтерфейс замість . Ви можете побачити свій мережевий інтерфейс за допомогою команди ifconfig.

Дозволити трафік для служби OpenVPN на брандмауері та дозволити порт 1194.

sudo ufw дозволити openvpn && sudo ufw дозволити 1194

Перезавантажте службу брандмауера.

sudo ufw перезавантажити

Тепер ми можемо перезапустити демон сервера Open VPN, запустивши:

Перезапуск служби sudo openvpn

Увімкніть його для запуску під час завантаження, виконавши:

sudo systemctl увімкнути openvpn

Тепер сервер OpenVPN налаштовано та запущено. Тепер перейдемо до запиту клієнтського сертифіката та генерації ключа та іншої конфігурації.

Конфігурація клієнта OpenVPN

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

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

Перейдіть до папки CA на сервері та виконайте наступне:

cd ~/cert_authority ./easyrsa gen-req client nopass

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

Тепер скопіюємо згенерований запит на сертифікат клієнта на машину CA.

scp pki/reqs/client.req [email protected]:/root

Давайте імпортуємо цей запит у машину CA:

./easyrsa import-req /root/client.req клієнт

А тепер підпишемо:

Клієнт клієнта ./easyrsa sign-req

Введітьтак коли буде запропоновано продовжити. Коли запитають, введіть пароль для ключа CA.

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

rm /root/client.req scp pki/issued/client.crt [email protected]:/root

Давайте створимо папку під назвою клієнта щоб зберегти всі файли, пов’язані з клієнтом, на сервері VPN. Ми перемістимо ключ клієнта та сертифікат в цю папку.

mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client

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

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

Відкрийте файл client.conf. У рядку 42 введіть ім’я хоста або IP-адресу вашого сервера замість мій сервер-1.

Розкоментуйте рядки 61 і 62, видаливши крапку з комою, щоб зменшити привілеї для файлу.

Далі закоментуйте рядки 88-90 і рядок 108. Причина в тому, що ми хочемо додати вміст згаданих файлів вручну замість використання розташування файлів. Метою цього є те, що файл конфігурації клієнта пізніше буде переданий клієнту, де ми фактично не матимемо файлів ключа клієнта та сертифікатів; тому ми копіюємо їх вміст у сам конфігураційний файл.

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

 # Вставте сюди вміст файлу ca.crt # Вставте сюди вміст файлу client.crt # Вставте сюди вміст файлу client.key, напрямок ключа 1 # Вставте вміст файлу tls_auth.key сюди 

Збережіть та вийдіть із файлу. Перейменуйте цей файл із client.conf до client.ovpn, оскільки останнє є розширенням, необхідним для файлів конфігурації, які можна імпортувати як мережеві конфігурації.

Тепер перенесіть файл client.ovpn клієнту, тобто локальній машині.

Біжи scp на вашій клієнтській машині, щоб передати файл із серверної машини на вашу локальну машину.

scp user@server_ip:/шлях_до_файлу, локальний_шлях_призначення

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

Щоб запустити клієнт VPN з командного рядка, виконайте:

sudo openvpn --config client.ovpn

І це єдина команда, яку потрібно виконати, щоб запустити клієнт VPN.

Щоб запустити клієнт VPN через графічний інтерфейс, виконайте наступні дії.

Перейдіть до Налаштування » Мережа на вашому клієнтському комп’ютері.

Натисніть на + у розділі VPN та виберіть «Імпортувати з файлу…» з параметрів.

Натисніть «Додати», щоб почати використовувати VPN.

Зверніть увагу, що в розділі «Шлюз» це IP-адреса сервера.

Нарешті, перемикайте кнопку «клієнтська VPN», щоб увімкнути VPN на комп’ютері.

Для встановлення VPN-з’єднання може знадобитися кілька секунд. Під час налаштування у верхньому лівому куті екрана з’явиться новий логотип перебігу VPN, а після налаштування він зміниться на логотип VPN.

Щоб перевірити, чи VPN працює правильно, виконайте наступне:

curl //ipinfo.io/ip

Він повинен повернути IP-адресу вашої серверної машини. Або ви також можете перевірити свою IP-адресу, просто ввівши пошук «Мій IP» у Google. Він повинен показувати IP-адресу вашого VPN-сервера, якщо наше налаштування VPN працює належним чином.

Висновок

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

У разі повільних інтернет-з’єднань, можливо, що, якщо для зв’язку використовується UDP, відбувається значна втрата пакетів. Користувач може переключитися на TCP, розкоментувавши рядок прото tcp і коментуючи рядок прото udp у файлі конфігурації сервера.

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

Категорія: Linux