OpenVPN установка и настройка сервера под Gentoo linux: различия между версиями

Материал из AlexNook
Перейти к навигацииПерейти к поиску
 
(не показано 20 промежуточных версий этого же участника)
Строка 70: Строка 70:


В принципе всё это не так важно =)
В принципе всё это не так важно =)
Так же в этом файле полезно будет обратить внимание на опции действия сертификатов (срок их жизни). Я Свои продлил с 825 дней до 3650
{{File|/usr/share/easy-rsa/vars|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
# In how many days should the root CA key expire?
#
#set_var EASYRSA_CA_EXPIRE      3650
# In how many days should certificates expire?
#
set_var EASYRSA_CERT_EXPIRE    3650
</syntaxhighlight>
}}


===Процедура выпуска ключей===
===Процедура выпуска ключей===
Теперь выполняем команды из той же папки, куда мы перешли чуть ранее {{path|/usr/share/openvpn/easy-rsa/}}:
Процедура состоит из этапов:
 
* Генерация ключа и сертификата удостоверяющего центра
* Генерация ключей и сертификатов сервера
* Генерация ключей и сертификатов клиентов
* Генерация файла Дефи-Хеллмана для безопастной авторизации
 
Теперь выполняем команды из той же папки, куда мы перешли чуть ранее {{path|/usr/share/easy-rsa}}:
 
Заходим в папку, если ещё не зашли
{{root|cd /usr/share/easy-rsa}}
 
Создаём инфраструктуру для генерации ключей
{{root|./easyrsa init-pki}}
 
Создаём ключ удостоверяющего центра, который и будет всё подписывать
{{root|./easyrsa build-ca}}
 
На вопрос '''Common Name''' можно ввести '''donik.org''', как адрес нашего удостоверяющего центра. Он нигде особо не понадобится.


{{root|source ./vars}}
{{root|./clean-all}}
{{root|./build-ca}}
{{note|Последняя команда генерирует ключ и сертификат "Удостоверяющего центра" ;) }}
{{note|Последняя команда генерирует ключ и сертификат "Удостоверяющего центра" ;) }}
Удаляем пароль (passphrase) из ключа удостоверяющего центра
{{root|./easyrsa set-rsa-pass ca nopass}}
Он в принципе мог бы и сотаться, но для удобства его можно удалить.
{{Warning|У клиентов и сервера passphrase ключа важно удалить!}}


После инициализации приступаем к выпуску ключей для сервера и клиента.
После инициализации приступаем к выпуску ключей для сервера и клиента.


====Выпускаем сертификат для сервера====
====Выпускаем сертификат для сервера====
{{root|./build-key-server server}}
{{root|./easyrsa build-server-full server}}


Большинство параметров пройдут как и раньше по дефолту благодаря нашей подготовке в самом начале. На вопрос '''Common Name''' ввести '''server'''.
Большинство параметров пройдут как и раньше по дефолту благодаря нашей подготовке в самом начале. На вопрос '''Common Name''' ввести '''server'''.


Так же даём утвердительные ответы на 2 последних вопроса:
Удаляем passphrase
{{root|./easyrsa set-rsa-pass server nopass}}


'''Sign the certificate? [y/n]''' и '''1 out of 1 certificate requests certified, commit? [y/n]'''
====Выпускаем сертификат для клиента====
{{root|./easyrsa build-client-full client}}


====Выпускаем сертификат для клиента====
Удаляем passphrase
{{root|./build-key client}}
{{root|./easyrsa set-rsa-pass client nopass}}


На вопрос '''Common Name''' нужно ввести имя клиента: '''client''', client2, client3 и т. д. если у нас много разных клиентов.
На вопрос '''Common Name''' нужно ввести имя клиента: '''client''', client2, client3 и т. д. если у нас много разных клиентов.


{{note|На вопросы о защите ключей паролем я везде оставлял поле пустым (дефолтное значение) - то есть ключи без паролей.}}
{{note|На вопросы о защите ключей паролем я везде вводил временный пароль, который потом удалял.То есть ключи нам нужны для сервера и клиентов БЕЗ паролей.}}


