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
Если сертификат отозван будут сообщения о неудачной верификации.
пока все...