Главная  / How-To / SysAdmin / Настройка OpenVPN Настройка OpenVPN
  
1) Создаем структуру директорий 
mkdir /etc/openvpn/ 
cd /etc/openvpn/ 
mkdir ccd 
mkdir certs 
mkdir crl 
mkdir keys 
mkdir private 
mkdir req 
chmod 700 keys private 
echo "01" > serial 
touch index.txt 
 
Указанные команды создают папку /etc/openvpn; вложенные в нее папки:
ccd (конфигурации удаленных клиентов), certs (сертификаты клиентов и
сервера), crl (списки отзыва сертификатов), keys (закрытые ключи
сертификатов клиентов и сервера), private (закрытый ключ самоподписного
доверенного сертификата (CA), req (запросы на сертификаты);
ограничивают права доступа к каталогам keys и private; создают базу
данных сертификатов (файлы serial и index.txt).  
 
 
2) Файл конфигурации OpenSSL 
По умолчанию OpenSSL использует глобальный файл конфигурации
/etc/ssl/openssl.cnf. Я рекомендую создать в папке /etc/openvpn
отдельный файл конфигурации OpenSSL для OpenVPN. Данный файл должен
называться openssl.cnf и иметь следующее содержимое: 
 
 
[ ca ] 
default_ca               = CA_default 
 
[ CA_default ] 
dir                      = /etc/openvpn/certs 
crl_dir                  = $dir/crl 
database                 = $dir/index.txt 
new_certs_dir            = $dir/certs 
certificate              = $dir/CA_cert.pem 
serial                   = $dir/serial 
crl                      = $dir/crl/crl.pem 
private_key              = $dir/private/CA_key.pem 
RANDFILE                 = $dir/private/.rand 
default_days             = 3650 
default_crl_days         = 365 
default_md               = md5 
unique_subject           = yes 
policy                   = policy_any 
x509_extensions          = user_extensions 
 
[ policy_any ] 
organizationName         = match 
organizationalUnitName   = optional 
commonName               = supplied 
 
[ req ] 
default_bits             = 2048 
default_keyfile          = privkey.pem 
distinguished_name       = req_distinguished_name 
x509_extensions          = CA_extensions 
 
[ req_distinguished_name ] 
organizationName         = PRIMKON 
organizationName_default = PRIMKON 
organizationalUnitName   = OIT 
commonName               = primkon.local 
commonName_max           = 64 
 
[ user_extensions ] 
basicConstraints         = CA:FALSE 
 
[ CA_extensions ] 
basicConstraints         = CA:TRUE 
default_days             = 3650 
 
[ server ] 
basicConstraints         = CA:FALSE 
nsCertType               = server 
 
3) Создание самоподписного доверенного сертификата (CA) 
Для создания самоподписного доверенного сертификата (CA) и закрытого
ключа для него необходимо, находясь в каталоге /etc/openvpn, выполнить
команду: 
 
openssl req -new -nodes -x509 -keyout private/CA_key.pem -out CA_cert.pem -days 3650 
 
Команда req заставляет OpenSSL создать сертификат, ключи: -new -
cоздать запрос на сертификат, -nodes - не шифровать закрытый ключ,
-x509 (совместно с -new) - создать самоподписной сертификат (CA),
-keyout - задает местонахождение закрытого ключа, -out - задает
местонахождение самоподписного сертификата, -days - задает время
действия сертификата (365x10 дней, что приблизительно равно десяти
годам). В процессе выполнения команды на экран будут выданы запросы о
вводе таких параметров как: Country Name, State or Province Name;
Locality Name; Organization Name; Organizational Unit Name; Common
Name; Email Address. Самым важным параметром является значение Common
Name. В данном случае оно должно совпадать с FQDN-именем сервера (!!!В
конфиге на стороне клиента это будет фигурировать как значение опции
tls-server!!!). 
 
4) Создание сертификата сервера 
Для создания сертификата сервера сначала нужно создать запрос на
сертификат сервера и закрытый ключ сервера. Для этого, находясь в
каталоге /etc/openvpn, нужно выполнить команду: 
 
openssl req -new -nodes -keyout keys/server.pem -out req/server.pem 
 
Команда и ключи OpenSSL рассмотрены выше. В процессе выполнения комнды
Вам опять придется ответить на вопросы. Ответы должны соответствовать
ответам из предыдущего пункта. В ответ на дополнительные запросы "A
challenge password []:" и "An optional company name []:" необходимо
просто нажать . 
 
 
Для создания сертификата сервера необходимо подписать запрос на
сертификат сервера доверенным самоподписным сертификатом (CA). Для
этого, находясь в каталоге /etc/openvpn, нужно выполнить команду: 
 
openssl ca -batch -config openssl.cnf -extensions server -out certs/server.pem -infiles req/server.pem 
 
