Utiliser plesk comme serveur DNS chez OVH

Utiliser plesk comme serveur DNS chez OVH

La première chose à faire est de modifier la zone DNS du nom de domaine (dans l’espace client ovh, Web > Domaines > NDD > Serveur DNS) :

  • DNS 1 : nsxyaldp.ip-xxx-xxx-xx.xx
  • DNS 2 : sdns.ovh.net

Remplacer nsxyaldp.ip-xxx-xxx-xx.xx par l’ip de votre serveur. Ensuite il faut choisir si Plesk agit en tant que serveur maître ou esclave. Cette configuration se fait dans Plesk dans la sections Paramètres du domaines. Je conseille de laisser Plesk en tant que serveur maître (sinon j’ai du mal à voir l’intérêt de passer par Plesk pour la zone dns).

C’est maintenant que les choses se compliquent.

  • Rendez-vous dans l’onglet Dédié > Serveurs > nsxyaldp.ip-xxx-xxx-xx.xx > DNS Secondaire > Ajouter un domaine > Vous aurez alors un n° de Ownercheck et indiquez votre domaine.
  • Ajouter ce n° de Ownercheck dans la zone de votre serveur DNS Primaire dans un champ TXT. Ex : ownercheck.my-domain.tld. TXT 4f9b4fbp
  • Répéter la première étape.

Notez que pour que cela fonctionne, vous devez :

  • Ouvrir le port 53 en UDP sur votre serveur
  • Mettre en place le allow-transfer

Après ces étapes, vous devrez patienter le temps que la propagation de la zone de votre serveur DNS primaire se copie dans le serveur secondaire (sdns2.ovh.net).

Références externes

Comprendre le log access d’Apache

Comprendre le log access d’Apache

La surveillance d’un serveur web passe très souvent par l’analyse des logs, et plus particulièrement le désormais célèbre access log, qui enregistre toutes sortes d’informations à chaque requête.

Le log access c’est quoi ?

L’Access Log (en anglais) est un fichier texte généré par Apache à chaque requête. Il se compose d’une multitude de lignes (ou entrée), chaque ligne correspondant à une requête.
Les informations stockées sont diverses : IP, date, heure, ressource demandée, code de réponse etc. Autant dire que c’est une mine d’informations très utiles pour qui sait les exploiter.

Lire le log access

Il faut déjà localiser ce fameux fichier. Par défaut, sous debian, il y a de fortes chances de le trouver dans :

  • /var/log/apache2/access.log

A noter que l’utilisation d’un vhost peut modifier cet emplacement. Ensuite, voyons comment il est agencé : par défaut, chaque ligne (1 ligne = 1 entrée = 1 requête serveur) est de la forme suivante :

LogFormat "%h %l %u %t \"%r\" %>s %b" common
  • %h : adresse ip du client.
  • %l : Identité du client. Retourne un tiret (-) si l’information n’est pas disponible.
  • %u : userid du client si la requête est authentifié.
  • %t : date de la requête.
  • \"%r\" : la ligne de requête qui inclus la méthode HTTP, la ressource demandée et le protocole (ex: HTTP/1.1).
  • %>s : code de retour envoyé au client.
  • %b : taille de la ressource demandée.

Un exemple d’entrée :

138.68.10.xxx - - [04/Apr/2019:10:49:07 +0200] "POST /xmlrpc.php HTTP/1.1" 403 3706 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"

Custom Log format

Il est possible de customiser le format des entrées log en utilisant mod_log_config. Pour cela, on utilise deux directives apache :

  • LogFormat : spécifie le format des données à écrire et donne un identifiant
  • CustomLog qui donnera l’emplacement du fichier

Exemple, on défini notre format personnalisé dans la config apache, on le nomme vcommon :

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon

Ensuite, dans notre vhost, il suffit de spécifier notre nouveau format :

<VirtualHost *:80>
   ...
   CustomLog /var/log/apache2/vhosts-access.log vcommon
</VirtualHost>

A noter qu’il existe un Custom Log déjà défini dans Apache, appelé combined :

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

Il ajoute deux nouvelles directives \"%{Referer}i\" et \"%{User-agent}i\".

Références externes

Variables de ré-écriture et flags Apache2

Rappels d’utilisation

Directive RewriteRule

Syntaxe générale de la règle d’écriture :

RewriteRule Modèle Substitution [drapeaux]

