paint-brush
Collez-le à l'homme et auto-hébergez votre propre serveur Webpar@theselfhoster
1,605 lectures
1,605 lectures

Collez-le à l'homme et auto-hébergez votre propre serveur Web

par George Papadakis13m2023/02/20
Read on Terminal Reader

Trop long; Pour lire

E-mail auto-hébergé pour les petites et moyennes entreprises, les propriétaires d'entreprise, les organisations à but non lucratif et les particuliers. Il n'y a pas de véritable limite à qui peut s'auto-héberger, mais les groupes soucieux de la confidentialité en bénéficieront directement et verront des résultats immédiats. Les petites et moyennes entreprises obtiendront un système entièrement fonctionnel qui adhère à tous les protocoles de cryptage et de sécurité actuels, en particulier la spécification PCI.
featured image - Collez-le à l'homme et auto-hébergez votre propre serveur Web
George Papadakis HackerNoon profile picture
0-item
1-item

A qui s'adresse ce guide ?

Le contenu Web auto-hébergé est pertinent pour les petites et moyennes entreprises, les propriétaires d'entreprise, les organisations à but non lucratif et les particuliers.


Il n'y a pas de limite réelle à qui peut s'auto-héberger, mais les groupes soucieux de la confidentialité en bénéficieront directement et verront des résultats immédiats. Les petites et moyennes entreprises obtiendront un système entièrement fonctionnel qui adhère à tous les protocoles de cryptage et de sécurité actuels, en particulier la spécification PCI.

Pourquoi l'auto-hébergement ?

Il y a des tonnes de raisons pour lesquelles l'auto-hébergement est bénéfique, en voici quelques-unes :


  • Confidentialité
  • Sécurité renforcée
  • Personnalisation
  • Réduction des coûts

Hébergement de messagerie

Cet article concerne l'hébergement de serveurs Web. Si vous êtes intéressé par l'hébergement de messagerie, veuillez lire l'article sur l'auto-hébergement de votre propre serveur de messagerie .

Conditions préalables

  • Un nouveau serveur, dédié ou virtuel, avec accès internet
  • Une distribution Linux basée sur RHEL : Alma, Rocky, Oracle ou Fedora Server
  • Accès racine

Nom d'hôte du serveur

Veuillez vous assurer que votre serveur a un nom de domaine complet (FQDN) et que le fichier /etc/hosts a l'adresse IP du serveur pointant vers le FQDN et non le nom court. C'est une exigence pour certains outils comme OpenDKIM, qui ne fonctionneront pas sans FQDN.


Pour tester si votre FQDN est correctement configuré, exécutez :


 # hostname -f server.example.tld


Si vous ne voyez que le nom du serveur et non le FQDN, utilisez la commande systemd hostnamectl pour définir votre FQDN :

 # hostnamectl set-hostname server.example.tld

Étape 1 - Packages requis

La première étape consiste à installer quelques packages de base, utilisez votre gestionnaire de packages :


dnf pour les nouvelles versions d'EL8/EL9 :

 # dnf install php php-cli php-pdo php-mbstring epel-release unzip wget


miam pour EL7:

 # yum install php php-cli php-pdo php-mbstring epel-release unzip wget


pour Fedora, les packages sont légèrement différents :

 # dnf install php php-cli php-pdo php-mbstring unzip wget

Étape 2 - Installer Aetolos

Dans la deuxième étape, nous installerons le panneau de contrôle de l'hébergement virtuel Aetolos, qui ne génère que des fichiers de configuration et n'apporte aucune autre modification au système :


 # wget -O /root/master.zip 'https://gitlab.com/noumenia/aetolos/-/archive/master/aetolos-master.zip' # unzip /root/master.zip -d /root/ # mv /root/aetolos-master /root/aetolos # rm -rf /root/master.zip

Le dernier code de développement peut être téléchargé depuis le dépôt git :

git clone 'https://gitlab.com/noumenia/aetolos.git'

Étape 3 - Activer les services

