Как перезапустить openvpn linux
Перейти к содержимому

Как перезапустить openvpn linux

  • автор:

openvpn restart

В скрипте автоматического перехода на резервный канал использую:

/etc/init.d/openvpn restart

После этого openvpn не поднимается. Попробовал прописать /etc/init.d/openvpn restart в crontab -e под рутом. Туннель упал, но не поднялся. Использую tun

adxfighter
16.10.13 09:56:54 MSK

Initialization Sequence Completed ovpn-client[19613]: Replay-window backtrack occurred [1] ovpn-client[19613]: event_wait : Interrupted system call (code=4) 

adxfighter
( 16.10.13 10:10:41 MSK ) автор топика

а указать путь к конфигу?

сам туннель у тебя в принципе настроен?

flant ★★★
( 16.10.13 10:15:57 MSK )
Ответ на: комментарий от flant 16.10.13 10:15:57 MSK

Да, туннель годами работает. И рестарт из консоли работает. И рестарт из скрипта работает. А вот с cronом какая-то беда. Конфиг он видит.

Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: event_wait : Interrupted system call (code=4) Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: TCP/UDP: Closing socket Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 10.55.0.0 netmask 255.255.0.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 10.16.0.0 netmask 255.240.0.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 10.8.0.0 netmask 255.248.0.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 10.6.0.0 netmask 255.254.0.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 10.5.0.0 netmask 255.255.0.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 10.0.0.0 netmask 255.252.0.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 192.168.2.0 netmask 255.255.255.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 192.168.1.0 netmask 255.255.255.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/route del -net 192.168.100.0 netmask 255.255.252.0 Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: Closing TUN/TAP interface Oct 16 09:51:01 GWVolgograd ovpn-client[19613]: /sbin/ifconfig tun0 0.0.0.0 

Как запустить OpenVPN, при перезагрузке

Какая-то странная причина, я не могу заставить мой сервер OpenVPN запускаться во время загрузки, используя systemd на сервере Ubuntu Linux 16.04 LTS. Я пробовал несколько настроек, но не получилось.

Вот мой файл /lib/systemd/system/openvpn.service:

# cat /lib/systemd/system/openvpn.service
# This service is actually a systemd target, # but we are using a service since targets cannot be reloaded. [Unit] Description=OpenVPN service After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/true ExecReload=/bin/true WorkingDirectory=/etc/openvpn [Install] WantedBy=multi-user.target

Я хотел запустить сервисы после того, как сеть будут запущена, чтобы OpenVPN мог привязать определенный IP-адрес и порт. После = network.target говорит ждать, пока nework «запуститься».

Мое решение проблемы

Я, наконец, сдался и просто написал задание cron, которое начнется после каждой перезагрузки системы:

@reboot sleep 100;/etc/init.d/openvpn restart;/etc/init.d/ssh restart;/etc/init.d/squid reload

Команда @reboot принудительно запускает задание один раз при запуске. В этом случае перезапустится сервер openvpn и sshd:

$ ss -tulpn
$ netstat -tulpn
tcp 0 0 10.8.0.1:80 0.0.0.0:* LISTEN 1549/lighttpd tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1524/dnsmasq tcp 0 0 10.8.0.1:22 0.0.0.0:* LISTEN 1756/sshd tcp 0 0 10.8.0.1:3128 0.0.0.0:* LISTEN 1675/(squid-1) tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1732/openvpn

Должен быть способ запуска сервисов (OpenVPN) после выхода из сети. Однако я не смог понять. Если кто-нибудь знает, как решить эту проблему без использования cron, дайте мне знать в разделе комментариев ниже.

Похожие статьи:

  1. Как перезагрузить службу php7.0-fpm / php5.0-fpm
  2. Ошибка apache: Too many open files
  3. Перезапуск агентов управления на сервере Vmware esx
  4. Proxmox и OpenVPN

OpenVPN. Инструкция по применению

Виртуальные частные сети (VPN) давно вошли в повседневную жизнь. Множество технологий и реализаций сервиса приватных сетей (как для частного применения, так и для использования внутри периметра организаций), обеспечивающих определённый уровень безопасности, доступны для использования широкому кругу ИТ-специалистов.

Не смотря на обилие технологий, предлагаю остановиться на старом добром OpenVPN (в связке с EASY-RSA). Решение от Джеймса Йонана отличается гибкостью, функциональностью, надёжностью и непрерывностью разработки на протяжении приличного временного периода. Так сказать, мастодонт от мира VPN-решений.

Спойлер — ссылка на довольно функциональное решение (ничего особенного, чистый бэкэнд), написанное на bash некоторое время назад, ждёт вас в конце публикации (в виде github-репозитория под именем «openvpn_helper»), а здесь же уделю внимание общей структуре и некоторым аспектам использования набора скриптов и OpenVPN.
***
Список необходимых компонентов (используемая ОС — AlmaLinux 8):
1) OpenVPN 2.4.12;
2) EASY-RSA 3.0.8.

2. Описание общей структуры репозитория

2.1. Директория «ovpn-server»

