Инструменты пользователя

Инструменты сайта


openvpn

Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
openvpn [2014/03/11 12:18]
metallic [Настройка сервера]
openvpn [2022/03/25 17:00] (текущий)
Строка 63: Строка 63:
 Перед тем как выполнять какие-либо действия с сертификатами нужно загрузить переменные среды: Перед тем как выполнять какие-либо действия с сертификатами нужно загрузить переменные среды:
  
-  . ./vars+  . ./vars
  
 Запустим скрипт очистки сертификатов, он нам создаст и инициализирует необходимые файлы: Запустим скрипт очистки сертификатов, он нам создаст и инициализирует необходимые файлы:
  
-  ./clean-all+  ./clean-all
  
 В результате должы появиться следующие файлы: В результате должы появиться следующие файлы:
Строка 83: Строка 83:
 Далее генерим сертификат сервера, качестве Common Name указываем что-то вроде "server": Далее генерим сертификат сервера, качестве Common Name указываем что-то вроде "server":
  
-  ./build-key-server server+  ./build-key-server server
  
 Дальше ключ DH(Diffie Hellman): Дальше ключ DH(Diffie Hellman):
  
-  ./build-dh+  ./build-dh
  
 Также в качестве дополнительной защиты(HMAC-firewall) сгенерим еще один ключик: Также в качестве дополнительной защиты(HMAC-firewall) сгенерим еще один ключик:
Строка 98: Строка 98:
   ./build-key client2   ./build-key client2
   ./build-key client3   ./build-key client3
 +
 +<note tip>
 +При генерации клиентских ключей можно дополнительно защитить их паролем на случай их кражи или потери. Вместо скрипта build-key нужно использовать build-key-pass, тогда при генерации ключа будет запрошен пароль(Enter PEM pass phrase). В этом случае у клиента при каждом подключении будет запрашиваться пароль. Сменить его нельзя и если клиент забыл пароль, то поможет только отзыва сертификата и перевыпуск ключа.
 +</note>
  
 Конфигурационный файл сервера /etc/openvpn/server.conf: Конфигурационный файл сервера /etc/openvpn/server.conf:
Строка 181: Строка 185:
  
 Тут статически задан адрес клиента 192.168.0.241, также переданы ему адрес DNS-сервера и маршрут(в данном случае маршрут по-умолчанию). Тут статически задан адрес клиента 192.168.0.241, также переданы ему адрес DNS-сервера и маршрут(в данном случае маршрут по-умолчанию).
 +
 +<note>
 +Адреса клиентов надо выбирать из этого пула:
 +
 +  [  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
 +  [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
 +  [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
 +  [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
 +  [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
 +  [101,102] [105,106] [109,110] [113,114] [117,118]
 +  [121,122] [125,126] [129,130] [133,134] [137,138]
 +  [141,142] [145,146] [149,150] [153,154] [157,158]
 +  [161,162] [165,166] [169,170] [173,174] [177,178]
 +  [181,182] [185,186] [189,190] [193,194] [197,198]
 +  [201,202] [205,206] [209,210] [213,214] [217,218]
 +  [221,222] [225,226] [229,230] [233,234] [237,238]
 +  [241,242] [245,246] [249,250] [253,254]
 +</note>
  
 ===== Настройка клиента ===== ===== Настройка клиента =====
 +
 +На стороне клиента также устанавливается OpenVPN. В данном случае в качестве клиента рассмотрим Windows. Устанавливаем OpenVPN с GUI и создаем каталог C:\Program Files\OpenVPN\config. В этом каталоге создаем подкаталог с именем клиента, например client1 и копируем туда сертификаты корневой и сертификат клиента, статический ключ и ключ клиента. Создаем конфигурационный файл client1.ovpn:
 +
 +  # Указываем что мы клиент, тип интерфейса, протокол и адрес сервера. Директив remote с адресом сервера может быть больше одной,
 +  # в этом случае клиент будет последовательно пытаться подключиться к серверам.
 +  client
 +  dev tun
 +  proto udp
 +  remote 7.7.7.7 1194
 +  nobind
 +  # При указании этой дериктивы, клиент будет выбирать сервер из списка случайно, таким образом можно обеспечить балансировку нагрузки.
 +  ;remote-random
 +  
 +  # Пытаться установить подключение бесконечно. Удобно на компьютерах с непостоянным доступом в интернет.
 +  resolv-retry infinite
 +  
 +  # Аналогично, как на сервере, не перечитывать ключи при перезапусках
 +  persist-key
 +  persist-tun
 +  
 +  # Может понадобиться раскоментить, если работаете через WiFi
 +  ;mute-replay-warnings
 +  
 +  # Посылать пинги каждые 10 сек. на протяжении минуты, если ответа нет, соединение считается разорванным.
 +  keepalive 10 60
 +  
 +  # Пути к сертификатам и ключам относительно каталога config
 +  ca "client1\\ca.crt"
 +  cert "client1\\client1.crt"
 +  key "client1\\client1.key"
 +  tls-auth "client1\\ta.key" 1
 +  
 +  # Алгоритм шифрования данных
 +  cipher AES-256-CBC
 +  
 +  # Включаем сжатие
 +  comp-lzo
 +  
 +  # И уровень логирования
 +  verb 3
 +
 +Теперь можно запустить GUI и попробовать подключиться.
 +
 +===== Отзыв сертификатов =====
 +
 +Иногда может случиться такая ситуация, что выданный сертификат нужно заблокировать раньше, чем истечет срок его действия, для этого существует процедура "отзыва сертификата", .т.е. он просто добавляется в БД отозванных сертификатов и сервер при подключении проверяет это. Допустим мы хотим отозвать сертификат client1, переходим в каталог /usr/share/doc/openvpn/examples/easy-rsa/2.0 и выполняем следующие команды:
 +
 +  # . ./vars
 +  
 +  # ./revoke-full client1
 +  Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl-1.0.0.cnf
 +  Revoking Certificate 02.
 +  Data Base Updated
 +  Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl-1.0.0.cnf
 +  client1.crt: C = RU, ST = RU, L = Voronezh, O = Roga & KO, OU = Roga, CN = client1, name = Roga, emailAddress = admin@domain.ru
 +  error 23 at 0 depth lookup:certificate revoked
 +
 +Не смотря на то, что в последнем сообщении содержится "error 23", на самом деле это значит, что операция прошла успешно. В результате выполнения этой команды должен был появиться файл БД /etc/openvpn/keys/crl.pem. Теперь в конфигурационном файле сервера нужно раскоментировать эту строку:
 +
 +  crl-verify /etc/openvpn/keys/crl.pem
 +
 +И перезагрузить конфигурационный файл:
 +
 +  # /etc/init.d/openvpn reload
 +
 +С этого момента client1 подключиться не сможет. Если же он уже был подключен, то соединение будет разорвано при ближайшем пересогласовании сертификатов(по умолчании каждый час). Если же соединение нужно разорвать немедленно, то можно воспользоваться управляющим интерфейсом, подключившись через telnet:
 +
 +  # telnet localhost 7505
 +  Trying 127.0.0.1...
 +  Connected to localhost.
 +  Escape character is '^]'.
 +  >INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info
 +  
 +  kill client1
 +  SUCCESS: common name 'client1' found, 1 client(s) killed
 +  
 +===== Ссылки =====
 +
 +  * [[http://pro-ldap.ru/tr/zytrax/tech/encryption.html|Руководство по выживанию — шифрование, аутентификация]]
 +  * [[http://pro-ldap.ru/tr/zytrax/tech/ssl.html|Руководство по выживанию — TLS/SSL и сертификаты SSL (X.509)]]
 +  * [[http://habrahabr.ru/company/tuthost/blog/150433/|Цифровые SSL сертификаты. Разновидности, как выбрать?]]
openvpn.1394525893.txt.gz · Последнее изменение: 2022/03/25 17:04 (внешнее изменение)