bwinfosec.openvpn

TODO: Aktualisieren Sie dieses README, um die Änderungen im bwinfosec Fork widerzuspiegeln.

OpenVPN

Github Actions (PRs & Hauptlinie): Github CI

Travis CI (Tatsächlich OpenVPN starten): Build Status

Diese Rolle installiert OpenVPN, konfiguriert es als Server, richtet Netzwerk und Firewalls (hauptsächlich firewalld, ufw und iptables sind nach bestem Bemühen) ein und kann optional Client-Zertifikate erstellen.

Betriebssysteme im CI-Bau:

  • Fedora 32+
  • CentOS 7 & 8

Hinweis: Ich stelle Ihnen den Code im Repository unter einer Open-Source-Lizenz zur Verfügung. Da dies mein persönliches Repository ist, erhalten Sie die Lizenz für meinen Code von mir und nicht von meinem Arbeitgeber.

Anforderungen

OpenVPN muss als Paket in yum/dnf/apt verfügbar sein! Für CentOS-Benutzer wird diese Rolle yum install epel-release ausführen, um sicherzustellen, dass OpenVPN verfügbar ist.

Ubuntu Precise hat einen merkwürdigen Fehler, der dazu führen kann, dass die Installation von iptables-persistent fehlschlägt. Es gibt einen Workaround.

Ansible 2.10 und höher

Mit der Veröffentlichung von Ansible 2.10 wurden die Module in Sammlungen verschoben. Mit Ausnahme der Module von ansible.builtin müssen zusätzliche Sammlungen installiert werden, um Module wie seboolean (jetzt ansible.posix.seboolean) zu verwenden. Diese Sammlung wird jetzt benötigt: ansible.posix und diese Sammlung ist erforderlich, wenn ufw verwendet wird: community.general. Installation der Sammlungen:

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

Unterstützungsnotizen/Erwartungen

Ich verwalte OpenVPN auf CentOS 8 mit dieser Rolle. Ich versuche, die Rolle auf dieser Plattform mit der Standardkonfiguration voll funktionsfähig zu halten. Bitte beachten Sie, dass ich eine einzelne Person bin und einen Vollzeitjob und andere Verpflichtungen habe.

Antworten auf Probleme werden nach bestem Ermessen meinerseits erfolgen, einschließlich der Möglichkeit, dass ich überhaupt nicht antworte. Probleme, die durch die Verwendung von Nicht-Standardeinstellungen (einschließlich aller größeren Community-Beiträge) entstehen, werden als weniger wichtig erachtet.

Hauptgemeinschaftsbeiträge:

  • Funktionalität zum Widerrufen von Zertifikaten
  • Alle LDAP-Unterstützung

Rollenvariablen

Rolleneinstellungen

Diese Optionen ändern, wie die Rolle funktioniert. Dies ist eine allgemeine Gruppe, spezifische Gruppen sind unten aufgeführt.

Variable Typ Optionen Standard Kommentar
clients Liste [] Liste der Clients, die zu OpenVPN hinzugefügt werden sollen
openvpn_base_dir Zeichenkette /etc/openvpn Pfad, an dem Ihre OpenVPN-Konfiguration gespeichert wird
openvpn_client_config_no_log boolesch true, false true Verhindert, dass Client-Konfigurationsdateien in die Standardausgabe von Ansible protokolliert werden
openvpn_key_dir Zeichenkette /etc/openvpn/keys Pfad, an dem Ihre Server-Privatschlüssel und das CA gespeichert werden
openvpn_ovpn_dir Zeichenkette /etc/openvpn Pfad, an dem Ihre Client-Konfigurationen gespeichert werden
openvpn_revoke_these_certs Liste [] Liste der Client-Zertifikate, die widerrufen werden sollen
openvpn_selinux_module Zeichenkette my-openvpn-server Setzen Sie den Namen des SELinux-Moduls
openvpn_service_name Zeichenkette openvpn Name des Dienstes. Wird von systemctl zum Starten des Dienstes verwendet
openvpn_sync_certs boolesch true, false false Widerruft Zertifikate, die nicht ausdrücklich in 'clients' definiert sind
openvpn_uninstall boolesch true, false false Setzen Sie es auf true, um den OpenVPN-Dienst zu deinstallieren
openvpn_use_ldap boolesch true, false false Aktiven LDAP-Backend für die Authentifizierung. Client-Zertifikat nicht mehr erforderlich

Konfigurationsabruf

Ändern Sie diese Optionen, wenn Sie anpassen müssen, wie die Konfigurationen auf Ihr lokales System heruntergeladen werden.