Директория содержит файлы и поддиректории двух типов: статичные (входящие в репозитория непосредственно) и генерируемые автоматически.

  • «main.sh» — файл, содержащий основную кодовую базу репозитория.
  • «vpn.env» — основной файл конфигурации.
  • «full_setup_vpn_server.sh» — скрипт полной установки VPN-сервера. После запуска исполняет следующие действия:
    1) инициация структуры файлов/директорий для управления ключами easyrsa («./easyrsa init-pki»);
    2) создание корневого сертификата («./easyrsa build-ca»);
    3) генерация ключа Диффи-Хелмана («./easyrsa gen-dh»);
    4) создание запроса на выпуск сертификата VPN-сервера («./easyrsa gen-req vpn-server»);
    5) импорт и подписание сертификата VPN-сервера («./easyrsa sign-req server vpn-server»);
    6) генерация списка отозванных сертификатов («./easyrsa gen-crl»);
    7) генерация секретного ключа ta.key («/usr/sbin/openvpn —genkey —secret «$PKI_DIR/ta.key»»), используемого как на стороне сервера, так и на стороне клиента. Необходим для обеспечения дополнительного уровня безопасности (защищает от сканирования прослушиваемых VPN-сервером портов, переполнения буфера SSL/TLS, DoS-атак и flood-атак, а также вводит дополнительный механизм аутентификации между сервером и клиентом);
    8) генерация файла конфигурации для VPN-сервера, вспомогательных скриптов и файлов со справочной информацией;
    9) копирование всех необходимых сертификатов и файлов конфигурации, необходимы для работы VPN-сервера, в директорию «/etc/openvpn/server».
  • «create_cli_cert_and_conf.sh» — скрипт генерации клиентского набора сертификатов и файла конфигурации.
  • «revoke_client_cert.sh» — скрипт отзыва клиентских сертификатов.
  • «gen_crl_and_restart_ovpn.sh» — скрипт генерации CRL-сертификата (Certificate Revocation List или список отозванных сертификатов), содержащего сведения о всех отозванных клиентских сертификатах (отозванных посредством «revoke_client_cert.sh»). Скрипт необходимо запускать каждый раз после отзыва клиентского сертификата.
  • «get_client_cert_expire_info.sh» — скрипт проверки клиентских сертификатов на предмет устаревания.
  • «get_server_cert_expire_info.sh» — скрипт проверки серверных сертификатов на предмет устаревания.

Файлы и директории, формируемые на этапе полной установки VPN-сервера (full_setup_vpn_server.sh):

  • директория «pki_root/pki» — содержит развёрнутую структуру файлов/директорий для управления ключами easyrsa. Краткое описание файлов/директорий структуры:
    1) certs_by_serial — директория хранения выпущенных сертификатов (в рамках данной структуры pki), ранжированных по серийным номерам;
    2) issued — директория хранения выпущенных сертификатов, ранжированных по имени (CN);
    3) private — директория хранения закрытых ключей (в т.ч. и закрытого ключа корневого сертификата) к соответствующим сертификатам;
    4) renewed — директория хранения обновлённых сертификатов. В рамках «openvpn_helper» не используется.
    5) reqs — директория хранения запросов на выпуск сертификатов.
    6) revoked — директория хранения отозванных запросов/сертификатов/закрытых ключей;
    7) ca.crt — корневой сертификат;
    8) crl.pem — список отозванных сертификатов;
    9) dh.pem — ключ Диффи-Хеллмана;
    10) index.txt — актуальная база данных всех сертификатов в рамках данной структуры управления ключами/сертификатами;
    11) index.txt.attr — содержит параметр «unique_subject = yes», запрещающий создание сертификатов с одинаковыми именами до процедуры отзыва;
    12) index.txt.attr.old — предыдущее значение параметра index.txt.attr;
    13) index.txt.old — предыдущее содержание базы данных сертификатов index.txt. Изменяется, например, после отзыва клиентского сертификата);
    14) openssl-easyrsa.cnf — стандартные для данной структуры параметры с указанием имён переменных, которые возможно переопределить через переменные окружения;
    15) safessl-easyrsa.cnf — содержание аналогично файлу openssl-easyrsa.cnf, но с указанием конкретных значений;
    16) serial — используется для промежуточного хранения серийного номера генерируемого сертификата до момента его подписания. После подписания серийный номер перемещается в файл “serial.old”;
    17) serial.old — содержит серийный номер последнего сгенерированного (и подписанного) сертификата;
    18) ta.key — секретный ключ для реализации tls-аутентификации.
  • «RESTART_OVPN-$VPN_SERVER_NAME_S.sh» (где VPN_SERVER_NAME_S — параметр из vpn.env) — скрипт перезапуска экземпляра OpenVPN, основанного на конфигах и сертификатах, сгенерированных посредством «full_setup_vpn_server.sh» (на основе файла конфигурации «vpn.env», расположенного в текущей директории).
  • «SET-STATIC-IP-FOR-CLIENTS.txt» — заполняется в формате «username,ip-address», если требуется, чтобы клиентам VPN-сервера выдавались статичных ip-адреса. После внесения изменений необходимо запустить скрипт «RESTART»
  • «STOP_OVPN-$VPN_SERVER_NAME_S.sh» (где VPN_SERVER_NAME_S — параметр из vpn.env) — полный останов VPN-сервера.
  • «README_MAIN.txt» — краткая инструкция об использовании VPN-сервера.
  • «README-user-management.txt» — памятка об управлении пользователями. Возможность коннекта к VPN (помимо сертификатов) ограничивается локальными УЗ, созданными на хосте и состоящими в определённой группе пользователей.
  • «readme-firewalld-rules.txt» — памятка о настройке файервола (firewalld).
  • «readme-selinux-rules.txt» — памятка о конфигурации selinux.
  • «SAVED_CERT_PASSWORDS.txt» — сохранённые пароли (от корневого сертификата и сертификата VPN-сервера).

Файлы и директории, формируемые на этапе генерации клиентских сертификатов (create_cli_cert_and_conf.sh):

  • директория «cli_certs» — содержит поддиректории вида «CLIENT_CERT_NAME-files», где расположен набор клиентских конфигов и сертификатов, а также архив для передачи пользователю.

2.2. Директория «run_if_dnsmasq_is_not_installed»

  • Скрипт «run.sh». Простой скрипт, осуществляющий установку сервиса dnsmasq.
  • Файл конфигурации «dnsmasq.conf». Содержит пример конфигурации сервиса без вышестоящих dns-серверов.

Для использования DNS-сервера, установленного на хосте с OpenVPN, необходимо подкорректировать правила firewalld. Рекомендации по настройке смотреть в файле «readme-firewalld-rules.txt» (после развёртывания VPN-сервера).

2.3. Директория «run_if_openvpn_is_not_installed»

Скрипт «run.sh» устанавливает необходимый для работы VPN набор софта: dnf-репозиторий «epel-release», openvpn, easy-rsa.

