четверг, 27 марта 2014 г.

OPEVPN на FREEBSD


OPEVPN на FREEBSD

#cd /usr/ports/security/openvpn

#make config-recursive
#make install
Необходимо создать сертефикаты и ключи
# cd /usr/local/share/easy-rsa/
изменяем файл vars
#ee ./vars
меняем строку KEY_DIR=$D/keys на KEY_DIR=$D/keys/server и параметры для генерации сертификатов (KEY_EXPIRE, KEY_COUNTRY etc) Так же переопределил следующие строки (под себя), чтобы руками не вводить каждый раз при создании сертификатов для клиентов:
set KEY_COUNTRY=RU
set KEY_PROVINCE=ns-kaya obl.
set KEY_CITY=Dubovka                              
set KEY_ORG=bobr
set KEY_EMAIL=men@gmail.com
перед следующими операциями нужно набрать в консоли "sh"
#sh
Загружаем переменные в оболочку:
#. ./vars
Очищаем от старых сертификатов и ключей папку keys/server и создаем серийный и индексные файлы для новых ключей
# ./clean-all
Создаем Certificate Authority ключ и сертификат:
#./build-ca
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]:RU
#Провинция
State or Province Name (full name) []: ns-kaya obl.
#Город
Locality Name (eg, city) []: Dubovka
#Название компании(!)
Organization Name (eg, company) [x]: bobr
#Отделение компании
Organizational Unit Name (eg, section) []:bobr
#ВОТ ТУТ ВНИМАТЕЛЬНО - ЭТО ИМЯ МАШИНЫ ДЛЯ КОТОРОЙ
# ГЕНЕРИРУЕМ СЕРТИФИКАТ (имя не в полном смысле имя как идентификатор)
Common Name (eg, your name or your server's hostname) []:nashVPNserver
#Почт адрес
Email Address [root@localhost]: men@gmail.com
в директорию, определяемой переменной KEY_DIR, должны добавиться файлы:
ca.crt
ca.key
Создаем ключ и сертификат X.509 сервера:
#./build-key-server nashVPNserver
Всё заполняем  аналогично .
в директорию, определяемой переменной KEY_DIR, должны добавиться файлы:
nashVPNserver.crt
nashVPNserver.key
Генерируем 1024 битный ключ с помощью алгоритма Диффи Хеллмана :
# ./build-dh
в директорию, определяемой переменной KEY_DIR, должен добавиться файл:
dh1024.pem
Создаём ключ для клиента:
#./build-key client
в директории, определяемой переменной KEY_DIR, должены появиться файлы:
client.crt
client.key
Если понадобится добавить еще одного пользователя, то сделайте тоже самое, только меняйте "someclient" на что-то другое.
в папке keys/server получается много файлов:
  ca.crt - Главный CA сертификат, этот файл нужен и клиенту и серверу
  dh1024.pem - ключ Диффи Хельман, этот файл нужен только серверу
  nashVPNserver.crt - Сертификат сервера, нужен только серверу
  nashVPNserver.key - Ключ сервера, нужен только серверу (СЕКРЕТНЫЙ файл)
  client.crt - Сертификат клиента, нужен только клиенту
  client.key - Ключ клиента, нужен только клиенту (СЕКРЕТНЫЙ файл)
  ta.key - TLS-ключ, нужен и клиенту и серверу

Создаим  директории
/usr/local/etc/openvpn
/usr/local/etc/openvpn/keys
/usr/local/etc/openvpn/ccd
Скопируем все ключи в /usr/local/etc/openvpn/keys.
Создаем конфигурационный файл 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
Создаем директорию /var/log/openvpn/ и  файл где будут храниться логи
#mkdir /var/log/openvpn/
#touch /var/log/openvpn/openvpn.log


Заворачиваем весь трафик на VPN-сервер
Тут требуется заменить конфигурационный файл только на сервере. Добавляем строки:
push "redirect-gateway def1"
 push "dhcp-option DNS 8.8.8.8"
Первая строка меняет шлюз по умолчанию на заданный на VPN-сервере. После отключения будет возвращён шлюз, который был задан на клиенте ранее.
Вторая строка задает DNS-сервер, который будет использоваться после подключения к VPN-серверу.
Дополнительные параметры
client-to-client - позволяет клиентам VPN-сервера связываться друг с другом.
duplicate-cn - параметр нужно добавить если вы для всех клиентов создали одинаковые ключи, но клиенты при этом представляются различными common name.
В дирректории /usr/local/etc/openvpn/ccd создаем файл client (имя файла - имя которому выдан сертификат) следующего содержания:
ifconfig-push 10.10.200.2 10.10.200.1

-внесём в /etc/rc.conf
openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
 openvpn_dir="/usr/local/etc/openvpn"

Настраиваем клиента под 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 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

Комментариев нет:

Отправить комментарий