bwinfosec.openvpn
À FAIRE : Mettez à jour ce README pour refléter les changements dans la branche bwinfosec.
OpenVPN
Actions Github (PRs et version principale) :
Travis CI (Lancement d'openvpn) :
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
commevrai
dans votre play.
Licence
MIT
Informations sur l'auteur
Écrit par Kyle Lexmond
ansible-galaxy install bwinfosec.openvpn