OpenVPN via key

И так для удобства удаленного и безопасного доступа к сети используется OpenVPN  — это достаточно удобное и мощное средство , при этом очень гибкое в умелых руках . Достаточно распрастранено во многих взрослых компаниях , и так приступим к устрановке и настройке .

Обновим порты , что б поставить самую актуальную версию

#portsnap fetch


#portsnap extract

# cd /usr/ports/security/openvpn


# make && make install && make clean

В выподающем меню я оставляе все галочки (параметры) по умолчанию .

И так далее вам необходимо

#cd /usr/local/share/easy-rsa

#vi vars

И отредактировать файл под ваши данные :


export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Moscow"
export KEY_ORG="Company"
export KEY_EMAIL="abuse@company-domain.com"
export KEY_EMAIL=abuse@company-domain.com
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=Office
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

 

После чего из этого файла vars вам необходимо экспортировать $PATH переменные , делаем файл vars исполняемым и выполняем его (желательно из sh)

 

#sh

# chmod +x vars
# chmod +x build-ca
# chmod +x clean-all
# chmod +x pkitool
# chmod +x vars
# chmod +x whichopensslcnf

#. ./vars   - две точки это не опечатка

Появится в идеале — если все хорошо след. сообщение

NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/share/easy-rsa/keys

Очищаем от старых сертификатов и ключей папку

#./clean-all

Если при этом будет какое то сообещение , типа :

Please source the vars script first (i.e. «source ./vars»)
Make sure you have edited it to reflect your configuration.

Вы делаете что то не по пунктам .

 

