Файлы сертификатов и ключей openvpn. Настройка клиентской части. Установка OpenVPN на машину-сервер

OpenVPN – один из вариантов VPN (virtual private network или частных виртуальных сетей), позволяющих реализовать передачу данных по специально созданному зашифрованному каналу. Таким образом можно соединить два компьютера или построить централизованную сеть с сервером и несколькими клиентами. В этой статье мы научимся создавать такой сервер и настраивать его.

Как уже было сказано выше, с помощью технологии, о которой идет речь, мы можем передавать информацию по безопасному каналу связи. Это может быть обмен файлами или защищенный доступ в интернет через сервер, являющийся общим шлюзом. Для его создания нам не потребуется дополнительное оборудование и особые знания – все делается на том компьютере, который планируется использовать в качестве сервера VPN.

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

Установка OpenVPN на машину-сервер

Инсталляция представляет собой стандартную процедуру с некоторыми нюансами, о которых и поговорим подробнее.


Настройка серверной части

При выполнении следующих действий следует быть максимально внимательным. Любые огрехи приведут к неработоспособности сервера. Еще одно обязательное условие – ваша учетная запись должна иметь права администратора.

  1. Идем в каталог «easy-rsa» , который в нашем случае находится по адресу

    C:\OpenVPN\easy-rsa

    Находим файл vars.bat.sample .

    Переименовываем его в vars.bat (удаляем слово «sample» вместе с точкой).

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

  2. В первую очередь удаляем все комментарии, выделенные зеленым цветом – они нам будут только мешать. Получим следующее:

  3. Далее меняем путь к папке «easy-rsa» на тот, который мы указывали при установке. В данном случае просто удаляем переменную %ProgramFiles% и меняем ее на C: .

  4. Следующие четыре параметра оставляем без изменений.

  5. Остальные строки заполняем произвольно. Пример на скриншоте.

  6. Сохраняем файл.

  7. Требуется также отредактировать следующие файлы:
    • build-ca.bat
    • build-dh.bat
    • build-key.bat
    • build-key-pass.bat
    • build-key-pkcs12.bat
    • build-key-server.bat

    В них нужно поменять команду

    на абсолютный путь к соответствующему ей файлу openssl.exe . Не забываем сохранять изменения.

  8. Теперь открываем папку «easy-rsa» , зажимаем SHIFT и кликаем ПКМ по свободному месту (не по файлам). В контекстном меню выбираем пункт «Открыть окно команд» .

    Запустится «Командная строка» с уже осуществленным переходом в целевой каталог.

  9. Вводим команду, указанную ниже, и нажимаем ENTER .

  10. Далее запускаем еще один «батник».

  11. Повторяем первую команду.

  12. Следующий шаг – создание необходимых файлов. Для этого используем команду

    После выполнения система предложит подтвердить данные, которые мы вносили в файл vars.bat. Просто несколько раз нажимаем ENTER , пока не появится исходная строка.

  13. Создаем DH-ключ с помощью запуска файла

  14. Готовим сертификат для серверной части. Здесь есть один важный момент. Ему нужно присвоить то имя, которое мы прописали в vars.bat в строке «KEY_NAME» . В нашем примере это Lumpics . Команда выглядит следующим образом:

    build-key-server.bat Lumpics

    Здесь также необходимо подтвердить данные с помощью клавиши ENTER , а также два раза ввести букву «y» (yes), где потребуется (см. скриншот). Командную строку можно закрыть.

  15. В нашем каталоге «easy-rsa» появилась новая папка с названием «keys» .

  16. Ее содержимое требуется скопировать и вставить в папку «ssl» , которую необходимо создать в корневом каталоге программы.

    Вид папки после вставки скопированных файлов:

  17. Теперь идем в каталог

    C:\OpenVPN\config

    Создаем здесь текстовый документ (ПКМ – Создать – Текстовый документ), переименовываем его в server.ovpn и открываем в Notepad++. Вносим следующий код:

    port 443
    proto udp
    dev tun
    dev-node "VPN Lumpics"
    dh C:\\OpenVPN\\ssl\\dh2048.pem
    ca C:\\OpenVPN\\ssl\\ca.crt
    cert C:\\OpenVPN\\ssl\\Lumpics.crt
    key C:\\OpenVPN\\ssl\\Lumpics.key
    server 172.16.10.0 255.255.255.0
    max-clients 32
    keepalive 10 120
    client-to-client
    comp-lzo
    persist-key
    persist-tun
    cipher DES-CBC
    status C:\\OpenVPN\\log\\status.log
    log C:\\OpenVPN\\log\\openvpn.log
    verb 4
    mute 20

    Обратите внимание, что названия сертификатов и ключей должны совпадать с расположенными в папке «ssl» .

  18. Далее открываем «Панель управления» и переходим в «Центр управления сетями» .

  19. Нажимаем на ссылку «Изменение параметров адаптера» .

  20. Здесь нам нужно найти подключение, осуществляемое через «TAP-Windows Adapter V9» . Сделать это можно, нажав по соединению ПКМ и перейдя к его свойствам.

  21. Переименовываем его в «VPN Lumpics» без кавычек. Это название должно совпадать с параметром «dev-node» в файле server.ovpn .

  22. Заключительный этап – запуск службы. Нажимаем сочетание клавиш Win+R , вводим строку, указанную ниже, и жмем ENTER .

  23. Находим сервис с названием «OpenVpnService» , кликаем ПКМ и идем в его свойства.

  24. Тип запуска меняем на «Автоматически» , запускаем службу и нажимаем «Применить» .

  25. Если мы все сделали правильно, то возле адаптера должен пропасть красный крестик. Это значит, что подключение готово к работе.