Команда ca заставляет OpenSSL подписать запрос на сертификат, ключи:
-config задает местонахождение файла конфигурации OpenSSL, -extensions
- задает секцию файла конфигурации OpenSSL, содержащую дополнительные
параметры генерируемого сертификата, -out - задает местонахождение
генерируемого сертификата, -infiles - задает местонахождение запроса на
сертификат, -batch - избавляет Вас от ответов на дополнительные
вопросы. В процессе выполнения команды Вам будет задан вопрос "Sign the
certificate? [y/n]:", на который нужно ответить утвердительно, после
чего произойдет генерация сертификата и обновление базы данных
сертификатов (index.txt и serial). 
 
5) Создание файла параметров Диффи-Хэлмана 
Для создания файла параметров Диффи-Хэлмана, предназначенного для
обеспечения более надежной защиты данных при установке соединения
клиента с сервером, находясь в каталоге /etc/openvpn, нужно выполнить
команду: 
 
openssl dhparam -out dh2048.pem 2048 
 
Команда dhparam приказывает OpenSSL создать файл параметров
Диффи-Хэлмана, число 2048 определяет разрядность в битах. Внимание:
данная команда выполняется медленно даже на очень мощных компьютерах.  
 
 
6) Создание клиентских сертификатов 
Процедура создания клиентских запросов на сертификаты и закрытых
ключей, подписания запросов на сертификаты и генерации сертификатов, а
также просмотра запросов на сертификаты, сертификатов и закрытых ключей
полностью аналогична соответствующей процедуре для сервера. Сделаю одно
небольшое замечание: запросы на сертификаты, закрытые ключи и
сертификаты должны иметь шаблонные имена, например, вида: req/RClient
для запросов на сертификаты, keys/KClient для закрытых ключей и
certs/CClient для сертификатов, соответственно. Слово Client должно
быть заменено именем клиента, которое обязательно должно
соответствовать значению параметра Common Name, вводимого при генерации
запроса на сертификат для соответствующего клиента (!!!ОЧЕНЬ ВАЖНО
Чтобы при генерации сертификатов для клиентов их Common Name не
совпадали друг с другом!!!). Возможность дублирования Common Name у
нескольких клиентов определяется конфигурацией сервера. Для генерации
запроса на сертификат и закрытого ключа, а также подписания запроса на
сертификат и генерации сертификата для клиента Client, находясь в
каталоге /etc/openvpn, нужно выполнить команды: 
 
openssl req -new -nodes -keyout keys/KClient.pem -out req/RClient.pem 
openssl ca -batch -config openssl.cnf -out certs/CClient.pem -infiles req/RClient.pem 
 
На данном этапе для рассматриваемого случая необходимо создать три
групы, состоящих из запроса на сертификат / закрытого ключа /
сертификата, с именами Rclient1 / Kclient1 / Cclient1, Rclient2 /
Kclient2 / Cclient2 и Rclient3 / Kclient3 / Cclient3 для филиала № 1
(Common Name - client1), для филиала № 2 (Common Name - client2) и для
системного администратора (Common Name - client3), соответственно.  
 
7) Создание списка отзыва сертификатов 
Для создания списка отзыва сертификатов, находясь в каталоге /etc/openvpn, нужно выполнить команду: 
 
openssl ca -config openssl.cnf -gencrl -out crl/crl.pem 
 
Команда ca с ключем -gencrl заставляет OpenSSL создать список отзыва
сертификатов, ключи: -config рассмотрен выше, -out - задает
местонахождение списка отзыва сертификатов. Данная команда создает
пустой список отзыва сертификатов. Для того, чтобы отозвать сертификат
клиента Client, находясь в каталоге /etc/openvpn, нужно выполнить
команду: 
 
openssl ca -config openssl.cnf -revoke certs/CClient.pem 
 
Команда ca с ключем -revoke заставляет OpenSSL отозвать заданный
сертификат, ключ -config рассмотрен выше. Для просмотра списка
отозванных сертификатов, находясь в каталоге /usr/local/etc/openvpn,
можно выполнить команду: 
 
openssl crl -noout -text -in crl/crl.pem 
 
8) Создание статического ключа HMAC 
Для создания статического ключа HMAC, обеспечивающего дополнительную
защиту от DoS-атак и флудинга UDP-портов, находясь в каталоге
/etc/openvpn, нужно выполнить команду: 
 
openvpn --genkey --secret ta.key 
 
