Документация по ОС FreeBSD Среда, 01.05.2024, 03:46
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » VPN

Openvpn + FreeBSD [2008]
Имеем: FreeBSD 6.2, инет
Надо: ВПН-сервер для доступа из внешнего мира к корпоративной сети

Исходные данные:
Свежеустановленая FreeBSD 6.2,
rl0=22.22.22.22/30 - сетевая карта смотрящая к провайдеру (маска произвольная)
rl1=192.168.1.1/24 - сетевая смотрящая внутрь локальной сети за FreeBSD 6.2
(всё необходимое для работы потянется из репозитария)

1. Устанавливаем и конфигурируем OpenVPN


наиболее простой и "правильный" метод  - ставим всё из портов
#cd /usr/ports/security/openvpn
#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/
# (в этом файлике изменяете путь к ключам)
#ee ./vars
# меняем строку KEY_DIR=$D/keys на KEY_DIR=$D/keys/server 

Внимание! Если у вас по умолчанию не баш, то перед следующими операциями нужно набрать в консоли "sh", советую для "100-%-ного" результата всё же наверняка сделайте это, даже если у вас шелл 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) [UA]:UA
#Провинция
State or Province Name (full name) [Kiev]:Kiev
#Город
Locality Name (eg, city) [Kiev]:Kiev
#Название компании(!)
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 - создаём файлы (пустой и с "нулевым" содержимым соответственно)

#echo "">/usr/local/share/doc/openvpn/easy-rsa/keys/server/index.txt
#echo "00">/usr/local/share/doc/openvpn/easy-rsa/keys/server/serial

Создаем сертификат X.509 для сервера. Всё аналогично заполняем(точно так же) + cтроки в котрых указываем пароль и имя организации (!)
#./build-key-server server
# Страна
Country Name (2 letter code) [UA]:UA
# Провинция
State or Province Name (full name) [Kiev]:Kiev
# Город
Locality Name (eg, city) [Kiev]:Kiev
# Название компании(!)
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) [UA]:UA
State or Province Name (full name) [Kiev]:Kiev
Locality Name (eg, city) [Kiev]:Kiev
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

Создаем ключ Диффи Хельман(о нем можно почитать здесь: http://www.lissyara.su/scripts/redirect_link.php?link=http://www.rsasecurity.com/rsalabs/node.asp?id=2248)
# ./build-dh

Теперь выходим из sh написав команду "exit". И в конце создаем ключ для tls-аутификации
# openvpn --genkey --secret keys/server/ta.key

После всех этих манипуляций в папке keys/server получается много файлов:

  • ca.crt - Главный CA сертификат, этот файл нужен и клиенту и серверу
  • dh1024.pem - ключ Диффи Хельман, этот файл нужен только серверу
  • server.crt - Сертификат сервера, нужен только серверу
  • server.key - Ключ сервера, нужен только серверу (СЕКРЕТНЫЙ файл)
  • client.crt - Сертификат клиента, нужен только клиенту
  • client.key - Ключ клиента, нужен только клиенту (СЕКРЕТНЫЙ файл)
  • ta.key - TLS-ключ, нужен и клиенту и серверу

    Следовально серверу достаются файлы ca.crt, dh1024.pem, server.crt, server.key, ta.key, а клиенту ca.crt, dh1024.pem,client.crt, client.key, ta.key
    Самое сложное позади smile.gif

    2.Настраиваем сервер


    Создаём 3 директории
    /usr/local/etc/openvpn
    /usr/local/etc/openvpn/keys
    /usr/local/etc/openvpn/ccd

    Так же для удобства скопируем все ключи в /usr/local/etc/openvpn/keys (ca.crt, dh1024.pem, server.crt, server.key, ta.key).

    Создаем конфигурационный файл server.conf следующего содержимого:
    
    #порт на котором работает сервер
    port 2000
    # протокол - советую udp
    proto udp
    # - используемый тип устройства и номер 
    dev tun0
    #указываем файл CA
    ca /usr/local/etc/openvpn/keys/ca.crt
    #указываем файл с сертификатом сервера
    cert /usr/local/etc/openvpn/keys/server.crt
    #указываем файл с ключем сервера
    key /usr/local/etc/openvpn/keys/server.key
    #указываем файл Диффи Хельман
    dh /usr/local/etc/openvpn/keys/dh1024.pem
    #задаем IP-адрес сервера и маску подсети
    # (виртуальной сети) - можно произвольную, (я выбрал такую)
    server 10.10.200.0 255.255.255.0
    #задаем МАРШРУТ который передаём клиентту
    # и маску подсети для того чтобы он "видел"
    # сеть за опенвпн сервером (сеть 192.168.1.0/24)
    push "route 192.168.1.0 255.255.255.0"
    # указываем где хранятся файлы с
    # настройками IP-адресов клиентов
    client-config-dir ccd
    # добавляем маршрут сервер-клиент
    route 10.10.200.0 255.255.255.252
    # включаем TLS аутификацию
    tls-server
    # указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
    tls-auth keys/ta.key 0
    # таймаут до реконекта
    tls-timeout 120 
    auth MD5 #
    # включаем шифрацию пакетов
    cipher BF-CBC
    keepalive 10 120
    # сжатие трафика
    comp-lzo
    # максимум клиентов
    max-clients 100
    user nobody 
    group nobody
    # Не перечитывать ключи после получения
    # SIGUSR1 или ping-restart
    persist-key
    # Не закрывать и переоткрывать TUN\TAP
    # устройство, после получения
    # SIGUSR1 или ping-restart
    persist-tun
    # логгирование (не забудьте создать эту дирректорию /var/log/openvpn/)
    status /var/log/openvpn/openvpn-status.log
    log /var/log/openvpn/openvpn.log
    # Уровень информации для отладки
    verb 3
    

    В дирректории /usr/local/etc/openvpn/ccd создаем файл client (имя файла - имя которому выдан сертификат) следующего содержания
    #echo "ifconfig-push 10.10.200.2 10.10.200.1" > \
    ? /usr/local/etc/openvpn/ccd/client.conf
    

    Сервер готов
    для автостарта при загрузке Openvpn-сервера -внесём в /etc/rc.conf
    openvpn_enable="YES" # YES or NO
    openvpn_if="tun" # driver(s) to load, set to "tun", "tap" or "tun tap"
    openvpn_configfile="/usr/local/etc/openvpn/server.conf" # --config file
    openvpn_dir="/usr/local/etc/openvpn" # --cd directory 
    

    3.Настраиваем клиента под Windows
    качаем клиента для виндозы отсюда http://www.lissyara.su/scripts/redirect_link.php?link=http://openvpn.se/files/install_packages/ или из другого места. Создадим конфигурационный файл 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 22.22.22.22#(реальный айпи вашего сервера)
    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
    

    вот и всё - конфиг взят с рабочего сервера + положен человеку у которого всё работет viewtopic.php?f=8&t=5708&start=0&st=0&sk=t&sd=a

    НЬЮАНС!
    В /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
    и т.д



  • Источник: http://www.lissyara.su/?id=1549
    Категория: VPN | Добавил: oleg (04.03.2008) | Автор: mak_v_
    Просмотров: 1715 | Рейтинг: 5.0/1 |
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Форма входа

    Beastie

    Друзья сайта

    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    links

    Copyright MyCorp © 2024