bwinfosec.openvpn

À FAIRE : Mettez à jour ce README pour refléter les changements dans la branche bwinfosec.

OpenVPN

Actions Github (PRs et version principale) : Github CI

Travis CI (Lancement d'openvpn) : Statut de la construction

Ce rôle installe OpenVPN, le configure en tant que serveur, met en place le réseau et les pare-feu (principalement firewalld, ufw et iptables sont en fonction des efforts), et peut éventuellement créer des certificats clients.

Systèmes d'exploitation dans la construction CI :

  • Fedora 32+
  • CentOS 7 & 8

Note : Je fournis le code dans le dépôt sous une licence open source. Comme il s'agit de mon dépôt personnel, la licence que vous recevez pour mon code provient de moi et non de mon employeur.

Exigences

OpenVPN doit être disponible en tant que paquet dans yum/dnf/apt ! Pour les utilisateurs de CentOS, ce rôle exécutera yum install epel-release pour s'assurer qu'openvpn est disponible.

Ubuntu precise a un bug étrange qui pourrait faire échouer l'installation d'iptables-persistent. Il existe un contournement.

Ansible 2.10 et supérieur

Avec la version d'Ansible 2.10, les modules ont été déplacés dans des collections. À l'exception des modules ansible.builtin, cela signifie que d'autres collections doivent être installées pour utiliser des modules tels que seboolean (maintenant ansible.posix.seboolean). Cette collection est maintenant nécessaire : ansible.posix et cette collection est requise si vous utilisez ufw : community.general. Installation des collections :

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

Notes de support/attentes

J’utilise personnellement ce rôle pour gérer OpenVPN sur CentOS 8. J'essaie de maintenir le rôle fonctionnel sur cette plateforme avec la configuration par défaut. Veuillez reconnaître que je suis une seule personne, et j'ai un emploi à plein temps et d'autres engagements.

Les réponses à d'éventuels problèmes seront fournies sur une base d'effort maximum de ma part, y compris la possibilité que je ne réponde pas du tout. Les problèmes liés à l'utilisation des non-défauts (y compris toutes les contributions majeures de la communauté) seront priorisés en dernier.

Contributions majeures de la communauté :

  • Fonctionnalité pour révoquer des certificats
  • Tout le support LDAP

Variables du rôle

Options du rôle

Ces options modifient le fonctionnement du rôle. C'est un ensemble général, des groupes spécifiques sont détaillés ci-dessous.

Variable Type Choix Par défaut Commentaire
clients liste [] Liste des clients à ajouter à OpenVPN
openvpn_base_dir chaîne /etc/openvpn Chemin où votre configuration OpenVPN sera stockée
openvpn_client_config_no_log booléen true, false true Empêcher que les fichiers de configuration des clients soient enregistrés en stdout par Ansible
openvpn_key_dir chaîne /etc/openvpn/keys Chemin où vos clés privées de serveur et CA seront stockées
openvpn_ovpn_dir chaîne /etc/openvpn Chemin où vos configurations clientes seront stockées
openvpn_revoke_these_certs liste [] Liste des certificats clients à révoquer.
openvpn_selinux_module chaîne my-openvpn-server Définir le nom du module SELinux
openvpn_service_name chaîne openvpn Nom du service. Utilisé par systemctl pour démarrer le service
openvpn_sync_certs booléen true, false false Révoquer des certificats non explicitement définis dans 'clients'
openvpn_uninstall booléen true, false false Défini sur true pour désinstaller le service OpenVPN
openvpn_use_ldap booléen true, false false Backend LDAP actif pour l'authentification. Le certificat client n'est plus nécessaire

Récupération de la configuration

Changez ces options si vous devez ajuster comment les configurations sont téléchargées vers votre système local

Variable Type Choix Par défaut Commentaire
openvpn_fetch_client_configs booléen true, false true Télécharger les configurations clientes générées sur le système local
openvpn_fetch_client_configs_dir chaîne /tmp/ansible Si openvpn_fetch_client_configs est vrai, le répertoire local pour télécharger les fichiers de configuration client
openvpn_fetch_client_configs_suffix chaîne "" Si openvpn_fetch_client_configs est vrai, le suffixe à ajouter aux fichiers de configuration client téléchargés avant l'extension .ovpn

Pare-feu

Changez ces options si vous devez forcer un pare-feu particulier ou modifier comment le playbook interagit avec le pare-feu.

Variable Type Choix Par défaut Commentaire
firewalld_default_interface_zone chaîne public Zone de firewalld où "ansible_default_ipv4.interface" sera inséré
iptables_service chaîne iptables Remplacer le nom du service iptables
manage_firewall_rules booléen true, false true Permettre au playbook de gérer iptables
openvpn_firewall chaîne auto, firewalld, ufw, iptables auto Le logiciel de pare-feu à configurer pour les règles réseau. "auto" tentera de le détecter en inspectant le système
openvpn_masquerade_not_snat booléen true, false false Défini sur true si vous voulez configurer MASQUERADE au lieu du SNAT par défaut dans iptables.

Options de configuration OpenVPN

Ces options modifient le fonctionnement d'OpenVPN lui-même.

Réseau

Variable Type Choix Par défaut Commentaire
openvpn_client_register_dns booléen true, false true Ajouter l'option register-dns à la configuration client (Windows uniquement).
openvpn_client_to_client booléen true, false false Défini sur true si vous souhaitez que les clients puissent accéder les uns aux autres.
openvpn_custom_dns liste[chaîne] [] Liste des serveurs DNS, appliquée uniquement si openvpn_set_dns est défini sur true
openvpn_dualstack booléen true Indiquer s'il faut ou non utiliser une socket double (IPv4 + v6)
openvpn_keepalive_ping int 5 Définir l'intervalle de ping keepalive en secondes.
openvpn_keepalive_timeout int 30 Définir le délai d'expiration keepalive en secondes
openvpn_local chaîne unset Nom de l'hôte local ou adresse IP pour la liaison. Si spécifié, OpenVPN se liera uniquement à cette adresse. Si non spécifié, OpenVPN se liera à toutes les interfaces.
openvpn_port int 1194 Le port sur lequel vous souhaitez que OpenVPN fonctionne. Si vous avez des ports différents sur des serveurs différents, je vous recommande de définir le port dans votre fichier d'inventaire.
openvpn_proto chaîne udp, tcp udp Le protocole que vous souhaitez qu'OpenVPN utilise
openvpn_redirect_gateway booléen true, false true Pousser la passerelle OpenVPN
openvpn_resolv_retry int/chaîne tout int, infini 5 Temps d'attente en secondes pour la résolution des noms d'hôtes. Définir "infini" pour réessayer indéfiniment en cas de mauvaise connexion ou de récupération en mode veille d'ordinateurs portables, etc.
openvpn_server_hostname chaîne {{ inventory_hostname }} Le nom du serveur à placer dans le fichier de configuration client
openvpn_server_ipv6_network chaîne unset Si défini, l'adresse réseau et le préfixe d'un réseau IPv6 à attribuer aux clients. Si vrai, IPv4 est également utilisé.
openvpn_server_netmask chaîne 255.255.255.0 Masque de sous-réseau du réseau privé
openvpn_server_network chaîne 10.9.0.0 Réseau privé utilisé par le service OpenVPN
openvpn_set_dns booléen true, false true Poussera DNS au client (Cloudflare et Google)
openvpn_tun_mtu int unset Définir la valeur tun-mtu. Vider pour par défaut.

Sécurité

Variable Type Choix Par défaut Commentaire
openvpn_auth_alg chaîne SHA256 Définir l'algorithme d'authentification auth.
openvpn_ca_key dictionnaire unset Contient "crt" et "key". S'il n'est pas défini, le certificat CA et la clé seront générés automatiquement sur le système cible.
openvpn_cipher chaîne AES-256-CBC Définir l'option cipher pour le serveur et le client.
openvpn_crl_path chaîne unset Définir un chemin vers le fichier CRL pour la vérification de révocation du serveur.
openvpn_duplicate_cn booléen true, false false Ajouter l'option duplicate-cn à la configuration du serveur - cela permet aux clients de se connecter plusieurs fois avec la même clé. REMARQUE : les adresses IP des clients ne seront plus statiques !
openvpn_rsa_bits int 2048 Nombre de bits utilisés pour protéger les certificats générés
openvpn_script_security int 1 Définir l'option de sécurité des scripts openvpn
openvpn_tls_auth_key chaîne unset Éléments uniques avec une clé d'authentification TLS pré-générée.
openvpn_use_crl booléen true, false false Configurer le serveur OpenVPN pour respecter la liste de révocation des certificats.
openvpn_use_hardened_tls booléen true, false true Exiger une version minimale de TLS 1.2
openvpn_use_modern_tls booléen true, false true Utiliser un chiffrement moderne pour TLS (pas recommandé avec OpenVPN 2.4)
openvpn_use_pregenerated_dh_params booléen true, false false Les paramètres DH sont générés avec l'installation par défaut
openvpn_verify_cn booléen true, false false Vérifier que le CN du certificat correspond au FQDN
tls_auth_required booléen true, false true Demander au client de pousser la ta.key générée du serveur pendant la connexion

Opérations

Variable Type Choix Par défaut Commentaire
openvpn_addl_client_options liste vide Liste des options clients définies par l'utilisateur qui ne sont déjà pas présentes dans le modèle client. (par exemple - mssfix 1400)
openvpn_addl_server_options liste vide Liste des options serveur définies par l'utilisateur qui ne sont déjà pas présentes dans le modèle serveur. (par exemple - ping-timer-rem)
openvpn_compression chaîne lzo Définir l'option de compression compress. Vider pour pas de compression.
openvpn_config_file chaîne openvpn_{{ openvpn_proto }}_{{ openvpn_port }} Le nom de fichier de configuration que vous souhaitez utiliser (définie dans vars/main.yml)
openvpn_enable_management booléen true, false false
openvpn_ifconfig_pool_persist_file chaîne ipp.txt
openvpn_management_bind chaîne /var/run/openvpn/management unix L'interface à lier pour l'interface de gestion. Peut être un socket unix ou TCP.
openvpn_management_client_user chaîne root Utiliser cet utilisateur lors de l'utilisation d'un socket Unix pour l'interface de gestion.
openvpn_push liste vide Définir ici une liste de chaînes qui seront insérées dans le fichier de configuration sous la forme push "". Par exemple - route 10.20.30.0 255.255.255.0 générera push "route 10.20.30.0 255.255.255.0"
openvpn_script_client_connect chaîne unset Chemin vers votre script client-connect openvpn
openvpn_script_client_disconnect chaîne unset Chemin vers votre script client-disconnect openvpn
openvpn_script_down chaîne unset Chemin vers votre script down openvpn
openvpn_script_up chaîne unset Chemin vers votre script up openvpn
openvpn_service_group chaîne nogroup Définir le groupe de services openvpn.
openvpn_service_user chaîne nobody Définir l'utilisateur du service openvpn.
openvpn_status_version int 1, 2, 3 1 Définir le format du fichier openvpn-status.log où figurent les connexions clients actuelles
openvpn_topology chaîne unset Le mot-clé "topology" sera défini dans la configuration du serveur avec la valeur spécifiée.

Configuration client OpenVPN personnalisée (poussée par le serveur)

Variable Type Choix Par défaut Commentaire
openvpn_client_config booléen false Défini sur true si vous activez le répertoire de configuration client
openvpn_client_config_dir chaîne ccd Chemin de client-config-dir
openvpn_client_configs dictionnaire {} Dictionnaire des paramètres pour les configurations clients personnalisées

Logrotate

Définissez vos propres options de logrotate personnalisées

Variable Type Choix Par défaut Commentaire
openvpn_log_dir chaîne /var/log Définir l'emplacement des fichiers journaux openvpn. Ce paramètre fait partie de la valeur de configuration log-append.
openvpn_log_file chaîne openvpn.log Définir le nom de fichier de log. Ce paramètre fait partie de la valeur de configuration log-append.
openvpn_logrotate_config chaîne rotate 4
weekly
missingok
notifempty
sharedscripts
copytruncate
delaycompress
Configurer le script logrotate.

Packaging

Ce rôle tire une multitude de paquets différents. Remplacez les noms si nécessaire.

Variable Type Choix Par défaut Commentaire
epel_package_name chaîne epel-release Nom du paquet epel-release à installer depuis le gestionnaire de paquets
iptables_persistent_package_name chaîne iptables-persistent Nom du paquet iptables-persistent à installer depuis le gestionnaire de paquets
iptables_services_package_name chaîne iptables-services Nom du paquet iptables-services à installer depuis le gestionnaire de paquets
openssl_package_name chaîne openssl Nom du paquet openssl à installer depuis le gestionnaire de paquets
openvpn_ldap_plugin_package_name chaîne openvpn-auth-ldap Nom du paquet openvpn-auth-ldap à installer depuis le gestionnaire de paquets
openvpn_package_name chaîne openvpn Nom du paquet openvpn à installer depuis le gestionnaire de paquets
python_firewall_package_name chaîne python-firewall Nom du paquet python-firewall à installer depuis le gestionnaire de paquets

Objet LDAP

Variable Type Choix Par défaut Commentaire
ldap dictionnaire Dictionnaire qui contient la configuration LDAP
url chaîne ldap://host.example.com Adresse de votre backend LDAP avec la syntaxe ldap[s]://host[:port]
anonymous_bind chaîne Faux, Vrai Faux Ce n'est pas un booléen Ansible mais une chaîne qui sera poussée dans le fichier de configuration.
bind_dn chaîne uid=Manager,ou=People,dc=example,dc=com Bind DN utilisé si "anonymous_bind" défini sur "Faux"
bind_password chaîne mysecretpassword Mot de passe de l'utilisateur bind_dn
tls_enable chaîne vrai, non non Forcer le cryptage TLS. Pas nécessaire avec des adresses ldaps
tls_ca_cert_file chaîne /etc/openvpn/auth/ca.pem Chemin vers le CA du backend ldap. Cela doit avoir été poussé avant
tls_cert_file chaîne Chemin vers le certificat d'authentification client
tls_key_file chaîne Chemin vers la clé d'authentification client
base_dn chaîne ou=People,dc=example,dc=com Base DN où le backend cherchera des utilisateurs valides
search_filter chaîne (&(uid=%u)(accountStatus=active)) Filtre de recherche ldap
require_group chaîne Faux, Vrai Ce n'est pas un booléen Ansible mais une chaîne qui sera poussée dans le fichier de configuration.
group_base_dn chaîne ou=Groups,dc=example,dc=com Préciser le groupe à rechercher. Nécessaire si require_group est défini sur "Vrai"
group_search_filter chaîne ((cn=developers)(cn=artists)) Préciser les groupes valides
verify_client_cert chaîne aucun, optionnel, requis client-cert-not-required Dans OpenVPN 2.4+, client-cert-not-required est déprécié. Utilisez plutôt verify-client-cert

Dépendances

Ne dépend d'aucun autre rôle

Exemple de Playbook

- hôtes : vpn
  recueillir_faits : vrai
  rôles :
    - rôle : kyl191.openvpn
      openvpn_port : 4300
      openvpn_sync_certs : vrai
      clients :
        - client1
        - client2

Remarque : Comme le rôle aura besoin de connaître la plateforme utilisée à distance (32 ou 64 bits), vous devez définir recueillir_faits comme vrai dans votre play.

Licence

MIT

Informations sur l'auteur

Écrit par Kyle Lexmond

À propos du projet

Ansible role to install and configure openvpn.

Installer
ansible-galaxy install bwinfosec.openvpn
Licence
eupl-1.2
Téléchargements
19.5k
Propriétaire
The universities in the state of Baden-Württemberg have joined forces to form the bwInfoSec federation in order to jointly improve information security.