9) Файл конфигурации сервера 
#----------------------------------server.conf----------------------------------------- 
#local             <Внешний IP-адрес сервера>, если не указано то все интерфейсы 
port              1194 
proto             udp 
dev             tap0 #Обязательно должен использоваться девайс tap0 а не tun0 для работы с множеством клиентов 
mode		server 
ifconfig-pool 	192.168.200.2 192.168.200.10 
ifconfig	192.168.200.1 255.255.255.0 
#up /etc/openvpn/server.up - скрипт при запуске 
#down /etc/openvpn/server.down - скрипт при остановке 
route             192.168.100.0 255.255.255.0 192.168.200.2 # маршрут для клиента 1 добавляется при запуске 
route             192.168.101.0 255.255.255.0 192.168.200.3 # маршрут для клиента 2 добавляется при запуске 
#client-to-client - возможность клиентам видеть другдруга 
tls-server 
dh                /etc/openvpn/dh2048.pem 
ca                /etc/openvpn/CA_cert.pem 
cert              /etc/openvpn/certs/server.pem 
key               /etc/openvpn/keys/server.pem 
crl-verify        /etc/openvpn/crl/crl.pem 
tls-auth          /etc/openvpn/ta.key 0 
comp-lzo 
keepalive         10 60 
tun-mtu           1500 
mssfix            1450 
persist-key 
persist-tun 
#user              openvpn 
#group             openvpn 
verb              3 
#-------------------------------------------------------------------------------------- 
В данном файле заданы следующие значения параметров сервера OpenVPN:
dev - интерфейс OpenVPN, local и port - IP-адрес и порт, на которых
OpenVPN принимает входящие соединения, proto - протокол (в данном
случае UDP), server - пул IP-адресов, выделенный для виртуальной
частной сети и автоматически распределяемый между клиентами, push -
команда OpenVPN, передаваемая клиенту и выполняемая клиентом (в данном
случае "route 10.0.0.0 255.255.255.0" добавляет на стороне клиента
маршрут к виртуальной частной сети), route - добавляет на стороне
сервера маршруты к локальным подсетям, находящимся за клиентами,
client-config-dir - папка с файлами конфигурации клиентов,
client-to-client - разрешение клиентам "видеть" друг друга
(естественно, при наличии соответствующих правил маршрутизации),
tls-server - включение поддержки TLS; dh - местонахождение файла
параметров Диффи-Хэлмана, ca - местонахождение самоподписного
доверенного сертификата (CA), cert - местонахождение сертификата
сервера, key - местонахождение закрытого ключа сервера, crl-verify -
местонахождение списка отзыва сертификатов, tls-auth - местонахождение
статического ключа HMAC, comp-lzo - использование LZO-компрессии
трафика, keeplive - поддержание соединения (в данном случае отправка
пингов каждые 10 секунд, и закрытие соединения через две минуты после
отсутствия ответных пакетов, как сервером, так и клиентами), tun-mtu и
mssfix - параметры передачи данных по тоннелю, persist-tun - не
закрывать / открывать по-новой tun-устройство при получении сигнала
SIGUSR1 (перезапуск без привилегий root) или при выполнении
ping-restarts, user и group - пользователь и группа, от имени которых
работает OpenVPN после запуска (запуск выполняется под root'ом), verb -
уровень детализации сообщений, выдаваемых OpenVPN в /var/log/messages.  
 
10) Файл конфигурации клиентов 
client1 
#----------------------------------openvpn.conf---------------------------------------- 
client 
dev           tap0 
proto         udp 
remote        130.77.1.42 
ifconfig 192.168.200.2 255.255.255.0 
route	192.168.0.0 255.255.255.0 192.168.200.1 
tls-client 
tls-remote    gate.primkon.local 
ca            /etc/openvpn/CA_cert.pem 
cert          /etc/openvpn/Cgw-rdnv.pem 
key           /etc/openvpn/Kgw-rdnv.pem 
tls-auth      /etc/openvpn/ta.key 1 
ns-cert-type  server 
comp-lzo 
tun-mtu       1500 
mssfix        1450 
verb          3 
#-------------------------------------------------------------------------------------- 
client2 
#----------------------------------openvpn.conf---------------------------------------- 
client 
dev           tap0 
proto         udp 
remote        130.77.1.42 
ifconfig 192.168.200.3 255.255.255.0 # жестко назначается ip этому клиенту 
route    192.168.0.0 255.255.255.0 192.168.200.1 # добавляется маршрут до основной подсети 
tls-client 
tls-remote    gate.primkon.local #здесь должно быть тоже что и при генерации сертификатов сервера CommonName 
ca            /etc/openvpn/CA_cert.pem 
cert          /etc/openvpn/Cgw-khb.pem 
key           /etc/openvpn/Kgw-khb.pem 
tls-auth      /etc/openvpn/ta.key 1 
ns-cert-type  server 
comp-lzo 
tun-mtu       1500 
mssfix        1450 
verb          3 
#-------------------------------------------------------------------------------------- 
11) Маршрутизация 
на стороне сервера как видно из конфига добавляются маршруты через интерфейсы tap0 на клиентах до подсетей клиентов 
на сторонах клиентов добавляются маршрут до основной подсети через интерфейс tap0  на стороне сервера 
 
12) Файрволы 
на файрволах нужно разрешить forward правила для всех подсетей как для источника так и для назначения.
  
2009 © Андрей Боровков
 
 
Добавлено: 2009/05/25 Обновлено: 2009/05/26        |