2.4. Директория «run_if_selinux_enabled»

Директория содержит 2 файла:

  • selinux-модуль «ovpn_mod0.te»;
  • скрипт «run.sh», устанавливающий пакет «selinux-policy» и применяющий selinux-модуль «ovpn_mod0».

2.5. Директория «run_if_zip_is_not_installed»

Скрипт «run.sh» устанавливает zip-архиватор, используемый при создании архивов для передачи конечному пользователю.

2.6. Файл-инструкция «if_need_another_vpnserver_on_this_host.txt»

Документ, кратко описывающий алгоритм развёртывания второго (и последующих) VPN-сервисов на одном и том же хосте.

Алгоритм таков (для примера):
1) создаём директорию, например, «ovpn-server0»;
2) переносим в неё содержание директории «ovpn-server» (исключения: cli_certs, pki_root);
3) редактируем в директории «ovpn-server0» файл «vpn.env», уделяя особое внимание параметрам: VPN_SERVER_NAME_S,
VPN_PORT_S,
VPN_NETWORK_S,
VPN_DHCP_IP_S,
VPN_INTERNAL_NETWORK_ROUTE_S,
VPN_NETWORK_MASQUERADE_SRC_S,
VPN_INTERNAL_NETWORK_MASQUERADE_DST_S,
VPN_INTERNAL_IP_DEV_NAME_S,
VPN_SERVER_INT_FIREWALLD_ZONE_S,
VPN_PORT_CL;
4) из директории «ovpn-server0» запускаем скрипт «full_setup_vpn_server.sh».

2.7. Скрипт «run_first.sh»

Разрешает форвардинг (перенаправление) трафика ipv4, что важно для осуществления доступа из VPN-сети в интранет.

3. Описание основного файла конфигурации vpn.env

Параметры, относящиеся только к генерации сертификатов и конфига (например, «/etc/openvpn/server/server.conf») VPN-сервера (full_setup_vpn_server.sh):

  • VPN_CONF_DIR_S — директория хранения файлов конфигурации OpenVPN. Дефолтное значение — «/etc/openvpn/server».
  • VPN_SERVER_NAME_S — имя VPN-сервера в контексте возможности запуска нескольких экземпляров VPN в зависимости от имени файла конфигурации. Желательно, чтобы этот параметр совпадал с частью (ovpn-XXX) имени директории, где расположен файл «vpn.env»).
  • IP_VPN_SERVER_S — ip-адрес интерфейса, смотрящего в Интернет.
  • VPN_PORT_S — порт интерфейса, смотрящего в Интернет. Должен быть уникален, если в рамках одного хоста настроено более одного VPN-сервера.
  • VPN_SERV_LOG_DIR_S — директория размещения логов VPN-сервера. Значение по умолчанию — /var/log/openvpn.
  • VPN_MAX_CLIENTS_S — максимальное количество клиентов VPN-сервера. В топологии «subnet» при использовании подсети для VPN с маской 24 (или 255.255.255.0) максимально возможное кол-во клиентов равно 83. Значение по умолчанию — 32.
  • VPN_NETWORK_S — описание VPN-сети в формате «SUBNET SUBNET-mask». Значение по умолчанию — «172.16.10.0 255.255.255.0». Должно быть уникальным в случае, если в рамках одного хоста настроено более одного VPN-сервера.
  • VPN_DHCP_IP_S — адрес встроенного DHCP. Значение по умолчанию — 172.16.10.1. Должен быть уникальным в случае, если в рамках одного хоста настроено более одного VPN-сервера.
  • VPN_INTERNAL_NETWORK_ROUTE_S — маршрут до интранета (параметр передаётся клиентам VPN-сервера при подключении), к которой необходим доступ из VPN-сети. Заполнять в соответствии с конкретными параметрами вашей сети.
  • VPN_SERVER_LOG_LEVEL_S — уровень логирования VPN-сервера. Значение по умолчанию — 0.
  • VPN_NETWORK_MASQUERADE_SRC_S — описание подсети VPN-сервера, необходимое при отправке директив фаерволу (firewalld). Должно быть уникальным в случае, если в рамках одного хоста настроено более одного VPN-сервера.
  • VPN_INTERNAL_NETWORK_MASQUERADE_DST_S — описание внутренней подсети, необходимое при отправке директив фаерволу (firewalld).
  • VPN_INTERNAL_IP_DEV_NAME_S — имя интерфейса, смотрящего во внутреннюю сеть.
  • VPN_TUN_DEV_NAME_S — имя интерфейса, используемого при старте VPN-сервера. Должен быть уникальным в случае, если в рамках одного хоста настроено более одного VPN-сервера.
  • VPN_SERVER_INT_FIREWALLD_ZONE_S — зона фаервола, к которой должны принадлежать интерфейсы:
    а) VPN_TUN_DEV_NAME_S;
    б) VPN_INTERNAL_IP_DEV_NAME_S;
    в) интерфейс, являющийся дефолтовым гейтвэем для VPN-сервера.
    Пункт (в) необходим только в том случае, если VPN-сервер предполагается использовать как шлюз по умолчанию для VPN-клиентов.

Параметры, относящиеся только к генерации клиентских сертификатов и конфига (create_cli_cert_and_conf.sh):

  • IP_VPN_SERVER_CL — белый (и статичный) ip-адрес (или доменное имя), к которому необходимо обратиться VPN-клиенту для доступа к интрасети.
  • VPN_PORT_CL — соответствующий порт для параметра IP_VPN_SERVER_CL.
  • VPN_CLI_LOG_DIR_LINUX_CL — директория хранения лог-файлов, если клиент VPN-сервера — это хост с ОС Linux.
  • VPN_CLI_LOG_LEVEL_CL — уровень логирования VPN-клиента.

