Le fichier de configuration du serveur WAPT sur les systèmes GNU/Linux et macOS se trouve dans /opt/wapt/conf/waptserver.ini ou dans /opt/wapt/waptserver/waptserver.ini.
Le fichier de configuration du serveur WAPT sous Windows se trouve à l’adresse suivante C:\wapt\conf\waptserver.ini.
Danger
La modification de ces fichiers est réservée aux utilisateurs avancés !!
7.1. Configurations par défaut du fichier waptserver et de nginx¶
7.1.1. Modifier la section [options] du fichier waptserver.ini¶
Plusieurs options peuvent être définies dans la section [options].
[options]
Après avoir modifié le fichier waptserver.ini, assurez-vous de redémarrer les waptservices concernés pour appliquer les changements, ou redémarrez le fichier postconf.sh.
systemctlrestartwapttaskswaptserver
Ouvrir une cmd.exe
netstopwaptservice&&netstartwaptservice
Quelques paramètres disponibles pour la section [options] du waptserver.ini
Paramètres LDAP
Options (valeur par défaut)
Description
Exemple
default_ldap_users_acls (défaut view)
Définit l’acl par défaut pour un nouvel utilisateur qui ouvre la console WAPT.
default_ldap_users_acls = admin
ldap_account_service_login (défaut None)
Définit l’utilisateur UPN Active directory pour le SSO et/ou le mode waptserver-ldap pour le self-service.
Définit le(s) groupe(s) d’utilisateurs Active Directory sAMAccountName autorisé(s) à se connecter à la console WAPT. Il peut s’agir de plusieurs groupes, séparés par des virgules.
Définit si les connexions websocket doivent être authentifiées. Si use_kerberos = True, alors allow_unauthenticated_connectDEVAIT ETRE positionné à False ou il sera prioritaire.
allow_unauthenticated_connect = True
allow_unauthenticated_registration (défaut False)
Permet l’enregistrement initial de l’agent WAPT à l’aide d’un login et d’un mot de passe.
allow_unauthenticated_registration = True
allow_unsigned_status_data (défaut False)
Débogage uniquement - Permet à l’agent d’envoyer des données d’état non signées.
allow_unsigned_status_data = True
optimized_authentication_logs (défaut True)
Si l’une des options est définie, elle ne sera pas enregistrée : waptagent_version, host_tasks_status, get_ad_groups, get_ad_sites, get_ad_ou_split, host_data, get_hosts , audit_data, wsus.windows_updates, wsus.windows_products, wsus.windows_updates_classifications, packages_for_hosts, enterprise.reporting_exec, known_packages, repositories.get_all_agentrepos, repositories.get_sync_version, repositories.get_all_rules, get_all_users_acls, known_signers_certificates, enterprise.reporting_list, usage_statistics, repositories.get_createupdatefilesync, repositories.get_sync_changelog, licences
optimized_authentication_logs = False
auto_create_waptagent_from_config (défaut False)
Crée un waptsetup bourré (conf + certificats personnels sont ajoutés à waptsetup) à partir de chaque configuration créée dans la console WAPT.
auto_create_waptagent_from_config = True
cleanup_kbs (défaut True)
Définit si les :ref:` Windows KB inutilisés doivent être automatiquement supprimés <auto_kb_clean>` du serveur WAPT.
cleanup_kbs = False
copy_winpe_x64_in_tftp_folder (défaut False)
Si x64, permet de copier tous les WinPE à partir de wads_folder lorsque WinPE est téléchargé.
copy_winpe_x64_in_tftp_folder = True
download_wsusscn2 (défaut True)
Télécharge automatiquement le fichier wsusscn2.cab.
download_wsusscn2 = False
enable_store (par défaut False`)
Active WAPT Store Webui (Deprecated).
enable_store = False
encrypt_host_packages (défaut False)
Crypte le paquet de l’hôte avec le certificat du client.
encrypt_host_packages = True
login_on_homepage (default True)
Activé ou désactivé l’authentification de la page d’acceuil du serveur wapt.
homepage_enable = True
homepage_enable (défaut True)
Activé ou désactivé la page d’acceuil du serveur wapt.
homepage_enable = True
ldap_nesting_group_support (défaut True)
Permet la recherche de groupes imbriqués dans Active Directory.
ldap_nesting_group_support = False
ldap_primary_group_ad_support (défaut True)
Active la recherche sur les utilisateurs du groupe primaire d’Active Directory.
ldap_primary_group_ad_support = False
login_on_wads (défaut False)
Active l’authentification pour utiliser WADS (le format est utilisateur:motdepasse).
login_on_wads = True
optimized_authentication_logs (défaut True)
Si l’une des options est définie, elle ne sera pas enregistrée : waptagent_version, host_tasks_status, get_ad_groups, get_ad_sites, get_ad_ou_split, host_data, get_hosts, audit_data, wsus.windows_updates, wsus.windows_products, wsus.windows_updates_classifications, packages_for_hosts, enterprise.reporting_exec, known_packages, repositories.get_all_agentrepos, repositories.get_sync_version, repositories.get_all_rules, get_all_users_acls, known_signers_certificates, enterprise.reporting_list, usage_statistics, repositories.get_createupdatefilesync, repositories.get_sync_changelog, licences
optimized_authentication_logs = False
remote_repo_websockets (par défaut True)
Permet la communication par websocket avec les agents WAPT configurés en tant que dépôts distants.
remote_repo_websockets = False
use_kerberos (défaut False)
Permet à un agent WAPT de s’enregistrer en utilisant son compte kerberos. Si use_kerberos = True, alors allow_unauthenticated_connectDEVAIT ETRE positionné à False ou il sera prioritaire.
Définit le niveau de journalisation. Les valeurs possibles sont : debug, info, warning, critical.
loglevel = debug
max_clients (défaut 4096)
Définit le nombre maximum de connexions clients WAPT simultanées.
max_clients = 2048
min_password_length (défaut 10)
Définit la longueur minimale du mot de passe SuperAdmin.
min_password_length = 15
secret_key (défaut None)
Définit la chaîne aléatoire pour initialiser le serveur d’application Python Flask. Cette chaîne est générée lors de la première installation du serveur WAPT et est unique pour chaque serveur WAPT.
secret_key = FKjfzjfkF687fjrkeznfkj7678jknk78687
server_uuid (défaut None)
Définit le UUID du serveur WAPT (cet identifiant anonyme est utilisé pour les statistiques WAPT).
La configuration par défaut de Nginx est la suivante :
# uwsgi upstream serverupstreamwaptserver{serverunix:///run/waptserver/uwsgi.sock;}log_formatcombined_ssl'$remote_addr$ssl_client_s_dn$ssl_client_verify$remote_user[$time_local]''"$request"$status$body_bytes_sent''"$http_referer""$http_user_agent"';server{listen80;listen[::]:80;listen443ssl;listen[::]:443ssl;server_namesrvwapt.mydomain.lan;server_name192.168.100.12;access_log"/var/log/nginx/access.log"combined_ssl;ssl_certificate"/opt/wapt/waptserver/ssl/cert.pem";ssl_certificate_key"/opt/wapt/waptserver/ssl/key.pem";ssl_protocolsTLSv1.2;ssl_dhparam"/etc/ssl/certs/dhparam.pem";ssl_prefer_server_cipherson;ssl_ciphers'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';ssl_staplingon;ssl_stapling_verifyon;ssl_session_cachenone;ssl_session_ticketsoff;# HSTS (ngx_http_headers_module is required) (63072000 seconds)add_headerStrict-Transport-Security"max-age=63072000"always;ssl_client_certificate"/opt/wapt/conf/ca-srvwapt.mydomain.lan.crt";ssl_crl"/opt/wapt/conf/ca-check-clients.crl";ssl_verify_clientoptional;gzip_min_length1000;gzip_buffers48k;gzip_http_version1.0;gzip_disable"msie6";gzip_typestext/plaintext/cssapplication/json;gzip_varyon;indexindex.html;server_tokensoff;client_max_body_size12288m;client_body_timeout1800;large_client_header_buffers416k;proxy_headers_hash_max_size1024;proxy_headers_hash_bucket_size128;proxy_request_bufferingoff;location^~/.well-known/acme-challenge/{default_type"text/plain";root/var/www/html;}# sub instancesinclude"/opt/wapt/conf/wapt.d/*.conf";location/static{alias"/opt/wapt/waptserver/static";}location/ssl{alias"/var/www/ssl";}# not protected URLlocation~^/(wapt/waptsetup.*\.exe|wapt/ping|wapt/waptagent/.*|wapt/waptagent\.exe|wapt/waptdeploy\.exe|wapt/conf\.d/.*\.json)${add_headerCache-Control"store,no-cache,must-revalidate,post-check=0,pre-check=0";add_headerPragma"no-cache";root"/var/www";}location~^/api/v3/(wads_register_host|set_host_wads_status|baseipxe|get_host_ipxe|get_wads_exe.*|get_wads_config)${proxy_http_version1.1;proxy_request_bufferingoff;include"/opt/wapt/conf/forward_ssl_auth.conf";rewrite/(.*)/$1break;proxy_passhttp://127.0.0.1:8080;}# not protected URLlocation/wads{alias"/var/www/wads";}location=/{include"/opt/wapt/conf/forward_ssl_auth.conf";proxy_passhttp://127.0.0.1:8080;}# SSL protected URLlocation/waptwua{add_headerCache-Control"store,no-cache,must-revalidate,post-check=0,pre-check=0";add_headerPragma"no-cache";include"/opt/wapt/conf/forward_ssl_auth.conf";include"/opt/wapt/conf/require_ssl_auth.conf";alias"/var/www/waptwua";}# SSL protected URLlocation~^/(wapt/.*|wapt-diff-repos/.*|licences\.json|sync\.json)${add_headerCache-Control"store,no-cache,must-revalidate,post-check=0,pre-check=0";add_headerPragma"no-cache";include"/opt/wapt/conf/forward_ssl_auth.conf";include"/opt/wapt/conf/require_ssl_auth.conf";root"/var/www";}location/rules.json{add_headerCache-Control"store,no-cache,must-revalidate,post-check=0,pre-check=0";add_headerPragma"no-cache";include"/opt/wapt/conf/forward_ssl_auth.conf";root"/var/www";}# we don't want to expose our list of computers in case someone scan this folder.location/wapt-host/Packages{return403;}location~^/(wapt-host/.*)${log_not_foundoff;add_headerCache-Control"store,no-cache,must-revalidate,post-check=0,pre-check=0";add_headerPragma"no-cache";include"/opt/wapt/conf/forward_ssl_auth.conf";include"/opt/wapt/conf/require_ssl_auth.conf";root"/var/www";}location~^/.*_kerberos${proxy_http_version1.1;proxy_request_bufferingoff;include"/opt/wapt/conf/forward_ssl_auth.conf";auth_gsson;auth_gss_format_fullon;auth_gss_keytab/etc/nginx/http-krb5.keytab;proxy_passhttp://127.0.0.1:8080;}# we need socketio for these actions.# they are enabled only locally on the loopbacklocation~^/api/v3/(update_hosts_sid_table|hosts_sid)${proxy_http_version1.1;proxy_request_bufferingoff;include"/opt/wapt/conf/forward_ssl_auth.conf";rewrite/(.*)/$1break;proxy_passhttp://127.0.0.1:8080;allow127.0.0.1;denyall;}# we need socketio for these actionslocation~^/api/v3/(update_hosts_sid_table|trigger_host_action|reset_hosts_sid|host_tasks_status|trigger_cancel_task|hosts_delete|launch_sync_on_remotes_repos|broadcast_sync_on_remotes_repo)${proxy_http_version1.1;proxy_request_bufferingoff;include"/opt/wapt/conf/forward_ssl_auth.conf";include"/opt/wapt/conf/require_ssl_auth.conf";rewrite/(.*)/$1break;proxy_passhttp://127.0.0.1:8080;}location/get_websocket_auth_token{return404;}# these actions are not protected by SSL client side certificate, as we perhaps don't have one at this stage.# in case uwsgi is enabled, we wat this to still be handled by eventlet waptserver as these endpoints are not cpu intensive but often calledlocation~^/(ping)${proxy_http_version1.1;proxy_request_bufferingoff;include"/opt/wapt/conf/forward_ssl_auth.conf";rewrite/(.*)/$1break;proxy_passhttp://127.0.0.1:8080;}# these actions are not protected by SSL client side certificate, as we perhaps don't have one at this stage.location~^/(login|api/v3/login|api/v3/logout|api/v3/get_hash_json_content|api/v3/waptagent_version|add_host|api/v3/add_host|api/v3/get_waptagent_exe/.*/waptagent.exe)${proxy_http_version1.1;proxy_request_bufferingoff;include"/opt/wapt/conf/forward_ssl_auth.conf";rewrite/(.*)/$1break;include/opt/wapt/conf/uwsgi_params;uwsgi_passwaptserver;}location/{proxy_http_version1.1;proxy_request_bufferingoff;include"/opt/wapt/conf/forward_ssl_auth.conf";include"/opt/wapt/conf/require_ssl_auth.conf";include/opt/wapt/conf/uwsgi_params;uwsgi_passwaptserver;}location/socket.io{proxy_http_version1.1;proxy_request_bufferingoff;include"/opt/wapt/conf/forward_ssl_auth.conf";include"/opt/wapt/conf/require_ssl_auth.conf";proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_passhttp://127.0.0.1:8080/socket.io;}}
7.2. Configuration du serveur WAPT pour les grandes infrastructures¶
Les paramètres par défaut du système d’exploitation, de Nginx et de PostgreSQL sont adaptés à environ 400 agents WAPT. Si vous avez plus de 400 clients, il est nécessaire de modifier quelques paramètres au niveau du système ainsi que la base de données PostgreSQL, le serveur web Nginx et le serveur python WAPT.
Dans le futur, le script postconf.sh pourrait prendre en charge cette configuration en fonction du nombre d’ordinateurs clients attendus.
Avec les paramètres suivants, un serveur WAPT devrait être capable de gérer environ 5 000 clients actifs simultanés. Vous pouvez avoir plus de clients dans la base de données s’ils ne fonctionnent pas tous en même temps. Si vous avez plus de 5000 clients, il est recommandé d’avoir plus d’un serveur WAPT.
La limite du nombre de clients finaux est due au goulot d’étranglement dans le code python et le backend PostgreSQL. Les performances de WAPT s’améliorent avec le temps et, à l’avenir, le serveur WAPT pourrait prendre en charge une large base sur un seul hôte. Cependant, la partie Nginx s’adapte très bien et peut tirer pleinement parti d’une connexion 10Gbps pour les déploiements de paquets à forte charge.
Note
Les paramètres à modifier ci-dessous sont liés entre eux et doivent être modifiés globalement et non individuellement.
7.2.1. Prise en charge du multithreading avec uWSGI¶
Pour activer le multithreading avec uWSGI, vous pouvez ajouter le paramètre suivant dans la section [options] du fichier :/opt/wapt/conf/waptserver.ini :
use_uwsgi=True
Vous devez exécuter /opt/wapt/waptserver/scripts/postconf.sh après cette modification.
nginx.conf emplacement du fichier de configuration¶
Type d’OS
Emplacement du fichier
Debian et dérivés
/etc/nginx/nginx.conf
RedHat et dérivés
/etc/nginx/nginx.conf
Windows
C:\wapt\waptserver\nginx\conf\nginx.conf
Dans le fichier nginx.conf, modifiez le paramètre worker_connections. La valeur devrait être environ 2,5 fois le nombre de clients WAPT (n connexions pour les websockets et n connexions pour les téléchargements de paquets et d’inventaires + une certaine marge).
events{worker_connections4096;}
Ensuite, augmentez le nombre de filedescriptors dans le fichier nginx.conf :
worker_rlimit_nofile32768;
En fonction du partitionnement de votre serveur WAPT, vous devrez peut-être faire attention au répertoire de téléchargement des fichiers temporaires de Nginx. Nginx agit comme un proxy inverse pour le moteur Python du serveur WAPT et met en cache les paquets téléchargés lors du téléchargement d’un nouveau paquet à partir de la console.
The packages are stored in the /var/lib/nginx/proxy directory.
You have to make sure that the partition hosting this directory is large enough.
You may change this directory location using the following Nginx configuration parameter.
Augmenter le nombre de filedescriptors. Le fichier unité du système demande une augmentation du nombre autorisé de filedescriptors (LimitNOFILE=32768). Nous devrions avoir la même chose pour Nginx. Il y a quelques limites à modifier.
Tout d’abord, nous modifions au niveau du système le nombre de filedescriptors autorisés pour Nginx et WAPT.
Créez le fichier :/etc/security/limits.d/wapt.conf.
cat>/etc/security/limits.d/wapt.conf<<EOFwapt hard nofile 32768wapt soft nofile 32768www-data hard nofile 32768www-data soft nofile 32768EOF
Nginx sert de proxy inverse et établit un grand nombre de connexions. Chaque client WAPT maintient une connexion websocket en permanence afin de répondre aux actions du serveur WAPT.
Le noyau Linux a une protection contre le fait d’avoir trop de connexions TCP ouvertes en même temps et on peut obtenir le message SYN flooding on port dans le journal Nginx. Afin d’éviter ces messages, il est nécessaire de modifier les deux paramètres suivants. Il devrait être environ 1,5 fois le nombre de clients WAPT.
Un plus grand nombre de clients nécessite un plus grand nombre de connexions à la base de données PostgreSQL. Dans le fichier postgresql.conf, vous devez augmenter le paramètre suivant à environ 1/4 du nombre d’agents WAPT actifs.
max_connections=1000
Dans le fichier /opt/wapt/conf/waptserver.ini (pour Windows C:NwaptNconfNwaptserver.ini), db_max_connections doit être égal à PostgreSQL max_connections moins 10 (PostgreSQL a besoin de garder quelques connexions pour ses tâches ménagères). Le paramètre max_clients doit être fixé à environ 1.2 fois le nombre d’agents WAPT :
La commande wapt-get upload-package <chemin vers le paquet> télécharge un paquet sur le dépôt principal de WAPT.
La commande wapt-get upload-package C:\waptdev\tis-tightvnc.wapt retourne :
Using config file: C:\Users\documentation\AppData\Local\waptconsole\waptconsole.iniUploading packages to https://srvwapt.mydomain.lanPlease get login for https://srvwapt.mydomain.lan/api/v3/upload_xxx:adminPassword:c:\waptdev\tis-tightvnc.wapt[================================] 54316019/54316019 - 00:00:17OK : 1 Packages uploaded, 0 errors
Cette commande s’applique aux dépôts Linux UNIQUEMENT.
La commande wapt-scanpackages <directory> reconstruit un fichier Packages pour un référentiel de paquets WAPT.
La commande wapt-scanpackages /var/www/wapt/ ne renvoie rien.
7.3.4. Re-signature de paquets sur le serveur WAPT à l’aide d’une ligne de commande¶
Utilisez cette méthode si la re-signature à partir de la méthode de la console WAPT n’aboutit pas. Ces commandes sont UNIQUEMENT disponibles pour les serveurs WAPT fonctionnant sous Linux.
Avertissement
Avant d’utiliser cette méthode, assurez-vous que votre serveur WAPT est en sécurité et qu’il n’est pas sous le contrôle d’une entité tierce non autorisée.
Copiez votre .crt et .pem dans /tmp/ sur le serveur WAPT en utilisant Winscp ou un outil équivalent.
Il est alors possible de re-signer tous les paquets en une seule fois sur le serveur WAPT avec les commandes suivantes.