Настройка 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 и пр.