# ./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) [XXX]:
Organizational Unit Name (eg, section) [office]:
Common Name (eg, your name or your server's hostname) [changeme]:
Name [changeme]:server  - вот тут надо будет ввести имя сервера 
Email Address [xxx@xxxxx.su]:

 

Не факт что у всех, но встречал подобное: при попытке создать сертификат - была ругня на отсутствующие файлы index.txt и serial. В /usr/local/share/doc/openvpn/easy-rsa/keys/server - создаём файлы (пустой и с "нулевым" содержимым соответственно)

Далее создаем сертификат для нашего сервера — server


 # ./build-key-server server
Generating a 1024 bit RSA private key
....................................................++++++
..........++++++
writing new private key to 'server.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) [XXXX]:
Organizational Unit Name (eg, section) [office]:
Common Name (eg, your name or your server's hostname) [server]:
Name [changeme]:server
Email Address [XX@XXXXX.su]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:XXXXXXXX
An optional company name []:server
Using configuration from /usr/local/share/easy-rsa/openssl-0.9.8.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:'XXXX'
organizationalUnitName:PRINTABLE:'office'
commonName            :PRINTABLE:'server'
name                  :PRINTABLE:'server'
emailAddress          :IA5STRING:'XXX@XXXX.su'
Certificate is to be certified until Jan 23 19:10:50 2023 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 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) [RU]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [XXXXX]:
Organizational Unit Name (eg, section) [office]:
Common Name (eg, your name or your server's hostname) [client]:
Name [changeme]:
Email Address [XXX@XXXX.su]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:XXXXXX
An optional company name []:client
Using configuration from /usr/local/share/easy-rsa/openssl-0.9.8.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:'XXXX'
organizationalUnitName:PRINTABLE:'office'
commonName            :PRINTABLE:'client'
name                  :PRINTABLE:'changeme'
emailAddress          :IA5STRING:'XXX@XXX.su'
Certificate is to be certified until Jan 23 19:15:04 2023 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-dh

После того как он сгенериться выходим из sh

И только теперь создаем ключ TLC аутентификации

#openvpn —genkey —secret keys/ta.key

 

После всех этих манипуляций в папке  /usr/local/share/easy-rsa/keys  будут след. файлы :

 

  • 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

 

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

# mkdir /usr/local/etc/openvpn
# mkdir /usr/local/etc/openvpn/keys
# mkdir /usr/local/etc/openvpn/ccd
Так же для удобства скопируем все ключи в /usr/local/etc/openvpn/keys (ca.crt, dh1024.pem, server.crt, server.key, ta.key).

 

Далее создаем файл конфигурации server.conf  и туда уже вписываем :

#порт на котором работает сервер
port 5000
# протокол — советую 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.90.91.0 255.255.255.0
#задаем МАРШРУТ который передаём клиентту
# и маску подсети для того чтобы он «видел»
# сеть за опенвпн сервером (сеть 192.168.1.0/24)
push «route 10.90.90.0 255.255.255.0»
# указываем где хранятся файлы с
# настройками IP-адресов клиентов
client-config-dir ccd
# добавляем маршрут сервер-клиент
route 10.90.91.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 5
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

mail# mkdir /usr/local/etc/openvpn
mail# mkdir /usr/local/etc/openvpn/keys
mail# mkdir /usr/local/etc/openvpn/ccd
mail# mkdir /var/log/openvpn/
mail# touch /var/log/openvpn/openvpn-status.log
mail# touch /var/log/openvpn/openvpn.log

Далее в директории /usr/local/etc/openvpn/ccd  создаем файл client

mail# touch  /usr/local/etc/openvpn/ccd/client

И вносим туда след. строку

ifconfig-push 10.90.91.2 10.90.91.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  openvpn.net   (так же рекомендую ставить версию 2.2.2  почему то с версией 2.3.0 у меня не заработало) берем самый свежий и устанавливаем ее  (все по умолчанию , виндовс может немного ругнуться на то что неподписанный драйвер , но это не беда )

Далее в вашем виндовс необходимо перейти в папку  C:\Program Files (x86)\OpenVPN\config с именем openvpn.ovpn

##############################################
# Sample client-side OpenVPN 2.0 config file #
# for connecting to multi-client server.     #
#                                            #
# This configuration can be used by multiple #
# clients, however each client should have   #
# its own cert and key files.                #
#                                            #
# On Windows, you might want to rename this  #
# file so it has a .ovpn extension           #
##############################################
dev tun
proto udp  # если тут не заработает можно поставить tcp - для NAT иногда просит
remote X.X.X.X#(реальный айпи вашего сервера)
port 5000 #(порт к которому устанавливать соединение
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

и копируем тудаже C:\Program Files (x86)\OpenVPN\config все необходимые файлы и ключи с сервера для работы клиента (файлы ca.crt, dh1024.pem, client.crt, client.key, ta.key)

Вот собственно и все

НЬЮАНС!
В /usr/local/etc/openvpn/ccd при создании файла с настройками для клиента помните:
ifconfig-push 10.10.200.2 10.10.200.1
этой сторокой организовуем езернет-тун с сеткой 10.10.200.0, 2-мя тачками с айпишнегами 10.10.200.2 и 10.10.200.1 и бродкастом 10.10.200.3
соответственно при создании 2-го, 3-го и т.д. клиента - строка должна принимать вид
ifconfig-push 10.10.200.6 10.10.200.5
ifconfig-push 10.10.200.10 10.10.200.9
и т.д

 

Удаляем недействительные сертификаты :

mail# cd /usr/local/share/easy-rsa/
mail# sh
# . ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/share/easy-rsa/keys
# ./revoke-full client1
Using configuration from /usr/local/share/easy-rsa/openssl-0.9.8.cnf
Error opening client1.crt client1.crt
20274:error:02001002:system library:fopen:No such file or directory:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:356:fopen(‘client1.crt’,’r’)
20274:error:20074002:BIO routines:FILE_CTRL:system lib:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:358:
unable to load certificate
Using configuration from /usr/local/share/easy-rsa/openssl-0.9.8.cnf
Error opening certificate file client1.crt
20277:error:02001002:system library:fopen:No such file or directory:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:356:fopen(‘client1.crt’,’r’)
20277:error:20074002:BIO routines:FILE_CTRL:system lib:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:358:
unable to load certificate

 

И такую операция надо выполнять для каждого клиента которого вы хотите удалить .

 

Не создаются маршруты в Windows 7

 

Тут проблема решается либо запускать openvpn из под администратора , или же есть решение опять же не везде работающее  — в конфиг клиента добавить :

route-method  exe

route-delay 2

openvpn --show-digests - вывести все алгоритмы хеширования
openvpn --show-ciphers - вывести список возможных алгоритмов шифрования

Подробное описание команд