Il est maintenant temps de choisir les services que le serveur fournira. Lancez Aetolos avec le paramètre status pour avoir une idée de tous les services disponibles :

 # ~/aetolos/aetolos --status +---------+--------------+---------+------------+--------------+ | Enabled | Module | SystemD | Repository | Dependencies | +---------+--------------+---------+------------+--------------+ | [ ] | apache | | | | | [ ] | clamav | | epel | postfix | | [ ] | dehydrated | | | | | [ ] | dovecot | | | | | [ ] | haproxy | | | | | [ ] | mariadb | | | | | [ ] | mtasts | | | apache | | [ ] | nsd | | epel | | | [ ] | opendkim | | epel | postfix | | [ ] | opendmarc | | epel | postfix | | [✓] | php | | | | | [ ] | postfix | | | | | [ ] | postgrey | | epel | postfix | | [ ] | spamassassin | | | postfix | | [✓] | virtualhost | | | | +---------+--------------+---------+------------+--------------+

Comme il s'agira d'un serveur Web auto-hébergé, nous allons activer les services qui nous offrent un ensemble complet de fonctionnalités pour l'hébergement Web :


  • Apache, un serveur web pour répondre aux requêtes ACME
  • Dehydrated, un script bash pour les certificats Let's Encrypt
  • MariaDB, la base de données


Si vous disposez d'un serveur séparé pour les e-mails avec des signatures DKIM, vous devez également activer OpenDKIM sur ce serveur. Partagez ensuite la clé entre les serveurs pour une signature correcte.


Activons ces services avec Aetolos :

 # ~/aetolos/aetolos --enable=apache # ~/aetolos/aetolos --enable=dehydrated # ~/aetolos/aetolos --enable=mariadb


Maintenant, nous pouvons relancer Aetolos avec le paramètre status pour voir le tableau suivant :

 +---------+--------------+---------+------------+--------------+ | Enabled | Module | SystemD | Repository | Dependencies | +---------+--------------+---------+------------+--------------+ | [✓] | apache | dead | | | | [ ] | clamav | | epel | postfix | | [✓] | dehydrated | | | | | [ ] | dovecot | | | | | [ ] | haproxy | | | | | [✓] | mariadb | dead | | | | [ ] | mtasts | | | apache | | [ ] | nsd | | epel | | | [ ] | opendkim | | epel | postfix | | [ ] | opendmarc | | epel | postfix | | [✓] | php | dead | | | | [ ] | postfix | | | | | [ ] | postgrey | | epel | postfix | | [ ] | spamassassin | | | postfix | | [✓] | virtualhost | | | | +---------+--------------+---------+------------+--------------+

Notez la colonne SystemD qui affiche la plupart des services comme dead . Ce n'est pas un problème, car nous n'avons pas encore configuré/démarré ces services.

Étape 4 - Configuration

Enfin, nous pouvons exécuter la configuration d'Aetolos pour installer les packages RPM requis et générer tous les fichiers de configuration. Nous préférons voir la sortie détaillée avec le paramètre supplémentaire --verbose .