Настройка клиентской части

Перед началом настройки клиента необходимо совершить несколько действий на серверной машине – сгенерировать ключи и сертификат для настройки подключения.


Работы, которые необходимо выполнить на клиентской машине:


На этом настройка сервера и клиента OpenVPN завершена.

Заключение

Организация собственной VPN-сети позволит вам максимально защитить передаваемую информацию, а также сделать интернет-серфинг более безопасным. Главное – быть внимательнее при настройке серверной и клиентской части, при правильных действиях можно будет пользоваться всеми преимуществами частной виртуальной сети.

В роутерах серии RTU есть возможность использования защищенного соединения через частную виртуальную сеть, под названием OpenVPN

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

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

Что такое OpenVPN и для чего он необходим можно ознакомиться через статью на Wikipedia: OpenVPN

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

1. Генерация сертификатов и ключей на Windows

Для генерации сертификатов и ключей шифрования на ОС Windows необходимо установить само приложение OpenVPN

После скачивания и установки в указанную Вами папку в ней будет список файлов. у меня это папка C:\Program Files\OpenVPN\

Нам необходимо перейти в папку easy-rsa

Нужно открыть консоль Windows (для Windows Vista/7/8/8.1/10 нужно запускать от Администратора)

Узнать, как запускать командную строку(консоль) от имени администратора можно набрав в поисковике (Яндекс, Google, Mail и др.) фразу: "Как запустить командную строку от имени администратора "

Переходим в папку easy-rsa по пути установки командой cd

Например:

cd C:\Program Files\OpenVPN\easy-rsa

1.1 Запускаем файл init-config.bat

C:\Program Files\OpenVPN\easy-rsa>init-config.bat
C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
Скопировано файлов: 1.

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

Мы подставили свои параметры, у Вас данные параметры будут другие.

set KEY_COUNTRY= RU
set KEY_PROVINCE= Moscow
set KEY_CITY= Moscow
set KEY_ORG= TELEOFIS
set KEY_EMAIL= [email protected]
set KEY_CN= server
set KEY_NAME= server
set KEY_OU= server
set PKCS11_MODULE_PATH= server
set PKCS11_PIN= 12345

Там где написано server, не трогаем. Сохраняем файл.

Находим строчку default_days 365 и заменяем число 365 на 3650 . Тем самым мы увеличим время жизни наших сертификатов на 10 лет.

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

1.3 Генерируем ключи

Пишем в консоль команды

vars

clean-all

В ответ должно прийти

Скопировано файлов: 1.
Скопировано файлов: 1.

Если, мы это видим, значит все хорошо, продолжаем...

Создаем ключ Диффи-Хеллмана

build-dh

Создаем основной сертификат

build-ca

При генерации основного сертификата в консоли будут отображаться вопросы. Просто нажимаем Enter , т.к. все эти параметры мы ввели в файле vars.bat

Нажимаем Enter до тех пор, пока не отобразиться строка приглашения

C:\Program Files\OpenVPN\easy-rsa

build-key-server server

На вопросы так же нажимаем Enter , но не торопимся, в самом конце будет задано два вопроса

Sign the certificate?

На оба эти вопроса отвечаем Y

Теперь создаем сертификат и ключ клиента:

build-key client

Также не торопимся с ответами, как только увидим строку "Common Name (eg, your name or your server"s hostname) " нужно ответить client

В самом конце также будут два вопроса, отвечаем также Y

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

Например:

build-key client1

build-key office1

