OpenVPN

Инструкция по настройке сервера и клиента в дистрибутиве ALTLinux. Настройка клиента в ОС Windows, раскрыта тема объединения нескольких сетей, а так же возможность отзыва сертификата.

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

Устанавливаем следующие пакеты:

openvpn

openvpn-docs

теперь идем в ...

cd  /usr/share/doc/openvpn-docs-2.0.9/easy-rsa/2.0

если тут нет скриптов (в новых версиях все поменяли), то просто скачиваем отсюда:

wget https://github.com/OpenVPN/easy-rsa/releases/download/2.2.2/EasyRSA-2.2.2.tgz

правим файлик vars по своему усмотрению

затем делаем:

# source ./vars

далее

# ./clean-all

clean-all делаем только один раз, если понадобиться сгенерировать еще один клиентский сертификат, то этот шаг следует пропустить.

Генерируем корневой сертификат

# ./build-ca

генерируем сертификат сервера, я использую сертификаты pkcs12, это более универсальное решение.

# ./build-key-pkcs12 --server server

генерируем ключ Хеллмана

# ./build-dh

генерируем сертификат(ы) клиента(ов)

# ./build-key-pkcs12 --pkcs12 clientname

я копирую сертификаты в /etc/openvpn/keys

Конфиг сервера:

port 1194
proto tcp
dev tun
pkcs12 /etc/openvpn/keys/server.p12
dh /etc/openvpn/keys/dh1024.pem
server 10.8.214.0 255.255.255.240
push "route 10.0.0.0 255.0.0.0"
push "dhcp-option DNS 10.8.1.2"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
ifconfig-pool-persist /etc/openvpn/ipp.txt
verb 3

Маску расширить по вкусу

Запускаем

serice openvpn start

Добавляем автозапуск:

chkconfig openvpn on

Настраиваем Linux клиента

Устанавливаем те же пакеты, что и на сервере.

конфиг линукс клиента

client
dev tun
proto tcp
remote vpn.company.com 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
pkcs12 /path-to-cert/clientname.p12
dh /path-to-cert/dh1024.pem
comp-lzo
verb 4
mute 20
status /var/log/openvpn-company-stat.log
log-append /var/log/openvpn-company.log
up /etc/openvpn/up

Порт тут указан по умолчанию, рекомендую сменить. В скрипте up добавляем любые настройки, которые хотим поиметь, когда устанавливается соединение. Ключи я храню на зашифрованном при помощи cryptsetup-luks разделе.

запускаем

service openvpn start

конфигурация windows клиента

Для сохранения сертификата я использую токен iKey 1000 от Rainbow.

Ставим дрова и iKey 1000 Authentication Solution Version 2.2.2.55

Запускаем ее...

Вкладка Admin Tools, тут делаем Format, и Initialize, SO PIN по умолчанию rainbow, его конечно тоже надо сменить

После проведения инициализации в User Tools появится возможносить импортировать сертификат.

Жмем импорт и импортируем сертификат, тут же можно поменять пароль PKI Storage, который будет вводить пользователь для коннекта. После чего жмем Manage

Тут жмем кнопку Register, что бы зарегистирровать сертификат в системе.

Все, эту программу можно закрыть, а открываем Internet Explorer, в нем сервис->свойства обозревателя->содержание->сертификаты

Становимся курсором на наш сертификат и нажимаем "просмотр". Тут вкладка "состав"

Тут нам нужен отпечаток сертификата, копируем его в буфер объмена.

Устанавливаем openvpn-2.0.9-gui-1.0.3-install.exe

Конфиг

client
dev tun
proto tcp
remote vpn.company.com 1194
nobind
persist-key
persist-tun
ca c:\\path-to-ca\\ca.crt
cryptoapicert "THUMB:6c c3 24 eb f4 1b 26 f2 9c 6e 7c 75 46 8b 0f 45 8a c9 7a 5d"
comp-lzo
verb 3

Конфигурационный файл в отличии от линукс верии имеет расширение .ovpn

