Установщик OpenVPN для Debian, Ubuntu, Fedora, CentOS, Arch Linux, Oracle Linux, Rocky Linux и AlmaLinux.
Этот скрипт позволит вам настроить собственный безопасный VPN-сервер всего за несколько секунд.
Вы также можете попробовать Wireguard-install, простой установщик для более простого, безопасного, быстрого и современного протокола VPN.
Сначала получите скрипт и сделайте его исполняемым:
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
Затем запустите его:
./openvpn-install.sh
Вам необходимо запустить скрипт от имени пользователя root и включить модуль TUN.
При первом запуске вам придется следовать за помощником и ответить на несколько вопросов, чтобы настроить VPN-сервер.
Когда OpenVPN установлен, вы можете запустить скрипт еще раз и получить возможность:
В вашем домашнем каталоге будут файлы .ovpn
. Это файлы конфигурации клиента. Загрузите их со своего сервера и подключитесь с помощью любимого клиента OpenVPN.
Если у вас есть какие-либо вопросы, сначала зайдите в FAQ. Пожалуйста, прочтите все, прежде чем открывать тему.
ПОЖАЛУЙСТА, не присылайте мне электронные письма или личные сообщения с просьбой о помощи. Единственное место, где можно получить помощь – это проблемы. Другие люди могут помочь, и в будущем другие пользователи также могут столкнуться с той же проблемой, что и вы. Мое время не предоставляется бесплатно только для тебя, ты не особенный.
Также возможно запустить сценарий в автономном режиме, например, не дожидаясь ввода пользователя, в автоматическом режиме.
Пример использования:
AUTO_INSTALL=y ./openvpn-install.sh
# or
export AUTO_INSTALL=y
./openvpn-install.sh
Затем будет установлен набор переменных по умолчанию с учетом необходимости ввода данных пользователем.
Если вы хотите настроить свою установку, вы можете экспортировать их или указать в одной строке, как показано выше.
APPROVE_INSTALL=y
APPROVE_IP=y
IPV6_SUPPORT=n
PORT_CHOICE=1
PROTOCOL_CHOICE=1
DNS=1
COMPRESSION_ENABLED=n
CUSTOMIZE_ENC=n
CLIENT=clientname
PASS=1
Если сервер находится за NAT, вы можете указать его конечную точку с помощью переменной ENDPOINT
. Если конечной точкой является общедоступный IP-адрес, за которым она находится, вы можете использовать ENDPOINT=$(curl -4 ifconfig.co)
(сценарий использует это значение по умолчанию). Конечная точка может быть IPv4 или доменом.
Другие переменные могут быть установлены по вашему выбору (шифрование, сжатие). Вы можете найти их в функции скрипта installQuestions()
.
Клиенты, защищенные паролем, не поддерживаются методом автоматической установки, поскольку Easy-RSA ожидает ввода данных пользователем.
Безголовая установка более или менее идемпотентна, поскольку ее можно безопасно запускать несколько раз с одними и теми же параметрами, например, с помощью поставщика состояний, такого как Ansible/Terraform/Salt/Chef/Puppet. Он установит и заново создаст Easy-RSA PKI, только если он еще не существует, и установит OpenVPN и другие вышестоящие зависимости только в том случае, если OpenVPN еще не установлен. Он воссоздаст всю локальную конфигурацию и заново сгенерирует клиентский файл при каждом автономном запуске.
Также возможно автоматизировать добавление нового пользователя. Здесь ключевым моментом является предоставление (строкового) значения переменной MENU_OPTION
вместе с остальными обязательными переменными перед вызовом сценария.
Следующий скрипт Bash добавляет нового пользователя foo
в существующую конфигурацию OpenVPN.
#! /bin/bash
export MENU_OPTION= " 1 "
export CLIENT= " foo "
export PASS= " 1 "
./openvpn-install.sh
nobody
/ nogroup
Скрипт поддерживает следующие дистрибутивы Linux:
Поддерживать | |
---|---|
АльмаЛинукс 8 | ✅ |
Амазонка Линукс 2 | ✅ |
Арч Линукс | ✅ |
ЦентОС 7 | ✅ |
Поток CentOS >= 8 | ✅ ? |
Дебиан >= 10 | ✅ ? |
Федора >= 35 | ✅ ? |
Оракул Линукс 8 | ✅ |
Рокки Линукс 8 | ✅ |
Убунту >= 18.04 | ✅ ? |
Следует отметить:
amd64
.systemd
. Этот сценарий основан на великой работе Nyr и его участников.
С 2016 года эти два сценария разошлись и больше не похожи друг на друга, особенно внутри. Основной целью скрипта было повышение безопасности. Но с тех пор скрипт был полностью переписан и добавлено множество функций. Однако сценарий совместим только с последними дистрибутивами, поэтому, если вам нужно использовать очень старый сервер или клиент, я советую использовать сценарий Nyr.
Больше вопросов и ответов в FAQ.md.
Вопрос: Какого провайдера вы порекомендуете?
О: Я рекомендую это:
Вопрос: Какой клиент OpenVPN вы рекомендуете?
О: Если возможно, официальный клиент OpenVPN 2.4.
openvpn
из вашего дистрибутива. Существует официальный репозиторий APT для дистрибутивов на основе Debian/Ubuntu.Вопрос: Защищен ли я от АНБ, используя ваш сценарий?
Ответ: Пожалуйста, просмотрите свои модели угроз. Даже если этот сценарий ориентирован на безопасность и использует современное шифрование, вам не следует использовать VPN, если вы хотите спрятаться от АНБ.
Вопрос: Существует ли документация OpenVPN?
О: Да, пожалуйста, обратитесь к руководству OpenVPN, в котором описаны все варианты.
Больше вопросов и ответов в FAQ.md.
Решения, которые предоставляют готовый к использованию сервер OpenVPN на основе этого сценария за один раз, доступны для:
openvpn-terraform-install
openvpn-ephemeral
Пожалуйста, откройте вопрос перед отправкой запроса на публикацию, если вы хотите обсудить изменение, особенно если оно большое.
Мы используем Shellcheck и shfmt для обеспечения соблюдения рекомендаций по стилю Bash и передового опыта. Они выполняются для каждого коммита/PR с помощью GitHub Actions, поэтому вы можете проверить конфигурацию здесь.
Предупреждение. Это не обновлено для OpenVPN 2.5 и более поздних версий.
Настройки OpenVPN по умолчанию довольно слабы в отношении шифрования. Этот сценарий призван улучшить это.
OpenVPN 2.4 стал отличным обновлением шифрования. Добавлена поддержка ECDSA, ECDH, AES GCM, NCP и tls-crypt.
Если вам нужна дополнительная информация об опции, упомянутой ниже, обратитесь к руководству OpenVPN. Это очень полно.
Большая часть функций OpenVPN, связанных с шифрованием, управляется Easy-RSA. Параметры по умолчанию находятся в файле vars.example.
По умолчанию OpenVPN не включает сжатие. Этот скрипт обеспечивает поддержку алгоритмов LZ0 и LZ4 (v1/v2), причем последний более эффективен.
Однако не рекомендуется использовать сжатие, поскольку оно используется при атаке VORACLE.
OpenVPN по умолчанию принимает TLS 1.0, которому почти 20 лет.
С помощью tls-version-min 1.2
мы применяем TLS 1.2, лучший протокол, доступный на данный момент для OpenVPN.
TLS 1.2 поддерживается начиная с OpenVPN 2.3.3.
OpenVPN по умолчанию использует сертификат RSA с ключом длиной 2048 бит.
В OpenVPN 2.4 добавлена поддержка ECDSA. Криптография на основе эллиптических кривых быстрее, легче и безопаснее.
Этот скрипт обеспечивает:
prime256v1
/ secp384r1
/ secp521r1
2048
4096
3072
По умолчанию используется ECDSA с prime256v1
.
OpenVPN по умолчанию использует SHA-256
в качестве хеша подписи, как и скрипт. Другого выбора на данный момент это не дает.
По умолчанию OpenVPN использует BF-CBC
в качестве шифра канала данных. Blowfish — старый (1993 г.) и слабый алгоритм. Это признается даже в официальной документации OpenVPN.
По умолчанию используется BF-CBC, аббревиатура от Blowfish в режиме цепочки блоков шифра.
Использование BF-CBC больше не рекомендуется из-за размера его блока 64 бита. Этот небольшой размер блока позволяет проводить атаки, основанные на коллизиях, как продемонстрировал SWEET32. Подробности см. на https://community.openvpn.net/openvpn/wiki/SWEET32. Исследователи безопасности из INRIA опубликовали информацию об атаке на 64-битные блочные шифры, такие как 3DES и Blowfish. Они показывают, что способны восстанавливать открытый текст, когда одни и те же данные отправляются достаточно часто, и показывают, как можно использовать уязвимости межсайтового скриптинга для достаточно частой отправки интересующих данных. Это работает через HTTPS, но также работает и для HTTP через OpenVPN. См. https://sweet32.info/ для более лучшего и подробного объяснения.
Эта атака затронула шифр OpenVPN по умолчанию, BF-CBC.
Действительно, AES является сегодняшним стандартом. Это самый быстрый и безопасный шифр, доступный сегодня. SEED и Camellia на сегодняшний день не уязвимы, но они медленнее, чем AES, и им относительно меньше доверяют.
Из поддерживаемых в настоящее время шифров OpenVPN рекомендует использовать AES-256-CBC или AES-128-CBC. OpenVPN 2.4 и новее также будут поддерживать GCM. Для версии 2.4+ мы рекомендуем использовать AES-256-GCM или AES-128-GCM.
AES-256 на 40% медленнее, чем AES-128, и нет никакой реальной причины использовать 256-битный ключ вместо 128-битного ключа с AES. (Источник: 1,2). Более того, AES-256 более уязвим к атакам по времени.
AES-GCM — это шифр AEAD, что означает, что он одновременно обеспечивает конфиденциальность, целостность и подлинность данных.
Скрипт поддерживает следующие шифры:
AES-128-GCM
AES-192-GCM
AES-256-GCM
AES-128-CBC
AES-192-CBC
AES-256-CBC
По умолчанию используется AES-128-GCM
.
В OpenVPN 2.4 добавлена функция под названием «NCP»: договорные параметры шифрования . Это означает, что вы можете предоставить набор шифров, например HTTPS. По умолчанию для него установлено значение AES-256-GCM:AES-128-GCM
, и он переопределяет параметр --cipher
при использовании с клиентом OpenVPN 2.4. Для простоты сценарий устанавливает для --cipher
и --ncp-cipher
выбранный выше шифр.
OpenVPN 2.4 согласует лучший шифр, доступный по умолчанию (например, ECDHE+AES-256-GCM).
Скрипт предлагает следующие варианты в зависимости от сертификата:
TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
По умолчанию используется TLS-ECDHE-*-WITH-AES-128-GCM-SHA256
.
OpenVPN по умолчанию использует ключ DH длиной 2048 бит.
В OpenVPN 2.4 добавлена поддержка ключей ECDH. Криптография на основе эллиптических кривых быстрее, легче и безопаснее.
Кроме того, создание классических ключей DH может занять очень много времени. Ключи ECDH являются эфемерными: они генерируются «на лету».
Скрипт предоставляет следующие возможности:
prime256v1
/ secp384r1
/ secp521r1
3072
4096
2048
По умолчанию используется prime256v1
.
Из вики OpenVPN о --auth
:
Аутентификация пакетов канала данных и (если включено) пакетов канала управления tls-auth с помощью HMAC с использованием алгоритма дайджеста сообщения alg. (По умолчанию используется SHA1). HMAC — это широко используемый алгоритм аутентификации сообщений (MAC), который использует строку данных, алгоритм безопасного хеширования и ключ для создания цифровой подписи.
Если выбран режим шифрования AEAD (например, GCM), указанный алгоритм --auth игнорируется для канала данных и вместо этого используется метод аутентификации шифрования AEAD. Обратите внимание, что alg по-прежнему указывает дайджест, используемый для tls-auth.
Скрипт предоставляет следующие варианты:
SHA256
SHA384
SHA512
По умолчанию используется SHA256
.
tls-auth
и tls-crypt
Из вики OpenVPN о tls-auth
:
Добавьте дополнительный уровень аутентификации HMAC поверх канала управления TLS, чтобы смягчить DoS-атаки и атаки на стек TLS.
Короче говоря, --tls-auth включает своего рода «брандмауэр HMAC» на порту TCP/UDP OpenVPN, где пакеты канала управления TLS, имеющие неверную подпись HMAC, могут быть немедленно отброшены без ответа.
О tls-crypt
:
Зашифруйте и аутентифицируйте все пакеты канала управления с помощью ключа из файла ключей. (Подробнее см. --tls-auth.)
Шифрование (и аутентификация) пакетов канала управления:
- обеспечивает большую конфиденциальность, скрывая сертификат, используемый для соединения TLS,
- усложняет идентификацию трафика OpenVPN как такового,
- обеспечивает постквантовую безопасность «бедняка» от злоумышленников, которые никогда не узнают общий ключ (т. е. отсутствие прямой секретности).
Таким образом, оба обеспечивают дополнительный уровень безопасности и смягчают DoS-атаки. Они не используются OpenVPN по умолчанию.
tls-crypt
— это функция OpenVPN 2.4, которая помимо аутентификации обеспечивает шифрование (в отличие от tls-auth
). Это более безопасно для конфиденциальности.
Скрипт поддерживает оба варианта и по умолчанию использует tls-crypt
.
Если хочешь, можешь сказать спасибо!
Большое спасибо участникам и оригинальной работе Нира.
Этот проект находится под лицензией MIT.