пятница, 22 января 2010 г.

openvpn


http://mindcollapse.com/blog/68.html

http://www.kryukov.biz/wiki/Openvpn#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.BE.D0.B4.D0.B8.D0.BD_.D1.81.D0.B5.D1.80.D0.B2.D0.B5.D1.80.2C_.D0.BD.D0.B5.D1.81.D0.BA.D0.BE.D0.BB.D1.8C.D0.BA.D0.BE_.D0.BA.D0.BB.D0.B8.D0.B5.D0.BD.D1.82.D0.BE.D0.B2


Ставим OpenVPN


aptitude install openvpn

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

# cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/

Редактируем файл vars.

export D=`pwd`
export KEY_CONFIG=$D/openssl.cnf
export KEY_DIR=/etc/openvpn/keys
echo NOTE: when you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export KEY_SIZE=1024
export KEY_COUNTRY=RU
export KEY_PROVINCE=RU
export KEY_CITY=MOSCOW
export KEY_ORG="Artur Kryukov"
export KEY_EMAIL="artur@kryukov.ru"

Этот файл предназначен для установок переменных среды окружения, перед генерацией ключей. Запускаем его при помощи точки:

# . vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys
#

Запускаем программу очистки.

# ./clean-all
#

Осталось запустить процесс генерации ключей и сертификата СА.