Для работы виндового клинета требуется что бы служба DHCP-клинет была запущена.

Все, можно работать. В трее правой кнопкой по значку openvpn->connect дальше, если был вставлен аппаратный ключ, откроется окно с запросом пароля, вводим пароль и наслаждаемся :-)

Если корпаративная сеть состоит из нескольких сегментов, не забывем прописать маршрут на центральной циске

ip route 10.8.214.0 255.255.255.0 ip.add.re.ss

Объединение нескольких сетей.

Бывают случаи, когда нужно объединить несколько филиалов, в которых не один компьютер, а своя сеть. В таком случае делаем вот что:

В конфиг сервера добавляем строки:

client-config-dir /etc/openvpn/ccd
route 192.168.4.0 255.255.255.0

Далее так же на сервере, создаем файлик по вот такому вот пути (т.к. в альте chroot и по другому не работает)

/var/lib/openvpn/etc/openvpn/ccd/clientname

в данном случае имя файла (clientname) должно совпадать с именем сертификата клиента.

В нем всего одна строчка:

iroute 192.168.4.0 255.255.255.0

В данном случае сеть филиала это 192.168.4.0/24

Компьютер на котором поднмается vpn-клиент является шлюзом в нашу основную сеть для всех машин филиала, следовательно у них должен быть прописан роут через наш vpn-клиент, можно просто указать наш компьютер как default gateway. Так же не забываем включить форвардинг (echo 1 > /proc/sys/net/ipv4/ip_forward) и проверить не мешает ли нам iptables.

Если необходимо отозвать сертификат.

Например сотрудник, которому был предоставлен доступ уволен, делаем следующее:

Идем в :

# cd /usr/share/doc/openvpn-docs-2.1.4/easy-rsa/2.0

Далее делаем

# source ./vars

# ./revoke-full clientname

Где clientname, это сертификат, который необходимо отозвать.

После выполнения этой команды должен создаться файлик:

/usr/share/doc/openvpn-docs-2.1.4/easy-rsa/2.0/keys/crl.pem

Вот тут небольшая засада (все из-за chroot), надеюсь у вас /usr и /var на одном разделе, если нет, то файлик придется копировать каждый раз, когда в него вносятся изменения, в моем же случае достаточно сделать жесткую ссылку в наш chroot.

Находясь в каталоге с файлом делаем:

# ln crl.pem /var/lib/openvpn/etc/openvpn/

Замечу, что симлинк работать не будет. И так, последний штрих, добавляем строку в конфигурационный файл нашего сервера:

crl-verify /etc/openvpn/crl.pem

Далее рестартуем openvpn, будьте внимательны, если при соединении сервер на найдет наш crl.pem он остановится.

Если же все прошло удачно то в логах вы увидите строки наподобие:

Tue Aug  2 05:42:17 2011 82.209.206.133:42778 TLS: Initial packet from 82.209.206.133:42778, sid=043307c0 660d92b2
Tue Aug  2 05:42:18 2011 82.209.206.133:42778 CRL CHECK OK: /C=BY/ST=CA/L=Polotsk/O=Trigran/CN=Trigran_CA/emailAddress=username@gmail.com
Tue Aug  2 05:42:18 2011 82.209.206.133:42778 VERIFY OK: depth=1, /C=BY/ST=CA/L=Polotsk/O=Trigran/CN=Trigran_CA/emailAddress=username@gmail.com
Tue Aug  2 05:42:18 2011 82.209.206.133:42778 CRL CHECK OK: /C=BY/ST=CA/L=Polotsk/O=Trigran/OU=Yury_Konovalov/CN=sf/emailAddress=username@gmail.com
Tue Aug  2 05:42:18 2011 82.209.206.133:42778 VERIFY OK: depth=0, /C=BY/ST=CA/L=Polotsk/O=Trigran/OU=Yury_Konovalov/CN=sf/emailAddress=username@gmail.com

Если сертификат отозван будут сообщения о неудачной верификации.

пока все...