OpenVPN — различия между версиями

Материал из Wikipedia PC-SUPP
Перейти к: навигация, поиск
(Новая страница: «'''OpenVPN''' — свободная реализация технологии виртуальной частной сети (VPN) с открытым исхо…»)
 
Строка 78: Строка 78:
  
 
<center>
 
<center>
= Команды и параметры при работе с сертификатами x509 и параметрами шифрования =
+
= Работа с сертификатами x509 и параметры шифрования =
 
</center>
 
</center>
  
cipher < alg > - указываем алгоритм шифрования. Например: cipher AES-256-CBC
+
# <font color="red" >'''cipher < alg >'''</font> - указываем алгоритм шифрования. Например: cipher AES-256-CBC
 
Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).
 
Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).
 
+
# <font color="red" >'''keysize < n >'''</font> - размер ключа в битах. Например: keysize 128
keysize < n > - размер ключа в битах. Например: keysize 128
+
# <font color="red" >'''auth < alg >'''</font> - алгоритм хэширования. Пример: auth SHA1
auth < alg > - алгоритм хэширования. Пример: auth SHA1
+
# <font color="red" >'''df < file >'''</font> - файл с ключом Диффи-Хелмана
df < file > - файл с ключом Диффи-Хелмана
+
# <font color="red" >'''ca < file >'''</font> - файл сертификата для CA
ca < file > - файл сертификата для CA
+
# <font color="red" >'''cert < file >'''</font> - сертификат локальной машины
cert < file > - сертификат локальной машины
+
# <font color="red" >'''key < file >'''</font> - локальный ключ машины
key < file > - локальный ключ машины
+
# <font color="red" >'''tls-server'''</font> - явно указывает, что данный хост является tls-server  
tls-server - явно указывает, что данный хост является tls-server  
+
# <font color="red" >'''tls-client'''</font> - соответственно tls-client
tls-client - соответственно tls-client
+
# <font color="red" >'''pkcs12 < file >'''</font> - указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример: pkcs12 /file
pkcs12 < file > - указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример: pkcs12 /file
+
# <font color="red" >'''crl-verify < file >'''</font> - список отозванных сертификатов, т.е. blacklist.
crl-verify < file > - список отозванных сертификатов, т.е. blacklist.
+
# <font color="red" >'''no-replay'''</font> - отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!!!
 
+
# <font color="red" >'''no-iv'''</font> - отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!
no-replay - отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!!!
 
no-iv - отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!
 
 
Последние две опции очень сильно снижают безопасность OpenVPN, крайне не рекомендуется их использование.
 
Последние две опции очень сильно снижают безопасность OpenVPN, крайне не рекомендуется их использование.
  
secret < file > - включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой --genkey, файл. Например: secret key.txt
+
# <font color="red" >'''secret < file >'''</font> - включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой --genkey, файл. Например: secret key.txt
  
 
Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки:
 
Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки:

Версия 15:05, 22 мая 2018

OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек. OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL[1].

В данной статье будут наиболее подробно описаны основные команды используемые в OpenVPN.

Пояснение файла openvpn.conf

  1. mode server - указывает программе работать в режиме сервера
  2. tls-server - активирует работу Transport Layer Security (криптографический протокол) сервера
  3. proto tcp-server - выбираем протокол TCP (если необходим UDP, тогда: proto udp)
  4. dev tap - используемый тип интерфейса - L2 туннель (для L3-туннеля: dev tun)
  5. port 1200 - указываем порт, по которому будет работать OpenVPN
  6. daemon - программа будет работать в режиме демона, если нет в этом необходимости - просто раскомментируйте строку
  7. tls-auth /etc/openvpn/keys/ta.key 0 - активирует дополнительный уровень аутентификации
  8. ca /etc/openvpn/keys/ca.crt - путь к корневому сертификату
  9. cert /etc/openvpn/keys/server.crt - путь к сертификату сервера
  10. key /etc/openvpn/keys/server.key - ключ сервера
  11. dh /etc/openvpn/keys/dh1024.pem - файл алгоритма Diffie-Hellman
  12. client-config-dir /etc/openvpn/ccd - путь к каталогу индивидуальных клиентских конфигураций
  13. ifconfig 192.168.10.1 255.255.255.0 - устанавливает виртуальный адрес сервера
  14. ifconfig-pool 192.168.10.2 192.168.10.99 - устанавливает диапазон виртуальных адресов для клиентов
  15. push "route 192.168.10.0 255.255.255.0 192.168.10.1" - эта команда будет выполняться на клиентских компьютерах, во время инициализации OpenVPN, она будет активировать роутинг так, чтобы клиенты автоматически использовали openvpn-сервер как шлюз для этой подсети
  16. duplicate-cn - включает возможность использования одного ключа несколькими клиентами
  17. verb 3 - указывает уровень отладки
  18. cipher DES-EDE3-CBC - шифрование по алгоритму DES-EDE3-CBC
  19. persist-key - будет загружать ключи в режиме persist, то есть их перезагрузка не потребуется в случае разрыва соединения
  20. log-append /var/log/openvpn.log - путь к файлу лога
  21. persist-tun - активирует работу tun/tap устройств в режиме persist
  22. comp-lzo - активирует использование сжатия

Описание команд и параметров OpenVPN

