openvpn

TODO: Обновите этот README, чтобы отразить изменения в форке bwinfosec.

OpenVPN

Github Actions (PR и основная ветка): Github CI

Travis CI (Фактический запуск OpenVPN): Статус сборки

Эта роль устанавливает OpenVPN, настраивает его как сервер, настраивает сетевые подключения и файрволы (в основном firewalld, ufw и iptables, если возможно), и может по желанию создавать клиентские сертификаты.

ОС в сборках CI:

  • Fedora 32+
  • CentOS 7 и 8

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

Требования

OpenVPN должен быть доступен как пакет в yum/dnf/apt! Для пользователей CentOS, эта роль выполнит yum install epel-release, чтобы обеспечить доступность OpenVPN.

Ubuntu precise имеет странную ошибку, которая может привести к сбою установки iptables-persistent. Есть обходное решение.

Ansible 2.10 и выше

С выходом Ansible 2.10, модули были перемещены в коллекции. За исключением модулей ansible.builtin, это означает, что дополнительные коллекции должны быть установлены для использования таких модулей, как seboolean (теперь ansible.posix.seboolean). Теперь эта коллекция обязательна: ansible.posix, и эта коллекция требуется, если используется ufw: community.general. Установка коллекций:

ansible-galaxy collection install ansible.posix
ansible-galaxy collection install community.general

Замечания/Ожидания по поддержке

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

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

Основные вкладки сообщества:

  • Функциональность для отзыва сертификатов
  • Полная поддержка LDAP

Переменные роли

Опции роли

Эти опции изменяют работу роли. Это общая группа, конкретные группы указаны ниже.

Переменная Тип Варианты По умолчанию Комментарий
clients список [] Список клиентов, которых нужно добавить в OpenVPN
openvpn_base_dir строка /etc/openvpn Путь, где будет храниться ваша конфигурация OpenVPN
openvpn_client_config_no_log логическое true, false true Запретить запись файлов конфигурации клиента в stdout Ansible
openvpn_key_dir строка /etc/openvpn/keys Путь, где будут храниться ваши закрытые ключи сервера и CA
openvpn_ovpn_dir строка /etc/openvpn Путь, где будут храниться ваши конфигурации клиентов
openvpn_revoke_these_certs список [] Список клиентских сертификатов для отзыва.
openvpn_selinux_module строка my-openvpn-server Установить имя модуля SELinux
openvpn_service_name строка openvpn Имя службы. Используется systemctl для запуска службы
openvpn_sync_certs логическое true, false false Отзыв сертификатов, не указанных явно в 'clients'
openvpn_uninstall логическое true, false false Установите на true, чтобы удалить службу OpenVPN
openvpn_use_ldap логическое true, false false Активный бэкэнд LDAP для аутентификации. Сертификат клиента больше не нужен

Получение конфигурации

Измените эти опции, если нужно настроить, как конфигурации загружаются на вашу локальную систему

Переменная Тип Варианты По умолчанию Комментарий
openvpn_fetch_client_configs логическое true, false true Скачать сгенерированные клиентские конфигурации на локальную систему
openvpn_fetch_client_configs_dir строка /tmp/ansible Если openvpn_fetch_client_configs истинно, локальный каталог для загрузки файлов конфигурации клиента
openvpn_fetch_client_configs_suffix строка "" Если openvpn_fetch_client_configs истинно, суффикс, который будет добавлен к загруженным файлам конфигурации клиента перед завершающим расширением .ovpn

Файрвол

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

Переменная Тип Варианты По умолчанию Комментарий
firewalld_default_interface_zone строка public Зона firewalld, куда будет перенаправлен "ansible_default_ipv4.interface"
iptables_service строка iptables Переопределить имя службы iptables
manage_firewall_rules логическое true, false true Позволить плейбуку управлять iptables
openvpn_firewall строка auto, firewalld, ufw, iptables auto Программное обеспечение файрвола для настройки сетевых правил. "auto" попытается определить его, проверив систему
openvpn_masquerade_not_snat логическое true, false false Установите на true, если хотите настроить MASQUERADE вместо SNAT по умолчанию в iptables.

Опции конфигурации OpenVPN

Эти опции изменяют работу самого OpenVPN.

Сетевое взаимодействие

Переменная Тип Варианты По умолчанию Комментарий
openvpn_client_register_dns логическое true, false true Добавить опцию register-dns к конфигурации клиента (только Windows).
openvpn_client_to_client логическое true, false false Установите на true, если хотите, чтобы клиенты могли взаимодействовать друг с другом.
openvpn_custom_dns список[string] [] Список DNS-серверов, применяется только если openvpn_set_dns установлен в true
openvpn_dualstack логическое true Нужно ли использовать дуаусток (IPv4 + v6)
openvpn_keepalive_ping целое 5 Установите интервал пинга keepalive в секундах.
openvpn_keepalive_timeout целое 30 Установите таймаут keepalive в секундах
openvpn_local строка unset Локальное имя хоста или IP-адрес для привязки. Если указано, OpenVPN будет привязываться только к этому адресу. Если не указано, OpenVPN будет привязываться ко всем интерфейсам.
openvpn_port целое 1194 Порт, на котором вы хотите запускать OpenVPN. Если у вас разные порты на разных серверах, я рекомендую установить порт в вашем инвентарном файле.
openvpn_proto строка udp, tcp udp Протокол, который вы хотите использовать для OpenVPN
openvpn_redirect_gateway логическое true, false true Прокси-шлюз OpenVPN
openvpn_resolv_retry целое/строка любое целое, бесконечное 5 Время повторной попытки разрешения имен. Установите "бесконечное", чтобы повторять попытки бесконечно в случае плохого соединения или восстановления режима сна ноутбука и т.д.
openvpn_server_hostname строка {{ inventory_hostname }} Имя сервера, которое будет помещено в файл конфигурации клиента
openvpn_server_ipv6_network строка unset Если установлено, адрес сети и префикс IPv6, который нужно присвоить клиентам. Если true, также будет использован IPv4.
openvpn_server_netmask строка 255.255.255.0 Маска подсети частной сети
openvpn_server_network строка 10.9.0.0 Частная сеть, используемая службой OpenVPN
openvpn_set_dns логическое true, false true Будет передан DNS клиенту (Cloudflare и Google)
openvpn_tun_mtu целое unset Установите значение tun-mtu. Пусто для значения по умолчанию.

Безопасность

Переменная Тип Варианты По умолчанию Комментарий
openvpn_auth_alg строка SHA256 Установите auth алгоритм аутентификации.
openvpn_ca_key словарь unset Содержит "crt" и "key". Если не установлено, сертификат CA и ключ будут автоматически сгенерированы на целевой системе.
openvpn_cipher строка AES-256-CBC Установите опцию cipher для сервера и клиента.
openvpn_crl_path строка unset Определите путь к файлу CRL для проверки отзыва сервера.
openvpn_duplicate_cn логическое true, false false Добавьте опцию duplicate-cn к конфигурации сервера - это позволяет клиентам подключаться несколько раз с одним ключом. ПРИМЕЧАНИЕ: ip-адреса клиента больше не будут статическими!
openvpn_rsa_bits целое 2048 Количество бит, используемых для защиты сгенерированных сертификатов
openvpn_script_security целое 1 Установите опцию безопасности скрипта openvpn
openvpn_tls_auth_key строка unset Единый элемент с заранее сгенерированным ключом аутентификации TLS.
openvpn_use_crl логическое true, false false Настройте сервер OpenVPN, чтобы учитывать список отзыва сертификатов.
openvpn_use_hardened_tls логическое true, false true Требовать минимальную версию TLS 1.2
openvpn_use_modern_tls логическое true, false true Использовать современный шифр для шифрования TLS (не рекомендуется с OpenVPN 2.4)
openvpn_use_pregenerated_dh_params логическое true, false false Параметры DH генерируются при установке по умолчанию
openvpn_verify_cn логическое true, false false Проверить, чтобы CN сертификата соответствовал FQDN
tls_auth_required логическое true, false true Попросите клиента отправить сгенерированный ta.key сервера во время подключения

Операции

Переменная Тип Варианты По умолчанию Комментарий
openvpn_addl_client_options список пусто Список пользовательских параметров клиента, которые уже не присутствуют в шаблоне клиента. (например, - mssfix 1400)
openvpn_addl_server_options список пусто Список пользовательских параметров сервера, которые уже не присутствуют в шаблоне сервера. (например, - ping-timer-rem)
openvpn_compression строка lzo Установите опцию compress. Пусто для отключения сжатия.
openvpn_config_file строка openvpn_{{ openvpn_proto }}_{{ openvpn_port }} Имя конфигурационного файла, который вы хотите использовать (установите в vars/main.yml)
openvpn_enable_management логическое true, false false
openvpn_ifconfig_pool_persist_file строка ipp.txt
openvpn_management_bind строка /var/run/openvpn/management unix Интерфейс для связывания с интерфейсом управления. Может быть unix или TCP сокетом.
openvpn_management_client_user строка root Используйте этого пользователя при использовании unix-сокета для интерфейса управления.
openvpn_push список пусто Установите здесь список строк, который будет вставлен в файл конфигурации как push "". Например, - route 10.20.30.0 255.255.255.0 создаст push "route 10.20.30.0 255.255.255.0"
openvpn_script_client_connect строка unset Путь к вашему скрипту подключения клиента openvpn
openvpn_script_client_disconnect строка unset Путь к вашему скрипту отключения клиента openvpn
openvpn_script_down строка unset Путь к вашему скрипту down openvpn
openvpn_script_up строка unset Путь к вашему скрипту up openvpn
openvpn_service_group строка nogroup Установите группу службы openvpn.
openvpn_service_user строка nobody Установите пользователя службы openvpn.
openvpn_status_version целое 1, 2, 3 1 Определите форматирование файла openvpn-status.log, в котором перечислены текущие соединения клиентов
openvpn_topology строка unset Ключевое слово "topology" будет установлено в конфигурации сервера с заданным значением.

Пользовательская конфигурация клиента OpenVPN (с сервера)

Переменная Тип Варианты По умолчанию Комментарий
openvpn_client_config логическое false Установите на true, если необходимо включить каталог конфигураций клиента
openvpn_client_config_dir строка ccd Путь к client-config-dir
openvpn_client_configs словарь {} Словарь настроек пользовательских конфигураций клиентов

Logrotate

Установите свои собственные пользовательские параметры logrotate

Переменная Тип Варианты По умолчанию Комментарий
openvpn_log_dir строка /var/log Установите местоположение файлов журналов openvpn. Этот параметр является частью значения конфигурации log-append.
openvpn_log_file строка openvpn.log Установите имя файла журнала. Этот параметр является частью значения конфигурации log-append.
openvpn_logrotate_config строка rotate 4
weekly
missingok
notifempty
sharedscripts
copytruncate
delaycompress
Настройка скрипта logrotate.

Упаковка

Эта роль включает множество различных пакетов. Переопределите имена по мере необходимости.

Переменная Тип Варианты По умолчанию Комментарий
epel_package_name строка epel-release Название пакета epel-release для установки из менеджера пакетов
iptables_persistent_package_name строка iptables-persistent Название пакета iptables-persistent для установки из менеджера пакетов
iptables_services_package_name строка iptables-services Название пакета iptables-services для установки из менеджера пакетов
openssl_package_name строка openssl Название пакета openssl для установки из менеджера пакетов
openvpn_ldap_plugin_package_name строка openvpn-auth-ldap Название пакета openvpn-auth-ldap для установки из менеджера пакетов
openvpn_package_name строка openvpn Название пакета openvpn для установки из менеджера пакетов
python_firewall_package_name строка python-firewall Название пакета python-firewall для установки из менеджера пакетов

LDAP объект

Переменная Тип Варианты По умолчанию Комментарий
ldap словарь Словарь, который содержит настройки LDAP
url строка ldap://host.example.com Адрес вашего LDAP бэкенда с синтаксисом ldap[s]://host[:port]
anonymous_bind строка False, True False Это не логическое значение Ansible, а строка, которая будет отправлена в конфигурационный файл.
bind_dn строка uid=Manager,ou=People,dc=example,dc=com Связанный DN, используемый, если "anonymous_bind" установлен в "False"
bind_password строка mysecretpassword Пароль пользователя bind_dn
tls_enable строка true, no no Принудительное использование шифрования TLS. Не обязательно с адресами ldaps
tls_ca_cert_file строка /etc/openvpn/auth/ca.pem Путь к CA ldap бэкенду. Это должно быть передано ранее
tls_cert_file строка Путь к сертификату аутентификации клиента
tls_key_file строка Путь к ключу аутентификации клиента
base_dn строка ou=People,dc=example,dc=com Основной DN, где бэкенд будет искать действующих пользователей
search_filter строка (&(uid=%u)(accountStatus=active)) Фильтр ldap-поиска
require_group строка False, True Это не логическое значение Ansible, а строка, которая будет отправлена в конфигурационный файл.
group_base_dn строка ou=Groups,dc=example,dc=com Конкретизируйте группу, которую необходимо искать. Требуется, если require_group установлен в "True".
group_search_filter строка ((cn=developers)(cn=artists)) Уточните допустимые группы
verify_client_cert строка none, optional, require client-cert-not-required В OpenVPN 2.4+ client-cert-not-required устарело. Используйте вместо этого verify-client-cert.

Зависимости

Не зависит от других ролей

Пример плейбука

- hosts: vpn
  gather_facts: true
  roles:
    - role: kyl191.openvpn
      openvpn_port: 4300
      openvpn_sync_certs: true
      clients:
        - client1
        - client2

Примечание: Так как роли потребуется знать используемую платформу (32 или 64 бита), вы должны установить gather_facts в true в вашем плейбуке.

Лицензия

MIT

Информация об авторе

Написано Кайл Лексмонд

О проекте

Ansible role to install and configure openvpn.

Установить
ansible-galaxy install bwInfoSec/ansible-role-openvpn
Лицензия
eupl-1.2
Загрузки
16923
Владелец
The universities in the state of Baden-Württemberg have joined forces to form the bwInfoSec federation in order to jointly improve information security.