Vous remarquerez un avertissement concernant le script déshydraté, qui nous indique de spécifier l'adresse e-mail d'enregistrement pour Let's Encrypt


 # ~/aetolos/aetolos --verbose --setup [DEBUG] Check running system [DEBUG] Detected: AlmaLinux 8.7 (Stone Smilodon) [DEBUG] Check system memory [DEBUG] Detected: 460MiB [DEBUG] Check CPU cores [DEBUG] Detected: 2 [DEBUG] Check proxy [DEBUG] Loading Aetolos configuration [DEBUG] Starting operating system setup [DEBUG] Checking repository dependencies [DEBUG] Checking package dependencies [DEBUG] Installing package: php-fpm [DEBUG] Checking SELinux requirements [DEBUG] SELinux: enable httpd_can_network_connect [DEBUG] SELinux: enable httpd_can_sendmail [DEBUG] SELinux: enable httpd_read_user_content [DEBUG] SELinux: enable httpd_enable_homedirs [DEBUG] SELinux: enable httpd_home_tmp_aetolos.pp [DEBUG] Checking certificate requirements [DEBUG] Generating a self-signed certificate [DEBUG] Certificate: /etc/pki/tls/certs/localhost.crt [DEBUG] Fullchain: /etc/pki/tls/certs/localhost.fullchain [DEBUG] Key: /etc/pki/tls/private/localhost.key [DEBUG] Checking ACME client [DEBUG] Downloading ACME client: dehydrated 0.7.1 [DEBUG] Installing ACME client under: /root/dehydrated/ [WARNING] ACME registration email set to: postmaster [WARNING] Please change the ACME registration email by executing: '/root/aetolos/aetolos --verbose --module=dehydrated --registration-email=new-email' [DEBUG] Checking module dependencies [DEBUG] Save configuration: apache [DEBUG] Writing to file: /etc/httpd/conf/httpd.conf [DEBUG] Writing to file: /etc/httpd/conf.d/ssl.conf [DEBUG] Writing to file: /etc/sysconfig/htcacheclean [INFO] System memory: 460MB [INFO] Allocate 50% of system memory to MariaDB: 230MB [INFO] 70% of the above usage goes to total thread memory: 161MB [INFO] The rest 30% goes to server buffers: 69MB [INFO] MariaDB memory per connection: 18MB [INFO] MariaDB max connections: 10 [INFO] MariaDB temporary table size: 16MB [INFO] MariaDB query cache: 16MB [INFO] Allocate 40% of system memory to Apache/PHP-FPM: 184MB [INFO] Estimated average number of connections per CPU core: 9 [INFO] Apache StartServers: 1 [INFO] Apache ServerLimit: 2 [INFO] Apache ThreadsPerChild: 18 [INFO] Apache MinSpareThreads: 18 [INFO] Apache ThreadLimit: 22 [INFO] Apache MaxRequestWorkers: 36 [INFO] Apache maximum number of concurrent connections: 108 [DEBUG] Writing to file: /etc/logrotate.d/httpd [DEBUG] Save configuration: dehydrated [DEBUG] Writing to file: /root/dehydrated/config [DEBUG] Writing to file: /root/dehydrated/hook.sh [DEBUG] Writing to file: /etc/pki/letsencrypt/domains.txt [DEBUG] Writing to file: /etc/cron.daily/dehydrated.cron [DEBUG] Save configuration: mariadb [DEBUG] Writing to file: /etc/systemd/system/mariadb.service.d/limitnofile.conf [DEBUG] Writing to file: /etc/my.cnf.d/mariadb-server.cnf [DEBUG] Save configuration: php [DEBUG] Writing to file: /etc/php.ini [DEBUG] Writing to file: /etc/php.d/10-opcache.ini [DEBUG] Save configuration: virtualhost [DEBUG] Writing to file: /etc/tmpfiles.d/hometmp.conf [DEBUG] Reloading systemd


Conformément à l'avertissement, nous ajoutons une adresse e-mail pour Let's Encrypt :

 # ~/aetolos/aetolos --verbose --module=dehydrated [email protected]

Démarrer MariaDB

Contrairement à d'autres services, MariaDB doit être démarré et fonctionner, pour qu'Aetolos ajoute des hôtes virtuels et les autorisations de base de données correspondantes. Alors, activons et démarrons MariaDB :

 # systemctl --now enable mariadb


À ce stade, nous pouvons sécuriser l'instance MariaDB en exécutant :

 /usr/bin/mysql_secure_installation


Cela nécessite que vous créiez également le fichier /root/.my.cnf avec les informations de connexion pour root :

 [client] default-character-set="utf8mb4" user="root" password='the_password_set_in_the_previous_step'

Ajouter des hôtes virtuels

Nous sommes maintenant prêts à ajouter autant d'hôtes virtuels que nous le souhaitons (ou autant que le serveur peut en gérer).


Avant d'exécuter des commandes, nous pouvons prendre une seconde pour réfléchir aux hôtes virtuels qui auront un sous-domaine de préfixe, parfois nous pouvons avoir un domaine comme example.tld avec un sous-domaine www (www.example.tld), d'autres fois nous ne voulons pas utilisez un préfixe car nous voulons que nos adresses e-mail se trouvent uniquement dans le domaine supérieur ([email protected] et non [email protected]).


