Skip to main content

Інструкція користувача

Налаштування OpenVPN за допомогою двосторонньої TLS-автентифікації

Недоліком методу автентифікації за секретним ключем є те, що його крадіжка з одного з VPN-хостів-учасників призводить до необхідності зміни цього ключа у всіх учасників. Це викликає питання, як безпечно передати новий ключ через незахищений канал Інтернету. Тому, якщо потрібно підключити до сервера кілька клієнтів, слід вибрати TLS-автентифікацію.

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

Тепер розглянемо приклад створення ключів та сертифікатів у Windows для підключення двох клієнтів: Keenetic-2 та Keenetic-3 до сервера Keenetic-1.

Для створення всіх необхідних ключів та сертифікатів нам знадобиться набір скриптів EasyRSA з пакета OpenVPN версії 2.4.6-I602 для Windows, який також використовує утиліту openssl, що входить до його складу.

Щоб інсталювати EasyRSA, позначте компонент EasyRSA 2 Certificate Management Scripts під час інсталяції OpenVPN:

openvpn-server10-en.png

У версіях OpenVPN 2.5.x, щоб інсталювати скрипти EasyRSA, натисніть кнопку Customize на першому екрані інсталятора та прокрутіть до кінця списку компонентів.

openvpn-server11-en.png
openvpn-server12-en.png