Variable Typ Optionen Standard Kommentar
openvpn_fetch_client_configs boolesch true, false true Download generierte Client-Konfigurationen auf das lokale System
openvpn_fetch_client_configs_dir Zeichenkette /tmp/ansible Wenn openvpn_fetch_client_configs true ist, das lokale Verzeichnis, in das die Client-Konfigurationsdateien heruntergeladen werden sollen
openvpn_fetch_client_configs_suffix Zeichenkette "" Wenn openvpn_fetch_client_configs true ist, das Suffix, das den heruntergeladenen Client-Konfigurationsdateien vor der Endung .ovpn hinzugefügt wird

Firewall

Ändern Sie diese Optionen, wenn Sie eine bestimmte Firewall erzwingen oder ändern müssen, wie das Playbook mit der Firewall interagiert.

Variable Typ Optionen Standard Kommentar
firewalld_default_interface_zone Zeichenkette public Firewalld-Zone, in die das "ansible_default_ipv4.interface" geschoben wird
iptables_service Zeichenkette iptables Überschreiben Sie den Namen des iptables-Dienstes
manage_firewall_rules boolesch true, false true Ermöglichen Sie dem Playbook, iptables zu verwalten
openvpn_firewall Zeichenkette auto, firewalld, ufw, iptables auto Die Firewall-Software, um Netzwerkregeln zu konfigurieren. "auto" versucht, es durch Inspektion des Systems zu erkennen
openvpn_masquerade_not_snat boolesch true, false false Setzen Sie es auf true, wenn Sie MASQUERADE anstelle des standardmäßigen SNAT in iptables einrichten möchten.

OpenVPN-Konfigurationsoptionen

Diese Optionen ändern, wie OpenVPN selbst funktioniert.

Netzwerk

Variable Typ Optionen Standard Kommentar
openvpn_client_register_dns boolesch true, false true Fügen Sie die Option register-dns zur Client-Konfiguration hinzu (nur Windows).
openvpn_client_to_client boolesch true, false false Setzen Sie es auf true, wenn Sie möchten, dass Clients aufeinander zugreifen können.
openvpn_custom_dns Liste[string] [] Liste der DNS-Server, wird nur angewendet, wenn openvpn_set_dns auf true gesetzt ist
openvpn_dualstack boolesch true Ob ein Dualstack (IPv4 + v6) Socket verwendet werden soll.
openvpn_keepalive_ping int 5 Setzen Sie den PING-Intervall in Sekunden für keepalive.
openvpn_keepalive_timeout int 30 Setzen Sie den Timeout in Sekunden für keepalive.
openvpn_local Zeichenkette unset Lokaler Hostname oder IP-Adresse für das Binden. Wenn angegeben, wird OpenVPN nur an diese Adresse gebunden. Wenn nicht angegeben, bindet OpenVPN an alle Schnittstellen.
openvpn_port int 1194 Der Port, auf dem Sie OpenVPN ausführen möchten. Wenn Sie unterschiedliche Ports auf verschiedenen Servern haben, empfehle ich, den Port in Ihrer Inventar-Datei festzulegen.
openvpn_proto Zeichenkette udp, tcp udp Das Protokoll, das Sie für OpenVPN verwenden möchten.
openvpn_redirect_gateway boolesch true, false true OpenVPN-Gateway pusht
openvpn_resolv_retry int/string any int, infinite 5 Sekunden bei DNS-Auflösungsfehlern. Setzen Sie "infinite", um unendlich oft bei schwacher Verbindung oder Laptop-Wiederherstellung zu versuchen.
openvpn_server_hostname Zeichenkette {{ inventory_hostname }} Der Servername, der in der Client-Konfigurationsdatei platziert werden soll.
openvpn_server_ipv6_network Zeichenkette unset Wenn gesetzt, die Netzwerkadresse und das Präfix eines IPv6-Netzwerks, das den Clients zugewiesen werden soll. Wenn wahr, wird IPv4 weiterhin verwendet.
openvpn_server_netmask Zeichenkette 255.255.255.0 Subnetzmaske des privaten Netzwerks
openvpn_server_network Zeichenkette 10.9.0.0 Privates Netzwerk, das von OpenVPN-Dienst verwendet wird
openvpn_set_dns boolesch true, false true Push-DNS an den Client (Cloudflare und Google).
openvpn_tun_mtu int unset Setzen Sie den Wert für tun-mtu. Leer für den Standard.

Sicherheit