Все файлы будут лежать в папке C:\Program Files\OpenVPN\easy-rsa\keys\

Из этой папки забираем:

dh1024.pem (или dh2048.pem )

server.crt

server.key

2. Генерация сертификатов и ключей на Linux

Пример генерации сертификатов и ключей мы будем производить на операционной системе Ubuntu Linux 16.04 LTS

Для других систем на базе Linux, некоторые команды могут отличаться!

Открываем консоль операционной системы и устанавливаем небольшой пакет easy-rsa

sudo apt-get install easy-rsa

Переходим в каталог, куда установился пакет генерации сертификатов

cd /usr/share/easy-rsa/

Единственный момент, данная папка доступна для записи только суперпользователю, чтобы у нас не возникло проблем в дальнейшем, поменяем владельца (Не проглядите точку в конце команды!!!)

sudo chown -R teleofis:teleofis .

Теперь настроим информацию о создаваемых сертификатах

nano vars

Находим данные пункты и меняем их под себя

export KEY_SIZE=1024 // Длина ключа
export CA_EXPIRE=3650 // Время действия главного ключа в днях
export KEY_EXPIRE=3650 // Время действия сертификата в днях
export KEY_COUNTRY="RU" // Страна
export KEY_PROVINCE="Moscow" // Регион
export KEY_CITY="Moscow" // Город
export KEY_ORG="TELEOFIS" // Организация
export KEY_EMAIL="[email protected]" // Электронный ящик
export KEY_OU="server" // Подразделение
export KEY_NAME="server" // Имя ключа

После редактирования сохраняем файл.

Копируем последнюю версию конфигурации OpenSSL в файл openssl.cnf

cp openssl-1.0.0.cnf openssl.cnf

Загружаем переменные

source ./vars

На всякий случай почистим от мусора

./clean-all

Создаем сертификат сервера

./build-ca

На все вопросы нажимаем Enter , все эти параметры мы отредактировали заранее в файле vars


.........................................++++++
.......................................................................................++++++
writing new private key to "ca.key"
-----






-----





