Настройка OpenVPN сервера (CentOS)

Настройка OpenVPN сервера (CentOS)

Итак, стоит следующая задача: установить и настроить OpenVPN сервер с сертификатной аутентификацией. Весь трафик пользователя ( веб, icq, почта и т.д. ), при подключении VPN, должен автоматически направляться через защищенный канал, без каких либо дополнительных настроек приложений. На выходе получаем трафик с IP адреса OpenVPN сервера. Сервер стоит на операционной системе CentOS.

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

  • Предустановленный ключ — самый простой вариант.
  • Аутентификация по сертификатам — наиболее гибкий в настройках метод.
  • Аутентификация по логину и паролю — клиентский сертификат при этом можно не использовать ( сертификат сервера обязателен ).

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

Включаем форвардинг пакетов

Важный шаг, поскольку если этого не сделать, работать данная схема не будет. Подправляем файл конфигурации ядра /etc/sysctl.conf, в строке:

и выполняем команду:

это загрузит переменные ядра из обновленного файла sysctl.conf. В CentOS, как и в большинстве дистрибутивов Linux, в качестве стандартного фаервола выступает iptables, добавляем в фаервол следующее правило:

Вообще, вместо SNAT, можно использовать MASQUERADE, как рекомендует мануал по OpenVPN, но SNAT работает быстрей. Не забудьте сделать что-бы оно загружалось при запуске системы.

Установка OpenVPN сервера

В стандартных репозитариях CentOS, пакет OpenVPN отсутствует, поэтому сначала нужно добавить репозитарий в котором есть OprnVPN, я использую EPEL.

Репозитарий добавлен, можно приступать к установке и настройке openvpn.

После установки OpenVPN, появляется ее домашняя папка, /etc/openvpn, это справедливо как минимум для CentOS, в других операционных системах папка может располагаться в другом месте, например во операционной системе FreeBSD ее принято держать в /usr/local/etc/openvpn/.

При установке, кроме самого OpenVPN сервера, будет установлен набор скриптов, для простой генерации ключей и сертификатов, расположено все это добро в /usr/share/openvpn/easy-rsa/2.0/. Кроме того в /usr/share/doc/openvpn-( версия )/, можно найти различные скрипты и примеры конфигов, которые могут пригодиться при построении различных вариантов VPN соединений. Теперь можно приступать к настройке OpenVPN сервера.

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

Структуру папок для ключей можно настроить как вам удобней, я буду делать по своему. В папке /usr/share/openvpn/easy-rsa/2.0/, создаем папку keys:

Далее настраиваем переменные в файле /usr/share/openvpn/easy-rsa/2.0/vars. Тут опять-же зависит от того, какую структуру папок вы выбрали для создания ключей и сертификатов и от прочих личных предпочтений. У меня получилось так:

Этот файл вызывается перед запуском скриптов генерации для установки необходимых значений переменных окружения. Что-бы лишний раз не заморачиваться с этим, я прописал вызов vars, в начало каждого скрипта, который мы будем использовать. Например файл build-ca будет выглядеть так:

Так-же в качестве подготовки, нужно создать пару файлов, выполнив следующие команды:

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

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

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

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

Напоследок генерируем ключ для TLS аутентификации.

Теперь создадим каталог /etc/openvpn/keys и скопируем туда необходимые серверу ключи и сертификаты:

Настало время определиться с конфигом. Я взял готовый файл server.conf из /usr/share/doc/openvpn-2.1.1/sample-config-files/, и привел к необходимому виду. Получилось следующее:

Собственно теперь можно пробовать запустить серверную часть и проверить, все-ли в норме.

Проверяем, появилось-ли устройство для туннеля.

Занял-ли OpenVPN сервер, отведенный ему адрес и порт.

Вроде все на месте. Если что-то пошло не так, смотрим /etc/openvpn/openvpn.log, при необходимости можно увеличить уровень логгирования с помощью опции конфига verb.

Настраиваем OpenVPN клиента

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

Rопируем все необходимые клиенту файлы.

Стандартный файл конфигурации vpn клиента можно взять все там-же, /usr/share/doc/openvpn-2.1.1/sample-config-files/client.conf. Приводим конфиг к следующему виду:

Кидаем получившийся файл конфигурации в папку с ключами:

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

С CentOS закончили.

Клиентская часть OpenVPN, коротко

Тут все просто, со страницы ]]> официальный клиент openvpn ]]> качаем клиент под нужную операционную систему, устанавливаем. У меня на рабочей машине WinXP, поэтому рассказываю на его примере. Что-бы все заработало, нужно добавить в Win виртуальное TAP устройство, сделать это можно с помощью bat файла из комплекта OpenVPN ( C:\Program Files (x86)\OpenVPN\bin\addtap.bat ). Клиентские ключи и конфиг, которые мы копировали в папку /root/ovpn, нужно скинуть на машину-клиента и скопировать в папку C:\Program Files (x86)\OpenVPN\config\client01. Далее запускаете OpenVPN GUI, в трее появится значок, по правому клику вылезем менюшка со списком возможных соединений, там можно обнаружить и наш client01. Соединение берет имя файла конфигурации клиента, в нашем случае это client01.ovpn.

Если все было сделано правильно, после установки соединения с OpenVPN сервером, весь трафик, без каких-либо дополнительных телодвижений, пойдет через созданный шифрованный туннель, в том числе и трафик skype, icq и пр.

📎📎📎📎📎📎📎📎📎📎