Приведенные в статье команды без -- (двумя знаками дефиса) перед командой должны быть использованы в конфигурационном файле, команды с -- в начале используются только из командной строки. Подробности использования команд и их параметры - man openvpn.

  1. remote < host > - определяет удаленный конец туннеля. Могут использоваться записи IP и DNS.
  2. local < host > - определяет локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
  3. dev < device > - определяет какой использовать тип устройства tun или tap. [2]
  4. port < port number > - указывает на каком порту будет работать OpenVPN (локально и удаленно).
  5. proto < proto > - какой протокол будет использоваться. Возможные значения: udp, tcp, tcp-client, tcp-server.[3]
  6. remote-random - если указана данная опция и в random перечисленно несколько удаленных хостов, то OpenVPN в случайном порядке будет к ним подключаться. Применяется для балансировки нагрузки.
  7. float - позволяет удаленному хосту изменять IP во время работы туннеля. Соединение при этом не разрывается.
  8. ipchange < cmd > - выполняет скрипт или команду указанную в < cmd >, если IP сменился.[4]
  9. connect-retry < seconds > - пробует переподключиться через указанное время в секундах, если соединение было разорвано.
  10. connect-retry-max < n > - максимальное количество повторов если соединение было разорвано
  11. resolv-retry < seconds > - если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключиться.
  12. lport < port > - указывает на локальный порт для использования OpenVPN
  13. rport < port > - аналогично для удаленного порта.[5]
  14. nobind - использовать динамический порт для подключения (только для клиента)
  15. shaper < bytes > - указывает скорость передачи данных в байтах для исходящего трафика (только для клиента)
  16. tun-mtu < mtu size > - устанавливает максимальный размер MTU. По умолчанию tun-mtu равен 1500.[6]
  17. dev-node < interface name > - устанавливает имя виртуального интерфейса.[7]
  18. ifconfig - устанавливает локальный IP и маску подсети для туннельного интерфейса.[8]
  19. server < network > < mask > - автоматически присваивает адреса всем клиентам (DHCP) в указанном диапазоне с маской сети. Данная опция заменяет ifconfig и может работаеть только с TLS-клиентами в режиме TUN, соответственно использование сертификатов обязательно.[9]
  20. server-bridge < gateway > < mask > < pool > - сервер в режиме моста для TAP устройств.[10]
  21. mode server - переключает OpenVPN в режим сервера (начиная с 2-й версии)
  22. mode p2p - данная опция идет по умолчанию.

Опции в режиме сервера

  1. push < options > - передача клиенту конфигурационных параметров.[11]
  2. comp-lzo - параметр сжатия трафика, идущего через виртуальный туннель. Может принимать значения yes, no, adaptive. Последнее используется по умолчанию.[12]

Работа с сертификатами x509 и параметры шифрования

  1. cipher < alg > - указываем алгоритм шифрования. Например: cipher AES-256-CBC

Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).

  1. keysize < n > - размер ключа в битах. Например: keysize 128
  2. auth < alg > - алгоритм хэширования. Пример: auth SHA1
  3. df < file > - файл с ключом Диффи-Хелмана
  4. ca < file > - файл сертификата для CA
  5. cert < file > - сертификат локальной машины
  6. key < file > - локальный ключ машины
  7. tls-server - явно указывает, что данный хост является tls-server
  8. tls-client - соответственно tls-client
  9. pkcs12 < file > - указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример: pkcs12 /file
  10. crl-verify < file > - список отозванных сертификатов, т.е. blacklist.
  11. no-replay - отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!!!
  12. no-iv - отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!

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

  1. secret < file > - включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой --genkey, файл. Например: secret key.txt

Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки: openvpn --show-ciphers

Алгоритмы хэширования: openvpn --show-digests

Показать все доступные TLS-шифры (TLS используется только для шифрования канала управления) openvpn --show-tls

Показать все доступные крипто-устройства в системе (если такие имеются): openvpn --show-engines

Для улучшения безопасности рекомендовано запускать все сервисы с минимальными правами. Следующими двумя командами мы укажем с правами какого пользователя и группы будет работать openvpn: user nobody group nogroup Где, соответственно, nobody и nogroup имена пользователя и группы.



Примечания

  1. OpenVPN: An Introduction and Interview with Founder, James Yonan (англ.). LinuxSecurity.com.
  2. Например: dev tun или dev tap. При одном из таких указаний будет использован свободный интерфейс tun или tap. Так же можно явно указывать номер виртуального интрефейса, например tun0.
  3. tcp-client - сам пытается установить соединение
    tcp-server - только ждет подключений
    Примечательно, что с использованием протокола udp VPN будет работать чуть быстрее, чем tcp. Но в плане стабильности работы лучше выбирать tcp (как показывает практика, VPN-соединение более устойчиво)
  4. Например: ipchange script-ip.sh
  5. Например: rport 8000 - OpenVPN будет пытаться подключится к удаленному порту 8000
  6. Например: tun-mtu 1200
  7. Например: dev-node openvpn1
  8. Например: ifconfig 10.3.0.1 255.255.255.0
  9. Например: server 10.3.0.0 255.255.255.0
    Подключившиеся клиенты получат адреса в диапазоне между 10.3.0.1 и 10.3.0.254.
  10. Например: server bridge 10.3.0.1 255.255.255.0 10.3.0.128 10.3.0.254
    Клиентам будут выданы адреса в диапазоне 10.3.0.128 - 10.3.0.254, в качестве шлюза будет указан 10.3.0.1.
  11. Например: push "route 192.168.0.0 255.255.255.0"
    Аналогично с помощью push клиенту могут передаваться следующие параметры:
    route, route-gateway, route-delay, redirect-gateway, inactive, ping, ping-exit, ping-restart, persist-key, persist-tun, comp-lzo, dhcp-option, ip-win32
    Последние две опции применимы только для Window-клиентов. Например передадим Windows-клиенту адрес DNS-сервера 11.11.11.11:
    push "dhcp-option DNS 11.11.11.11"
  12. Например:
    comp-lzo yes - принудительно включить сжатие
    comp-lzo no - принудительно отключить сжатие
    comp-lzo adaptive - адаптивный режим.