Common Name (eg, your name or your server"s hostname) :
Name :
Email Address :

Создаем ключ сервера

./build-key-server server

На все вопросы отвечаем Enter , но нужно быть внимательными, ближе к концу будет несколько вопросов о пароле и опциональное имя

Также на запросы

Sign the certificate?

1 out of 1 certificate requests certified, commit?

Отвечаем Y

Generating a 1024 bit RSA private key
..............................++++++
.....................++++++
writing new private key to "server.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) :
State or Province Name (full name) :
Locality Name (eg, city) :
Organization Name (eg, company) :
Organizational Unit Name (eg, section) :
Common Name (eg, your name or your server"s hostname) :
Name :
Email Address :

Please enter the following "extra" attributes
to be sent with your certificate request
A challenge password :
An optional company name :
Using configuration from /usr/share/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject"s Distinguished Name is as follows
countryName:PRINTABLE:"RU"
stateOrProvinceName:PRINTABLE:"Moscow"
localityName:PRINTABLE:"Moscow"
organizationName:PRINTABLE:"TELEOFIS"
organizationalUnitName:PRINTABLE:"server"
commonName:PRINTABLE:"server"
name:PRINTABLE:"server"
emailAddress:IA5STRING:"[email protected]"
Certificate is to be certified until Dec 20 13:25:10 2026 GMT (3650 days)
Sign the certificate? :y

1 out of 1 certificate requests certified, commit? y
Write out database with 1 new entries
Data Base Updated

Создаем ключ Диффи-Хеллмана

./build-dh

Внимание!!! Файл может генерироваться длительное время, дожидаемся окончания генерации.

Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.......+................+.............+.............................................................................+................+........................+...........................................+...............................................................................................................................................+....................+........................................+...................................................................................+....................................................................................................................+.+...................................++*++*++*

Аналогичным образом создаем ключи клиентов

./build-key client1

./build-key rtu968

Отвечаем на все вопросы Enter , но в конце внимательней, опять будут запросы

Sign the certificate?

1 out of 1 certificate requests certified, commit?

Отвечаем на них Y

На этом создание файлов сертификатов и ключей завершено.

В папке /usr/share/easy-rsa/keys/ будут лежать наши сертификаты и ключи

dh1024.pem (или dh2048.pem )

server.crt

server.key

3. Дополнительные варианты

Также существуют дополнительные ключи и методы для повышения безопасности соединения.

3.1 Ключ для TLS аутентификации

Генерируется командой:

openvpn --genkey --secret %KEY_DIR%\ta.key - Windows

Для Linux необходимо наличие полного пакета OpenVPN, только пакета easy-rsa будет недостаточно!

Установить полный пакет OpenVPN можно командой

sudo apt-get install openvpn

openvpn --genkey --secret /usr/share/easy-rsa/keys/ta.key - Linux

3.2 Проверка и отзыв сертификатов

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

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

Для его использования создаем пользовательский сертификат:

build-key crlsert - Windows

./build-key crlsert - Linux

На все вопросы отвечаем нажатием Enter , кроме Common Name и Name

Для этих полей указываем имя самого сертификата.

И в конце на запросы Sign the certificate? , 1 out of 1 certificate requests certified, commit? отвечаем Y

После этого выполняем команду revoke-full , она отвечает за отзыв сертификата и последующее создание файла crl.pem

revoke-full crlsert - Windows

./revoke-full crlsert - Linux

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

На этом создание ключей завершается.

Переходим к следующей статье:

Дополнительная информация.

Виртуальная частная сеть. С ее помощью мы можем:

  • Создать защищенный канал свзяи, в то время, когда мы сидим с бесплатного Wi-Fi в кафе.
  • Обмениваться файлами между участниками сети.
  • Раздавать интернет испульзуя общий шлюз.

Основные преимущества:

  • Простота настройки.
  • Безопасность.
  • Не требует дополнительного оборудования.
  • Высокая скорость и стабильность.

Как и автор статьи об установке OpenVPN на Linux, я не нашел нормальной статьи, да еще и такой, чтоб описывалось все до мелочей. В этой статье на Хабрахабре я постараюсь максимально доступно все объяснить. Итак, поехали!

Скачиваем дистрибутив.

На момент написания статьи доступная версия 2.3.2 . Качаем Windows installer 32-х или 64-х битную версию под разрядность вашей операционной системы.

Установка.

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

Создание сертификатов и ключей.

Когда-то этот пункт меня останавливал, мол ну их эти ключи, пойду поищу что попроще. Но, увы, ничего лучшего не нашел. Итак, переходим в C:\Program files\OpenVPN\easy-rsa, запускаем init-config.bat, появится vars.bat, открываем его в блокноте. Нас интересуют строчки в самом низу, их нужно заполнить как угодно. Например:
set KEY_COUNTRY=RU
set KEY_PROVINCE=Baldur
set KEY_CITY=Piter
set KEY_ORG=OpenVPN
set
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=ouou

Там где написано server не трогаем. Сохранили.
Теперь открываем openssl-1.0.0.cnf и ищем строчку default_days 365, ставим 3650. Это продлит жизнь наших сертификатов на 10 лет. Сохраняем. Далее открываем командную строку в пуск-стандартные-командная строка (на Windows Vista/7/8 от имени администратора), пишем последовательно:

cd C:\OpenVPN\easy-rsa
vars
clean-all

В ответ должно написать два раза «Скопировано файлов: 1». Значит, все окей. В этом же окне набираем:
build-dh
Создаст ключ Диффи-Хельмана.
build-ca
Создаст основной сертификат.
Будут заданы вопросы, просто нажимаем Enter пока не увидите путь C:\Program files\OpenVPN\easy-rsa. Далее набираем:
build-key-server server
На вопросы также жмем Enter, только не торопитесь! В конце будут два вопроса: «Sign the certificate?» и «1 out of 1 certificate requests certified, commit?», на оба вопроса отвечаем Y. Теперь создадим сертификат клиента:
build-key client
Тут нужно быть вниметельней, при вопросе Common Name (eg, your name or your server’s hostname) нужно ввести client. В конце также два раза Y. Для каждого клиента нужно создавать новый сертификат, только с другим именем, например, build-key client1 и также указывать его в common name. Если все сделали правильно, можете выдохнуть! Самое сложное позади. В папке C:\Program Files\OpenVPN\easy-rsa\keys забираем: ca.crt, dh1024.pem, server.crt, server.key и кладем их в C:\Program Files\OpenVPN\config.

Создаем конфиги.

Переходим в C:\Program Files\OpenVPN\config, создаем текстовой документ, вставляем:
# Поднимаем L3-туннель
dev tun
# Протокол
proto udp
# Порт который слушает впн
port 12345
# Ключи и сертификаты
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
# Грубо говоря экономим адреса
topology subnet
# Пул адресов
server 10.8.0.0 255.255.255.0
# Метод шифрования
cipher AES-128-CBC
# Сжатие
comp-lzo
# Немного улучшит пинг
mssfix
# Время жизни клиентов, если не откликнулся - отключает
keepalive 10 120
# Уровень отладки
verb 3

Сохраняем файл как server.ovpn. Это наш конфиг сервера. Теперь пробуем запустить сервер. На рабочем столе будет ярлык OpenVPN Gui. После запуска в трее появится красный значок. Кликаем по нему дважды, если загорелся зеленым, значит, все хорошо, если нет, тогда смотрим лог в папке log.

Теперь конфиг клиента:
client
dev tun
proto udp
# Адрес и порт сервера
remote адрес 12345
# Ключи должны лежать в папке с конфигом
ca ca.crt
cert client.crt
key client.key
cipher AES-128-CBC
nobind
comp-lzo
persist-key
persist-tun
verb 3

Сохраняем как client.ovpn. Создаем любую папку и кладем туда конфиг client.ovpn и сертификаты ca.crt, client.crt, client.key которые лежат в C:\Program files\OpenVPN\easy-rsa. Сам клиент для Windows качаем На клиентской машине устанавливаем, переносим папку с конфигом и сертификатом и запускаем client.ovpn. Если подключились, пробуем в командной строке набрать ping 10.8.0.1. Пакеты пошли? Поздравляю! Сервер готов! Теперь идем в панель управления-администрирование-службы, ищем там OpenVPN, дважды щелкаем и выставляем автоматически. Теперь сервер будет сам стартовать после перезагрузки.

Дорабатываем конфиг или каждому свое.

Теперь я расскажу как раздавать интернет и другие мелочи связанные с настройкой. Начнем с мелочей. Все манипуляции будем проводить с конфигом сервера.
Если хотите, чтобы клиенты «видели» друг друга т.е. могли обмениваться информацией, тогда в конфиг впишите
client-to-client .
Если нужно, чтобы клиентам выдавались статические адреса, тогда в папке config создайте файл ip.txt и впишите в конфиг
ifconfig-pool-persist ip.txt
Неохота создавать каждому сертификаты? Тогда пишем duplicate-cn , но учтите, с этой опцией не работает ifconfig-pool-persist.
Теперь о конфиге клиента. Можно не передавать файлы сертификатов, а вписать сразу в конфиг, только делать это лучше не с блокнота, а с AkelPad’а или Notepad++ например. Открываем ca.crt и выделяем от ——BEGIN CERTIFICATE—— до ——END CERTIFICATE——. В конфиге будет выглядеть так:


——BEGIN CERTIFICATE——
сертификат
——END CERTIFICATE——


——BEGIN CERTIFICATE——
сертификат
——END CERTIFICATE——


——BEGIN PRIVATE KEY——
ключ
——END PRIVATE KEY——

Раздаем интернет

Для этого в конфиг сервера вписываем:
push «redirect-gateway def1»
push «dhcp-option DNS 8.8.8.8»
push «dhcp-option DNS 8.8.4.4»

DNS-адреса подставляем те, что даны в настройках. Посмотреть можно зайдя в панель управления-сетевые подключения, дважды кликнув на адаптере который смотрит в интернет. Для Win7 Панель управления-Сеть и Интернет-Центр управления сетями и общим доступом-изменение параметров адаптера. Далее, заходим в свойства этого же адаптера, вкладка доступ, ставим птичку напротив «Разрешить другим пользователям сети…» и в выпадающем списке, если есть, выбираем виртуальный адаптер vpn. Затем заходим в свойства адаптера vpn, свойства ipv4 и выставляем получение ip и dns автоматически. Спасибо за внимание!

OpenVPN - это приложение для создания безопасного IP-туннеля через единый UDP - или Порты TCP -порт 1194. Для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL (точнее протоколы SSLv3/TLSv1) т.е. доступны все возможности шифрования, аутентификации и сертификации библиотеки OpenSSL (любой шифр, размер ключа). Также может использоваться пакетная авторизация Алгоритм HMAC для OpenVPN , для обеспечения большей безопасности, и аппаратное ускорение для улучшения производительности шифрования.

OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X и Microsoft Windows.

    OpenVPN предлагает пользователю несколько видов аутентификации:

    Предустановленный ключ, - самый простой метод.

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

OpenVPN может использовать статические, предустановленные ключи или обмен динамическими ключами на основе TLS . Он также поддерживает соединения VPN с динамическими удалёнными узлами (DHCP или клиенты dial-up), туннели поверх NAT или через полноценный межсетевой экран (например, Правила iptables в Linux).

Настройки конфигурационного файла клиента идентичны по синтаксису и написанию как для Linux, так и для Windows.

Компоненты сети OpenVPN

Основные компоненты сети OpenVPN и объекты

    Удостоверяющий центр CA . Выдает сертификаты по запросу узлов сети VPN, подписанные сертификатом удостоверяющего центра. Предоставляет узлам сети VPN свой собственный сертификат для проверки удостоверяющей стороны. Управляет списком отзыва сертификатов CRL.

    Сервер OpenVPN . ПО сервера OpenVPN создает туннель внутри незащищенной сети, например, Интернета. Этот туннель обеспечивает безопасный зашифрованный трафик между узлами - участниками обмена данными в сети OpenVPN.

    Клиент OpenVPN . ПО клиента OpenVPN устанавливается на все узлы, которым необходим защищенный канал передачи данный с сервером OpenVPN. При соответствующей настройка сервера OpenVPN возможна защищенная передача данных между клиентами OpenVPN, а не только между клиентами и сервером OpenVPN.

    Сертификаты (публичные ключи) X.509 . Сертификаты X.509 представляют собой публичные ключи, заверенные удостоверяющим центром CA. Они используются для зашифровывания данных. Факт заверения сертификата удостоверяющим центром CA позволяет идентифицировать сторону, передающую зашифрованные данные. Файл запроса на сертификат создается на узлах сети, затем он переносится на узел удостоверяющего центра и там подписывается. Созданный в результате подписанный сертификат переносится обратно на запросивший его узел сети OpenVPN.

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

    Список отзыва сертификатов CRL . Содержит список сертификатов, утративших доверие. Он создается и редактируется на узле удостоверяющего центра CA. Чтобы отключить узел от сети, достаточно занести его сертификат в список CRL. После создания и каждого изменения список CRL переносится на серверы OpenVPN.

    Файл Диффи-Хелмана . Используется, чтобы в случае похищения ключей исключить расшифрование трафика, записанного еще до этого похищения. Создается на сервере OpenVPN.

Безопасность и шифрование

Безопасность и шифрование в OpenVPN обеспечивается библиотекой Как пользоваться OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (SSL сертификаты для для сайта, почты).

В OpenSSL может использоваться симметричная и ассиметричная криптография.

В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.

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

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

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

Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой "атаки посредника" (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.

Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.

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

Хотя размер ключа влияет на сложность расшифрования, никакой ключ не дает гарантии полной безопасности данных. Кроме того, существует возможность похищения уже расшифрованных данных и ключей за счет уязвимостей и закладок в операционной системе или прикладном ПО, а также в аппаратном обеспечении серверов и рабочих станций.

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

OpenVPN Debian Wheezy/sid

# aptitude install openvpn # mkdir /etc/openvpn/easy-rsa # cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

Изменяем параметры по умолчанию для сертификатов

# nano /etc/openvpn/easy-rsa/vars ... export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="[email protected]"

Создадим переменные окружения bash , если это не сделать, при генерации ключей клиентов переменные будут взяты из /etc/openvpn/easy-rsa/openssl.cnf а не из файла vars

# cd /etc/openvpn/easy-rsa # source ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys # ./clean-all # ./build-dh

Создадим сертификат для сервера с именем vpnspar

# ./pkitool --initca # ./pkitool --server vpnspar

Создадим сертификат для клиента с именем farm1c. Отдельный ключ для каждого клиента.

# ./pkitool farm1c # mkdir /etc/openvpn/keys # cp keys/ca.crt /etc/openvpn/keys # cp keys/dh1024.pem /etc/openvpn/keys # cp keys/vpnspar.crt /etc/openvpn/keys # cp keys/vpnspar.key /etc/openvpn/keys

В директории ccd хранятся индивидуальные настройки для каждого клиента. Имя файла должно соответствовать имени сгенерированного клиентского сертификата. Файлы конфигурации клиентов являются текстовыми файлами и содержат команды, выполняемые сервером при подключении клиентов. Обычно файл клиента содержать команды:

    добавляет клиенту маршрут к локальной подсети центрального офиса(push "route 192.168.1.0 255.255.255.0")

    определяет адрес локальной подсети, находящейся за клиентом (например iroute 192.168.2.0 255.255.255.0)

    привязка к статическому IP (ifconfig-push 192.168.14.21 192.168.14.22), где ifconfig-push . Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN).

# mkdir /etc/openvpn/ccd # nano ccd/farm1c push "route 192.168.1.0 255.255.255.0" #push "route 192.168.35.0 255.255.255.0" # static IP ifconfig-push 192.168.14.21 192.168.14.22 #iroute 192.168.2.0 255.255.255.0

server.conf

Конфигурируем сервер в файле server.conf

# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ # gunzip server.conf.gz # nano /etc/openvpn/server.conf server.conf local ххх.196.98.ххх # IP на котором сервер слушает входящие сообщения port 1194 # порт на котором сервер слушает входящие сообщения proto udp dev tun # Включение интерфейса управления OpenVPN. Доступен при помощи telnet localhost 7505 management localhost 7505 ca keys/ ca.crt # местонахождение самоподписного доверенного сертификата (CA) cert keys/ vpnspar.crt # местонахождение сертификата сервера key keys/ vpnspar.key # местонахождение закрытого ключа сервера dh keys/ dh1024.pem # местонахождение файла параметров Диффи-Хэлмана # Настройка режима сервера и адреса VPN-сети, # из которой OpenVPN будет раздавать адреса клиентам. # Сервер возьмет себе 192.168.14.1, # остальные адреса будут доступны для клиентов. # Каждый клиент сможет связаться с сервером по адресу 192.168.14.1. server 192.168.14.0 255.255.255.0 # в файле ipp.txt хранится информация о соединении, например на случай обрыва соединения # и его дальнейшего восстановления ifconfig-pool-persist ipp.txt # маршруты которые будут передаваться каждому клиенту. # push - команда OpenVPN, передаваемая клиенту и выполняемая клиентом # (в данном случае добавляем на стороне клиента два маршрута к виртуальной частной сети) push "route 192.168.1.0 255.255.255.0" push "route 192.168.35.0 255.255.255.0" # Перенаправлять default gateway на vpn-сервер. Если не нужно - закомментировать или # добавить в ccd для конкретного клиента push "redirect-gateway def1" # указываем где будут хранятся файлы с настройками IP-адресов клиентов client-config-dir ccd # добавляем маршрут сервер-клиент. # route - добавляет на стороне сервера маршруты к локальным подсетям, находящимся за клиентами route 192.168.14.0 255.255.255.252 # разрешить общение клиентов подключенных к серверу OpenVPN общение между собой client-to-client # Директива проверки работоспособности, включающая отсылку # ping-подобных сообщений туда и обратно через # соединение для того, чтобы каждая сторона знала когда # другая сторона внезапно пропадет (gone down). # Пинг каждые 10 секунд, с предположением, что удаленный # узел недоступен, если не получено на одного пинга за период времени # равный 120 секундам. keepalive 10 120 comp-lzo max-clients 10 user nobody group nogroup persist-key persist-tun # Содержимое небольшого файла состояния, показывающего # текущие соединения, усекается # и перезаписывается раз в минуту. status / var/ log/ openvpn-status.log log / var/ log/ openvpn.log verb 3 # уровень отладки # /etc/init.d/openvpn start

Аннулировать сертификат клиента

    Пример . Аннулируем сертификат пользователя farm1c # cd /etc/openvpn/easy-rsa # source ./vars # ./revoke-full farm1c Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Revoking Certificate 02. Data Base Updated

    После команды revoke-full изменится в файл /etc/openvpn/easy-rsa/keys/index.txt строка соответствующая сертификату пользователя farm1c.

Инсталляция OpenVPN + OpenVZ

Инсталляция VE(VPS, VDS)

    Инсталлируем VE Ubuntu для OpenVZ # cd /vz/template/cache/ # wget -c http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz # vzctl create 111 --layout simfs --ostemplate ubuntu-14.04-x86_64-minimal CT configuration saved to /etc/vz/conf/111.conf

    Настраиваем VE 111.conf.

    Все остальные настройки производим уже в установленной VE # vzctl enter 111

Создание ключей

    Создание ключей при помощи утилиты Easy-RSA. Ранее эта утилита входила в дистрибутив сервера OpenVPN, сейчас она отдельный проект. Последнюю версию утилиты можно скачать с сайта OpenVPN, но правильнее использовать версию поставляемую с вашим дистрибутивом ОС. aptitude install easy-rsa

    Перед тем как запустить демон OpenVPN, нам нужны в каталоге /etc/openvpn/keys openssl.cnf - файл конфигурации OpenSSL; server.conf - файл конфигурации сервера OpenVPN; ca.crt - cертификат удостоверяющего центра; vpn-server.crt - cертификат сервера OpenVPN; server.key - приватный ключ сервера OpenVPN, секретный; crl.pem - cписок отзыва сертификатов; dh.pem - файл Диффи-Хелмана для обеспечения защиты трафика от расшифровки; ta.key - ключ HMAC для дополнительной защиты от DoS-атак и флуда

    Копируем директорию easy-rsa в то место где будем создавать инфраструктуру публичных ключей (Public Key Infrastructure, PKI) cp -R /usr/share/easy-rsa /etc/openvpn/ cd /etc/openvpn/easy-rsa

    Изменяем параметры по умолчанию для сертификатов в файле 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"

    Создадим переменные окружения.

    Source ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

    Очистим от предыдущих экспериментов. Создадим ключ Диффи-Хелмана (ключ создается некоторое время).

    ./clean-all ./build-dh Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ...

    Создадим директорию для хранения приватных ключей сервера OpenVPN. Скопируем туда файл Диффи-Хелмана (dh2048.pem) mkdir /etc/openvpn/keys cp keys/dh2048.pem /etc/openvpn/keys/

    Создадим удостоверяющий центр CA . Создадутся ca.crt и ca.key. Файл ca.key представляет собой приватный ключ центра CA, он секретный , и его нельзя переносить на другие узлы вашей сети. Файл сертификата удостоверяющего центра ca.crt, напротив, открытый, и он будет нужен на узлах серверов и клиентов OpenVPN. ./pkitool --initca

    Создадим сертификат для сервера с именем vpnluxor ./pkitool --server vpnluxor

    Созданные файлы vpnluxor.crt и vpnluxor.key копируем в директорию /etc/openvpn/keys/

    Создадим сертификат для клиента client1 с одноименном параметром CommonName . Отдельный ключ для каждого клиента. ./pkitool client1

Расположение сертификатов и ключей

Файл Машина Назначение Доступ
ca.crt Сервер и клиенты Сертификат корневого СА Публичный
ca.key Только на сервере Необходим для подписи других сертификатов Секретный
dh{n}.pem Только на сервере Diffie Hellman параметры Публичный
vpnspar.crt Только на сервере Сертификат сервера Публичный
vpnspar.key Только на сервере Ключ сервера Секретный
darkfire.crt Только на клиенте Сертификат клиента Публичный
darkfire.key Только на клиенте Ключ клиента Секретный

Инсталлируем OpenVPN

В директории ccd хранятся индивидуальные настройки для каждого клиента. mkdir /etc/openvpn/ccd

Расширение сетевых границ VPN

Расширение границ VPN для включения дополнительных машин из подсетей на стороне клиента или сервера. Включение нескольких машин на стороне сервера при использовании маршрутизируемого VPN (dev tun)

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

Чтобы проиллюстрировать это примером, предположим, что в локальной сети на стороне сервера используется подсеть 10.66.0.0/24 и для пула VPN-адресов используется 10.8.0.0/24, о чем говорится в директиве server в файле конфигурации OpenVPN-сервера.

Во-первых, вы должны сообщить VPN-клиентам, что подсеть 10.66.0.0/24 доступна через VPN. Это легко можно сделать с помощью следующих директив в конфигурационном файле сервера:

Push "route 10.66.0.0 255.255.255.0"

Далее, необходимо настроить на LAN - шлюзе в сети сервера маршрут для маршрутизации пакетов, предназначенных для подсети VPN-клиентов (10.8.0.0/24) через OpenVPN-сервер (это необходимо только тогда, когда сервер OpenVPN и LAN -шлюз – разные машины).

Iptables -A INPUT -p udp --dport 1194 -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT or iptables -A INPUT -i tun+ -j ACCEPT

OpenVPN управление

Проблема PPPoE и OpenVPN

Проблема: Если сервер подключён к ISP при помощи технологии Как работает PPPoE , в этом случае OpenVPN не сможет сделать доступными сети за подключённым клиентом. Не будет отрабатывать команда iroute. Это связано с тем, что PPP прописывает маршрут по умолчанию в таком виде:

# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0

Т.е. указывается маршрутом по умолчанию интерфейс (ppp0), а не IP адресс, такой записи сервер OpenVPN не понимает, для корректной работы сервера OpenVpn маршрут должен бы вида:

# netstat -rn Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 91.196.96.35 255.255.255.255 UGH 0 0 0 ppp0

Client proto udp dev tun ca ca.crt dh dh2048.pem cert client.crt key client.key remote xxx.xxx.xxx.xxx 1194 tls-auth ta.key 1 cipher AES-256 -CBC user nobody group nogroup verb 2 mute 20 keepalive 10 120 comp-lzo persist-key persist-tun float resolv-retry infinite nobind

Ротация логов OpenVPN

    В файле /etc/logrotate.d/openvpn прописываем настройки для Описание и примеры настройки logrotate в Linux , ключевой параметр copytruncate (чтобы не перегружать OpenVPN и заставить его писать данные в тот же лог файл) openvpn etc/ openvpn/ servers/ vpnluxor/ logs/ openvpn.log { daily rotate 8 compress delaycompress missingok copytruncate notifempty create 640 root }