Параметры EASY-RSA (используются как при генерации сертификатов как для VPN-сервера, так и для клиента):

  • EASY_RSA_DIR_C — место расположения исполняемого файла easyrsa. Дефолтовое значение — /usr/share/easy-rsa/3.
  • EASYRSA_CERT_EXPIRE_EV — время устаревания (в днях) выпущенных сертификатов (в т.ч. и корневого). Дефолтовое значение — 3654 дней (10 лет).
  • EASYRSA_CRL_DAYS_EV – время устаревания (в днях) списка отзыва сертификатов (CRL). Дефолтовое значение — 3654 дней (10 лет).
  • EASYRSA_KEY_SIZE_EV – размер ключа шифрования.
  • EASYRSA_REQ_COUNTRY_EV – страна.
  • EASYRSA_REQ_PROVINCE_EV – область.
  • EASYRSA_REQ_CITY_EV – город.
  • EASYRSA_REQ_ORG_EV – организация.
  • EASYRSA_REQ_OU_EV – подразделение организации.
  • EASYRSA_REQ_CN_EV – имя сервера.
  • EASYRSA_REQ_EMAIL_EV – email-адрес администратора.

4. Заключение

Не смотря на функциональность и гибкость (особенно при наличии оснастки, описанной, например, выше), у OpenVPN есть недостаток (присутствует и у аналогичных решений) — механизм списка отозванных сертификатов (который CRL).

Если удалить клиентский сертификат из директории «issued» (структура управления ключами easyrsa), то его отзыв (посредством команды revoke) при компрометации окажется недоступным, что создаёт вероятность использования такого сертификата злоумышленниками. И в этом случае единственным вариантом обезопасить интранет от посторонних глаз — перевыпуск корневого сертификата, что влечёт за собой необходимость перевыпуска остальных сертификатов.

Логично было бы генерировать не список отозванных сертификатов (CRL), а список актуальных сертификатов (например, Cert Actual List), но, видимо, разработчики OpenVPN (а также Easy-RSA), когда-то решили иначе, что создаёт необходимость очень тщательно следить за всеми выпущенными/отозванными сертификатами.

Настройка сервера OpenVPN в Ubuntu 18.04

Настройка сервера OpenVPN в Ubuntu 18.04

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

В сочетании с соединениями HTTPS данная схема позволяет защитить учетные данные и транзакции в беспроводной сети. Вы можете обойти географические ограничения и цензуру и скрыть свое местоположение и любой нешифруемый трафик HTTP от незащищенной сети.

OpenVPN — полнофункциональное решение SSL VPN с открытым исходным кодом, поддерживающее широкий ассортимент конфигураций. В этом обучающем модуле вы настроите сервер OpenVPN на сервере Ubuntu 18.04, а затем настроите доступ к нему из Windows, macOS, iOS и/или Android. Приведенные в этом обучающем модуле шаги по установке и настройке максимально упрощены для каждого из вариантов.

Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.

Дополнительную информацию можно найти на этой странице.

Предварительные требования

Чтобы пройти этот обучающий модуль вам потребуется доступ к серверу Ubuntu 18.04, где будет размещаться служба OpenVPN. Перед началом прохождения обучающего модуля вам нужно будет настроить пользователя без привилегий root с привилегиями sudo . Вы можете воспользоваться нашим руководством Начальная настройка сервера Ubuntu 18.04, чтобы создать пользователя с соответствующими разрешениями. Настоящий обучающий модуль предусматривает использование брандмауэра, описание настройки которого приведено в доступном по ссылке обучающем модуле.

Также вам потребуется отдельный компьютер для выполнения функций центра сертификации (CA). Хоте в качестве центра сертификации технически возможно использовать сервер OpenVPN на локальном компьютере, это делать не рекомендуется, поскольку при этом в вашей сети VPN могут возникнуть некоторые уязвимости системы безопасности. Согласно официальной документации OpenVPN, вы должны разместить CA на отдельном компьютер, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш CA располагается на отдельном сервере Ubuntu 18.04, где также имеются пользователь без привилегий root с привилегиями sudo и базовый брандмауэр.

Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, вы можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего модуля. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys на компьютере CA, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 18.04.

Убедившись в выполнении предварительных требований, вы можете перейти к шагу 1 настоящего обучающего модуля.

Шаг 1 — Установка OpenVPN и EasyRSA

Для начала выполните обновление индекса пакетов вашего сервера VPN и установите OpenVPN. OpenVPN имеется в хранилищах Ubuntu по умолчанию, и поэтому вы можете использовать для установки apt :

OpenVPN — это VPN с TLS/SSL. Это означает, что она использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов необходимо создать собственный простой центр сертификации (CA). Для этого нужно загрузить последнюю версию EasyRSA, которую мы используем для создания инфраструктуры открытых ключей CA (PKI) из официального репозитория проекта на GitHub.

Как указывалось в предварительных требованиях, мы создадим CA на отдельном сервере. Мы выбрали такой подход, потому что если злоумышленник сможет взломать ваш сервер, он получит доступ к закрытому ключу CA и сможет использовать его для подписания новых сертификатов, предоставляя им доступ к вашей VPN. Соответственно с этим, для управления CA с отдельного компьютера нужно не допустить доступ несанкционированных пользователей к вашей VPN. В качестве дополнительной меры предосторожности рекомендуется выключать сервер CA, когда он не используется для подписания ключей.

Чтобы начать построение CA и инфраструктуры PKI, используйте wget для загрузки последней версии EasyRSA на систему CA и на сервер OpenVPN. Чтобы получить последнюю версию, откройте страницу Релизы на официальном сервере EasyRSA на проекте GitHub, скопируйте ссылку для загрузки файла с расширением .tgz и вставьте ее в следующую команду:

Затем извлеките tarball:

Вы успешно установили все требуемое программное обеспечение на свой сервер и на систему CA. Далее необходимо настроить переменные для EasyRSA и каталог CA, откуда будут генерироваться ключи и сертификаты, необходимые вашему серверу и клиентам для доступа к VPN.

Шаг 2 — Настройка переменных EasyRSA и построение CA

В комплект установки EasyRSA входит файл конфигурации, в котором можно изменять или задавать определенные переменные CA.

