<h2class="sectionedit2"id="secure_configuration_access">Securiser l'accès à la configuration</h2>
<divclass="level2">
<p>
La configuration peut être stockée sous plusieurs formats (<ahref="sqlconfbackend.html"class="wikilink1"title="documentation:2.0:sqlconfbackend">SQL</a>, <ahref="fileconfbackend.html"class="wikilink1"title="documentation:2.0:fileconfbackend">File</a>, <ahref="ldapconfbackend.html"class="wikilink1"title="documentation:2.0:ldapconfbackend">LDAP</a>) mais doit être partégée via le réseau si on utilise plus d'un serveur. Si certains des serveurs ne se trouvent pas sur le même réseau (securisé) que la même base de données, il est recommandé d'utiliser <ahref="soapconfbackend.html"class="wikilink1"title="documentation:2.0:soapconfbackend">l'accès SOAP</a> pour ces serveurs.
</p>
<divclass="notetip">On peut utiliser différent typed d'accès : <ahref="sqlconfbackend.html"class="wikilink1"title="documentation:2.0:sqlconfbackend">SQL</a>, <ahref="fileconfbackend.html"class="wikilink1"title="documentation:2.0:fileconfbackend">File</a> or <ahref="ldapconfbackend.html"class="wikilink1"title="documentation:2.0:ldapconfbackend">LDAP</a> pour les serveurs se trouvant sur le réseau sécurisé et <ahref="soapconfbackend.html"class="wikilink1"title="documentation:2.0:soapconfbackend">SOAP</a> pour les autres.
</div>
<p>
Next, you have to configure the SOAP access as described <ahref="soapconfbackend.html#next_configure_soap_for_your_remote_servers"class="wikilink1"title="documentation:2.0:soapconfbackend">here</a> since SOAP access is denied by default.
<h2class="sectionedit3"id="protect_the_manager">Protéger le manager</h2>
<divclass="level2">
<p>
Par défaut, l'accès au manager est restreint à l'utilisateur "dwho" (le backend par défaut est Demo). Pour protéger le manager, il faut choisir l'une où les deux solutions :
</p>
<ul>
<liclass="level1"><divclass="li"> protéger le manager par configuration d'Apache</div>
</li>
<liclass="level1"><divclass="li"> protéger le manager par <abbrtitle="LemonLDAP::NG">LL::NG</abbr></div>
</li>
</ul>
</div><!-- EDIT3 SECTION "Protect the Manager" [810-1069] -->
<h3class="sectionedit5"id="protect_the_manager_by_llng">Protéger le manager par LL::NG</h3>
<divclass="level3">
<p>
Pour protéger le manager par <abbrtitle="LemonLDAP::NG">LL::NG</abbr>, il suffit de mettre ceci dans le fichier de configuration <code>lemonldap-ng.ini</code> (section [manager]) :
<divclass="noteimportant">Avant, il faut créer l'hôte virtuel <code>manager.your.domain</code> dans le manager et mettre une <ahref="writingrulesand_headers.html#rules"class="wikilink1"title="documentation:2.0:writingrulesand_headers">règle</a>, sinon l'accès au manager sera interdit.
<liclass="level1"><divclass="li"><ahref="https://en.wikipedia.org/wiki/Cross-site_request_forgery"class="urlextern"title="https://en.wikipedia.org/wiki/Cross-site_request_forgery"rel="nofollow">CSRF</a> protection <em>(Cross-Site Request Forgery)</em>: a token is build for each form. To disable it, set requireToken to 0 <em>(portal security parameters in the manager)</em>. Token timeout can be defined via manager (default to 120 seconds),</div>
</li>
<liclass="level1"><divclass="li"><ahref="https://en.wikipedia.org/wiki/Content_Security_Policy"class="urlextern"title="https://en.wikipedia.org/wiki/Content_Security_Policy"rel="nofollow">Content-Security-Policy</a> header: portal build dynamically this header. You can modify default values in the manager <em>(Général parameters » Advanced parameters » Security » Content-Security-Policy)</em>.</div>
</li>
</ul>
</div><!-- EDIT6 SECTION "Portal" [2106-2740] -->
<h3class="sectionedit7"id="split_portal_when_using_soaprest">Split portal when using SOAP/REST</h3>
<divclass="level3">
<p>
If you use <ahref="soapsessionbackend.html"class="wikilink1"title="documentation:2.0:soapsessionbackend">SOAP</a> or <ahref="restsessionbackend.html"class="wikilink1"title="documentation:2.0:restsessionbackend">REST</a> session backend, dedicate a portal especially for these internal requests.
</p>
</div><!-- EDIT7 SECTION "Split portal when using SOAP/REST" [2741-2931] -->
<h2class="sectionedit8"id="write_good_rules">Écrire de bonnes règles</h2>
<divclass="level2">
</div><!-- EDIT8 SECTION "Write good rules" [2932-2961] -->
<h3class="sectionedit9"id="order_your_rules">Ordonner les règles</h3>
Les <ahref="writingrulesand_headers.html#rules"class="wikilink1"title="documentation:2.0:writingrulesand_headers">règles</a> sont appliquées dans l'ordre alphabétique (commentaires et expressions régulières). La première règle qui correspond est appliquée.
</p>
<divclass="noteimportant">La règle “default” n'est appliquée que si aucune autre règle ne correspond
</div>
<p>
Le manager permet de définir des commentaires de règles, ce qui permet de les ordonner :
On peut écrire des <ahref="writingrulesand_headers.html#rules"class="wikilink1"title="documentation:2.0:writingrulesand_headers">règles</a> qui examine n'importe quel composant de l'<abbrtitle="Uniform Resource Locator">URL</abbr> à protéger y compris les paramètres GET, mais il faut faire attention.
</p>
<p>
Par exemple avec cette règle sur le paramètre <code>access</code> :
Certains caractères sont encodés dans les URLs par le navigateur (tels les espaces,…). Pour éviter les problèmes, <abbrtitle="LemonLDAP::NG">LL::NG</abbr> les décode en utilisant <ahref="http://search.cpan.org/perldoc?Apache2::URI#unescape_url"class="urlextern"title="http://search.cpan.org/perldoc?Apache2::URI#unescape_url"rel="nofollow">http://search.cpan.org/perldoc?Apache2::URI#unescape_url</a>. Il faut donc écrire les règles en utilisant les caractères normaux.
<abbrtitle="LemonLDAP::NG">LL::NG</abbr> peut protéger toute application hébergée par Apache y compris le mécanisme de proxy inverse d'Apache. Exemple :
Voir les documentation de <ahref="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html"class="urlextern"title="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html"rel="nofollow">mod_proxy</a> et <ahref="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html"class="urlextern"title="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html"rel="nofollow">mod_rewrite</a> pour plus d'information sur la configuration du proxy inverse d'Apache.
</p>
<p>
Une telle configuration peut engendrer des problèmes de sécurité :
</p>
<ul>
<liclass="level1"><divclass="li"> Si un utilisateur peut accéder directement à l'application cachée, peut contourner la protection de <abbrtitle="LemonLDAP::NG">LL::NG</abbr></div>
</li>
<liclass="level1"><divclass="li"> if many hidden applications are on the same private network, if one is corrupted (by SQL injection, or another attack), the hacker will be able to access to other applications without using reverse-proxies so it can bypass <abbrtitle="LemonLDAP::NG">LL::NG</abbr> protection</div>
</li>
</ul>
<p>
Il est donc recommandé de sécurisé le canal entre le proxy inverse et l'application pour être sûr que seules les requêtes issues des proxies inverses protégés par <abbrtitle="LemonLDAP::NG">LL::NG</abbr> sont autorisées. On peut utiliser un ou plusieurs solution :
</p>
<ul>
<liclass="level1"><divclass="li"> pare-feux (attention toutefois si plus d'une application se trouve derrière le pare-feu)</div>
</li>
<liclass="level1"><divclass="li"> restrictions basées sur le serveur (tel le mécanisme “allow/deny” d'Apache)</div>
</li>
<liclass="level1"><divclass="li"> SSL client certificate for the reverse-proxy (see SSLProxy* parameters in <ahref="http://httpd.apache.org/docs/2.2/mod/mod_ssl.html"class="urlextern"title="http://httpd.apache.org/docs/2.2/mod/mod_ssl.html"rel="nofollow">mod_ssl documentation</a>)</div>
Aller dans le manager, <code>Paramètres généraux</code> » <code>Paramètres avancés</code> » <code>Sécurité</code> :
</p>
<ul>
<liclass="level1"><divclass="li"><strong>Contrôle du nom d'utilisateur</strong> : expression régulière utilisée pour vérifier la syntaxe du nom d'utilisateur.</div>
</li>
<liclass="level1"><divclass="li"><strong>Forcer l'authentification</strong> : mettre à 'Activé' pour forcer l'authentification lorsque l'utilisateur accède au portail même s'il dispose d'une session valide</div>
</li>
<liclass="level1"><divclass="li"><strong>Force authentication interval</strong>: time interval (in seconds) when a authentication renewal cannot be forced, used to prevent to loose the current authentication during the main process. If you experience slow network performances, you can increase this value.</div>
</li>
<liclass="level1"><divclass="li"><strong>Clef de chiffrement</strong> : clef utilisée pour chiffrer certaines données, ne doit être connue d'aucune autre application</div>
</li>
<liclass="level1"><divclass="li"><strong>Domaines approuvés</strong> : domaines vers lesquels l'utilisateur peut être redirigé après authentification sur le portail. Mettre '*' pour tout accepter.</div>
</li>
<liclass="level1"><divclass="li"><strong>Utiliser la cage sécurisée</strong> : mettre à 'Désctivé' pour désactiver la cage sécurisée (Safe). Le module Safe est utilisé pour évaluer les expressions dans les en-têtes, règles, etc... La désactiver peut engendrer des trous de sécurité.</div>
</li>
<liclass="level1"><divclass="li"><strong>Contrôler les attaques <abbrtitle="Cross Site Scripting">XSS</abbr></strong> : mettre à 'désactivé' pour désactiver la détection des attaques <abbrtitle="Cross Site Scripting">XSS</abbr>. Le contrôle <abbrtitle="Cross Site Scripting">XSS</abbr> continuera à être effectué mais avec seulement des avertissements dans les journaux sans empêcher le processus de continuer.</div>
</li>
<liclass="level1"><divclass="li"><strong>LWP::UserAgent SSL options</strong>: insert here options to pass to LWP::UserAgent object (used by <abbrtitle="Security Assertion Markup Language">SAML</abbr> or OpenID-Connect to query partners). Example: <code>verify_hostname ⇒ 0</code>, <code>SSL_verify_mode ⇒ 0</code></div>
You can change the module used for sessions identifier generation. To do, add <code>generateModule</code> key in the configured session backend options.
</p>
<p>
We recommend the use of <code>Lemonldap::NG::Common::Apache::Session::Generate::SHA256</code>.