Variable Typ Optionen Standard Kommentar
openvpn_auth_alg Zeichenkette SHA256 Legen Sie den Authentifizierungsalgorithmus für auth fest.
openvpn_ca_key dict unset Enthält "crt" und "key". Wenn nicht festgelegt, werden das CA-Zertifikat und der Schlüssel automatisch auf dem Zielsystem generiert.
openvpn_cipher Zeichenkette AES-256-CBC Legen Sie die cipher-Option für Server und Client fest.
openvpn_crl_path Zeichenkette unset Definieren Sie einen Pfad zur CRL-Datei für die Widerrufsprüfung des Servers.
openvpn_duplicate_cn boolesch true, false false Fügen Sie die Option duplicate-cn zur Serverkonfiguration hinzu - dies ermöglicht es Clients, mehrfach mit dem einen Schlüssel zu verbinden. Hinweis: Die IP-Adressen der Clients sind dann nicht mehr statisch!
openvpn_rsa_bits int 2048 Anzahl der Bits zum Schutz der generierten Zertifikate
openvpn_script_security int 1 Legen Sie die Sicherheitsoption für das OpenVPN-Skript fest.
openvpn_tls_auth_key Zeichenkette unset Einzelnes Element mit einem vorab generierten TLS-Authentifizierungsschlüssel.
openvpn_use_crl boolesch true, false false Konfigurieren Sie den OpenVPN-Server so, dass die Zertifikat-Widerrufsliste akzeptiert wird.
openvpn_use_hardened_tls boolesch true, false true Erfordert eine Mindestversion von TLS 1.2
openvpn_use_modern_tls boolesch true, false true Verwenden Sie moderne Chiffrierung für TLS (nicht empfohlen mit OpenVPN 2.4)
openvpn_use_pregenerated_dh_params boolesch true, false false DH-Parameter werden standardmäßig bei der Installation generiert
openvpn_verify_cn boolesch true, false false Überprüfen, ob die CN des Zertifikats mit der FQDN übereinstimmt
tls_auth_required boolesch true, false true Fordert den Client auf, den generierten ta.key des Servers während der Verbindung zu pushen

Operationen

Variable Typ Optionen Standard Kommentar
openvpn_addl_client_options Liste leer Liste von benutzerdefinierten Client-Optionen, die nicht bereits in der Client-Vorlage vorhanden sind. (z.B. - mssfix 1400)
openvpn_addl_server_options Liste leer Liste von benutzerdefinierten Server-Optionen, die nicht bereits in der Server-Vorlage vorhanden sind. (z.B. - ping-timer-rem)
openvpn_compression Zeichenkette lzo Setzen Sie die compress-Kompresssionsoption. Leer für keine Kompression.
openvpn_config_file Zeichenkette openvpn_{{ openvpn_proto }}_{{ openvpn_port }} Der Konfigurationsdateiname, den Sie verwenden möchten (in vars/main.yml festgelegt)
openvpn_enable_management boolesch true, false false
openvpn_ifconfig_pool_persist_file Zeichenkette ipp.txt
openvpn_management_bind Zeichenkette /var/run/openvpn/management unix Die Schnittstelle, auf die für die Verwaltungsoberfläche gebunden werden soll. Kann eine Unix- oder TCP-Socket sein.
openvpn_management_client_user Zeichenkette root Verwenden Sie diesen Benutzer, wenn Sie einen Unix-Socket für die Verwaltungsoberfläche verwenden.
openvpn_push Liste leer Setzen Sie hier eine Liste von Zeichenfolgen, die als push "" in die Konfigurationsdatei eingefügt werden. Z.B. - route 10.20.30.0 255.255.255.0 erzeugt push "route 10.20.30.0 255.255.255.0"
openvpn_script_client_connect Zeichenkette unset Pfad zu Ihrem openvpn client-connect-Skript
openvpn_script_client_disconnect Zeichenkette unset Pfad zu Ihrem openvpn client-disconnect-Skript
openvpn_script_down Zeichenkette unset Pfad zu Ihrem openvpn down-Skript
openvpn_script_up Zeichenkette unset Pfad zu Ihrem openvpn up-Skript
openvpn_service_group Zeichenkette nogroup Legen Sie die OpenVPN-Dienstgruppe fest.
openvpn_service_user Zeichenkette nobody Legen Sie den OpenVPN-Dienstbenutzer fest.
openvpn_status_version int 1, 2, 3 1 Definieren Sie das Format der openvpn-status.log-Datei, in der aktuelle Clientverbindungen aufgelistet sind
openvpn_topology Zeichenkette unset Das Schlüsselwort "topology" wird mit dem angegebenen Wert in der Serverkonfiguration festgelegt.

OpenVPN benutzerdefinierte Client-Konfiguration (serverseitig gepusht)

Variable Typ Optionen Standard Kommentar
openvpn_client_config boolesch false Setzen Sie es auf true, wenn das klientenconfig-Verzeichnis aktiviert werden soll
openvpn_client_config_dir Zeichenkette ccd Pfad von client-config-dir
openvpn_client_configs dict {} Dict von Einstellungen benutzerdefinierte Client-Konfigurationen