Откройте на компьютере CA каталог EasyRSA:

В этом каталоге есть файл с именем vars.example . Создайте копию этого файла и присвойте ей имя vars без расширения:

Откройте новый файл в предпочитаемом текстовом редакторе:

Найдите настройки параметров по умолчанию для новых сертификатов. Он будет выглядеть примерно так:

~/EasyRSA-3.0.4/vars

. . . #set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit" . . . 

Уберите значки комментария из этих строк и замените выделенные значения предпочитаемыми, но не оставляйте их пустыми:

~/EasyRSA-3.0.4/vars

. . . set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "NewYork" set_var EASYRSA_REQ_CITY "New York City" set_var EASYRSA_REQ_ORG "DigitalOcean" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" . . . 

После завершения редактирования сохраните и закройте файл.

В каталоге EasyRSA имеется скрипт easyrsa , который вызывается для выполнения разнообразных задач, связанных с построением и управлением CA. Запустите этот скрипт с опцией init-pki , чтобы запустить инфраструктуру открытых ключей на сервере CA:

Output
. . . init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.4/pki

Затем снова запустите скрипт easyrsa с опцией build-ca . В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key , представляющие открытую и закрытую части сертификата SSL.

  • ca.crt — файл открытой части сертификата CA, который используется сервером и клиентом OpenVPN, чтобы информировать друг друга о том, что они входят в единую сеть доверия и что между ними отсутствует потенциальный злоумышленник в качестве посредника. В связи с этим, копия файла ca.crt потребуется для вашего сервера и для всех ваших клиентов.
  • ca.key — закрытый ключ CA, используемый для подписания ключей и сертификатов серверов и клиентов. Если злоумышленник получит доступ к CA и файлу ca.key , он сможет подписывать запросы сертификатов и получать доступ к вашей VPN, что нарушит ее безопасность. Поэтому файл ca.key должен храниться только на компьютере CA, и для дополнительной безопасности компьютер CA следует выключать, когда он не используется для подписывания запросов сертификатов.

Если вы не хотите вводить пароль при каждом взаимодействии с CA, вы можете запустить команду build-ca с опцией nopass :

После выполнения команды вам будет предложено подтвердить обычное имя CA:

Output
. . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

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

Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.

Шаг 3 — Создание сертификата сервера, ключа и файлов шифрования

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

Для начала откройте каталог EasyRSA на сервере OpenVPN:

Запустите на сервере скрипт easyrsa с опцией init-pki . Хотя вы уже запускали эту команду в системе с CA, ее необходимо запустить здесь, потому что ваш сервер и центр сертификации используют разные каталоги PKI:

Вызовите скрипт easyrsa еще раз и используйте опцию gen-req с обычным именем этого компьютера. Вы можете использовать любое имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем модуле для сервера OpenVPN мы будем использовать обычное имя «сервер». Обязательно добавьте опцию nopass . Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями:

Примечание. Если вы выберете любое другое имя, кроме «server», вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в каталог /etc/openvpn вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf , чтобы он указывал на соответствующие файлы .crt и .key .

В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req . Скопируйте ключ сервера в каталог /etc/openvpn/ :

Используя безопасный метод (например, SCP как в примере ниже), переместите файл server.req на компьютер CA:

Откройте на компьютере CA каталог EasyRSA:

Снова запустите скрипт easyrsa и импортируйте файл server.req , добавив в путь к файлу обычное имя:

Затем подпишите запрос, запустив скрипт easyrsa с опцией sign-req и указанием типа запроса и обычного имени. Запрос может относиться к типу клиента или сервера , и для запроса сертификата сервера OpenVPN следует использовать запрос типа сервера :

В результатах вам будет предложено убедиться, что запрос поступил из надежного источника. Для подтверждения введите yes и нажмите ENTER :

You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes 

Если вы зашифровали ключ CA, вам будет предложено ввести пароль.

Затем переместите подписанный сертификат на сервер VPN, используя защищенный метод:

Прежде чем выполнять выход из системы на компьютере CA, переместите файл ca.crt на ваш сервер:

Затем снова выполните вход в систему на сервере OpenVPN и скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/ :

После этого перейдите в каталог EasyRSA:

Создайте надежный ключ Диффи-Хеллмана, который будет использоваться при обмене ключами:

Для этого может потребоваться несколько минут. После завершения сгенерируйте подпись HMAC для укрепления возможностей сервера по проверке целостности TLS:

Когда команда будет выполнена, скопируйте два новых файла в каталог /etc/openvpn/ :

Теперь все необходимые вашему серверу сертификаты и файлы ключей сгенерированы. Вы готовы создать соответствующие сертификаты и ключи, которые клиентский компьютер будет использовать для доступа к серверу OpenVPN.

Шаг 4 — Создание сертификата клиента и пары ключей

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

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

Вначале создайте в домашнем каталоге структуру каталогов, где будут храниться файлы сертификатов и ключей клиентской системы:

Поскольку в этом каталоге будут храниться пары сертификат/ключ ваших клиентов и файлы конфигурации, для него следует закрыть все разрешения:

Вернитесь в каталог EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass , указав обычное имя клиента:

Нажмите ENTER , чтобы подтвердить обычное имя. Скопируйте файл client1.key в ранее созданный каталог /client-configs/keys/ :

Затем переместите файл client1.req на компьютер CA, используя безопасный метод:

Войдите в систему на компьютере CA, откройте каталог EasyRSA и импортируйте запрос сертификата:

Затем подпишите запрос, как сделали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client :

В диалоге введите yes , чтобы подтвердить, что вы планируете подписать запрос сертификата, и что он поступил из доверенного источника:

Output
Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes

Если вы зашифровали свой ключ CA вам будет предложено ввести пароль.

В результате будет создан файл клиентского сертификата с именем client1.crt . Переместите этот файл обратно на сервер.

Подключитесь к серверу OpenVPN через SSH и скопируйте клиентский сертификат в каталог /client-configs/keys/ :