A titre d'exemple, nous ajouterons trois hôtes virtuels, dont deux sans sous-domaine :

 # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example1.tld --no-prefix [DEBUG] Verify domain: example1.tld [DEBUG] Add virtual host: example1.tld # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example2.tld --no-prefix [DEBUG] Verify domain: example2.tld [DEBUG] Add virtual host: example2.tld # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example3.tld [DEBUG] Verify domain: example3.tld [DEBUG] Add virtual host: example3.tld


Nous pouvons maintenant lister tous les hôtes virtuels :

 # ~/aetolos/aetolos --module=virtualhost --list-virtualhosts +----+---------------------+--------------+-------------+----------------+--------+--------------+ | ID | Timestamp | Virtual host | System user | MariaDB prefix | Parked | Prefix alias | +----+---------------------+--------------+-------------+----------------+--------+--------------+ | 1 | 2023-01-10 08:51:36 | example1.tld | example1tld | example1 | [ ] | | | 2 | 2023-01-10 08:51:40 | example2.tld | example2tld | example2 | [ ] | | | 3 | 2023-01-10 08:51:45 | example3.tld | example3tld | example3 | [ ] | www | +----+---------------------+--------------+-------------+----------------+--------+--------------+


Chaque hôte virtuel "vivra" isolé dans son propre répertoire personnel, avec sa propre propriété d'utilisateur/groupe, alors jetons un coup d'œil à notre /home :

 # ls -la /home total 0 drwxr-xr-x. 5 root root 63 Jan 20 10:51 . dr-xr-xr-x. 17 root root 224 Dec 21 2021 .. drwx--x--x. 8 example1tld example1tld 159 Jan 10 08:51 example1tld drwx--x--x. 8 example2tld example2tld 159 Jan 10 08:51 example2tld drwx--x--x. 8 example3tld example3tld 159 Jan 10 08:51 example3tld

Installation

Après avoir apporté des modifications avec la commande Aetolos, nous devons générer de nouveaux fichiers de configuration pour tous les services concernés (Apache, PHP-FPM, Dehydrated, etc.). Ainsi, nous exécutons la configuration d'Aetolos une dernière fois.


 # ~/aetolos/aetolos --setup

Certificats TLS

À ce stade, tous les services utiliseront le même certificat auto-signé, c'est donc le bon moment pour exécuter la déshydratation manuellement pour rassembler tous les certificats d'hôte virtuel. Comme Aetolos utilise le protocole ACME avec validation de domaine via le port HTTP 80, nous démarrons d'abord notre serveur Apache pour traiter ces requêtes.


 # systemctl start httpd # ~/dehydrated/dehydrated --cron --config /root/dehydrated/config --keep-going # systemctl stop httpd # ~/aetolos/aetolos --setup

Prestations de service

Nous pouvons maintenant activer et démarrer tous les services.


 # systemctl --now enable httpd [email protected] [email protected] [email protected] mariadb php-fpm Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected]. Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected]. Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected].


Vous remarquerez que chaque hôte virtuel a son propre service Apache, c'est une fonctionnalité fournie par systemd et nous permet de définir les hôtes virtuels dans des services systemd distincts. Le paramètre --now démarrera tous les services.

L'architecture

Il devrait y avoir une mention spéciale sur l'architecture utilisée pour l'hébergement des sites Web. Pour des raisons de sécurité, chaque hôte virtuel est isolé dans des comptes unix stockés sous son propre répertoire /home . Le contenu Web public doit être stocké dans le répertoire public_html .


 /home/example1tld -> virtual host home /home/example1tld/etc -> email accounts /home/example1tld/mail -> email storage /home/example1tld/public_html -> web content /home/example1tld/www -> symbolic link to public_html /home/example1tld/tmp -> temp directory

Étolos

À ce stade, Aetolos a configuré le serveur sans aucune modification personnalisée, toutes les modifications sont effectuées sur les fichiers de configuration par défaut. Nous pouvons supprimer Aetolos du serveur et continuer les modifications manuellement ou nous pouvons conserver Aetolos au cas où nous voudrions ajouter plus d'hôtes virtuels à l'avenir.

Crédits

Photo de l'article par Manuel Geissinger de pexels