|
Ключевые слова: vpn, tunnel, auth, crypt, openvpn, openssl, (найти похожие документы)
From: Mstyslav Dubchak <mstyslav@ukr.net.> Newsgroups: email Date: Mon, 12 Sep 2005 18:21:07 +0000 (UTC) Subject: Настройка OpenVPN c применением сертификатов X.509 вместо статических ключей Данная статья не претендует на исчерпывающее повествование по данной теме. В ней не раскрываются все возможности и опции настройки пакетов OpenSSL (http://www.openssl.org/) и OpenVPN (http://www.openvpn.net/). За более подробной информацией рекомендуется обратится на сайты разработчиков и man-страницы. Все Изложенное тут является результатом попытки автора решить прикладную задачу подключения удаленных клиентов к серверу не используя при этом статические ключи и дополнительное ПО для управления ключами и сертификатами. Статья писалась как пошаговое руководство-инструкция для начинающих, позволяющее "с нуля" настроить соединение 2-х и более машин по технологии VPN, используя свободно-распространяемое ПО. Начиная с версии 2 в пакете OpenVPN появилась возможность создавать соединения типа точка-многоточка с использованием на сервере одного виртуального адаптера - tap/tun - и как следствие использовать один процес демона OpenVPN. Установка и настройка производится на машине с установленной ОС FreeBSD, настроенной сетевой подсистемой и доступом в Интернет. Автор описал процесс настройки под FreeBSD 4.11-RELEASE-p11 и FreeBSD 5.3-RELEASE-p20, который проверил сам лично. На машине были установлены пакеты (устанавливалось из коллекции портов при помощи portinstall): - OpenSSL v. 0.9.7g - OpenVPN v. 2.0.2 Создание Certificate Authority (CA) После установки OpenSSL, файл конфигурации (openssl.cnf), потребуется отредактировать, чтобы при необходимости изменить каталоги в которых будут располагаться ключи, сертификаты и прочее во время настройки, а также имена и наименование организации. Как правило, конфиг располагается в каталоге /usr/local/openssl/, либо в /etc/ssl/. После редактирования openssl.cnf делаем следующее: Создаем файл /usr/local/openssl/serial c содержимым '01' # touch serial # echo 01 > serial Создаем каталоги /crl, /newcerts, /private # mkdir crl newcerts private Для каталога private, в целях безопастности частного ключа сервера, рекомендую установить права только для пользователя root # chmod go-rwx private Создаем пустой файл /usr/local/openssl/index: # touch index И наконец создаем сертификат CA # openssl req -nodes -config openssl.cnf -days 1825 \ -x509 -newkey rsa -out ca-cert.pem -outform PEM Создание сертификата X.509 Теперь, когда мы имеем CA, мы можем создавать сертификаты и ключи для машин, образующих туннель. Вместо host_x и client_x рекомендую указывать осмысленное имя вашей машины-сервера и клиентов, что бы потом не запутаться самому. Сгенерируем частный ключ для сервера, его настоятельно рекомендуется хранить в тайне: # openssl genrsa -out host_x.key Генерируем сертификат: # openssl req -new -nodes -key host_x.key -out host_x.csr # openssl ca -batch -config openssl.cnf -in host_x.csr -out host_x.cert Теперь повторим то же самое, но только для клиента: # openssl genrsa -out client_x.key # openssl req -new -nodes -key client_x.key -out client_x.csr # openssl ca -batch -config openssl.cnf -in client_x.csr -out client_x.cert И в конце создаем ключик ta.key. Этот ключ используется для предотвращения DoS атак и UDP port flooding # openvpn --genkey --secret ta.key Таким образом мы получили подписанный нами же сертификат X.509. Необходимо повторить эти действия для всех имеющихся у нас машин. Далее создать ключ Диффи Хельман (подробнее о нем http://www.rsasecurity.com/rsalabs/node.asp?id=2248).Этот ключ используется для шифрования трафика при установлении соединения: # openssl dhparam -out dh1024.pem 1024 Теперь переходим к конфигурированию самого OpenVPN. Файл конфигурации для сервера у меня находится в /usr/local/etc/openvpn/ и выглядит так: proto udp dev tap0 # использую tap, хотя можно и tun (рекомендуется) port 1194 # TLS parms tls-server ca /etc/ssl/ca-cert.pem cert /etc/ssl/host_x.cert key /etc/ssl/host_x.key dh /etc/ssl/dh1024.pem mode server ifconfig 10.10.10.10 255.255.255.248 ifconfig-pool 10.10.10.11 10.10.10.15 duplicate-cn tls-auth /etc/ssl/ta.key 0 #cipher BF-CBC # Blowfish (default) #cipher AES-128-CBC # AES cipher DES-EDE3-CBC # Triple-DES user nobody group nobody persist-key persist-tun comp-lzo keepalive 10 120 status /var/log/openvpn-status.log log /var/log/openvpn.log verb 3 Файл конфигурации для клиента у меня такой: client proto udp remote aaa.ccc.yyy.xxx port 1194 dev tap resolv-retry infinite persist-key persist-tun tls-client dh dh1024.pem ca ca-cert.pem cert client_x.cert key client_x.key #cipher BF-CBC # Blowfish (default) #cipher AES-128-CBC # AES cipher DES-EDE3-CBC # Triple-DES tls-auth ta.key 1 ping 10 comp-lzo verb 3 mute 10 После создания файлов конфигурации, запускаем демона openvpn на сервере: # sh /usr/local/etc/rc.d/openvpn.sh start (скрипт созданный при инсталляции) Проверяем запустился ли демон: # sockstat | grep openvpn Если видим что-то вроде: nobody openvpn 33072 3 udp4 *:1194 *:* значит сервер готово принимать входящие подключения. Далее запускаем клиента на своей машине. Рекомендую использовать GUI оболочку, если клиентом будет являться машина с Windows. Если клиентом выступает машина с FreeBSD , то запуск аналогичен серверной части. Для прояснения некоторых моментов образования соединения нелишним будет изучить вывод, который пишется в /var/log/openvpn.log. Именно используя его, автор получил большую часть информации пригодившейся при отладке конфигов. Регулировать детализацию логирования помогает ключик 'verb', Для более детального изучения возможностей OpenVPN, настоятельно рекомендую изучить примеры конфигов: http://openvpn.net/howto.html#examples Ну и конечно рекомендуется не забывать о том, что многие ошибки кто-то совершал и с проблемами сталкивался, а потому Google ваш помощник :)
|
Обсуждение | [ Линейный режим | Показать все | RSS ] |
|
Добавить комментарий |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |