bwinfosec.openvpn

TODO: Zaktualizuj ten README, aby odzwierciedlić zmiany w fork'u bwinfosec.

OpenVPN

Github Actions (PR-y i główny): Github CI

Travis CI (Uruchamianie openvpn): Build Status

Ten moduł instaluje OpenVPN, konfiguruje go jako serwer, ustawia sieci i zapory (głównie firewalld, ufw i iptables są obsługiwane w podstawowym zakresie) oraz może opcjonalnie tworzyć certyfikaty klientów.

Systemy operacyjne w CI build:

  • Fedora 32+
  • CentOS 7 i 8

Uwaga: Udostępniam kod w repozytorium na licencji open source. Ponieważ jest to moje osobiste repozytorium, licencja, którą otrzymujesz na mój kod, jest ode mnie, a nie od mojego pracodawcy.

Wymagania

OpenVPN musi być dostępny jako pakiet w yum/dnf/apt! Dla użytkowników CentOS ten moduł uruchomi yum install epel-release, aby upewnić się, że openvpn jest dostępny.

Ubuntu precise ma dziwny błąd, który może spowodować niepowodzenie instalacji iptables-persistent. Istnieje obejście.

Ansible 2.10 i wyżej

Z wydaniem Ansible 2.10, moduły zostały przeniesione do kolekcji. Z wyjątkiem modułów ansible.builtin, oznacza to, że dodatkowe kolekcje muszą być zainstalowane, aby używać takich modułów jak seboolean (teraz ansible.posix.seboolean). Ta kolekcja jest teraz wymagana: ansible.posix, a ta kolekcja jest wymagana, jeśli używasz ufw: community.general. Instalacja kolekcji:

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

Uwagi/Zapewnienie wsparcia

Osobiście używam tego modułu do zarządzania OpenVPN na CentOS 8. Staram się, aby moduł na tej platformie był w pełni funkcjonalny z domyślną konfiguracją. Proszę pamiętać, że jestem jedną osobą i mam pełnoetatową pracę oraz inne zobowiązania.

Odpowiedzi na jakiekolwiek problemy będą udzielane na zasadzie najlepszej dostępności z mojej strony, w tym możliwość, że w ogóle nie odpowiem. Problemy wynikające z użycia ustawień niestandardowych (w tym wszelkie duże wkłady społeczności) będą miały niższy priorytet.

Główne wkłady społeczności:

  • Funkcjonalność do unieważniania certyfikatów
  • Wsparcie LDAP

Zmienne roli

Opcje roli

Te opcje zmieniają działanie roli. To jest zbiorcza grupa, szczegółowe grupy są wymienione poniżej.

Zmienna Typ Wybory Domyślna Komentarz
klienci lista [] Lista klientów do dodania do OpenVPN
openvpn_base_dir string /etc/openvpn Ścieżka, w której Twoja konfiguracja OpenVPN będzie przechowywana
openvpn_client_config_no_log boolean true, false true Zapobiega logowaniu plików konfiguracyjnych klientów do stdout przez Ansible
openvpn_key_dir string /etc/openvpn/keys Ścieżka, w której będą przechowywane prywatne klucze serwera i CA
openvpn_ovpn_dir string /etc/openvpn Ścieżka, w której będą przechowywane konfiguracje klientów
openvpn_revoke_these_certs lista [] Lista certyfikatów klientów do unieważnienia.
openvpn_selinux_module string my-openvpn-server Ustaw nazwę modułu SELinux
openvpn_service_name string openvpn Nazwa usługi. Używana przez systemctl do uruchomienia usługi
openvpn_sync_certs boolean true, false false Unieważnia certyfikaty, które nie są wyraźnie zdefiniowane w 'klientach'
openvpn_uninstall boolean true, false false Ustaw na true, aby odinstalować usługę OpenVPN
openvpn_use_ldap boolean true, false false Aktywne zaplecze LDAP do autoryzacji. Certyfikat klienta nie jest już potrzebny

Pobieranie konfiguracji

Zmień te opcje, jeśli musisz dostosować, jak konfiguracje są pobierane na lokalny system

Zmienna Typ Wybory Domyślna Komentarz
openvpn_fetch_client_configs boolean true, false true Pobierz wygenerowane konfiguracje klientów na lokalny system
openvpn_fetch_client_configs_dir string /tmp/ansible Jeśli openvpn_fetch_client_configs jest prawdziwe, lokalny katalog, do którego należy pobrać pliki konfiguracyjne klientów
openvpn_fetch_client_configs_suffix string "" Jeśli openvpn_fetch_client_configs jest prawdziwe, sufiks do dodania do pobranych plików konfiguracyjnych klientów przed rozszerzeniem .ovpn

Zapora

Zmień te opcje, jeśli musisz wymusić konkretną zaporę lub zmienić interakcję playbooka z zaporą.

Zmienna Typ Wybory Domyślna Komentarz
firewalld_default_interface_zone string public Strefa firewalld, do której będzie przypisywany "ansible_default_ipv4.interface"
iptables_service string iptables Nadpisz nazwę usługi iptables
manage_firewall_rules boolean true, false true Pozwól playbookowi zarządzać iptables
openvpn_firewall string auto, firewalld, ufw, iptables auto Oprogramowanie zapory do skonfigurowania zasad sieciowych. "auto" spróbuje je wykryć poprzez inspekcję systemu
openvpn_masquerade_not_snat boolean true, false false Ustaw na true, jeśli chcesz ustawić MASQUERADE zamiast domyślnego SNAT w iptables.

Opcje konfiguracyjne OpenVPN

Te opcje zmieniają działanie samego OpenVPN.

Sieci

Zmienna Typ Wybory Domyślna Komentarz
openvpn_client_register_dns boolean true, false true Dodaj opcję register-dns do konfiguracji klienta (tylko Windows).
openvpn_client_to_client boolean true, false false Ustaw na true, jeśli chcesz, aby klienci mieli dostęp do siebie nawzajem.
openvpn_custom_dns lista[string] [] Lista serwerów DNS, stosowana tylko wtedy, gdy openvpn_set_dns ustawione jest na true
openvpn_dualstack boolean true Czy używać połączenia dualstack (IPv4 + v6)
openvpn_keepalive_ping int 5 Ustaw sekundy interwału ping keepalive.
openvpn_keepalive_timeout int 30 Ustaw sekundy czasu oczekiwania keepalive
openvpn_local string unset Lokalna nazwa hosta lub adres IP do bindowania. Jeśli określono, OpenVPN będzie bindować tylko do tego adresu. Jeśli nieokreślono, OpenVPN będzie bindować do wszystkich interfejsów.
openvpn_port int 1194 Port, na którym chcesz, aby OpenVPN działał. Jeśli masz różne porty na różnych serwerach, sugeruję ustawić port w swoim pliku inwentarza.
openvpn_proto string udp, tcp udp Protokół, który chcesz, aby OpenVPN używał
openvpn_redirect_gateway boolean true, false true Wypchnięcie bramy OpenVPN
openvpn_resolv_retry int/string dowolne int, nieskończone 5 Sekundy ponownego rozwiązywania nazw. Ustaw "nieskończone", aby ponawiać nieskończoność w przypadku złego połączenia lub trybu uśpienia laptopa itp.
openvpn_server_hostname string {{ inventory_hostname }} Nazwa serwera, która ma być umieszczona w pliku konfiguracyjnym klienta
openvpn_server_ipv6_network string unset Jeśli ustawione, adres sieciowy i prefiks IPv6, które mają być przypisane klientom. Jeśli prawda, IPv4 również będzie używane.
openvpn_server_netmask string 255.255.255.0 Maska podsieci prywatnej
openvpn_server_network string 10.9.0.0 Prywatna sieć używana przez usługę OpenVPN
openvpn_set_dns boolean true, false true Wypchnie DNS do klienta (Cloudflare i Google)
openvpn_tun_mtu int unset Ustaw wartość tun-mtu. Pusty dla domyślnej.

Bezpieczeństwo

Zmienna Typ Wybory Domyślna Komentarz
openvpn_auth_alg string SHA256 Ustaw algorytm autoryzacji auth.
openvpn_ca_key dict unset Zawiera "crt" i "key". Jeśli nie ustawiono, certyfikat CA i klucz zostaną automatycznie wygenerowane na docelowym systemie.
openvpn_cipher string AES-256-CBC Ustaw opcję cipher dla serwera i klienta.
openvpn_crl_path string unset Zdefiniuj ścieżkę do pliku CRL do sprawdzania unieważnień serwera.
openvpn_duplicate_cn boolean true, false false Dodaj opcję duplicate-cn do konfiguracji serwera - umożliwia to klientom łączenie się wielokrotnie za pomocą jednego klucza. Uwaga: adresy IP klientów nie będą już statyczne!
openvpn_rsa_bits int 2048 Liczba bitów używanych do ochrony generowanych certyfikatów
openvpn_script_security int 1 Ustaw opcję bezpieczeństwa skryptów openvpn
openvpn_tls_auth_key string unset Pojedynczy element z wcześniej wygenerowanym kluczem autoryzacji TLS.
openvpn_use_crl boolean true, false false Skonfiguruj serwer OpenVPN tak, aby respektował listę unieważnionych certyfikatów.
openvpn_use_hardened_tls boolean true, false true Wymagaj minimalnej wersji TLS 1.2
openvpn_use_modern_tls boolean true, false true Użyj nowoczesnego szyfrowania TLS (niezalecane z OpenVPN 2.4)
openvpn_use_pregenerated_dh_params boolean true, false false Parametry DH są generowane podczas instalacji domyślnie
openvpn_verify_cn boolean true, false false Sprawdź, czy CN certyfikatu odpowiada FQDN
tls_auth_required boolean true, false true Poproś klienta, aby wysłał wygenerowany klucz ta.key serwera podczas połączenia

Operacje

Zmienna Typ Wybory Domyślna Komentarz
openvpn_addl_client_options lista pusta Lista opcji klienta zdefiniowanych przez użytkownika, które nie są już obecne w szablonie klienta. (np. - mssfix 1400)
openvpn_addl_server_options lista pusta Lista opcji serwera zdefiniowanych przez użytkownika, które nie są już obecne w szablonie serwera. (np. - ping-timer-rem)
openvpn_compression string lzo Ustaw opcję kompresji compress. Pusta dla braku kompresji.
openvpn_config_file string openvpn_{{ openvpn_proto }}_{{ openvpn_port }} Nazwa pliku konfiguracyjnego, którego chcesz użyć (ustawiona w vars/main.yml)
openvpn_enable_management boolean true, false false
openvpn_ifconfig_pool_persist_file string ipp.txt
openvpn_management_bind string /var/run/openvpn/management unix Interfejs do bindowania na interfejs zarządzania. Może być unix lub socket TCP.
openvpn_management_client_user string root Użyj tego użytkownika podczas korzystania z gniazda Unix dla interfejsu zarządzania.
openvpn_push lista pusta Ustaw tutaj listę ciągów, które zostaną wstawione do pliku konfiguracyjnego jako push "". Na przykład - route 10.20.30.0 255.255.255.0 wygeneruje push "route 10.20.30.0 255.255.255.0"
openvpn_script_client_connect string unset Ścieżka do Twojego skryptu połączenia klienta openvpn
openvpn_script_client_disconnect string unset Ścieżka do Twojego skryptu rozłączenia klienta openvpn
openvpn_script_down string unset Ścieżka do Twojego skryptu down openvpn
openvpn_script_up string unset Ścieżka do Twojego skryptu up openvpn
openvpn_service_group string nogroup Ustaw grupę usługi openvpn.
openvpn_service_user string nobody Ustaw użytkownika usługi openvpn.
openvpn_status_version int 1, 2, 3 1 Zdefiniuj formatowanie pliku openvpn-status.log, w którym znajdują się aktualne połączenia klientów
openvpn_topology string unset Keyword "topology" zostanie ustawiona w konfiguracji serwera z określoną wartością.

Własna konfiguracja klienta OpenVPN (pushed przez serwer)

Zmienna Typ Wybory Domyślna Komentarz
openvpn_client_config Boolean false Ustaw na true, jeśli chcesz włączyć katalog konfiguracji klienta
openvpn_client_config_dir string ccd Ścieżka do client-config-dir
openvpn_client_configs dict {} Słownik ustawień dla własnych konfiguracji klientów

Logrotate

Ustaw własne opcje logrotate

Zmienna Typ Wybory Domyślna Komentarz
openvpn_log_dir string /var/log Ustal lokalizację plików logów openvpn. Ten parametr jest częścią wartości konfiguracyjnej log-append.
openvpn_log_file string openvpn.log Ustal nazwę pliku loga. Ten parametr jest częścią wartości konfiguracyjnej log-append.
openvpn_logrotate_config string rotate 4
weekly
missingok
notifempty
sharedscripts
copytruncate
delaycompress
Skonfiguruj skrypt logrotate.

Pakowanie

Ten moduł pobiera różne pakiety. Nadpisz nazwy w razie potrzeby.

Zmienna Typ Wybory Domyślna Komentarz
epel_package_name string epel-release Nazwa pakietu epel-release do zainstalowania z menedżera pakietów
iptables_persistent_package_name string iptables-persistent Nazwa pakietu iptables-persistent do zainstalowania z menedżera pakietów
iptables_services_package_name string iptables-services Nazwa pakietu iptables-services do zainstalowania z menedżera pakietów
openssl_package_name string openssl Nazwa pakietu openssl do zainstalowania z menedżera pakietów
openvpn_ldap_plugin_package_name string openvpn-auth-ldap Nazwa pakietu openvpn-auth-ldap do zainstalowania z menedżera pakietów
openvpn_package_name string openvpn Nazwa pakietu openvpn do zainstalowania z menedżera pakietów
python_firewall_package_name string python-firewall Nazwa pakietu python-firewall do zainstalowania z menedżera pakietów

Obiekt LDAP

Zmienna Typ Wybory Domyślna Komentarz
ldap dict Słownik, który zawiera konfigurację LDAP
url string ldap://host.example.com Adres Twojego zaplecza LDAP z składnią ldap[s]://host[:port]
anonymous_bind string False , True False To nie jest boolean Ansible, ale ciąg, który zostanie przesłany do pliku konfiguracyjnego.
bind_dn string uid=Manager,ou=People,dc=example,dc=com Bind DN używany, jeśli "anonymous_bind" jest ustawione na "False"
bind_password string mysecretpassword Hasło użytkownika bind_dn
tls_enable string true , no no Wymuszaj szyfrowanie TLS. Niepotrzebne z adresami ldaps
tls_ca_cert_file string /etc/openvpn/auth/ca.pem Ścieżka do CA LDAP backend. Musi być przesłana wcześniej
tls_cert_file string Ścieżka do klienta autoryzacyjnego certyfikatu
tls_key_file string Ścieżka do klucza autoryzacyjnego klienta
base_dn string ou=People,dc=example,dc=com Bazowy DN, w którym backend będzie szukał ważnego użytkownika
search_filter string (&(uid=%u)(accountStatus=active)) Filtr wyszukiwania ldap
require_group string False , True To nie jest boolean Ansible, ale ciąg, który zostanie przesłany do pliku konfiguracyjnego.
group_base_dn string ou=Groups,dc=example,dc=com Określ grupę, którą należy znaleźć. Wymagana, jeśli require_group jest ustawione na "True"
group_search_filter string ((cn=developers)(cn=artists)) Precyzuje dozwolone grupy
verify_client_cert string none , optional , require client-cert-not-required W OpenVPN 2.4+ client-cert-not-required jest przestarzałe. Użyj verify-client-cert zamiast.

Zależności

Nie zależy od żadnych innych ról

Przykładowy playbook

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

Uwaga: Ponieważ rola będzie musiała znać używaną platformę zdalną (32 lub 64 bity), musisz ustawić gather_facts na true w swoim playbooku.

Licencja

MIT

Informacje o autorze

Napisane przez Kyle'a Lexmonda

O projekcie

Ansible role to install and configure openvpn.

Zainstaluj
ansible-galaxy install bwinfosec.openvpn
Licencja
eupl-1.2
Pobrania
19.5k
Właściciel
The universities in the state of Baden-Württemberg have joined forces to form the bwInfoSec federation in order to jointly improve information security.