Затем скопируйте файлы ca.crt и ta.key в каталог /client-configs/keys/ :

Теперь вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих каталогах на вашем сервере. С этими файлами еще предстоит выполнить несколько действий, но к ним мы вернемся позднее. Сейчас же вы можете начать настройку OpenVPN на своем сервере.

Шаг 5 — Настройка службы OpenVPN

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

Прежде всего скопируйте файл с образцом конфигурации OpenVPN в каталог configuration и извлеките его, чтобы использовать в качестве основы:

Откройте файл конфигурации сервера в предпочитаемом текстовом редакторе:

Найдите раздел HMAC, выполнив поиск директивы tls-auth . Комментарии из этой строки должны быть уже удалены, но если строка еще закомментирована, уберите символ «;» в начале строки:

/etc/openvpn/server.conf

tls-auth ta.key 0 # This file is secret 

Затем найдите раздел криптографических шифров, выполнив поиск строк комментариев с текстом cipher . Шифр AES-256-CBC обеспечивает хороший уровень шифрования и хорошо поддерживается. Комментарии из этой строки должны быть уже удалены, но если строка еще закомментирована, уберите символ «;» в начале строки:

/etc/openvpn/server.conf

cipher AES-256-CBC 

Добавьте под этой строкой директиву auth , чтобы выбрать алгоритм обработки сообщений HMAC. Для этого хорошо подойдет SHA256 :

/etc/openvpn/server.conf

auth SHA256 

Затем найдите строку с директивой dh , которая определяет параметры алгоритма Диффи-Хеллмана. В связи с недавними изменениями EasyRSA имя файла ключа Диффи-Хеллмана может отличаться от указанного в файле образца конфигурации сервера. Если потребуется, измените указанное здесь имя файла, удалив цифры 2048 для соответствия ключу, сгенерированному на предыдущем шаге:

/etc/openvpn/server.conf

dh dh.pem 

Наконец, найдите настройки user и group и удалите «;» из начала каждой строки:

/etc/openvpn/server.conf

user nobody group nogroup 

Внесенные в файл образца server.conf изменения необходимы для работы OpenVPN. Описанные ниже изменения не обязательны, однако они также необходимы для многих распространенных вариантов использования.

(Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN

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

В файле server.conf имеется несколько директив, которые нужно изменить для активации этой функции. Найдите раздел redirect-gateway и удалите точку с запятой «;» в начале строки redirect-gateway , чтобы убрать режим комментария:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp" 

Под этой строкой найдите раздел dhcp-option . Снова удалите символ «;» в начале каждой из строк, чтобы убрать режим комментария:

/etc/openvpn/server.conf

push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" 

Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.

(Необязательно) Изменение порта и протокола

По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194 и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта . Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443 , поскольку его обычно не запрещают правила брандмауэра.

/etc/openvpn/server.conf

# Optional! port 443 

Довольно часто этот порт также ограничивает протокол. Если это так, измените значение proto с UDP на TCP:

/etc/openvpn/server.conf

# Optional! proto tcp 

Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify с 1 на 0 , поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP :

/etc/openvpn/server.conf

# Optional! explicit-exit-notify 0 

Если вам не нужно использовать другие порт и протокол, лучше всего оставить настройки по умолчанию.

(Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию

Если вы выбрали другое имя при использовании команды ./build-key-server , измените строки cert и key так, чтобы они указывали на соответствующие файлы .crt и .key . Если вы использовали имя по умолчанию «server», ничего изменять не нужно:

/etc/openvpn/server.conf

cert server.crt key server.key 

После завершения редактирования сохраните и закройте файл.

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

Шаг 6 — Настройка конфигурации сети сервера

Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.

Для изменения настройки переадресации IP по умолчанию на вашем сервере следует отредактировать файл /etc/sysctl.conf :

Найдите в файле строку комментария с параметром net.ipv4.ip_forward . Удалите символ «#» из начала строки, чтобы убрать режим комментария для этой настройки:

/etc/sysctl.conf

net.ipv4.ip_forward=1 

Сохраните файл и закройте его после завершения.

Чтобы прочитать файл и изменить значения для текущей сессии, введите:

Output
net.ipv4.ip_forward = 1

Если вы следовали указаниям обучающего модуля «Начальная настройка сервера Ubuntu 18.04», указанного в предварительных требованиях, у вас должен быть установлен брандмауэр UFW. Вне зависимости от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что нужно делать почти всегда), в этом обучающем модуле брандмауэр вам потребуется для определенных манипуляций с трафиком, поступающим на сервер. Некоторые правила брандмауэра нужно изменить, чтобы включить маскарадинг (это концепция iptables, обеспечивающая динамическую трансляцию сетевых адресов (NAT) для правильной маршрутизации клиентских соединений.

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

Публичный интерфейс компьютера показан в результатах выполнения этой команды после слова «dev». Например, в этом результате показан интерфейс с именем wlp11s0 , который выделен ниже:

Output
default via 203.0.113.1 dev wlp11s0 proto static

Когда у вас будет интерфейс, связанный с маршрутом по умолчанию, откройте файл /etc/ufw/before.rules , чтобы добавить соответствующую конфигурацию:

Правила UFW обычно добавляются с помощью команды ufw . Правила, перечисленные в файле before.rules , считываются и активируются до загрузки обычных правил UFW. Добавьте в верхнюю часть файла выделенные ниже строки. После этого будет задана политика по умолчанию для цепочки POSTROUTING в таблице nat , и любой трафик из VPN будет маскироваться. Обязательно замените wlp11s0 в строке -A POSTROUTING на интерфейс, определенный с помощью следующей команды:

/etc/ufw/before.rules

# # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to wlp11s0 (change to the interface you discovered!) -A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter . . . 

Сохраните файл и закройте его после завершения.

Затем вам нужно будет указать UFW разрешать перенаправление пакетов по умолчанию. Для этого откройте файл /etc/default/ufw :

Найдите в файле директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT :

/etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT" 

Сохраните файл и закройте его после завершения.

Затем измените настройки брандмауэра, чтобы разрешить трафик OpenVPN. Если вы не изменили порт и протокол в файле /etc/openvpn/server.conf , вам нужно будет открыть трафик UDP на порту 1194 . Если вы изменили порт или протокол, замените выбранные здесь значения.

Если вы забыли добавить порт SSH при выполнении обязательного обучающего модуля, добавьте его сейчас:

После добавления этих правил отключите и заново включите UFW, чтобы загрузить изменения из всех измененных файлов:

Теперь ваш сервер настроен для правильной обработки трафика OpenVPN.

Шаг 7 — Запуск и активация службы OpenVPN

Теперь вы готовы запустить службу OpenVPN на своем сервере. Для этого нужно использовать утилиту systemd systemctl .

Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной экземпляра после имени файла systemd. Файл конфигурации вашего сервера имеет имя /etc/openvpn/ server .conf , поэтому при его вызове в конец файла нужно добавить @server :

Еще раз убедитесь, что служба успешно запущена, введя следующую команду:

Если все прошло хорошо, результат будет выглядеть примерно следующим образом:

Output
● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

Также вы можете проверить доступность интерфейса OpenVPN tun0 с помощью следующей команды:

Будет выведен настроенный интерфейс:

Output
4: tun0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

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

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

Шаг 8 — Создание инфраструктуры конфигурации клиентских систем

Создание файлов конфигурации для клиентов OpenVPN может быть связано с этой задачей, поскольку каждый клиент должен иметь собственную конфигурацию, и каждая из этих конфигураций должна соответствовать параметрам, заданным в файле конфигурации сервера. Вместо создания единого файла конфигурации, который можно использовать только для одного клиента, на этом шаге мы определим процесс создания инфраструктуры клиентской конфигурации, который вы сможете использовать для быстрого генерирования файлов конфигурации. Вначале вы создадите «базовый» файл конфигурации, а затем сценарий, который позволит по мере необходимости генерировать уникальные файлы конфигурации клиентов, сертификаты и ключи.

Для начала создайте новый каталог для хранения файлов конфигурации клиентов в ранее созданном каталоге client-configs :

Затем скопируйте файл с образцом конфигурации клиента в каталог client-configs , чтобы использовать его как базовую конфигурацию:

    cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Откройте новый файл в текстовом редакторе:

Найдите в файле директиву remote . Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194 на выбранный порт:

~/client-configs/base.conf

. . . # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote your_server_ip 1194 . . . 

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

~/client-configs/base.conf

proto udp 

Уберите режим комментариев для директив user и group , удалив символ «;» из начала каждой строки:

~/client-configs/base.conf

# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup 

Найдите директивы, задающие ca , cert и key . Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:

~/client-configs/base.conf

# SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca ca.crt #cert client.crt #key client.key 

Также добавьте знак комментария в начале строки директивы tls-auth , поскольку вы добавите ключ ta.key непосредственно из файла конфигурации клиента:

~/client-configs/base.conf

# If a tls-auth key is used on the server # then every client must also have the key. #tls-auth ta.key 1 

Создайте зеркальное отражение настроек cipher и auth , заданных в файле /etc/openvpn/server.conf :

~/client-configs/base.conf

cipher AES-256-CBC auth SHA256 

Затем добавьте в файл директиву key-direction . Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:

~/client-configs/base.conf

key-direction 1 

В заключение, добавьте несколько строк комментариев. Хотя вы можете включить эти директивы в каждый файл конфигурации клиента, их нужно включать только для клиентов Linux с файлом /etc/openvpn/update-resolv-conf . Этот скрипт использует утилиту resolvconf для обновления данных DNS клиентов Linux.

~/client-configs/base.conf

# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf 

Если ваш клиент работает под управлением Linux, и на нем есть файл /etc/openvpn/update-resolv-conf , удалите знак комментария в начале этих строк файла конфигурации клиента, когда он будет сгенерирован.

Сохраните файл и закройте его после завершения.

Затем создайте простой скрипт, который скомпилирует базовую конфигурацию с соответствующим сертификатом, ключом и файлами шифрования, и поместите сгенерированную конфигурацию в каталог ~/client-configs/files . Откройте новый файл с именем make_config.sh в каталоге ~/client-configs :

Добавьте в файл следующее:

~/client-configs/make_config.sh

#!/bin/bash # First argument: Client identifier KEY_DIR=~/client-configs/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat $ \ (echo -e '') \ $ /ca.crt \ (echo -e '\n') \ $ /$ .crt \ (echo -e '\n') \ $ /$ .key \ (echo -e '\n') \ $ /ta.key \ (echo -e '') \ > $ /$ .ovpn 

Сохраните файл и закройте его после завершения.

Прежде чем продолжить, отметьте этот файл как исполняемый, введя следующую команду:

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

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

Шаг 9 — Создание конфигураций клиентов

Если вы следовали указаниям руководства, на шаге 4 вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в каталог ~/client-configs и запустив скрипт, созданный в конце предыдущего шага:

При этом файл client1.ovpn будет создан в каталоге ~/client-configs/files :

Output
client1.ovpn

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

Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.

Вот пример команды SFTP с использованием образца client1.ovpn , который можно запустить с локального компьютера (macOS или Linux). Он помещает файл .ovpn в домашний каталог:

Вот несколько инструментов и обучающих модулей для безопасной передачи файлов с сервера на локальный компьютер:

  • WinSCP
  • Использование SFTP для безопасной передачи файлов с удаленного сервера
  • Использование Filezilla для безопасной передачи и управления файлами в VPS

Шаг 10 — Установка конфигурации клиентов

В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.

Подключение OpenVPN будет иметь имя, совпадающее с именем файла .ovpn . В этом обучающем модуле это означает, что соединение будет иметь имя client1.ovpn , что соответствует первому сгенерированному клиентскому файлу.

Windows

Установка

Загрузите клиентское приложение OpenVPN для Windows со страницы загрузки OpenVPN. Выберите подходящую версию программы установки для вашей версии Windows.

Примечание. Для установки OpenVPN требуются привилегии администратора.

После установки OpenVPN, скопируйте файл .ovpn в:

C:\Program Files\OpenVPN\config 

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

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

Чтобы настроить приложение OpenVPN для запуска от имени администратора при каждом запуске, нажмите правой кнопкой мыши на его ярлык и выберите пункт Свойства. Внизу вкладки Совместимость нажмите кнопку Изменить параметры для всех пользователей. В новом окне установите отметку Запускать эту программу от имени администратора.

Подключение

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

После запуска OpenVPN нажмите правой кнопкой на значок OpenVPN в области задач, чтобы создать соединение. Откроется контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn ) и нажмите Подключиться.

Откроется окно состояния, где будут выведены данные журнала при установке соединения, и после подключения клиента будет выведено сообщение.

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

macOS

Установка

Tunnelblick — бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете загрузить последний образ этого клиентского приложения со страницы загрузки Tunnelblick. Дважды щелкните загруженный файл .dmg и следуйте указаниям по установке.

В конце процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Укажите ответ У меня есть файлы конфигурации и дайте Tunnelblick завершить работу. Откройте окно Finder и дважды нажмите client1.ovpn . Tunnelblick установит клиентский профиль. Для этого требуются привилегии администратора.

Подключение

Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке Приложения. После запуска Tunnelblick в панели меню в правом верхнем углу экрана появится значок Tunnelblick для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение VPN.

Linux

Установка

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

Однако проще всего будет использовать для этой цели программное обеспечение OpenVPN.

В Ubuntu или Debian вы можете установить его так же, как и на сервере, введя следующую команду:

В CentOS вы можете активировать репозитории EPEL и выполнить установку, введя следующую команду:

Настройка

Проверьте, включен ли в ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf :

Output
update-resolv-conf

Затем отредактируйте перемещенный файл конфигурации клиента OpenVPN:

Если вы нашли файл update-resolv-conf, уберите значок комментария из начала трех строк, добавленных для изменения настроек DNS:

client1.ovpn

script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf 

Если вы используете CentOS, измените директиву group с nogroup на nobody для соответствия доступным группам дистрибутива:

client1.ovpn

group nobody 

Сохраните и закройте файл.

Теперь для подключения к VPN вы можете просто указать команде openvpn файл конфигурации клиента:

Эта команда должна установить подключение к вашей VPN.

iOS

Установка

Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.

Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn в окно OpenVPN Documents.

iTunes показывает, что профиль VPN готов к загрузке в iPhone

Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импортированию. Нажмите зеленый значок плюс, чтобы импортировать его.

Приложение OpenVPN для iOS показывает, что новый профиль готов к импортированию.

Подключение

Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.

Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.

Приложение OpenVPN для iOS, подключенное к VPN

Android

Установка

Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.

Вы можете переместить профиль .ovpn, подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, мы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.

Запустите приложение OpenVPN и нажмите на меню, чтобы импортировать профиль.

Выбор меню импорта профиля в приложении OpenVPN для Android

Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /sdcard/Download/ ) и выберите файл. Приложение покажет, что профиль импортирован.

Приложение OpenVPN для Android выбирает профиль VPN для импорта

Подключение

Чтобы подключиться, просто нажмите кнопку Подключиться. Вам нужно будет указать, что вы доверяете приложению OpenVPN. Нажмите OK, чтобы установить соединение. Чтобы отключиться от VPN, вернитесь в приложение OpenVPN и выберите пункт Отключиться.

Приложение OpenVPN готово подключиться к VPN

Шаг 11 — Тестирование соединения VPN (необязательно)

Примечание. Этот метод тестирования соединения VPN будет работать, только если вы настроите перенаправление всего трафика через VPN на шаге 5.

После завершения установки нужно провести простую проверку, чтобы убедиться, что все работает нормально. Не активируйте соединение VPN, откройте браузер и перейдите в DNSLeakTest.

Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.

Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.

Шаг 12 — Отзыв сертификатов клиента

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

Для этого перейдите в каталог EasyRSA на компьютере CA:

Затем запустите скрипт easyrsa с опцией revoke , а затем укажите имя клиента, у которого хотите отозвать сертификат:

Система предложит вам подтвердить отзыв сертификата. Введите yes :

Output
Please confirm you wish to revoke the certificate with the following subject: subject= commonName = client2 Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes

После подтверждения действия CA полностью отзовет сертификат клиента. Однако в текущий момент ваш сервер OpenVPN не может проверить, отозваны ли сертификаты каких-либо клиентов, и все клиенты будут иметь доступ к сети VPN. Чтобы устранить эту проблему, нужно создать на компьютере CA список отзыва сертификатов (CRL):

Эта команда генерирует файл crl.pem . Выполните защищенное перемещение этого файла на ваш сервер OpenVPN:

На сервере OpenVPN скопируйте этот файл в каталог /etc/openvpn/ :

Затем откройте файл конфигурации сервера OpenVPN:

Добавьте в конце файла опцию crl-verify , чтобы сервер OpenVPN проверял созданный нами список отзыва сертификатов при каждой попытке подключения:

/etc/openvpn/server.conf

crl-verify crl.pem 

Сохраните и закройте файл.

Перезапустите OpenVPN, чтобы завершить отзыв сертификата:

Клиент больше не сможет подключаться к серверу, используя старые учетные данные.

Чтобы запретить доступ другим клиентам, повторите эту процедуру:

  1. Для отзыва сертификата используется команда ./easyrsa revoke client_name .
  2. Создайте новый список CRL
  3. Переместите новый файл crl.pem на сервер OpenVPN и скопируйте его в каталог /etc/openvpn , чтобы перезаписать старый список.
  4. Перезапустите службу OpenVPN.

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

Заключение

Теперь вы можете безопасно использовать интернет, защитив данные о своей личности и расположении и свой трафик от снуперов и цензоров.

Для настройки других клиентских систем вам нужно будет повторить шаги 4 и 9-11 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 12.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *