Catégorie : Auto Hébergement

  • Mise en place d’un serveur HTTPS

    Mise en place d’un serveur HTTPS

    Dans le dernier article, nous avions vu comment installer Nginx.

    Même si la configuration initiale était fonctionnelle, elle n’est pas des plus sécurisées. Néanmoins elle est essentielle pour l’obtention du certificat let’s encrypt et la mise en place du protocole https.

    Je vous propose ainsi dans cet article, de faire la mise en place d’un serveur HTTPS.

    Mise en place du certificat let’s encrypt

    Le certificat let’s encrypt, nous permet de sécuriser la connexion à notre site web. Cela se traduit par une URL en https et le petit cadenas sur votre navigateur.

    En cliquant sur le cadenas, on y apprend que le certificat permet un chiffrement de la connexion ce qui rend très difficile la visualisation de cette page pendant son transit.

    Ainsi même si un attaquant détournait la connexion, les informations reçues seraient chiffrées et inutilisables.

    Pour générer ce certificat, nous utiliserons certbot.

    Si vous avez suivi mon premier article : Installation de WordPress sous Docker, il vous suffira de le compléter.

    Nous allons rajouter ces quelques lignes dans notre fichier docker-compose.yml

      certbot:
        image: certbot/certbot:latest
        container_name: certbot
        depends_on:
          - nginx
        command: >-
          certonly --webroot --webroot-path=/var/www/certbot/ --email [votre_email] --agree-tos --no-eff-email -d mamourhome.duckdns.org
    
        volumes:
          - ${CERTBOT_WWW}:/var/www/certbot/:rw
          - ${CERTBOT_CONF}:/etc/letsencrypt/:rw
          - ${CERTBOT_LOGS}:/var/log/letsencrypt/
    

    Pensez à rajouter les volumes commun dans votre service nginx dans le fichier docker-compose.yml.

    Soit :

    - ${CERTBOT_WWW}:/var/www/certbot/:ro
    - ${CERTBOT_CONF}:/etc/nginx/ssl/:ro

    Puis déclarer les variables dans le fichier .env

    #certbot setting
    export CERTBOT_WWW=./certbot/www
    export CERTBOT_CONF=./certbot/letsencrypt
    export CERTBOT_LOGS=./logs/certbot
    

    Il faudra également indiquer le chemin d’accès au certificat dans le fichier default.conf.

    Ajouter dans le fichier default.conf :

    include nginxconfig.io/letsencrypt.conf

    Puis créer le fichier letsencrypt.conf dans le répertoire nginxconfig.io

    Puis ajouter à ce fichier :

    location ~ /.well-known/acme-challenge {
         allow all;
         root /var/www/certbot;
    }
    

    Modifier votre fichier docker-compose.yml, et rajouter toujours dans le service Nginx le volume qui gérera le repertoire nginxconfig.io.

    - ${NGINX_CONFIG_IO}:/etc/nginx/nginxconfig.io/:ro

    Puis mettre à jour le fichier .env avec les dernieres instructions :

    export NGINX_CONFIG_IO=./nginx/nginxconfig.io

    Une fois toutes ces mises à jour effectuées, vous pourrez lancer l’obtention du certificat en lançant cette commande.

    sudo docker compose run certbot

    Et si tout se passe bien, vous verrez dans votre terminal ce petit message :

    Do you want to expand and replace this existing certificate with the new
    certificate?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (E)xpand/(C)ancel: E
    Renewing an existing certificate for www.laclefdigitale.fr and 5 more domains
    
    Successfully received certificate.
    

    Maintenant que nous avons le certificat, nous allons indiquer à notre serveur web, qu’il faudra toujours emprunter le protocole https

    Nous allons donc modifier le fichier default.conf comme ceci :

    
    server {
        listen                  443 ssl;
        http2                   on;
        listen                  [::]:443 ssl;
        server_name             mamourhome.duckdns.org;
        set                     $base /var/www/html/mamour;
        root                    $base;
    
        index index.php;
        # SSL
        ssl_certificate         /etc/nginx/ssl/live/mamourhome.duckdns.org/fullchain.pem;
        ssl_certificate_key     /etc/nginx/ssl/live/mamourhome.duckdns.org/privkey.pem;
        ssl_trusted_certificate /etc/nginx/ssl/live/mamourhome.duckdns.org/chain.pem;
    
            location / {
               proxy_pass http://backnginx;
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header X-Forwarded-Proto $scheme;
               proxy_next_upstream error timeout http_500;
            }
    
    }
    
    server{
            listen 80;
            listen [::]:80;
    
            server_name mamourhome.duckdns.org;
    
            include nginxconfig.io/letsencrypt.conf;
    
       location / {
            return 301 https://mamourhome.duckdns.org$request_uri;
        }
    }

    Et maintenant en tapant : https://mamourhome.duckdns.org, nous avons bien notre connexion chiffrée et notre petit cadenas.

    Conclusion

    Ainsi grâce aux certificats TLS de let’s encrypt et à Certbot, nous avons pu faire la mise en place d’un serveur HTTPS. C’est le premier pas pour sécuriser nos applications sur internet.

    Dans le prochain article, nous modifierons la structure de notre Nginx pour y rajouter la possibilité d’héberger plusieurs site web.

  • Installation de Nginx sous Docker

    Installation de Nginx sous Docker

    Nous avions vu lors d’un précédent article, comment installer WordPress sous Docker. C’est toujours sympa d’avoir un site web à la maison. Mais çà serait tout de même bien plus génial si nous pouvions l’ouvrir au reste du monde.

    Nous allons donc voir comment cela est possible grâce à l’installation de Nginx sous Docker.

    Mise en place d’un nom de domaine gratuitement

    Sans trop développer le sujet, le web tel que nous le connaissons est accessible grâce à des adresses ip. En faisant un ping vers Google ou un autre site, le serveur nous répondra avec son adresse IP.

    Naturellement, pour des humains retenir une suite de nombre pour accéder à nos site préférés est un peu compliqué.

    C’est à ce moment où le nom de domaine intervient. Il va translater les adresses IP en une translation plus simple et compréhensible pour nous tous.

    Pour cet article nous utiliserons le service de Duckdns qui nous permet de bénéficier d’un nom de domaine gratuitement de la forme : XXXXXXX.duckdns.org

    Nous pouvons donc commencer par créer un compte sur https://www.duckdns.org/

    Une fois celui-ci créé, il nous suffira de choisir un sub domain et d’y attacher les adresses IP de notre serveur.

    Dans mon cas, j’ai choisi mamourhome qui pointe sur L’IP de mon serveur.

    Installation de Nginx sous Docker

    Bien, maintenant que nous avons un nom de domaine, nous allons pouvoir installer Nginx sous docker.

    On se crée un répertoire de travail. Et on y crée notre fichier docker compose.

    service:
      
      nginx:
      image: nginx
        container_name: nginx
        env_file:
          - .env
        restart: unless-stopped
        networks:
    - nt_nginx
    
    depends on:
    - wordpress
    
    ports:
    - 80:80
    - 443:443
    
    volumes:
    - ${WORDPRESS_LOCAL_HOME}:/var/www/html/:ro
    - ${NGINX_CONF_DEFAULT}:/etc/nginx/conf.d/default.conf 
    - ${NGINX_LOGS}:/var/log/nginx

    Vous pouvez rajouter à la suite le contenu du docker compose sur l’article traitant de l’installation de WordPress docker. N’oubliez néanmoins de rajouter le bon nom de réseau entre Nginx et WordPress.

    Nous allons ensuite créer le fichier .env

    ${WORDPRESS_LOCAL_HOME}: ./wordpress
    ${NGINX_CONF_DEFAULT}: ./nginx/conf.d/default.conf
    ${NGINX_LOGS}: ./logs

    La configuration de notre serveur Web est actuellement en version minimum.

    Une fois que nous aurons récupérer les certificats let’s encrypt, nous rajouterons les modules manquants pour Nginx (la sécurité, le CSP, un peu d’optimisation, etc).

    Création du fichier de configuration default.conf

    Pour que notre Nginx puisse fonctionner correctement avec notre nom de domaine nous allons créer un fichier default.conf dans le répertoire ./nginx/conf.d/

    Ce fichier indiquera ainsi l’emplacement du répertoire de travail du nom de domaine demandé.

    Notre fichier default.conf ressemblera donc à ceci :

    server{
            listen 80;
            listen [::]:80;
    
            server_name mamourhome.duckdns.org;
    
            set     $base /var/www/html/mamour;
            root    $base;
            index index.php;
    
    
    
            location / {
    
               proxy_pass http://backnginx;
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header X-Forwarded-Proto $scheme;
               proxy_next_upstream error timeout http_500;
            }
    
    
    }
    

    Une fois le fichier default.conf créé, vous devrez redémarrer votre service Nginx pour qu’il soit pris en compte.

    sudo docker compose restart nginx

    Puis en tapant l’URL : http://mamourhome.duckdns.org, vous devriez arriver sur votre instance WordPress 🙂

    Conclusion

    Nous avons vu comment faire l’installation de Nginx sous docker. Celle-ci nous permet mettre en place un serveur pour appeler nos applications, tout en les rendant public grâce à un nom de domaine.

    Le prochain article traitera de la mise en place des cetificats let’s encrypt grâce à Certbot, puis nous commencerons à optimiser et à sécuriser nos applications web.

  • Installation de Portainer sur Docker

    Installation de Portainer sur Docker

    Cet article traitera de l’installation de Portainer sur Docker.

    Je décomposerais cet article en deux grandes parties.

    La première traitera de pourquoi j’utilise Portainer, puis la deuxième traitera de son installation grâce à docker-compose.

    Portainer

    Pourquoi Portainer ?

    Portainer vous permet de visualiser graphiquement l’ensemble des données tournant sous Docker.

    interface de Portainer
    interface de Portainer

    Vous pouvez en quelques cliques visualiser les réseaux créés, les images utilisées, l’état de tous vos container.

    Il simplifie grandement la gestion de vos applications, vous permettant par exemple de rajouter un container sur un réseau mac-vlan, ou d’examiner les logs pour un dé-bug.

    visualisation simple des logs grâce à Portainer
    Portainer facilite la visualisation des logs

    Je trouve que ce logiciel est un must have, il m’a permis de souvent de-buguer mes container sans avoir à écrire une seule ligne de commande.

    Installation de Portainer sur Docker

    Pour effectuer l’installation de Portainer sur Docker, nous utiliserons le plugin docker compose.

    Si vous avez suivi l’installation de mon article précédent, docker compose devrait déjà être installé.

    Vous pouvez le vérifier en effectuant cette commande

    sudo docker compose version

    Vous devriez avoir ce retour :

    Docker Compose version v2.29.7

    On commence par créer notre répertoire de travail et on s’y déplace à l’intérieur.

    mkdir portainer && cd portainer

    On crée le fichier docker-compose.yml

    sudo nano docker-compose.yml

    Puis on déclare notre application

    services:   #point d'entrée de notre application
      portainer:  #nom du service
        image: portainer/portainer-ce:latest  #nom de l'image à récupérer
        container_name: portainer #nom qui sera affecté au container
        ports:  #ports utilisés du type "hôte" : "vers container"
          - 9000:9000
        volumes: #on définit les volumes qui seront utilisés par l'application, du type nom du volume local : chemin du répertoire du container
          - portainer_data:/data
          - /var/run/docker.sock:/var/run/docker.sock
        restart: unless-stopped
    
    volumes:  #on déclare les volumes
      portainer_data:

    Vous noterez que les deux volumes sont déclarés différemment. Le premier est du type volume virtuel « volatile », alors que le deuxième est une copie du fichier docker.sock de l’hôte dans le container.

    Je reviendrais sur des explications plus approfondies lors de prochains billets.

    Une fois que vous avez finit d’écrire votre fichier yml, vous pouvez le sauvegarder en effectuant CTRL+O, puis fermer le fichier avec CTRL+X.

    Nous pouvons maintenant lancer la création de notre container avec la commande suivante :

    sudo docker compose up -d

    Vous verrez alors docker télécharger l’image, et créer le container.

    Vous pouvez ensuite accéder à Portainer en entrant dans votre navigateur https://ip-hote:9000.

    Lors de la création du container, Portainer génère des certificats self-signed.

    Vous aurez donc un message d’avertissement il suffira de cliquer sur avancé, puis continuer la connexion.

    Conclusion

    Nous avons vu pourquoi et comment faire l’installation de Portainer sur Docker.

    Portainer nous permet très simplement d’administrer nos containers Docker que ce soit dans la visualisation des logs, l’ajout de réseau, ou modifier les status des containers.

  • Installation de Raspberry PI OS et Docker

    Installation de Raspberry PI OS et Docker

    Cet article traitera de l’installation de Raspberry PI OS et docker sur un Raspberry.

    Raspberry PI OS

    Raspberry PI OS est un système d’exploitation conçu pour l’architecture ARM64 du Raspberry. Ce système d’exploitation est un logiciel libre et gratuit basé sur Debian. Autant dire que çà envoie du lourd !

    Prérequis pour l’installation de Raspberry PI OS

    Préparation de la carte SD

    On branche son lecteur SD dans le port USB de son ordinateur et on lance Raspberry Pi Imager.

    interface de Raspberry Pi Imager

    On sélectionne son modèle de Raspberry et on choisit son système d’exploitation.

    Nous allons sélectionner Raspberry PI OS (other).

    fenetre de selection de Raspberry Pi OS Other

    Dans ce menu, on y trouvera le système que nous allons utiliser : Raspberry PI OS lite (64-bit).

    Il s’agit de la version du système d’exploitation diminuée de l’environnement Destock. Compte tenu que nous allons y travailler depuis SSH, nous n’avons pas besoin d’un environnement bureau.

    Si vous avez relié votre Raspberry sur le port HDMI, vous pouvez sélectionner Raspberry PI OS Full (64-bit). Cela vous permettra d’avoir l’interface graphique de bureau.

    Une fois l’OS sélectionné, on choisit le média de stockage pour la création de l’image, et on clique sur suivant.

    A la fenêtre suivante, on cliquera sur Modifier les réglages.

    fenetre de personnalisation de l'OS

    Dans cette fenêtre, on pourra y définir le nom de notre serveur, le nom d’utilisateur et le mot de passe.

    onglet général, pour définir le nom d'hôte, le nom d 'utilisateur et le mot de passe du compte

    Dans l’onglet suivant « Services », on cochera activer SSH et utiliser un mot de passe pour l’authentification.

    Les réglages sont prêts, on peut donc lancer la création de l’image.

    Connexion en SSH

    Vous avez deux possibilités pour vous connecter en SSH.

    Soit vous attaquez par l’IP de votre hôte soit vous ouvrez la connexion par son nom DNS.

    Néanmoins pour des raisons de praticité nous allons déterminer l’adresse IP de notre serveur puis l’assigner en IP statique.

    De cette façon, l’IP ne changera pas au prochain redémarrage.

    Pour cela, il faudra se connecter sur le routeur de votre FAI, pour trouver notre machine.

    Dans mon cas, je détiens une FREE Delta, je me connecte donc sur la Free box, je vais dans DHCP, puis baux actifs.

    Je recherche mon Raspberry, et je fais un clique droit dessus puis ajouter un bail statique. Et voila, notre serveur possède dorénavant une IP statique.

    On peut désormais se connecter en SSH sur notre Raspberry.

    Sur MobaXterm, la connexion ressemble à çà.

    interface de MobaXterm

    Dans Remote host, on y indiquera soit l’IP de notre serveur soit son petit nom.

    Vous pouvez spécifier le nom d’utilisateur, on laisse le port 22 par défaut, sauf si vous l’avez changer.

    fenetre de MobaXterm en ssh sur le raspberry

    La première chose à faire est de mettre notre système à jour.

    sudo apt-get update && sudo apt-get upgrade

    Çà va travailler un petit moment selon la puissance de votre machine. On le laisse faire tranquillement.

    Installation de Docker

    Nous allons utiliser Docker, car ce logiciel est magique.

    Docker permet de containériser vos applications.

    Cela veut dire que chaque application se retrouve dans un environnement virtuel indépendant de votre hôte et des autres applications docker.

    Vous pouvez par exemple avoir plusieurs instances WordPress, plusieurs version de python, Home Assistant, Drupal, Joomla et tout çà sur le même serveur, dans des environnements totalement isolés.

    Docker rajoute une couche de sécurité, car chaque container discute seulement avec les applications que vous souhaitez.

    L’installation est très simple, il y a juste à lancer un script et tout se passe automatiquement.

    On créé un répertoire Docker :

    mkdir docker && cd docker

    Puis on lance le script de chez Docker :

    curl -fsSL https://get.docker.com | sh

    Ainsi grâce à PI Imager et au script de docker, l’installation de Raspberry PI OS et de docker se fait en quelques lignes de commandes.

    Dans le prochain article je vous montrerez comment installer Portainer et Home Assistant.

    Portainer nous simplifiera grandement la gestion de nos centenaires et Home Assistant, nous permettra de transformer notre Raspberry PI en une box domotique.

  • Adguard Home: proxy anti-pub et contrôle parental

    Adguard Home: proxy anti-pub et contrôle parental

    Cet article expliquera comment installer Adguard Home: proxy anti-pub et contrôle parental sur le wifi de la maison.

    Nous avons de plus en plus d’appareil connecté sur le net dans notre domicile (smartphone, tablette, ordinateur), et il est de plus de plus difficile de sécuriser tous ces appareils.

    Je vous propose ainsi de centraliser cette sécurité pour protéger vos enfants en toute sérénité, quelque soit l’appareil utilisé chez vous.

    J’ai choisi d’utiliser Adguard Home car il est vraiment puissant et facilite grandement sa configuration.

    Il accepte les listes Pi-hole, ce qui permet en plus d’automatiser une black liste sur plusieurs contenus (malware, site de jeux, porno, etc). Il permet également de bloquer la majorité des services de réseau sociaux, jeux en un seul clique.

    interface Adguard Home permettant de bloquer facilement les services
    interface Adguard Home permettant de bloquer facilement les services

    Cet article sera divisé en deux grande parties :

    • Installation du proxy Adguard Home
    • Mise en place d’un proxy transparent

    On s’installe confortablement à son bureau, on se connecte en SSH à son Raspberry, et c’est partie !

    Installation du proxy Adguard home

    Nous utiliserons la méthode du Snap store pour installer Adguard Home.

    Snap store facilite grandement son installation sur Linux et nous évitera par la même occasion de taper trop de lignes de commandes.

    Voici le lien du tutoriel d’installation depuis leur site.

    https://snapcraft.io/docs/installing-snap-on-raspbian

    Je vous résume les commandes à effectuer :

    mise à jour système :

    sudo apt update && sudo apt upgrade

    installation du store snap :

    sudo apt install snapd

    redémarrage de la machine pour prise en compte :

    sudo reboot

    installation du coeur du store :

    sudo snap install core

    Une fois snap store installé, on pourra installer Adguard home :

    sudo snap install adguard-home

    L’installation de Adguard Home sous docker fera l’effat d’un prochain article mais pour celles et ceux qui ne pourraient supporter un tel suspense, voici la page Github pour ceux ou celles qui souhaiteraient utiliser une installation alternative.

    https://github.com/AdguardTeam/AdGuardHome#getting-started

    Une fois Adguard Home installé vous pouvez vous connecter à l’interface web en utilisant cet adresse :

    http://127.0.0.1:3000/ (remplacer l’adresse par celle de votre Raspberry pour y accéder depuis un autre terminal.

    Le service Adguard Home s’activant automatiquement, il est inutile de faire d’autres manipulations.

    Si vous n’accédez pas à l’interface penser à ouvrir le port 3000.

    Et voila le tour est joué pour le coté contrôle parental. L’interface est assez intuitive.

    Vous pouvez configurer les clients avec leurs mac adresses, IP, nom DNS. De plus, chaque client peut avoir sa propre configuration et ses propres règles.

    Mise en place d’un proxy transparent

    Nous avons maintenant un contrôle parental actif, mais nos appareils se connectent à notre box et non sur notre Raspberry.

    L’intérêt de Adguard Home est qu’il utilise la résolution DNS pour autoriser un flux.

    Nous pouvons donc soit configuré tous nos appareils avec le DNS de notre Raspberry soit indiquer à notre box le DNS à utiliser.

    Pour cela il suffira de changer le DNS de votre FAI par celui de votre Raspberry.

    Ainsi, l’équipement se connectera à votre box, qui se connectera à votre Raspberry, pour vérifier les autorisations de flux.

    Pour aller plus loin

    Pensez à configurer votre Raspberry avec une adresse fixe. Vous pouvez soit la configurer directement sur le Raspberry soit depuis votre routeur fibre.

    Configurer votre terminaux sur Adguard Home avec leurs adresses mac

    Faites une règle générale par défaut sur Adguard Home. De cette manière, même si un nouvel équipement se connecte il sera automatiquement protéger par Adguard Home.

    Voila la puissance de Adguard Home: proxy anti-pub et contrôle parental.

  • Le Raspberry, le nano ordinateur qui se voulait grand

    Le Raspberry, le nano ordinateur qui se voulait grand

    Aujourd’hui je vais vous parler du Raspberry, le nano ordinateur qui se voulait grand.

    Le Raspberry est devenu un must have dans le domaine de l’hébergement de service à la maison.

    Qu’est ce qu’un Raspberry ?

    C’est un nano ordinateur avec un processeur ARM.
    Il Permet l’exécution de plusieurs Système d exploitation libre comme Debian, Ubuntu, RaspiOS.
    Elle embarque des pin GPIO ce qui permet la connexion de cartes d extension.
    Le nom vient du projet mais également au début de l informatique, les sociétés utilisaient des nom de fruits. Raspberry veut dire framboise. Il y a également Apple, Blackberry par exemple.
    PI provient du langage qu’utilise le micro ordinateur, car à l’origine il devait fonctionner que sur Python.

    Pourquoi utiliser un Raspberry ?

    Le Prix pour commencer, vous pouvez vous procurez un Raspberry pour moins de 100€.
    Un autre point est le silence de cet appareil. Il peut être utilisé sans ventilateur. Sauf depuis la génération 4 qui a été boosté au niveau du CPU. Les ventilateurs de base sont une bonne option, mais pour une durabilité optimum l’investissement d’un boitier passif peut être nécessaire. Et dans passif, il y a : pas de bruit du tout !
    Naturellement tout dépendra de l’usage qui en est fait.

    Les caractéristiques physique de l’appareil. Sa taille est celle d’une carte bancaire ce qui lui permet de s’intégrer à toutes configurations.

    Le Raspberry est en Full HD avec une résolution de 1980*1080 en 1080p. Autant dire que c’est un bon candidat pour faire un media center à la maison.

    Que peut-on faire avec ?

    Grâce à sa faible consommation électrique, il peut être allumé tout le temps.

    Cela lui permet d’exceller dans les hébergements de service à la maison.

    Par exemple, vous pouvez réaliser un serveur domotique, un média center, une home box, une console de jeux rétro, héberger un site web, un proxy anti pub, un contrôle parental.

    Bref, les possibilités sont énormes.

    En conclusion

    Le Raspberry, le nano ordinateur qui se voulait grand, est un must have à la maison. Ces possibilités sont sans limites.

    Il ravira tous vos projets.

    Dans un prochain article, je vous montrerais comment installer RaspiOS Lite, basé sur une Debian, puis je vous montrerai comment installer le plus beau des logiciels Docker 🙂

    N’hésitez pas à consulter mon article sur Adguard Home, le proxy anti pub et contrôle parental