Відкрийте командний рядок Windows від імені адміністратора.

  1. Перейдіть до C:\Program Files\OpenVPN\easy-rsa та запустіть:

    init-config.bat
    openvpn-server13-en.png

    У результаті ми отримаємо файл vars.bat, який налаштовує середовище для створення ваших ключів та сертифікатів.

    Відкрийте цей файл у Блокноті Windows і вкажіть папку для їх зберігання; за замовчуванням це keys:

    set KEY_DIR=keys

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

    set KEY_COUNTRY=GB
    set KEY_PROVINCE=YourProvince
    set KEY_CITY=YourCity
    set KEY_ORG=YourOrganisation
    set KEY_EMAIL=mail@example.com
    set KEY_CN=CommonName
    set KEY_NAME=KeyName
    set KEY_OU=OrganisationUnit

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

  2. Створіть нові допоміжні файли index.txt та serial, виконавши (один раз) у командному рядку Windows:

    vars
    clean-all
    openvpn-server14-en.png
  3. Створіть приватний ключ та сертифікат для вашого центру сертифікації, виконавши наступні дії:

    vars
    build-ca
    openvpn-server15-en.png

    Згенеровані файли вашого центру сертифікації ca.key та ca.cert з'являться в папці C:\Program Files\OpenVPN\easy-rsa\keys.

  4. Створіть файл Діффі-Геллмана для захисту вашого трафіку від розшифровки. Його буде використовувати TLS-сервер. У деяких випадках процедура може зайняти деякий час (наприклад, при розмірі ключа 4096 біт це займає десятки хвилин), але це потрібно зробити лише один раз:

    vars
    build-dh
    openvpn-server16-en.png

    Файл dh2048.pem (або dh4096.pem при використанні ключа розміром 4096 біт) з'явиться в папці C:\Program Files\OpenVPN\easyrsa\keys.

  5. Створіть приватний ключ і сертифікат для сервера OpenVPN TLS (Keenetic-1), виконавши:

    vars
    build-key-server Keenetic-1

    Коли скрипт запитає Common Name (CN), введіть ім'я сервера, наприклад, Keenetic-1. В кінці двічі підтвердьте (y), що ви підписуєте сертифікат.

    openvpn-server17-en.png
  6. Створіть приватний ключ, PEM-запит та сертифікат для першого клієнта OpenVPN TLS (Keenetic-2), виконавши:

    vars
    build-key Keenetic-2

    Коли скрипт запитає Common Name (CN), введіть ім'я першого клієнта — Keenetic-2. Двічі підтвердьте (y), що ви підписуєте сертифікат.

    openvpn-server18-en.png
  7. Повторіть попередній крок для другого клієнта (Keenetic-3):

    vars
    build-key Keenetic-3

    Коли скрипт запитає Common Name (CN), введіть ім'я другого клієнта — Keenetic-3. Двічі підтвердьте (y), що ви підписуєте сертифікат.

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

  8. Створіть HMAC-ключ для додаткового захисту від DoS-атак та флуду, виконавши:

    vars
    openvpn.exe --genkey --secret keys\ta.key
    openvpn-server19-en.png

    На цьому етапі всі необхідні файли створено:

    openvpn-server20-en.png

    Для використання в конфігураціях сервера та клієнтів OpenVPN потрібні наступні файли:

    • ca.crt — сертифікат центру сертифікації

    • dh2048.pem (або dh4096.pem) — файл Діффі-Геллмана

    • Keenetic-1.crt — сертифікат сервера OpenVPN (Keenetic-1)

    • Keenetic-1.key — приватний ключ сервера OpenVPN (Keenetic-1)

    • Keenetic-2.crt — сертифікат 1-го клієнта OpenVPN (Keenetic-2)

    • Keenetic-2.key — приватний ключ 1-го клієнта OpenVPN (Keenetic-2)

    • Keenetic-3.crt — сертифікат 2-го клієнта OpenVPN (Keenetic-3)

    • Keenetic-3.key — приватний ключ 2-го клієнта OpenVPN (Keenetic-3)

    • ta.key — HMAC-ключ для додаткового захисту від DoS-атак та флуду

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

  9. Щоб створити файл конфігурації сервера OpenVPN, скористайтеся прикладом server.ovpn, що знаходиться в C:\Program Files\OpenVPN\sample-config\. Вам потрібно буде вставити в нього ключі та сертифікати наступним чином:

    1. Замініть рядок:

      ca ca.crt

      секцією:

      <ca>
      -----BEGIN CERTIFICATE-----
        <--Insert the body of the certificate of the certification centre from the file ca.crt here
      -----END CERTIFICATE-----
      </ca>
    2. Замініть:

      cert server.crt

      секцією:

      <cert>
      -----BEGIN CERTIFICATE-----
        <--Insert the body of the OpenVPN server certificate from the Keenetic-1.crt file here
      -----END CERTIFICATE-----
      </cert>
    3. Замініть рядок:

      key server.key

      секцією:

      <key>
      -----BEGIN PRIVATE KEY-----
        <--Insert the body of the OpenVPN server private key from the Keenetic-1.key file here
      -----END PRIVATE KEY-----
      </key>
    4. Замініть рядок:

      dh dh2048.pem

      секцією:

      <dh>
      -----BEGIN DH PARAMETERS-----
        <--Insert the contents of the file Diffie-Helman dh4096.pem here 
      -----END DH PARAMETERS-----
      </dh>
    5. Розкоментуйте рядок:

      topology subnet
    6. Замініть рядок:

      server 10.8.0.0 255.255.255.0

      рядком:

      server 10.1.0.0 255.255.255.0
    7. Закоментуйте рядок:

      ;ifconfig-pool-persist ipp.txt
    8. Замініть рядок:

      tls-auth ta.key 0

      секцією:

      <tls-auth>
      -----BEGIN OpenVPN Static key V1-----
         <--Insert the contents of the ta.key file here
      -----END OpenVPN Static key V1-----
      </tls-auth>

      і додайте рядок:

      key-direction 0
    9. Закоментуйте рядок:

      ;status openvpn-status.log
  10. Щоб створити файл конфігурації для першого клієнта OpenVPN, скористайтеся прикладом client.ovpn, що знаходиться в C:\Program Files\OpenVPN\sample-config\. Вам потрібно буде вставити в нього ключі та сертифікати наступним чином:

    1. У рядку:

      remote my-server-1 1194

      замініть my-server-1 на доменне ім'я або публічну IP-адресу вашого сервера OpenVPN (Keenetic-1).

    2. Замініть рядок:

      ca ca.crt

      секцією:

      <ca>
      -----BEGIN CERTIFICATE-----
        <--Insert the body of the certificate of the certification authority from the file ca.crt here
      -----END CERTIFICATE-----
      </ca>
    3. Замініть рядок:

      cert client.crt

      секцією:

      <cert>
      -----BEGIN CERTIFICATE-----
        <--Insert the body of the certificate of the first OpenVPN client from the file Keenetic-2.crt
      -----END CERTIFICATE-----
      </cert>
    4. Замініть рядок:

      key client.key

      секцією:

      <key>
      -----BEGIN PRIVATE KEY-----
        <--Insert the body of the private key of the first OpenVPN client from the Keenetic-2.key file here
      -----END PRIVATE KEY-----
      </key>
    5. Замініть рядок:

      tls-auth ta.key 1

      секцією:

      <tls-auth>
      -----BEGIN OpenVPN Static key V1-----
        <--Insert the contents of the ta.key file here
      -----END OpenVPN Static key V1-----
      </tls-auth>

      і додайте рядок:

      key-direction 1
    6. Додайте рядок з маршрутом до локальної мережі сервера:

      route 192.168.1.0 255.255.255.0

      або:

      route 0.0.0.0 0.0.0.0

      якщо весь трафік потрібно направляти в тунель.

  11. Повторіть ті ж дії для другого клієнта, взявши дані з файлів Keenetic-3.crt та Keenetic-3.key відповідно.

    Приклади таких файлів конфігурації для трьох Keenetic клієнтів додаються в кінці статті:

    Ви можете їх використовувати, замінивши у файлах клієнтів KEENETIC-1.mykeenetic.co.uk на доменне ім'я або публічну IP-адресу вашого сервера Keenetic-1, а також сертифікати та ключі на файли, які ви згенерували.

    Тепер все, що вам потрібно зробити, це завантажити їх на маршрутизатори Keenetic так само, як у 1.5, 1.6, і виконати дії, описані в 1.7, 1.8 цього посібника.

    На цьому налаштування завершено. Перевірте, чи встановлені тунелі.

    Для цього запустіть ping тунельної адреси сервера з боку клієнта:

    ping 10.1.0.1

    та адресу сервера в його домашній мережі:

    ping 192.168.1.1

Підказка

У другій частині прикладу для простоти ми виконували всі операції в одній папці, хоча з міркувань безпеки рекомендується розміщувати центр сертифікації на окремому комп’ютері, ізольованому від Інтернету, і зберігати секретний ключ лише на ньому; а сертифікат переносити на знімних носіях. Подібним чином, приватні ключі сервера та клієнтів OpenVPN повинні розміщуватися лише на відповідних сторонах тунелю. Можна обмінюватися лише сертифікатами.

Рекомендуємо ознайомитися з наступною інформацією: