Настройка ВПН-сервера для доступа из внешнего мира к корпоративной сети
Настройка Openvpn-сервера (со статическими ключами и сертификатами) и Windows-клиента (Openvpn-gui)
Имеем: FreeBSD 7.2, em0=10.0.2.15/24 - сетевая карта смотрящая к провайдеру em1=192.168.5.1/24 - сетевая смотрящая внутрь локальной сети за FreeBSD 7.2
1. Устанавливаем и конфигурируем OpenVPN
наиболее простой и "правильный" метод - ставим всё из портов
#cd /usr/ports/security/openvpn20
#make
#make install
Всё необходимое поставлено, переходим к конфигурированию. Необходимо создать сертефикаты и ключи.Заходим в /usr/local/share/doc/openvpn/easy-rsa/ и изменяем файл vars. Я оставил все параметры дефолтовыми, кроме директории куда складывать сгенерированные ключи - изменил в этом файле строку «export KEY_DIR=$D/keys» на «export KEY_DIR=$D/keys/server», соответственно создав такую же дирректорию /usr/local/share/doc openvpn/easy-rsa/keys/server. Собственно создаём сертификаты и ключи
# cd /usr/local/share/doc/openvpn/easy-rsa/
Внимание! Если у вас по умолчанию не баш, то перед следующими операциями нужно набрать в консоли "sh". Загружаем переменные в оболочку:
#sh
#. ./vars
Очищаем от старых сертификатов и ключей папку keys/server и создаем серийный и индексные файлы для новых ключей
#./clean-all
Создаём сертификат. При создании сертификата вводим необходимую информацию. Привожу листинг с консоли
#./build-ca (Создаем Certificate Authority для сервера)
Generating a 1024 bit RSA private key
....................++++++
...++++++
writing new private key to 'ca.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) [RU]:RU
#Провинция
State or Province Name (full name) []:Moscow
#Город
Locality Name (eg, city) []:Moscow
#Название компании(!)
Organization Name (eg, company) [x]:server
#Отделение компании
Organizational Unit Name (eg, section) []:server
#ВОТ ТУТ ВНИМАТЕЛЬНО - ЭТО ИМЯ МАШИНЫ ДЛЯ КОТОРОЙ
# ГЕНЕРИРУЕМ СЕРТИФИКАТ (имя не в полном смысле -имя как идентификатор)
Common Name (eg, your name or your server's hostname) []:server
#Почт адрес
Email Address [root@localhost]:
Не факт что у всех, но встречал подобное: при попытке создать сертификат - была ругня на отсутствующие файлы index.txt и serial. В /usr/local/share/doc/openvpn/easy-rsa/keys/server - создаём файлы (пустой и с "нулевым" содержимым соответственно)
Создаем сертификат X.509 для сервера. Всё аналогично заполняем(точно так же) + cтроки в котрых указываем пароль и имя организации (!)
#./build-key-server server
# Страна
Country Name (2 letter code) [RU]:RU
# Провинция
State or Province Name (full name) []:Moscow
# Город
Locality Name (eg, city) []:Moscow
# Название компании(!)
Organization Name (eg, company) [x]:server
# Отделение компании
Organizational Unit Name (eg, section) []:server
# ВОТ ТУТ ВНИМАТЕЛЬНО - ЭТО ИМЯ МАШИНЫ
Common Name (eg, your name or your server's hostname) []:server
# Почт адрес
Email Address [root@localhost]:
Please enter the following 'extra' attributes to be sent with your certificate request
# пароль
A challenge password []:123456789
# название организации
# (как и в создании корневого сертификата)
An optional company name []:server
В конце соглашаемся и подписываем сертификат, отвечая "yes" :-)
Создаём ключ для клиента
#./build-key client
Generating a 1024 bit RSA private key
.........++++++
.......++++++
writing new private key to 'client.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) [RU]:RU
State or Province Name (full name) []:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [server]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:client
Email Address [root@localhost]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456789
An optional company name []:client
Будьте внимательны при заполнени данных сертификатов, поле Common Name обязательно к заполнению, причем для сервера оно должно быть одно, а для клиента другое. Например в поле Common Name при генерации сертификата X.509 для сервера можно написать server, а для клиента соотвественно client
Создаем ключ Диффи Хельман
# ./build-dh
И в конце создаем ключ для tls-аутификации
# openvpn --genkey --secret keys/server/ta.key
Теперь выходим из sh написав команду "exit".
После всех этих манипуляций в папке keys/server получается много файлов:
*
ca.crt - Главный CA сертификат, этот файл нужен и клиенту и серверу
*
dh1024.pem - ключ Диффи Хельман, этот файл нужен только серверу
*
server.crt - Сертификат сервера, нужен только серверу
*
server.key - Ключ сервера, нужен только серверу (СЕКРЕТНЫЙ файл)
*
client.crt - Сертификат клиента, нужен только клиенту
*
client.key - Ключ клиента, нужен только клиенту (СЕКРЕТНЫЙ файл)
Настраиваем клиента под Windows Качаем клиента. Создадим конфигурационный файл openvpn.ovpn в папке config (Например C:\Program Files\OpenVPN\config). И скопируем туда же все необходимые ключи для работы (ca.crt, dh1024.pem, client.crt, client.key, ta.key). Содержимое файла openvpn.ovpn
dev tun
proto udp
remote 10.0.2.15#(реальный айпи вашего сервера)
port 2000 #(порт к которому устанавливать соединение
client
resolv-retry infinite
ca ca.crt
cert client.crt
key client.key
tls-client
tls-auth ta.key 1
auth MD5
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 3
НЬЮАНС! В /usr/local/etc/openvpn/ccd при создании файла с настройками для клиента помните: ifconfig-push 10.10.200.2 10.10.200.1 этой сторокой организовуем езернет-тун с сеткой 10.10.200.0, 2-мя тачками с айпишнегами 10.10.200.2 и 10.10.200.1 и бродкастом 10.10.200.3 соответственно при создании 2-го, 3-го и т.д. клиента - строка должна принимать вид ifconfig-push 10.10.200.6 10.10.200.5 ifconfig-push 10.10.200.10 10.10.200.9 и т.д