bwinfosec.openvpn
TODO: Aktualisieren Sie dieses README, um die Änderungen im bwinfosec Fork widerzuspiegeln.
OpenVPN
Github Actions (PRs & Hauptlinie):
Travis CI (Tatsächlich OpenVPN starten):
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
ansible-galaxy install bwinfosec.openvpn