Logrotate

Setzen Sie Ihre eigenen benutzerdefinierten Logrotate-Optionen

Variable Typ Optionen Standard Kommentar
openvpn_log_dir Zeichenkette /var/log Legen Sie den Speicherort der OpenVPN-Protokolldateien fest. Dieser Parameter ist Teil des log-append-Konfigurationswerts.
openvpn_log_file Zeichenkette openvpn.log Legen Sie den Protokolldateinamen fest. Dieser Parameter ist Teil des log-append-Konfigurationswerts.
openvpn_logrotate_config Zeichenkette rotate 4
weekly
missingok
notifempty
sharedscripts
copytruncate
delaycompress
Konfigurieren Sie das logrotate-Skript.

Verpackung

Diese Rolle zieht eine Vielzahl von verschiedenen Paketen ein. Überschreiben Sie die Namen nach Bedarf.

Variable Typ Optionen Standard Kommentar
epel_package_name Zeichenkette epel-release Name des epel-release-Pakets, das aus dem Paketmanager installiert werden soll
iptables_persistent_package_name Zeichenkette iptables-persistent Name des iptables-persistent-Pakets, das aus dem Paketmanager installiert werden soll
iptables_services_package_name Zeichenkette iptables-services Name des iptables-services-Pakets, das aus dem Paketmanager installiert werden soll
openssl_package_name Zeichenkette openssl Name des openssl-Pakets, das aus dem Paketmanager installiert werden soll
openvpn_ldap_plugin_package_name Zeichenkette openvpn-auth-ldap Name des openvpn-auth-ldap-Pakets, das aus dem Paketmanager installiert werden soll
openvpn_package_name Zeichenkette openvpn Name des openvpn-Pakets, das aus dem Paketmanager installiert werden soll
python_firewall_package_name Zeichenkette python-firewall Name des python-firewall-Pakets, das aus dem Paketmanager installiert werden soll

LDAP-Objekt

Variable Typ Optionen Standard Kommentar
ldap dict Dictionary, das die LDAP-Konfiguration enthält
url Zeichenkette ldap://host.example.com Adresse Ihres LDAP-Backends mit Syntax ldap[s]://host[:port]
anonymous_bind Zeichenkette False , True False Dies ist kein Ansible-Boolescher Wert, sondern ein String, der in die Konfigurationsdatei eingefügt wird.
bind_dn Zeichenkette uid=Manager,ou=People,dc=example,dc=com Bind DN, der verwendet wird, wenn "anonymous_bind" auf "false" gesetzt ist
bind_password Zeichenkette mysecretpassword Passwort des bind_dn-Benutzers
tls_enable Zeichenkette true , no no Erzwingt TLS-Verschlüsselung. Nicht erforderlich bei ldaps-Adressen
tls_ca_cert_file Zeichenkette /etc/openvpn/auth/ca.pem Pfad zur CA des LDAP-Backends. Muss vorher gepusht worden sein
tls_cert_file Zeichenkette Pfad zum Client-Authentifizierungszertifikat
tls_key_file Zeichenkette Pfad zum Client-Authentifizierungsschlüssel
base_dn Zeichenkette ou=People,dc=example,dc=com Basis-DN, unter dem das Backend nach gültigen Benutzern suchen wird
search_filter Zeichenkette (&(uid=%u)(accountStatus=active)) Filter für die LDAP-Suche
require_group Zeichenkette False , True Dies ist kein Ansible-Boolescher Wert, sondern ein String, der in die Konfigurationsdatei eingefügt wird.
group_base_dn Zeichenkette ou=Groups,dc=example,dc=com Das genaue Gruppensuche. Erforderlich, wenn require_group auf "True" gesetzt ist
group_search_filter Zeichenkette ((cn=developers)(cn=artists)) Benötigte gültige Gruppen
verify_client_cert Zeichenkette none , optional , require client-cert-not-required In OpenVPN 2.4+ ist client-cert-not-required veraltet. Verwenden Sie stattdessen verify-client-cert.

Abhängigkeiten

Hängt nicht von anderen Rollen ab.

Beispiel-Playbook

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

Hinweis: Da die Rolle wissen muss, welche Plattform (32 oder 64 Bit) verwendet wird, müssen Sie gather_facts in Ihrem Play einstellen.

Lizenz

MIT

Autor Informationen

Verfasst von Kyle Lexmond

Über das Projekt

Ansible role to install and configure openvpn.

Installieren
ansible-galaxy install bwinfosec.openvpn
GitHub Repository
Lizenz
eupl-1.2
Downloads
19.5k
Besitzer
The universities in the state of Baden-Württemberg have joined forces to form the bwInfoSec federation in order to jointly improve information security.