===Генерируем параметры Диффи-Хеллмана===
===Генерируем параметры Диффи-Хеллмана===
{{root|./build-dh}}
Этот файлик поможет произвести первое рукопожатие для авторизации по не безопастному протоколу, для последующей обмены ключами и установки безопастного конекта
 
{{root|./easyrsa gen-dh}}


===Куда какие ключи положить===
===Куда какие ключи положить===
Теперь мы имеем в папке {{path|./keys}} сертификаты и ключи.
Теперь мы имеем в папке {{path|./pki}} сертификаты и ключи. В общем полный набор для всех (удостоверяющий центр (поможет в будущем генерировать новые ключи), сервер, клиенты)
 
{{warning|Важно, что файлы с расширением *.key являются приватными и их нужно защитить ограничением прав. Чтение и запись только владельцу: 600}}
{{warning|Важно, что файлы с расширением *.key являются приватными и их нужно защитить ограничением прав. Чтение и запись только владельцу: 600}}


Далее  мы должны по безопастному каналу переместить на клиента следующие файлы:
Далее  мы должны по безопастному каналу переместить на клиента следующие файлы:
* ca.crt
* ca.crt (сертификат удостоверяющего центра)
* client.crt
* client.crt (сертификат клиента для авторизации)
* client.csr
* client.req(запрос на выпуск сертификата, для туннеля он не нужен)
* client.key
* client.key (приватный ключ клиента)
 
{{warning|ca.key это приватный файл '''НЕ''' для клиента! Это ключ удостоверяющего центра}}
 
Для большей безопастности можно использовать как авторизацию по ключу, а так же и шифрование по сертификату одновременно. Для этого перенесём файлы, которые нужны будут серверу в его специальную папку, путь к которой будем использовать в конфиге сервера.
 
После чего, забрав клиентские файлики мы можем забэкапить папку PKI и удалить с сервера. В будущем, если потребуется новый выпуск ключей клиентам, мы можем её восстановить, и используя уже имеющуюся инфраструктуру продолжить генерацию ключей клиентам.


{{warning|ca.key это приватный файл '''НЕ''' для клиента!}}


