Aller au contenu
  1. Notes/

Utiliser Apache mod_include pour un simple script "Quelle est mon IP"

·2 mins
Ixonae
Auteur
Ixonae

Avertissement : Cet article a été traduit de l’anglais par un LLM. La précision n’est pas garantie. Vous pouvez lire l’article original en anglais.

Dans le cadre de Network Watcher, je voulais avoir quelque chose comme https://ifconfig.me/ip que je puisse auto-héberger sans avoir à installer ou configurer quoi que ce soit de nouveau.

Comme j’ai un serveur Apache qui tourne en tant que serveur proxy quelque part, j’ai décidé d’explorer mes options.

J’ai découvert qu’on peut utiliser mod_include puisqu’il est déjà compilé dans httpd sur les systèmes RHEL (bien qu’il ne soit pas actif par défaut ; il nécessite une configuration explicite pour fonctionner.)

Le script .shtml s’est donc résumé à une seule ligne :

<!--#echo var="REMOTE_ADDR" -->

Cela ne fonctionnerait pas tout seul, il a donc fallu ajouter de la configuration dans le fichier vhost d’Apache :

  DocumentRoot /path/to/dir
  <Directory /path/to/dir>
    # S'assurer qu'on ne peut pas utiliser la fonction exec de SSI,
    #  ni écraser la configuration actuelle
    Options IncludesNOEXEC
    AllowOverride None

    # Indique à Apache de servir les fichiers .shtml avec le type MIME text/html
    #   pour que la page soit affichée et non téléchargée.
    AddType text/html .shtml

    # On indique à Apache d'utiliser le processeur SSI pour parser les fichiers shtml
    AddOutputFilter INCLUDES .shtml

    DirectoryIndex index.shtml
    Require all granted
  </Directory>

  RewriteEngine On

  # Refuser les tokens invalides
  RewriteCond %{HTTP:Authorization} !^Bearer\ dummy-password$
  RewriteRule .* - [F]

  # Refuser tout ce qui n'est pas /
  RewriteCond %{REQUEST_URI} !^/$
  RewriteCond %{REQUEST_URI} !^/index\.shtml$
  RewriteRule .* - [F]

Vous remarquerez peut-être la ligne RewriteCond %{HTTP:Authorization} avec un mot de passe codé en dur. Je voulais avoir une autorisation Bearer simple sans rien faire de compliqué (et j’étais aussi curieux de savoir si c’était possible.) Le mot de passe codé en dur n’est pas très élégant (on pourrait le déplacer dans un fichier séparé via la directive Include d’Apache), mais il n’y a pratiquement aucun risque même si quelqu’un accède à la page, donc ça me convient.

Ressources supplémentaires