ГлавнаяМатериалы по FreeBSDНастройка сервера OpenVPN

Настройка сервера OpenVPN

(0 Голосов)

openvpn Настроим OpenVPN-сервер (со статическими ключами и сертификатами) и Windows-клиент (Openvpn-gui).

Задача - организовать безопасный доступ из внешнего мира к внутренней корпоративной сети. В качестве шлюза используется машина с FreeBSD 8.0, сетевые интерфейсы rl0 (192.168.1.2/24) и rl1 (20.20.20.2/30).

1. Устанавливаем OpenVPN

# cd /usr/ports/security/openvpn
# make install clean

 Переходим к конфигурированию. Создаем сертификаты и ключи.

# cd /usr/local/share/doc/openvpn/easy-rsa/1.0 

Копируем содержимое в /usr/local/share/doc/openvpn/easy-rsa, меняем права на скрипты, делая их исполняемым.

# cd  /usr/local/share/doc/openvpn/easy-rsa
# chmod +x build-ca
# chmod +x build-key-server
# chmod +x build-key
# chmod +x build-dh
# chmod +x revoke-full

Меняем файл vars - строку KEY_DIR=$D/keys на KEY_DIR=$D/keys/server. Создаем директорию /usr/local/share/doc/openvpn/easy-rsa/keys/server, в которой буду генерироваться наши ключи и сертификаты.

Загружаем переменные в оболочку:

# sh
#. ./vars
#./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
#Провинция
State or Province Name (full name):Orenburg
#Город
Locality Name (eg, city) [City]:Orsk
#Название компании(!)
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 - создаём файлы (пустой и с "нулевым" содержимым соответственно):

touch /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 для сервера.

#./build-key-server server
# Страна
Country Name (2 letter code):RU
# Провинция
State or Province Name (full name):Orenburg
# Город
Locality Name (eg, city):Orsk
# Название компании(!)
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
State or Province Name (full name):Orenburg
Locality Name (eg, city):Orsk
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 

 Создаем ключ Диффи-Хелмана (необходим для безопасной авторизации двух сторон):

# ./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

 

Создаем каталоги для OpenVPN-сервера:

# cd /usr/local/etc/
# mkdir openvpn
# cd openvpn/
# mkdir keys
# mkdir ccd 

Переходим в каталог /usr/local/etc/openvpn/keys и копируем в него необходимые для сервера ключи и сертификаты:

# cd /usr/local/etc/openvpn/keys
# cp /usr/local/share/doc/openvpn/easy-rsa/keys/server/ca.crt
# cp /usr/local/share/doc/openvpn/easy-rsa/keys/server/dh1024.pem
# cp /usr/local/share/doc/openvpn/easy-rsa/keys/server/server.crt
# cp /usr/local/share/doc/openvpn/easy-rsa/keys/server/server.key
# cp /usr/local/share/doc/openvpn/easy-rsa/keys/server/ta.key

 

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

В каталоге /usr/local/etc/openvpn создаем файл конфигурации нашего openvpn-сервера 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.100.200.0 255.255.255.0

# указываем клиенту маршрут к серверу по виртуальному интерфейсу
#push "route 192.168.1.0 255.255.255.0"

# указываем внутренние DNS и WINS серверы
#push "dhcp-option DNS 192.168.1.1"
#push "dhcp-option WINS 192.168.1.1"

# назначаем сервер основным шлюзом
#push "redirect-gateway def1"

# указываем где хранятся файлы с настройками клиентов
client-config-dir ccd

# добавляем маршрут сервер-клиент
route 10.100.200.0 255.255.255.252

# включаем TLS аутификацию
tls-server

# указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
tls-auth keys/ta.key 0

# таймаут до реконекта
tls-timeout 120
auth MD5

# включаем шифрацию пакетов с использованием алгоритма симметричного шифрования Blowfish
cipher BF-CBC
#каждые 10 секунд пинговать удаленный хост, если в течении 120 c не будет ответа - разрывать соединение
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

# Отзыв пользовательских сертификатов
crl-verify /usr/local/etc/openvpn/crl.pem

В дирректории /usr/local/etc/openvpn/ccd на сервере создаем файл client (имя файла - имя которому выдан сертификат) следующего содержания:

ifconfig-push 10.100.200.2 10.100.200.1 

Выдали клиенту с сертификатом client.crt виртуальный IP-адрес 10.100.200.2, шлюз 10.100.200.1.

Добавляем в файл /etc/rc.conf следующие строчки, для автоматического запуска openvpn-сервера при загрузке системы:

openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_dir="/usr/local/etc/openvpn"

Отключение сжатия трафика comp-lzo no позволяет несколько увеличить производительность vpn-туннеля. На секьюрность это не повлияет.

На этом настройка сервера закончена.

3.Настраиваем клиента под Windows

 Скачиваем дистрибутив клиента для Windows с ресурса 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:

client
dev tun
proto udp
remote 20.20.20.2 # (внешний ip нашего сервера)
port 2000
#route-method exe # если Windows Vista
#route-delay 2 # если Windows Vista
resolv-retry infinite
ca ca.crt
cert client.crt
key client.key
tls-client
tls-auth ta.key 1
auth MD5
#auth-user-pass # на случай аутентификации по паролю
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 3

 На этом настройка закончена.

При создании 2-го, 3-го и т.д. клиента - строка в файле для каждого из них в директории /usr/local/etc/openvpn/ccd должна принимать вид:
ifconfig-push 10.100.200.6 10.10.200.5
ifconfig-push 10.100.200.10 10.10.200.9
и т.д.

 4.Удаление недействительных сертификатов

Обеспечим невозможность подключения с ненужными (лишними) сертификатами:

# cd /usr/local/share/doc/easy-rsa/
# sh
# . ./vars
# ./revoke-full client1 # для каждого удаляемого клиента проделываем такую операцию 

Если всё хорошо, то должна появится такая строка

"Revoking Certificate ... Data Base Updated" 

 Копируем только что создавшийся crl.pem в /usr/local/etc/openvpn/ и выставляем права

# chmod 644 /usr/local/etc/openvpn/crl.pem

Рестарт сервера:

# /usr/local/etc/rc.d/openvpn restart

 

Кратковременно можно отключить клиентов, переименовав соответствующий им файл, находящийся на сервере в диреткории /usr/local/etc/openvpn/ccd

Обновлено 20.03.2012 11:03

Ваше мнение

Вы с пользой провели время на сайте?
 

Кто сейчас на сайте

Сейчас на сайте:
  • 1 гость

wolf3Волк - символ свободы и самостоятельности среди животных.

wolf1Волк - это символ бесстрашия. В любой схватке волк борется до победы или до смерти.

wolfsВолк живет семьей, ухаживает только за своей волчицей-женой и воспитывает своих детей-волчат.

Наверх