# ./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) [RU]:
State or Province Name (full name) [RU]:
Locality Name (eg, city) [MOSCOW]:
Organization Name (eg, company) [Artur Kryukov]:
Organizational Unit Name (eg, section) []:Personal Server
Common Name (eg, your name or your server's hostname) []:kryukov.ru
Email Address [artur@kryukov.ru]:
#

Некоторые поля заполняются автоматически, ведь не зря мы изменяли содержимое файла vars. Хотя ответы по умолчанию можно было поместить в конфигурационный файл программы openssh — openssl.cnf.

В директории /etc/openvpn появилась директория keys, в которой находятся файлы сертификата и ключ.

Теперь следует создать ключ и сертификат для сервера.

# ./build-key-server artur.kryukov.ru
Generating a 1024 bit RSA private key
...++++++
..++++++
writing new private key to 'artur.kryukov.ru.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) [RU]:
Locality Name (eg, city) [MOSCOW]:
Organization Name (eg, company) [Artur Kryukov]:
Organizational Unit Name (eg, section) []:Personal Server
Common Name (eg, your name or your server's hostname) []:artur.kryukov.ru
Email Address [artur@kryukov.ru]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:password
An optional company name []:
Using configuration from /usr/share/doc/openvpn-2.0.5/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'RU'
localityName :PRINTABLE:'MOSCOW'
organizationName :PRINTABLE:'Artur Kryukov'
organizationalUnitName:PRINTABLE:'Personal Server'
commonName :PRINTABLE:'kryukov.ru'
emailAddress :IA5STRING:'artur@kryukov.ru'
Certificate is to be certified until Dec 11 14:31:19 2015 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
#

Сгенериуем сертификаты и ключи для клиентских машин. Я предполагаю заходить на сервер со своего ноутбука и с домашней машины, поэтому буду создавать ключи и сертификаты для двух машин.

# ./build-key master.kryukov.ru
Generating a 1024 bit RSA private key
.......++++++
.............................................++++++
writing new private key to 'master.kryukov.ru.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) [RU]:
Locality Name (eg, city) [MOSCOW]:
Organization Name (eg, company) [Artur Kryukov]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:master.kryukov.ru
Email Address [artur@kryukov.ru]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:password
An optional company name []:
Using configuration from /usr/share/doc/openvpn-2.0.5/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'RU'
localityName :PRINTABLE:'MOSCOW'
organizationName :PRINTABLE:'Artur Kryukov'
commonName :PRINTABLE:'master.kryukov.ru'
emailAddress :IA5STRING:'artur@kryukov.ru'
Certificate is to be certified until Dec 11 14:39:59 2015 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
#

И для домашней машины.

# ./build-key home.kryukov.ru
Generating a 1024 bit RSA private key
..............................................++++++
.......................................++++++
writing new private key to 'home.kryukov.ru.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) [RU]:
Locality Name (eg, city) [MOSCOW]:
Organization Name (eg, company) [Artur Kryukov]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:home.kryukov.ru
Email Address [artur@kryukov.ru]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:password
An optional company name []:
Using configuration from /usr/share/doc/openvpn-2.0.5/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'RU'
localityName :PRINTABLE:'MOSCOW'
organizationName :PRINTABLE:'Artur Kryukov'
commonName :PRINTABLE:'home.kryukov.ru'
emailAddress :IA5STRING:'artur@kryukov.ru'
Certificate is to be certified until Dec 11 14:42:06 2015 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
#

В заключении следует создать Diffie Hellman параметры.

# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..+.......................................................................+...+
.....+.....+...................................................................
............................+..................+.+...........+.................
...+.....++*++*++*
#

Посмотрим содержимое директории /etc/openvpn/keys:

# ls /etc/openvpn/keys/
01.pem ca.keyindex.txt.old
02.pemdh1024.pemmaster.kryukov.ru.crt
03.pemhome.kryukov.ru.crtmaster.kryukov.ru.csr
04.pemhome.kryukov.ru.csrmaster.kryukov.ru.key
artur.kryukov.ru.crthome.kryukov.ru.keyserial
artur.kryukov.ru.csrindex.txtserial.old
artur.kryukov.ru.keyindex.txt.attr
ca.crt index.txt.attr.old
#

Теперь необходимо разобраться какие файлы куда помещать.

ФайлМашинаНазначениеДоступ
ca.crtСервер и клиентыСертификат корневого СА Публичный
ca.keyТолько на сервереНеобходим для подписи других сертификатовСекретный
1024.pemТолько на сервереDiffie Hellman параметрыПубличный
artur.kryukov.ru.crtТолько на сервереСертификат сервераПубличный
artur.kryukov.ru.keyТолько на сервереКлюч сервераСекретный
home.kryukov.ru.crtТолько на клиентеСертификат клиентаПубличный
home.kryukov.ru.keyТолько на клиентеКлюч клиентаСекретный











Файлы *.csr можно удалить.
Скопируйте все необходимые файлы на клиенты в директорию /etc/openvpn/keys. Для клиента master.kryukov.ru, я скопировал три файла: ca.crt, master.kryukov.ru.crt и master.kryukov.ru.key.

На всякий пожарный проверьте действительность создаваемых сертификатов.

openssl verify -CApath /etc/openvpn/keys -CAfile ca.crt -purpose sslclient home.kryukov.ru.crt

Для сервера следует изменить значение поля -purpose на sslserver.

Конфигурируем OpenVPN - сервер

dev tap0
proto tcp-server
comp-lzo
daemon
mode server
tls-server
port 443
user nobody
group nogroup
persist-tun
persist-key
ifconfig-pool 10.1.0.2 10.1.0.12
ifconfig 10.1.0.1 255.255.255.224
ifconfig-pool-persist ipp.txt
dh /etc/openvpn/keys/dh1024.pem
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
log /var/log/openvpn.log
status /var/log/openvpn-status.log
verb 3

на клиенте также ставим openvpn.
конфиг:

dev tap
remote [server name or IP]
client
tls-client
proto tcp
port 443
comp-lzo
ns-cert-type server
user nobody
group nogroup
ping 15
ping-restart 120
ping-timer-rem
persist-tun
persist-key
# добавляем маршрут к локальной сети офиса
###route 10.1.1.0 255.255.255.224
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client.crt
key /etc/openvpn/keys/client.key
log /var/log/openvpn.log
verb 3

если у вас используется прокси сервер, то добавляем:

http-proxy [server] [port] [файл с логином/паролем]

в первой строке логин, а во второй пароль для доступа к прокси
порт должен быть прописан на прокси-сервере
метод CОNNECT

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

Клиент для Windows берем тут: http://openvpn.net/index.php/downloads.html.

Качаем файлы сертификата (winclient.pem), ключа клиентской машины (winclient.key) и публичного ключа сервера сертификации (CA.crt).Ложим их в директорию C:\Program Files\OpenVPN\config.
В директории C:\Program Files\OpenVPN\config и создаем текстовый конфигурационный файл client.ovpn следующего содержания:

dev tap
proto tcp
remote [server name or IP] 443
client
nobind
tls-client
comp-lzo
ns-cert-type server
ca "C:\\Program Files\\OpenVPN\\config\\CA.crt"
cert "C:\\Program Files\\OpenVPN\\config\\winclient.crt"
key "C:\\Program Files\\OpenVPN\\config\\winclient.key"
ping 15
ping-restart 120
ping-timer-rem
persist-key
persist-tun
verb 1

В составе пакета находится программа OpenVPN GUI. Она позволяет управлять соединениями, доступна через стандартное меню "Пуск".

В конфигурационном файле Windows клиента, параметр verb равен 1. Программа OpenVPN GUI по отладочной информации, выдаваемой клиентом понимает, было ли подключение к серверу. И сможет выдавать корректную информацию об установленном соединении.


----------------------------------------------------------------------
в ленни оказывается добавили новую фичу которая не даёт запускать скрипты. надо добавить в конфиг строчку

script-security 2

0 - не выполнять внешних программ
1 - (стоит по дефолту) выполнять просты, такие как ifconfig, ip, route, or netsh
2 - запускать внешние скрипты
3 - запускать скрипты с паролями (небезопасный)

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

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