Modèle (qui peut être une expression régulière) est comparé à une chaîne de caractère qui dépend du contexte :

  • dans un contexte Virtual Host, il s’agit de la portion de l’URL située entre le nom d’hôte (éventuellement accompagné du port), et la chaîne de paramètres (exemple, pour une requête « https://www.nicolas-petitjean.com/blog/source.html » => « blog/source.html »)
  • dans un contexte de répertoire (sections Directory et fichiers .htaccess), il s’agit d’une partie du chemin. Exemple pour une requête « https://www.nicolas-petitjean.com/blog/source.html » => « blog/source.html ». Par contre si la directive est dans le répertoire « blog », le nom du répertoire est substitué (ce qui donne « source.html »)

Exemple, on veut interdire tous les exécutables :

RewriteRule "\.exe" "-" [F]

Directive RewriteCond

Si vous voulez comparez avec autre chose que cette portion d’url, utilisez la directive RewriteCond :

RewriteCond chaîne_de_test expression_de_comparaison

Ici chaîne_de_test prend la forme de variables, ce qui permet de tester toutes sortes de choses. expression_de_comparaison peut aussi être une expression régulière. Par exemple, pour savoir si la requête utilise le protocole SSL :

RewriteCond %{HTTPS} off

Ce qui permet par exemple de faire une redirection http vers https proprement :

RewriteCond %{HTTPS} off
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

%{SERVER_NAME} est une variable serveur (voir plus bas pour sa signification).

Une directive RewriteCond ne s’applique qu’à la règle RewriteRule située immédiatement après. Il est possible de cumuler les directives RewriteCond pour une même directive RewriteRule.

Syntaxe « tiret » de réécriture

Une façon simple de ne pas réécrire l’URI (aucune substitution) est d’utiliser la syntaxe « tiret » :

RewriteRule "\.exe" "-" [F]

Ici on interdit le téléchargement des exécutables. Inutile donc de réécrire quoi que ce soit.

Références arrières

Comme on utilise des expressions régulières avec RewriteRule et RewriteCond, on va pouvoir capturer des portions de chaines pour les réutiliser.

  • référence arrière de condition : %N (1<=N<=9) contient les parenthèses capturantes de la directive RewriteCond précédente. %0 contient la chaine entière (chaîne_de_test donc)
  • références arrières de réécriture : $N (1<=N<=9) contient les parenthèses capturantes de la directive RewriteRule courante. $0 contient la chaine entière (la chaine de caractère comparée à Modèle).

Deux façons d’obtenir la même redirection :

RewriteCond %{REQUEST_URI} category/(.*)$
RewriteRule . /freestyle-blog/?cat=%1 [L,R=301]

RewriteRule ^category/(.*)$ /freestyle-blog/?cat=$1 [L,R=301]

Liste des variables

On peut utiliser certaines variables dans la directive RewriteCond. Il faut utiliser la syntaxe suivante : %{VAR}.

Variable Description Exemple
DOCUMENT_ROOT La racine du serveur (définie par la directive DocumentRoot). /var/www/html/
HTTP_COOKIE Cookies envoyé par le client. 90plan=R3276214363; _gid=GA1.2.1163156300.1539840846; _gat_gtag_UA_12961733_1=1
HTTP_HOST Nom du serveur demandé. www.nicolas-petitjean.com
HTTPS on si la requête utilise https, sinon off. on
HTTP_REFERER Lien référant si existant. Non fiable. www.google.com/?q=fancy
HTTP_USER_AGENT Identifiant du client. Non fiable Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:62.0) Gecko/20100101 Firefox/62.0
QUERY_STRING Paramètres passées dans l’url. ?page=3&order=asc
REQUEST_FILENAME Identique à SCRIPT_FILENAME. /home/nicolas/www/index.php
REQUEST_METHOD La méthode HTTP de la requête entrante. GET, POST, PATCH etc
REQUEST_SCHEME Protocole de la requête. http, https
REQUEST_URI Ressource demandée. /blog/apache
SCRIPT_FILENAME Chemin absolu de la ressource demandée. /home/nicolas/www/index.php
THE_REQUEST La requête complète. GET /index.php HTTP/1.1

Les drapeaux (flags)

Petite liste des drapeaux les plus courants :

Drapeau Description
C|chain Indique que la règle est chainée avec la suivante. Si la règle ne s’appliqe pas, la chaîne s’interrompt.
CO|cookie Crée un cookie quand la règle s’applique. Peu connu mais très efficace. Retrouvez la syntaxe complète sur la doc Apache.
E|env Définit la valeur d’une variable d’environnement si la règle s’applique.

RewriteRule "\.(png|gif|jpg)" "-" [E=image:1]

Notez l’utilisation de la syntaxe « tiret ».

F|forbidden Renvoi un status 403 si la règle s’applique.

RewriteRule "\.exe" "-" [F]

Notez l’utilisation de la syntaxe « tiret ».

H|handler Spécifie un gestionnaire à utiliser si la règle s’applique. Par exemple, pour utiliser php avec toutes les fichiers portant l’extension php :

RewriteRule "\.php$" "-" [H=application/x-httpd-php]
L|last Si la règle s’applique, aucune autre règle ne sera traitée. En d’autres termes, il s’agit de la dernière redirection.
N|next Recommence le traitement des règles depuis le début. Ce drapeau peut être vu comme un while. Attention donc aux boucles infinies.

RewriteRule "(.*)A(.*)" "$1B$2" [N]

Depuis Apache 2.4.8, le nombre d’itérations est limité à 32000, sauf mention contraire dans le drapeau :

RewriteRule "(.*)A(.*)" "$1B$2" [N=40000]
NC|nocase Comparasion insensible à la casse. Intéressant pour s’affranchir du problème de majuscules dans les extensions :

RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]

Depuis Apache 2.4.8, le nombre d’itérations est limité à 32000, sauf mention contraire dans le drapeau :

RewriteRule "(.*)A(.*)" "$1B$2" [N=40000]
R|redirect Envoi une redirection au navigateur. Quasiment toujours employé avec le drapeau L (last) :

RewriteRule ^category/(.*)$ /freestyle-blog/?cat=$0 [L,R=301]
S|skip Permet de sauter des règles si la règle RewriteRule s’applique. Pour sauter deux règles :

RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [S=2]

Références externes