Для большей безопастности можно использовать как авторизацию по ключу, а так же и шифрование по сертификату одновременно. Для этого перенесём файлы, которые нужны будут серверу в его специальную папку, а так же сделаем бэкап всех этих важных ключей, сертификатов и т.д. Выполним перечень команд:
{{root|mkdir -p /etc/openvpn/privnet}}
{{root|mkdir -p /etc/openvpn/privnet}}
{{root|mv /usr/share/openvpn/easy-rsa/keys/* /etc/openvpn/privnet/}}
 
Теперь бэкап всех данных
Переносим в паку выше файлы сервера:
{{root|tar cfzp /root/openvpn-privnet.tar.gz /etc/openvpn/privnet/}}
 
Ну и даём права для безопастности:
* ca.crt
{{root|chmod 400 /root/openvpn-privnet.tar.gz}}
* dh.pem
{{root|chmod 700 /etc/openvpn/privnet}}
* server.crt
* server.key
* server.req


==Конфигурирование OpenVPN сервера==
==Конфигурирование OpenVPN сервера==
Строка 139: Строка 188:
key privnet/server.key
key privnet/server.key
dh privnet/dh1024.pem
dh privnet/dh1024.pem
#encryption algorythm
data-ciphers AES-256-GCM:AES-256-CBC


#config VPN subnet as 10.8.0.0/24
#config VPN subnet as 10.8.0.0/24
server 10.8.0.0 255.255.255.0
server 10.8.0.0 255.255.255.0


#give clients same IPs if it's free when client connected
#give clients same IPs if it's free when client connected respecting ipp.txt.
ifconfig-pool-persist ipp.txt
#zero at the end means don't recreate it automaticly.
ifconfig-pool-persist ipp.txt 0
#ping clients every 10 seconds and if no reply was recivied in 120 seconds then restart tunnel
#ping clients every 10 seconds and if no reply was recivied in 120 seconds then restart tunnel
keepalive 10 120
keepalive 10 120
#enable trafic compression via lzo algorithm
#Disable trafic compression via lzo algorithm for SECURITY reason
comp-lzo
comp-lzo no
#what user and what group will be used to run openvpn service (not priviliged user used here)
#what user and what group will be used to run openvpn service (not priviliged user used here)
user nobody
user nobody
Строка 171: Строка 224:
и добавляем его в автозагрузку:
и добавляем его в автозагрузку:
{{root|rc-update add openvpn default}}
{{root|rc-update add openvpn default}}
===Указываем статические адреса клиента===
Данный метод согласно документации не даёт 100% гарантии, но вполне рабочий и очень простой.
Правим файлик ipp.txt занося туда CN клиента (у нас они шли как clint, client1, client2 и т.д.), а потом желаемый IP.
{{root|nano -w /etc/openvpn/ipp.txt}}
{{File|/etc/openvpn/ipp.txt|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
client,10.8.0.4
</syntaxhighlight>
}}
{{Note|Важно, что у нас из-за tun айпишники будут выдаваться чётными числами и на 2 больше, чем указано в файлике. Например, указывае 10.8.0.4 мы получим на клиенте 10.8.0.6, а указав 10.8.0.8 на клиенте будет 10.8.0.10. При этом доступны к указанию следующие номера: 10.8.0.4; 10.8.0.8; 10.8.0.12; 10.8.0.16; 10.8.0.20; и т.д. То есть с шагом в 4 ареса. Однако, если указать 10.8.0.16, то будет адрес 10.8.0.18, а при указании 10.8.0.18 он же и будет выдаваться!}}


==Конфигурирование OpenVPN клиента под Windows 7 64 bit==
==Конфигурирование OpenVPN клиента под Windows 7 64 bit==
Строка 191: Строка 259:
persist-key
persist-key
persist-tun
persist-tun
#encryption algorythm for ver. 2.4 and OLDER
#cipher AES-256-CBC
#encryption algorythm for ver. 2.5
data-ciphers AES-256-GCM
#execute routing commands to cause all outgoing traffic to be redirected over the VPN
redirect-gateway
ca ca.crt
ca ca.crt
cert client.crt
cert client.crt
key client.key
key client.key
comp-lzo
 
#Disable trafic compression via lzo algorithm for SECURITY reason
comp-lzo no
 
verb 3
verb 3
</syntaxhighlight>
</syntaxhighlight>
Строка 205: Строка 286:
* ca.crt  
* ca.crt  
* client.crt  
* client.crt  
* client.csr
* client.req (не обязателен, он был нужен для запроса на выпуск ключа от удостоверяющего центра)
* client.key
* client.key


Строка 214: Строка 295:
Если у клиента был выдан такой IP ;)
Если у клиента был выдан такой IP ;)
{{note|В win7 64 bit рекомендуется для тестирования отключить фаерволл, иначе пинги от сервера клиенту не пройдут.}}
{{note|В win7 64 bit рекомендуется для тестирования отключить фаерволл, иначе пинги от сервера клиенту не пройдут.}}
==Конфигурирование OpenVPN клиента под Gentoo linux==
Может так получится, что параллельно с сервером нужно поднять ещё и клиента, или даже несколько клиентских коннектов. Для этого нужно
1) Создать символчиескую ссылку на файл запуска сервиса
{{root|ln -s /etc/init.d/openvpn /etc/init.d/openvpn.donikov}}
2) Затем нужно добавить в систему конфиг клиента (аналогичен тому, что есть в винде)
{{File|/etc/openvpn/donikov.conf|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
client
dev tun
proto tcp
#enforce server certificate verification by clients
remote-cert-tls server
remote vpn.donik.org 11194
resolv-retry infinite
nobind
#encryption algorythm for ver. 2.5+
#data-ciphers AES-256-GCM
persist-key
persist-tun
ca ca.crt
cert vpnopi3.crt
key vpnopi3.key
comp-lzo no
verb 3
</syntaxhighlight>
}}
3) Затем новая служба запускается
{{root|/etc/init.d/openvpn.donikov start}}
4) И добавляется в автозапуск
{{root|rc-update add openvpn.donikov default}}


==Ссылки==
==Ссылки==

Текущая версия на 08:39, 15 ноября 2023

OpenVPN

OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Более подробно можно почитать на WikiPedia

Встала у меня необходимость подключаться к компьютеру с серым IP, у которого нет никакой возможности получить белый IP. Однако, вспомнив, что у меня есть домашний мини-сервер в белый постоянным IP было решено установить на него VPN сервер, к которому сможет подключиться компьютер с серым IP, а дальше уже, после подключения, сервер мог бы направлять запросы на клиента с серым IP.

Настройка конфигурации ядра

Для начала нам нужно пересобрать ядро системы с включённой опциец TUN/TAP. Я включил её не как отдельный LKM, а встроил в ядро.

Linux Kernel Configuration: 3.1.6 kernel config с поддержкой TUN/TAP
Device Drivers --->
	[*] Network device support --->
		<*>   Universal TUN/TAP device driver support

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

Установка OpenVPN под Gentoo

В Gentoo пакет ставится следующим образом: net-misc/openvpn-2.2.2

Проверям USE флаги. Use Flags: lzo ssl (?) Остальные USE флаги были выключенны.

Далее как обычно

emerge openvpn

Генерация сертификатов, ключей, а так же параметров Диффи-Хеллмана

Процедура достаточно простая, однако, для более глубокого познания процесс можно почитать вот тут.

Для генерации ключей надо установить пакет

emerge app-crypt/easy-rsa

если он не поставился у вас автоматом с openssl (это как я понимаю зависит от параметров компиляции openssl).

Настройка параметров ключей

В новой версии openVPN инструмент для настройки ключей уже не поставляется вместе с пакетом и его нужно установить отдельно.

emerge easy-rsa
Note: При работе с интрументом, помогающим в создании Private Key Infrastructure (PKI) мы должны зайти в /usr/share/easy-rsa.

Сперва нам нужно создать файлик vars, где будут находиться все базовые параметры необходимые для создания PKI.

Сделать его можно на основе vars.example.

Для этого выполняем:

cd /usr/share/easy-rsa
cp vars.example vars


Теперь занёс в файл vars требуемые начальные параметры.

У меня получилось что-то типа:


File: /usr/share/easy-rsa/vars
set_var EASYRSA_REQ_COUNTRY     "RU"
set_var EASYRSA_REQ_PROVINCE    "Russia"
set_var EASYRSA_REQ_CITY        "Moscow"
set_var EASYRSA_REQ_ORG         "Donik Corporation"
set_var EASYRSA_REQ_EMAIL       "admin@donik.org"
set_var EASYRSA_REQ_OU          "Donik Unit"

В принципе всё это не так важно =)

Так же в этом файле полезно будет обратить внимание на опции действия сертификатов (срок их жизни). Я Свои продлил с 825 дней до 3650

File: /usr/share/easy-rsa/vars
# In how many days should the root CA key expire?
#
#set_var EASYRSA_CA_EXPIRE      3650

# In how many days should certificates expire?
#
set_var EASYRSA_CERT_EXPIRE     3650

Процедура выпуска ключей

Процедура состоит из этапов:

  • Генерация ключа и сертификата удостоверяющего центра
  • Генерация ключей и сертификатов сервера
  • Генерация ключей и сертификатов клиентов
  • Генерация файла Дефи-Хеллмана для безопастной авторизации

Теперь выполняем команды из той же папки, куда мы перешли чуть ранее /usr/share/easy-rsa:

Заходим в папку, если ещё не зашли

cd /usr/share/easy-rsa

Создаём инфраструктуру для генерации ключей

./easyrsa init-pki

Создаём ключ удостоверяющего центра, который и будет всё подписывать

./easyrsa build-ca

На вопрос Common Name можно ввести donik.org, как адрес нашего удостоверяющего центра. Он нигде особо не понадобится.

Note: Последняя команда генерирует ключ и сертификат "Удостоверяющего центра" ;)

Удаляем пароль (passphrase) из ключа удостоверяющего центра

./easyrsa set-rsa-pass ca nopass

Он в принципе мог бы и сотаться, но для удобства его можно удалить.

Warning: У клиентов и сервера passphrase ключа важно удалить!


После инициализации приступаем к выпуску ключей для сервера и клиента.

Выпускаем сертификат для сервера

./easyrsa build-server-full server

Большинство параметров пройдут как и раньше по дефолту благодаря нашей подготовке в самом начале. На вопрос Common Name ввести server.

Удаляем passphrase

./easyrsa set-rsa-pass server nopass

Выпускаем сертификат для клиента

./easyrsa build-client-full client

Удаляем passphrase

./easyrsa set-rsa-pass client nopass

На вопрос Common Name нужно ввести имя клиента: client, client2, client3 и т. д. если у нас много разных клиентов.

Note: На вопросы о защите ключей паролем я везде вводил временный пароль, который потом удалял.То есть ключи нам нужны для сервера и клиентов БЕЗ паролей.

Генерируем параметры Диффи-Хеллмана

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

./easyrsa gen-dh

Куда какие ключи положить

Теперь мы имеем в папке ./pki сертификаты и ключи. В общем полный набор для всех (удостоверяющий центр (поможет в будущем генерировать новые ключи), сервер, клиенты)

Warning: Важно, что файлы с расширением *.key являются приватными и их нужно защитить ограничением прав. Чтение и запись только владельцу: 600

Далее мы должны по безопастному каналу переместить на клиента следующие файлы:

  • ca.crt (сертификат удостоверяющего центра)
  • client.crt (сертификат клиента для авторизации)
  • client.req(запрос на выпуск сертификата, для туннеля он не нужен)
  • client.key (приватный ключ клиента)
Warning: ca.key это приватный файл НЕ для клиента! Это ключ удостоверяющего центра

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

После чего, забрав клиентские файлики мы можем забэкапить папку PKI и удалить с сервера. В будущем, если потребуется новый выпуск ключей клиентам, мы можем её восстановить, и используя уже имеющуюся инфраструктуру продолжить генерацию ключей клиентам.


mkdir -p /etc/openvpn/privnet

Переносим в паку выше файлы сервера:

  • ca.crt
  • dh.pem
  • server.crt
  • server.key
  • server.req

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

У меня достаточно простая конфигурация сервера, конфиг которого я постарался снабдить подробными комментариями (правда на английском):

nano -w /etc/openvpn/openvpn.conf
File: /etc/openvpn/openvpn.conf
# non default port to prevent worm attacks!
port 2194
#udp is a bit faster but tcp is more stable, choosing tcp
proto tcp
#creating network tunnel for IP pachets management. we don't need TAP here for ethernet's frames management
dev tun

#paths to our certificates, private keys and Diffie Hellman params file
ca privnet/ca.crt
cert privnet/server.crt
key privnet/server.key
dh privnet/dh1024.pem

#encryption algorythm
data-ciphers AES-256-GCM:AES-256-CBC

#config VPN subnet as 10.8.0.0/24
server 10.8.0.0 255.255.255.0

#give clients same IPs if it's free when client connected respecting ipp.txt. 
#zero at the end means don't recreate it automaticly.
ifconfig-pool-persist ipp.txt 0
#ping clients every 10 seconds and if no reply was recivied in 120 seconds then restart tunnel
keepalive 10 120
#Disable trafic compression via lzo algorithm for SECURITY reason
comp-lzo no
#what user and what group will be used to run openvpn service (not priviliged user used here)
user nobody
group nobody
#not reread key files after tunnel restarts
persist-key
#don't do anything to tun device after restarting openvpn
persist-tun
#file with clients that established connection at this moment
status openvpn-status.log
#set log verbose level to 3 out of 11
verb 3
#don't rewrite log file - only append at the end of file
log-append /var/log/openvpn.log
#allow client-to-client connections throught our server
client-to-client

Запускаем демон

/etc/init.d/openvpn start

и добавляем его в автозагрузку:

rc-update add openvpn default

Указываем статические адреса клиента

Данный метод согласно документации не даёт 100% гарантии, но вполне рабочий и очень простой. Правим файлик ipp.txt занося туда CN клиента (у нас они шли как clint, client1, client2 и т.д.), а потом желаемый IP.


nano -w /etc/openvpn/ipp.txt
File: /etc/openvpn/ipp.txt
client,10.8.0.4


Note: Важно, что у нас из-за tun айпишники будут выдаваться чётными числами и на 2 больше, чем указано в файлике. Например, указывае 10.8.0.4 мы получим на клиенте 10.8.0.6, а указав 10.8.0.8 на клиенте будет 10.8.0.10. При этом доступны к указанию следующие номера: 10.8.0.4; 10.8.0.8; 10.8.0.12; 10.8.0.16; 10.8.0.20; и т.д. То есть с шагом в 4 ареса. Однако, если указать 10.8.0.16, то будет адрес 10.8.0.18, а при указании 10.8.0.18 он же и будет выдаваться!

Конфигурирование OpenVPN клиента под Windows 7 64 bit

Для проверки работоспособности нашего сервера необходимо поставить VPN клиента на стороннюю машину и протестировать всё. Я выбрал Windows, так как использую его как свою десктоп ОС.

Сперва необходимо скачать программу с официального сайта [1]. В самом низу страницы будет Windows Installer (64-bit).

После установки программы заходим в папку c:\Program Files\OpenVPN\config\ где, запустив блокнот от имени администратора, создаём конфиг client.ovpn:

File: client.ovpn
client
dev tun
proto tcp
#enforce server certificate verification by clients
remote-cert-tls server
remote YOUR_SERVER_IP_OR_DOMAIN 2194
resolv-retry infinite
nobind
persist-key
persist-tun

#encryption algorythm for ver. 2.4 and OLDER
#cipher AES-256-CBC

#encryption algorythm for ver. 2.5
data-ciphers AES-256-GCM

#execute routing commands to cause all outgoing traffic to be redirected over the VPN
redirect-gateway

ca ca.crt
cert client.crt
key client.key

#Disable trafic compression via lzo algorithm for SECURITY reason
comp-lzo no

verb 3
Note: Вместо YOUR_SERVER_IP_OR_DOMAIN нужно внести адрес, где установлен OpenVPN сервер.

Далее в папку с конфигом нам нужно положить наши ключи и сертификат, которые мы ранее выделили как клиентские:

  • ca.crt
  • client.crt
  • client.req (не обязателен, он был нужен для запроса на выпуск ключа от удостоверяющего центра)
  • client.key

После чего нам нужно запустить OpenVPN GUI от имени администратора и два раза кликнуть на иконке OpenVPN в трее. Проверить установку связи можно пингами в обе стороны.

ping 10.8.0.4

Если у клиента был выдан такой IP ;)

Note: В win7 64 bit рекомендуется для тестирования отключить фаерволл, иначе пинги от сервера клиенту не пройдут.

Конфигурирование OpenVPN клиента под Gentoo linux

Может так получится, что параллельно с сервером нужно поднять ещё и клиента, или даже несколько клиентских коннектов. Для этого нужно

1) Создать символчиескую ссылку на файл запуска сервиса

ln -s /etc/init.d/openvpn /etc/init.d/openvpn.donikov

2) Затем нужно добавить в систему конфиг клиента (аналогичен тому, что есть в винде)


File: /etc/openvpn/donikov.conf
client
dev tun
proto tcp
#enforce server certificate verification by clients
remote-cert-tls server
remote vpn.donik.org 11194
resolv-retry infinite
nobind

#encryption algorythm for ver. 2.5+
#data-ciphers AES-256-GCM

persist-key
persist-tun

ca ca.crt
cert vpnopi3.crt
key vpnopi3.key

comp-lzo no
verb 3

3) Затем новая служба запускается

/etc/init.d/openvpn.donikov start

4) И добавляется в автозапуск

rc-update add openvpn.donikov default

Ссылки