Installer un serveur VPS GNU/Linux Fedora (Chez l’hébergeur OVH) – Etude de cas famille-brachet.fr

Avertissement dans ce tuto : vps709108.ovh.net correspond au nom de domaine fourni par OVH. Vous pouvez trouver ce nom une fois connecté à l’OVH manager en allant dans le menu Server >VPS.

Connexion au compte OVH manager

La première chose à faire est de se connecter sur l’OVH manager:

Saisissez votre identifiant et votre mot de passe qui vous ont été fournit lors de la création de votre compte OVH.

https://www.ovh.com/auth/?action=gotomanager&onsuccess=https://www.ovh.com/manager/web/

Installation du système d’exploitation GNU/Linux Fedora depuis l’OVH manager

Aller dans l’onglet Serveur>VPS et choisir le VPS sur lequel vous voulez installer votre système d’exploitation GNU/Linux Fedora. Dans notre cas, il s’agit de vps709108.ovh.net.

Choisissez comme système d’exploitation Fedora 26(64bits) et comme langue d’installation Français. Celà nous permettra d’avoir d’avoir un système d’exploitation paramétré en Français.

L’installation du système d’exploitation s’effectue dans l’OVH manager …

Le système est installé sur votre VPS !

Maintenant sur sur notre boite mail qui est lié à ,notre compte OVH. OVH nous a envoyé toutes les informations nécessaires pour se connecter à notre serveur en SSH : login root et son mot de passe. Ce mail à pour intitulé « Support OVH » <support@ovh.com>

Voici en exemple le mail que j’ai reçu de leur part:

———————————————————————————————————

Bonjour,

Votre VPS vient d’être installé sous le système d’exploitation / distribution
Fedora 26 (en version 64 bits)

PARAMETRES D’ACCES:
L’adresse IPv4 du VPS est : 51.83.40.218
L’adresse IPv6 du VPS est : 2001:41d0:0305:2100:0000:0000:0000:84b9

Le nom du VPS est : vps709108.ovh.net

Le compte administrateur suivant a été configuré sur le VPS :
Nom d’utilisateur : root
Mot de passe :      bipbip6578

POUR BIEN DEMARRER:
Si vous vous connectez pour la première fois à un VPS, nous
vous recommandons de consulter le guide suivant :
https://www.ovh.com/fr/g1260.comment_se_connecter_a_son_vps

GESTION, FACTURATION, ASSISTANCE
Vous pouvez gérer votre VPS depuis votre espace
client web à l’adresse suivante :
https://www.ovh.com/manager/

OBTENIR DE L’AIDE:
Pour vous accompagner dans la prise en main de votre VPS, nous
mettons à votre disposition de nombreux guides d’utilisation :
https://www.ovh.com/fr/support/knowledge/

D’autre part, une importante communauté d’utilisateurs est
accessible via notre forum et nos mailing-listes :
https://www.ovh.com/fr/support/

Merci de votre confiance,
L’équipe OVH

Cordialement,

Votre Service client OVH
Pour nous contacter : https://www.ovh.com/fr/support/

———————————————————————————————————

Connexion pour la première fois au serveur en SSH

Définition du SSH : Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite, tous les segments TCP sont authentifiés et chiffrés. Il devient donc impossible d’utiliser un sniffer pour voir ce que fait l’utilisateur. Le protocole SSH a été conçu avec l’objectif de remplacer les différents protocoles non chiffrés comme rlogin, telnet, rcp, ftp et rsh.

Sous windows

Téléchargez putty depuis le site officiel : http://www.putty.org/

  • Après l’avoir installé, lancez Putty.
  • Dans le champ Host Name (or IP adress) saisissez votre serveur FTP . Dans l’exemple il s’agit de l’IP 51.83.40.218 ou du Host Name vps709108.ovh.net d’après le mail que nous avons reçu d’OVH.
  • Dans le champ Port saisissez 22 s’il n’est pas déjà rentré.
  • Cocher SSH .
  • Cliquer sur Open
  • Saisissez le mot de passe envoyé par OVH
  • Vous êtes connecté

Sous Mac OS

Tout d’abord, il faut lancer le terminal:

1- Cliquer sur le Finder situé dans la Dock :

2- Cliquer sur le lien Application:

3- Choisir l’icône représentant un dossier : Utilitaires

4- Choisir l’icône du Terminal

5- Saisissez la commande la commande ssh root@(ip du serveur ou host name)

ça y est ! Vous vous êtes connecté sur votre serveur mais ce dernier n’est pas sécurisé. Nous allons mettre en place un minimum de sécurité avant de continuer la configuration du serveur.

Installer l’éditeur de texte nano

# dnf -y install nano

Modifier le mot de passe root pour des raisons de sécurité

Root est le superutilisateur sous Linux. Il a tous les droits. Il est nécessaire de modifier le mot de passe root qu’OVH vous a envoyé par mail. Envoyer peut l’avoir intercepté ou piraté votre boite mail. Le nouveau passe root ne devra jamais être diffusé.

Pour générer un mot de passe digne de ce nom, nous allons utilisé un générateur de mot de passe en ligne : https://www.generateurdemotdepasse.com/

Plus ce mot de passe sera compliqué, meilleur sera la sécurité du serveur. Celà vous protégera des attaques de brute force : https://fr.wikipedia.org/wiki/Attaque_par_force_brute

Je vous conseil de sauvegardé le mot de passe dans un dossier crypté sur votre poste de travail. avec un outil de type veracrypt(https://www.veracrypt.fr/en/Home.html).

Ici le mot de généré sera w93tR32gyc7J3w9GYxP3nKWFi24m3PY3aRg6x3kCEEc6SFr76 . Nous utiliserons ce mot de passe dans toute la suite du tutorial.

# passwd root

Saisissez le nouveau mot de passe de l’utilisateur root : w93tR32gyc7J3w9GYxP3nKWFi24m3PY3aRg6x3kCEEc6SFr76. Une fois fait, tester la connexion en root depuis ssh.

Créer un utilisateur

# adduser jacqueline

Changer son mot de passe

Utiliser le générateur de mot de passe vu précédemment pour obtenir un mot de passe sécurisé.

# passwd jacqueline

Ajouter l’utilisateur comme sudoers

Sous Fedora, il faut ajouter l’utilisateur au groupe wheel pourqu’il puisse exécuter des commandes sudo.

# usermod -aG wheel jacqueline

Sécuriser l’accès au serveur SSH

Avant avant toute chose vous devez ouvrir un nouveau port pour l’accès au SSH sur votre box(routeur) .Généralement on accède au paramètrage du routeur depuis l’adresse 192.168.1.1 (exemple pour la livebox). Le port 2022 sera notre nouveau port de connexion pour le protocole SSH sur notre serveur.

Afin de sécuriser l’accès SSH au serveur, éditons le fichier /etc/ssh/sshd_config. Nous allons changer le port de connexion par défaut pour éviter quelques attaques par bruteforce sur le port 22, qui est bien connu pour héberger ce service. N’oubliez pas de préciser ce nouveau port (dans Putty ou en ligne de commande ssh sous Linux) à la prochaine connexion. Nous allons tout de suite modifier la configuration de SSH afin d’améliorer un peu la sécurité de notre serveur. Pour cela on va modifier la configuration qui se trouve dans le dossier /etc/ssh/sshd_config. Nous n’allons pas passer toute la configuration en revue, mais seulement les paramètres importants :

  • Port, permet de changer le port d’écoute d’SSH ce qui permet de rendre votre porte d’entrée moins évident à trouver
  • PermitRootLogin, à mettre à no car on ne souhaite pas que les gens puissent se connecter en tant qu’administrateurs. Dans ce cas là il vous faudra accéder au serveur avec un autre utilisateur (vous pouvez créer un nouvel utilisateur avec la commande adduser lenomdevotreutilisateur)
  • AllowUsers, vous permet de lister les utilisateurs qui vont pouvoir se connecter à la machine.
# nano /etc/ssh/sshd_config
Port 2022                  # Changer le port par défaut 

PermitRootLogin no         # Ne pas permettre de login en root 

Protocol 2                 # Protocole v2 

AllowUsers jacqueline      # N'autoriser qu'un utilisateur

ListenAddress 51.83.40.218 #Adresse IP publique du serveur

Installer les outil pour utiliser le semanage (Gestionnaire de SE Linux)

# dnf -y install policycoreutils-python-utils

On autorise ssh à écouter sur le port 2022 à l’aide de SELinux :

# semanage port -a -t ssh_port_t -p tcp 2022

Security-Enhanced Linux, abrégé SELinux, est un Linux security module (LSM), qui permet de définir une politique de contrôle d’accès obligatoire aux éléments d’un système issu de Linux.

On vérifie que les nouveaux paramètres ont été pris en compte

 [root@vps709108 ~]#  semanage port -l | grep ssh
 ssh_port_t                     tcp      2022, 22 

On redémarre le serveur 0penSSH:

On vérifie que le serveur OpenSSH écoute bien sur le port 2022:

#/sbin/service sshd reload 
[root@vps709108 ~]#  netstat -tulpn | grep 2022
 tcp        0      0 0.0.0.0:2022            0.0.0.0:*               LISTEN      8647/sshd           
 tcp6       0      0 :::2022                 :::*                    LISTEN      8647/sshd     

S’assurer que le système d’exploitation est entièrement en Français

[jacqueline@vps709108 ~]$ sudo dnf install glibc-langpack-fr*

Basculer de netfilter / iptables à Firewalld

 [root@vps709108 ~]$ sudo dnf install -y lokkit
 [root@vps709108 ~]$ su
 [root@vps709108 ~]# lokkit --disabled
 [root@vps709108 ~]# exit
 [root@vps709108 ~]$ sudo dnf install -y firewalld

Changement de port pour le SSH

Après avoir changé le port d’écoute dans le fichier /etc/ssh/sshd_config et rechargé le service ssh, vous devez ajouter le nouveau port d’écoute 2277 et supprimer le service ssh pré-configuré sur le port 22 (en mode root):

 [root@vps709108 ~]# firewall-cmd --zone=public --add-port=2222/tcp --permanent
 [root@vps709108 ~]# firewall-cmd --zone=public --remove-service=ssh --permanent
 [root@vps709108 ~]# systemctl start firewalld.service
[root@vps709108 ~]# systemctl enable firewalld.service

Recharger le service Firewalld

 [root@vps709108 ~]# systemctl reload firewalld

Mettre à jour le Système d’exploitation Gnu/Linux Fedora vers la version 31

On se reconnecte en ssh en utilisant le compte précédemment crée depuis la machine cliente :

iMac-de-Jacqueline-Brachet:~ jacquelinebrachet$ ssh jacqueline@vps709108.ovh.net -p 2022

Vous pouvez vérifier la version installée en tapant la commande suivante :

[jacqueline@vps709108 ~]$ cat /etc/fedora-release

Hors que le constat que nous pouvons faire est que la distribution fournis de Fedora est la 26 alors que nous sommes à l’heure actuelle à la version 30. Il va donc falloir mettre à jour le système.

L’invite de commande nous retourne bien la version 26 :

Fedora release 26 (Twenty Six)

Il faut tout d’abord installer le greffon de DNF et mettre à jour votre version de Fedora actuelle.

[jacqueline@vps709108 ~]$ sudo dnf -y install dnf-plugin-system-upgrade
[jacqueline@vps709108 ~]$ sudo dnf -y upgrade && dnf clean all
[jacqueline@vps709108 ~]$ sudo dnf -y --refresh upgrade

Ensuite vous pouvez télécharger les paquets puis redémarrer la machine pour appliquer la mise à niveau.

[jacqueline@vps709108 ~]$ sudo dnf -y system-upgrade download --releasever=27
[jacqueline@vps709108 ~]$ sudo dnf system-upgrade reboot

Le serveur redémarre (celà peut prendre un peu de temps) , on se reconnecte en ssh et on obtient la version 27 lorsque l’on tape la commande :

[jacqueline@vps709108 ~]$ cat /etc/fedora-release

Réintérer les opérations précédente jsqu’à obtenir la version 31.

Un système de sécurité est un système d’exploitation à jour !

Installation du serveur NTP (Serveur de temps)

Définition: Network Time Protocol (« protocole d’heure réseau ») ou NTP est un protocole qui permet de synchroniser, via un réseau informatique, l’horloge locale d’ordinateurs sur une référence d’heure.

La première version v. 0 de NTP, formalisée dans la RFC 958, date de septembre 1985. Dès le début, ce protocole fut conçu pour offrir une précision de synchronisation meilleure que la seconde. Par rapport au service « Time Protocol » qui offre un service d’heure sans proposer une infrastructure, le projet NTP propose une solution globale et universelle de synchronisation qui est utilisable dans le monde entier.

La version 3 de NTP est la plus répandue à ce jour. Elle est formalisée par la RFC 1305 et a le statut « Draft Standard (en) » c’est-à-dire « spécification finale », elle spécifie plusieurs aspects :

  • la description du protocole réseau ;
  • les modes de fonctionnement ;
  • les algorithmes à mettre en place dans les machines.

La mise au point de ce protocole et des algorithmes a été menée de pair avec le développement d’un logiciel conforme à ces spécifications. De ce fait, cette réalisation fait office de référence dans le domaine et est appelée « logiciel NTP » même si d’autres solutions existent. Ces travaux ont été réalisés en grande partie à l’Université du Delaware grâce au professeur David L. Mills et à une importante équipe de bénévoles.

La version 4 de NTP est une révision importante publiée dans la RFC 5905 en juin 2010.

Aussitôt après la parution de la version 3 de NTP, une version simplifiée est apparue, appelée « Simple Network Time Protocol » (SNTP) qui a également fait l’objet de plusieurs RFC. Par rapport à NTP, cette version est simplifiée dans le sens qu’elle ne spécifie pas les algorithmes à mettre en place dans les machines.

Bref celà permet que l’horloge d’un système d’exploitation soit synchronisée avec un temps de référence.

Installation

[jacqueline@vps709108 ~]$ sudo dnf -y install ntp

Configuration

Éditer le fichier de configuration pour spécifier les serveurs de temps à utiliser

[jacqueline@vps709108 ~]$ sudo nano /etc/ntp.conf
server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org

Vous trouverez une liste complète de serveur à cette adresse : http:// www.blog.florian-bogey.fr/gardez-vos-systemes-a-lheure-avec-ntp.html

Démarrer le service et le lancer au démarrage du système

[jacqueline@vps709108 ~]$ sudo chkconfig ntpd on
[jacqueline@vps709108 ~]$ sudo service ntpd start

Pour forcer la mise à jour de l’heure, nous utiliserons la commande ntpdate il faudra d’abord arrêter le service puis le relancer après la mise à jour.

[jacqueline@vps709108 ~]$ sudo dnf -y install ntpdate
[jacqueline@vps709108 ~]$ sudo service ntpd stop
[jacqueline@vps709108 ~]$ sudo ntpdate 0.fr.pool.ntp.org
[jacqueline@vps709108 ~]$ sudo service ntpd start

Vérifier que le système est bien à l’heure

Pour le vérifier, il suffira d’exécuter la commande date

[jacqueline@vps709108 ~]$ date

Optimiser la sécurité réseau du serveur

[jacqueline@vps709108 ~]$ su
[root@vps709108 jacqueline]#  echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
[root@vps709108 jacqueline]# echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
[root@vps709108 jacqueline]# echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
[root@vps709108 jacqueline]# echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
[root@vps709108 jacqueline]# exit

Installation de différents outils nécessaires à la compilation et autre

[jacqueline@vps709108 ~]$ sudo dnf -y install zip unzip gcc glibc-devel.i686 kernel-devel kernel-headers diffutils wget  bzip2 make

Installation des outils de développement

[jacqueline@vps709108 ~]$ sudo dnf -y update
[jacqueline@vps709108 ~]$ sudo dnf -y groupinstall "Development Tools"
[jacqueline@vps709108 ~]$ sudo dnf groupinstall -y "C Development Tools and Libraries"
[jacqueline@vps709108 ~]$ sudo dnf -y install lsof 

Development Tools : Ces inclus généralement des outils de développement tels que git and CVS.

C Development Tools and Libraries : Ces outils sont comprennent des compilation C tels qu’automake, gcc and les debugger et autres …

Installation d’un serveur LAMP (Linux APACHE MariaDB PHP)

Etape 1 – Mettre à jour le système de package

[jacqueline@vps709108 ~]$ sudo  dnf -y update

Etape 2 – Ouvrir les ports HTTP et HTTPS du firewall

[jacqueline@vps709108 ~]$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
[jacqueline@vps709108 ~]$ sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
[jacqueline@vps709108 ~]$ sudo systemctl reload firewalld

Si vous installez un serveur Apache sur votre Linux, vous devez ajouter les applications Tcp/80 et Tcp/443. Firewalld a rendu la syntaxe extrêmement simple :

Etape 2- Démarrer le service web Apache 2

Définition : Le logiciel libre Apache HTTP Server (Apache) est un serveur HTTP créé et maintenu au sein de la fondation Apache. C’est le serveur HTTP le plus populaire du World Wide Web. Il est distribué selon les termes de la licence Apache.

Historique : Apache est apparu en avril 1995. Au début, il s’agissait d’une collection de correctifs et d’additions au serveur NCSA HTTPd, qui était dans le domaine public et le serveur HTTP alors le plus répandu. De cette origine, de nombreuses personnes affirment que le nom Apache vient de a patchy server, soit « un serveur rafistolé ». Par la suite, Apache a été complètement réécrit, de sorte que, dans la version 2, il ne reste pas de trace de NCSA HTTPd.

Au début, Apache était la seule alternative sérieuse et libre au serveur HTTP de Netscape (iPlanet, maintenant Sun ONE). Depuis avril 1996, selon l’étude permanente de Netcraft, Apache est devenu le serveur HTTP le plus répandu sur Internet.

Parts de marché :

  • En mai 1999, il faisait tourner 57 % des serveurs Web, début 2004, il était à environ 69 % de parts de marché, et il ne détient plus que 50,61 % du marché à la fin du mois de janvier 2008 ;
  • En février 2008, Apache représente 50,93 % des parts de marché ;
  • En novembre 2008, 72,45 % de parts de marché pour Apache ;
  • En novembre 2011, 65,00 % de parts de marché pour Apache ;
  • En mai 2014, 38,00 % de parts de marché pour Apache et 33,00 % pour Microsoft IIS.
  • En janvier 2015 sur l’analyse de 876 812 666 sites, correspondant à 5 061 365 ordinateurs frontaux, les parts de marché sont de 39,74 % pour Apache, et 27,52 % pour IIS. Sur les parts de marché des serveurs actifs (en excluant les sites parkings) par contre, 50,72 % pour Apache, 14,82 % pour Nginx et IIS passe en 3e position avec seulement 10,55 %, perdant 1,17 % de parts par rapport au mois précédent.
  • En février 2017, Apache est utilisé par 59,76% du total des domaines français enregistrés.

La version 2 d’Apache possède plusieurs avancées majeures par rapport à la version 1, entre autres le support de plusieurs plates-formes (Windows, Linux et UNIX, entre autres), le support de processus légers UNIX, une nouvelle API et le support IPv6.

La fondation Apache (Apache Software Foundation ou ASF) a été créée en 1999 à partir du groupe Apache (Apache Group) à l’origine du serveur en 1995. Depuis, de nombreux autres logiciels utiles au World Wide Web sont développés à côté du serveur HTTP.

Apache2 fait partie des logiciels fournis avec la distribution Fedora.

Nous allons l’installer avec sa documentation, très complète et source de renseignements précieux :

[jacqueline@vps709108 ~]$ sudo  dnf install httpd-manual -y

Ensuite il est nécessaire de démarrer le service Apache2 :

[jacqueline@vps709108 ~]$ sudo  systemctl start httpd.service

Pour vérifier son fonctionnement, il suffit de taper l’url suivante dans votre navigateur : http://51.83.40.218/ (ou 51.83.40.218 est votre adresse IP publique)

On se déplace dans le répertoire /etc/httpd/conf.d/ et on supprime les hôtes virtuels inutiles :

[jacqueline@vps709108 ~]$  cd  /etc/httpd/conf.d/
[jacqueline@vps709108 conf.d]$ sudo rm *

Fichiers et dossiers à connaitre

  • /etc/httpd : dossier contenant l’ensemble des fichiers de configuration
    • /etc/httpd/conf/httpd.conf : fichier principal de configuration. Nous verrons qu’il est possible – et fortement recommandé – de ne jamais modifier ce fichier
    • /etc/httpd/conf.d : dossier contenant les fichiers secondaires de configuration, fournis par les extensions (apache 2.2) et les logiciels utilisant Apache. C’est ici que nous allons travailler
    • /etc/httpd/conf.modules.d : dossier contenant les fichiers de configurations des extensions à partir d’apache 2.4
  • /var/log/httpd : dossier contenant les journaux
    • /var/log/httpd/access_log : journal retraçant toutes les pages traitées par le serveur
    • /var/log/httpd/error_log : journal des erreurs
  • /var/www : dossier contenant les données du site par défaut
    • /var/www/cgi-bin : dossier (vide) contenant les scripts
    • /var/www/html : dossier (vide) contenant les pages du site par défaut
  • Apache 2.4
    • /user/share/error : dossier contenant les pages affichées en cas d’erreur
    • /user/share/icons : dossier contenant quelques icônes
    • /user/share/manual : dossier contenant la documentation
  • Apache 2.2
    • /var/www/error : dossier contenant les pages affichées en cas d’erreur
    • /var/www/icons : dossier contenant quelques icônes
    • /var/www/manual : dossier contenant la documentation

Etape 3 – Installation du serveur de base de données Mariadb et de son client

Voir l’étape 3 du chapitre suivant : »Alternative au serveur LAMP : Installation d’un serveur LEMP (Linux Nginx MariaDB PHP) ». L’installation de MariaDB y est expliquer. Sous Gnu/Linux Fedora depuis 19, il n’est pas recommandé d’utiliser la base de données Mysql qui est déprécié et il est recommander d’utiliser MariaDB.

Etape 4 – Installation du langage de programmation PHP 7.3

Installer PHP

Voir l’étape 4 du chapitre suivant : « Alternative au serveur LAMP : Installation d’un serveur LEMP (Linux Nginx MariaDB PHP) »

Configurer le serveur Apache2

Créer le fichier welcome.conf:

[jacqueline@vps709108 conf.d]$ sudo nano 001-famille-brachet.conf
<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^51\.83\.40\.218$
        RewriteRule ^(.*)$ http://vps709108.net/$1 [L,R=301]
</IfModule>

<VirtualHost 51.83.40.218:80>
    ServerAdmin mmebrachet@orange.fr
    DocumentRoot /var/www/html
    ServerName vps709108.net
   <Directory /var/www/html>
        Require all granted
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9000/"
        </FilesMatch>
    </Directory>
</VirtualHost>
[jacqueline@vps709108 conf.d]$ sudo service httpd restart

Créer le fichier phpinfo.php pour tester la configuration

[jacqueline@vps709108 conf.d]$ su
[root@vps709108 conf.d]# echo '<?php phpinfo(); ?>' > /var/www/html/phpinfo.php
[root@vps709108 conf.d]# exit;

Lorsque l’on tape dans le navigateur : http://51.83.40.218/phpinfo.php , le fichier PHP est exécuté par le serveur (PHP FPM):

Pour des raison de sécurité , on supprime ce fichier :

[jacqueline@vps709108 conf.d]$ sudo rm /var/www/html/phpinfo.php

Etape 5 – Installer PHPMyAdmin

Il s’agit de l’une des plus célèbres interfaces pour gérer une base de données MySQL sur un serveur PHP. De nombreux hébergeurs, gratuits comme payants, le proposent ce qui évite à l’utilisateur d’avoir à l’installer.

Cette interface pratique permet d’exécuter, très facilement et sans grandes connaissances en bases de données, des requêtes comme les créations de table de données, insertions, mises à jour, suppressions et modifications de structure de la base de données, ainsi que l’attribution et la révocation de droits et l’import/export. Ce système permet de sauvegarder commodément une base de données sous forme de fichier .sql et d’y transférer ses données, même sans connaître SQL.

Les requêtes SQL restent possibles, ce qui permet de les tester interactivement lors de la création d’un site pour les utiliser ensuite en batch (c’est-à-dire en différé) une fois au point.

Installation

[root@vps709108 conf.d]$ sudo  dnf -y install phpMyAdmin

Configuration du serveur Apache2

[root@vps709108 conf.d]$ sudo rm /etc/httpd/conf.d/phpMyAdmin.conf
[root@vps709108 conf.d]$ sudo nano /etc/httpd/conf.d/001-famille-brachet.conf
Alias /phpmyadmin "/usr/share/phpMyAdmin"
<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^51\.83\.40\.218$
        RewriteRule ^(.*)$ http://vps709108.net/$1 [L,R=301]
</IfModule>

<VirtualHost 51.83.40.218:80>
    ServerAdmin mmebrachet@orange.fr
    DocumentRoot /var/www/html
    ServerName vps709108.net
   <Directory /var/www/html>
        Require all granted
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9000/"
        </FilesMatch>
    </Directory>
  <Directory /usr/share/phpMyAdmin/>
       DirectoryIndex index.php
       AddDefaultCharset UTF-8
       Require all granted
      <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9000/"
        </FilesMatch>
    </Directory>
</VirtualHost>

Corriger un bug de phpMyAdmin

[jacqueline@vps709108 ~]$ sudo nano /usr/share/phpMyAdmin/libraries/classes/DatabaseInterface.php

Et supprimer la ligne suivante …

if (! empty($locale)) {
   $this->query("SET lc_messages = '" . $locale . "';", $link, self::QUERY_STORE);
 }

Redémarrer le service Apache2

[jacqueline@vps709108 ~]$ sudo service httpd restart

Vous pouvez désormais accéder à l’interface de PHPMyadmin en tapant l’url suivante : http://51.83.40.218/phpmyadmin/

Alternative au serveur LAMP : Installation d’un serveur LEMP (Linux Nginx MariaDB PHP)

Etape 1 – Mettre à jour le système de package

[jacqueline@vps709108 ~]$ sudo  dnf -y update

Etape 2- Installation du serveur web Nginx

Site officiel: https://nginx.org/en/

Définition: Nginx[engine x] est un logiciel libre de serveur Web (ou HTTP) ainsi qu’un proxy inverse écrit par Igor Sysoev, dont le développement a débuté en2002 pour les besoins d’un site russe à très fort trafic (Rambler). Une partie de la documentation a été traduite du russe vers l’anglais.Nginx est un serveur asynchrone par opposition aux serveurs synchrones où chaque requête est traitée par un processus dédié. Au lieu d’exploiter une architecture parallèle et un multiplexage temporel des tâches par le système d’exploitation, Nginx utilise les changements d’état pour gérer plusieurs connexions en même temps; le traitement de chaque requête est découpé en de nombreuses mini-tâches et permet ainsi de réaliser un multiplexage efficace entre les connexions. Afin de tirer parti des ordinateurs multiprocesseurs, plusieurs processus peuvent être démarrés. Ce choix d’architecture se traduit par des performances très élevées, mais également par une charge et une consommation de mémoire particulièrement faibles comparativement aux serveurs HTTP classiques, tels qu’Apache.

[jacqueline@vps709108 ~]$ sudo  dnf -y install nginx

Une fois l’installation terminée, vous devez gérer le service Nginx sur votre système. D’abord, vous devez le configurer pour qu’il démarre automatiquement au démarrage du système d’exploitation en exécutant la commande ci-dessous:

[jacqueline@vps709108 ~]$ sudo service nginx start

Ensuite, vérifiez que le serveur Nginx est en cours d’exécution, pour se faire exécutez la commande ci-dessous :

[jacqueline@vps709108 ~]$ sudo service nginx status

Tout est ok ! C’est super cool le service Nginx fonctionne. Si tout se passe bien , on doit voir apparaître la page suivante lorsque que l’on tape dans un navigateur l’url suivante: http://vps709108.ovh.net/ (vps709108.ovh.net est le nom de domaine de votre VPS)

Etape 3 – Installation du serveur de base de données Mariadb et de son client

Site officiel: https://mariadb.org/

Définition: MariaDB est un système de gestion de base de données édité sous licence GPL. Il s’agit d’un fork communautaire de MySQL : la gouvernance du projet est assurée par la fondation MariaDB4, et sa maintenance par la société Monty Program AB, créateur du projet5. Cette gouvernance confère au logiciel l’assurance de rester libre.

En informatique, un système de gestion de base de données (abr. SGBD) est un logiciel système destiné à stocker et à partager des informations dans une base de données, en garantissant la qualité, la pérennité et la confidentialité des informations, tout en cachant la complexité des opérations.

En 2009, à la suite du rachat de MySQL par Sun Microsystems et des annonces du rachat de Sun Microsystems par Oracle Corporation, Michael Widenius, fondateur de MySQL, quitte cette société6 pour lancer le projet MariaDB, dans une démarche visant à remplacer MySQL tout en assurant l’interopérabilité. Le nom vient de la 2e fille de Monty Widenius, Maria (la première s’appelant My).

L’encyclopédie libre Wikipédia annonce, fin 2012, la migration de MySQL à MariaDB8. Les distributions Linux, comme Fedora ou OpenSuse, abandonnent elles aussi MySQL. En septembre 2013 Google annonce l’adoption de MariaDB en lieu et place de MySQL. Dans la foulée un des ingénieurs de Google est affecté à la Fondation MariaDB9.

Un consortium baptisé « Open Database Alliance » a par ailleurs été créé pour assurer le développement du logiciel (comparable à la fondation Linux avec le noyau Linux).

Installation

[jacqueline@vps709108 ~]$ sudo dnf -y install mariadb-server

Une fois l’installation terminée, vous devez gérer le service MariaDb sur votre système. D’abord, vous devez le configurer pour qu’il démarre automatiquement au démarrage du système d’exploitation en exécutant la commande ci-dessous:

[jacqueline@vps709108 ~]$ sudo service mariadb start

Pour vérifier que MariaDB est bien démarrer , on lance la commande suivante :

[jacqueline@vps709108 ~]$ sudo service mariadb status

Ensuite, vérifiez que le serveur MariaDB est en cours d’exécution, pour se faire exécutez la commande ci-dessous :

Sécurisation

[jacqueline@vps709108 ~]$ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB       SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY! 

In order to log into MariaDB to secure it, we'll need the current password for the root user.  If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. 

Enter current password for root (enter for none): OK, successfully used password, moving on... 

Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] y 

New password: 
Re-enter new password: 
Password updated successfully! 
Reloading privilege tables..  
... Success! 

By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them.  This is intended only for testing, and to make the installation go a bit smoother.  You should remove them before moving into a production environment. 

Remove anonymous users? [Y/n] y  
... Success! 

Normally, root should only be allowed to connect from 'localhost'.  This ensures that someone cannot guess at the root password from the network. 

Disallow root login remotely? [Y/n] y  
... Success! 

By default, MariaDB comes with a database named 'test' that anyone can access.  This is also intended only for testing, and should be removed before moving into a production environment. 

Remove test database and access to it? [Y/n] y  
- Dropping test database...  
... Success!  
- Removing privileges on test database...  
... Success! 

Reloading the privilege tables will ensure that all changes made so far will take effect immediately. 
Reload privilege tables now? [Y/n] y  
... Success! Cleaning up... 

All done!  If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!

C’est terminé : MariaDB est installé !

Vous pouvez maitenant vous connecter à la base de données en tapant la commande suivante :

[jacqueline@vps709108 ~]$ mysql -u root -p

Etape 4 – Installation du langage de programmation PHP 7.3

Définition: PHP: Hypertext Preprocessor (anciennement Personal Home Page), plus connu sous son sigle PHP(acronyme récursif), est un langage de programmation libre, principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP5, mais pouvant également fonctionner comme n’importe quel langage interprété(il est compilé à la volée(semi-compilé)) de façon locale. PHP est un langage impératif orienté objet. PHP a permis de créer un grand nombre de sites web célèbres, comme Facebook, Wikipédia.Il est considéré comme la base de la création des sites Internet dits dynamiques.

Très attendue, la dernière version majeure est sortie, et contrairement aux anciennes versions, celle-ci ne se concentre pas sur les fonctionnalités mais plutôt sur les performances.Voici ce que va donner un bon coup de turbo à la plupart des sites web :

  • Une vitesse d’exécution jusqu’à 2x supérieure
  • Compatibilité 64 bits
  • Utilisation de la mémoire vive réduit de 2/3

Installation

Les paquet de la version 7.3 de PHP s’installe automatique lorsque l’on est en Federa 30. Pour installer php, il sutffit dés lors de taper la commande suivante :

[jacqueline@vps709108 ~]$ sudo dnf -y install php  php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-common php-opcache php-msgpack php-apc php-intl php-sqlite3 php-gmp php-geoip php-imagick php-imap php-pspell php-tidy php-xmlrpc php-xsl php-memcache php-memcached php-apcu

On vérifie que les modules ont été installés:

[jacqueline@vps709108 ~]$ php -m

Edition du fichier /etc/php.ini

[jacqueline@vps709108 ~]$ sudo nano /etc/php.ini
[...] 
cgi.fix_pathinfo=1
[...] 
date.timezone="Europe/Paris" 
[…]

Obliger PHP-FPM à utiliser une connexion TCP sur un port spécifique en modifiant le fichier /etc/php-fpm.d/www.conf

[jacqueline@vps709108 ~]$ sudo nano /etc/php-fpm.d/www.conf
;listen = /run/php/php7.0-fpm.sock 
listen = 127.0.0.1:9000


Par défaut, SELinux empêche Apache d’initier des connexions sortantes. Il ne peut donc pas envoyer de demandes proxy au serveur PHP-FPM.

Vous devez exécuter les commande suivante sur le serveur pour permettre à Apache d’établir des connexions sortantes.

[jacqueline@vps709108 ~]$ sudo semanage port -a -t http_port_t -p tcp 9000
[jacqueline@vps709108 ~]$ sudo setsebool -P httpd_can_network_connect 1

Démarrer et activer le service PHP-FPM

[jacqueline@vps709108 ~]$ sudo systemctl start php-fpm
[jacqueline@vps709108 ~]$ sudo systemctl enable php-fpm

On vérifie que PHP-FPM fonctionne en tapant la commande suivante :

[jacqueline@vps709108 ~]$ sudo service php-fpm status

Etape 5 – Configurer Nginx pour utiliser des hôtes virtuels

Créer un dossier les dossiers sites-enabled et sites-available qui vont servir à publication des hôtes virtuels pour Nginx

[jacqueline@vps709108 ~]$ sudo mkdir /etc/nginx/sites-available
[jacqueline@vps709108 ~]$ sudo mkdir /etc/nginx/sites-enabled
[jacqueline@vps709108 ~]$ sudo mkdir /etc/nginx/sites-enabled

Paramétrer le fichier nginx.conf pour qu’Nginx utilise les fichiers de configuration de dossier sites-enabled.

[jacqueline@vps709108 ~]$ sudo nano /etc/nginx/nginx.conf
For more information on configuration, see:
 * Official English Documentation: http://nginx.org/en/docs/
 * Official Russian Documentation: http://nginx.org/ru/docs/
 user nginx;
 worker_processes auto;
 error_log /var/log/nginx/error.log;
 pid /run/nginx.pid;
 Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
 include /usr/share/nginx/modules/*.conf;
 events {
     worker_connections 1024;
 }
 http {
    [...]  
    include /etc/nginx/conf.d/.conf;     
    include /etc/nginx/sites-enabled/.conf;
 }

3- Installer nginx_ensite (http://github.perusio.org/nginx_ensite/) équivalent de a2ensite lorsque l’on utilise Apache2

nginx_ensite permet d’activer et désactiver des hôtes vituels sous Nginx facilement

[jacqueline@vps709108 ~]$ git clone https://github.com/perusio/nginx_ensite.git
[jacqueline@vps709108 ~]$ cd nginx_ensite
[jacqueline@vps709108 nginx_ensite]$  sudo make install
[jacqueline@vps709108 nginx_ensite]$ cd ..
[jacqueline@vps709108 ~]$ sudo rm -R nginx_ensite

6- Créer un hôte virtuel

[jacqueline@vps709108 ~]$ sudo nano /etc/nginx/sites-available/001-famille-brachet.fr.con
server {
         listen       80;
         server_name  vps709108.ovh.net;
         location / {
                 root   /var/www/famille-brachet.fr/public_html;
                 index  index.html index.htm;
                 try_files $uri $uri/ =404;
         }
     error_page   500 502 503 504  /50x.html;
                 location = /50x.html {
                 root   html;
         }
     location ~* .php$ {
                 fastcgi_pass 127.0.0.1:9000;
                 include         fastcgi_params;
                 fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                 fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
        }
 }
[jacqueline@vps709108 ~]$ sudo mkdir -p  /var/www/famille-brachet.fr/public_html
[jacqueline@vps709108 ~]$ sudo nano /var/www/famille-brachet.fr/public_html/index.html
<!DOCTYPE html >
  <html >
  <head >
      <title >Welcome </title >
  </head >
  <body >
    <h1 >welcome </h1 >
  </body >
</html >
[jacqueline@vps709108 ~]$ [jacqueline@vps709108 ~]$ sudo nano /var/www/famille-brachet.fr/public_html/phpinfo.php
<?php
     phpinfo();

7- Publier l’hôte virtuel

[jacqueline@vps709108 ~]$ sudo nginx_ensite 001-famille-brachet.fr.conf
[jacqueline@vps709108 ~]$ sudo service nginx reload

8- Charger phpinfo.php depuis le navigateur : http://vps709108.ovh.net/phpinfo.php

Etape 6 – Installer PHPMyAdmin

Il s’agit de l’une des plus célèbres interfaces pour gérer une base de données MySQL sur un serveur PHP. De nombreux hébergeurs, gratuits comme payants, le proposent ce qui évite à l’utilisateur d’avoir à l’installer.

Cette interface pratique permet d’exécuter, très facilement et sans grandes connaissances en bases de données, des requêtes comme les créations de table de données, insertions, mises à jour, suppressions et modifications de structure de la base de données, ainsi que l’attribution et la révocation de droits et l’import/export. Ce système permet de sauvegarder commodément une base de données sous forme de fichier .sql et d’y transférer ses données, même sans connaître SQL.

Les requêtes SQL restent possibles, ce qui permet de les tester interactivement lors de la création d’un site pour les utiliser ensuite en batch (c’est-à-dire en différé) une fois au point.

Installation

[jacqueline@vps709108 ~]$ sudo  dnf -y install phpMyAdmin

Corriger un bug de PHPMyAdmin

[jacqueline@vps709108 ~]$ sudo nano /usr/share/phpMyAdmin/libraries/classes/DatabaseInterface.php

Et supprimer la ligne suivante …

if (! empty($locale)) {
$this->query("SET lc_messages = '" . $locale . "';", $link, self::QUERY_STORE);
}

Créer un lien symbolique qui fait référence au répertoire PhpMyadmin

[jacqueline@vps709108 www]$  sudo ln -s /usr/share/phpMyAdmin/ /var/www/phpmyadmin 

Configurer l’hôte virtuel pour qu’il prenne en compte PhpMyAdmin

[jacqueline@vps709108 www]$  sudo nano /etc/nginx/sites-available/001-famille-brachet.fr.conf
server {
         listen       80;
         server_name  vps709108.ovh.net;
         root   /var/www/famille-brachet.fr/public_html;
         index  index.html index.htm;
         location / {
                 try_files $uri $uri/ =404;
         }
     location /phpmyadmin {
                 root /var/www;
                 index index.php index.html index.htm;
                 location ~ ^/phpmyadmin/(.+.php)$ {
                     try_files $uri =404;
                     root /var/www;
                     fastcgi_pass 127.0.0.1:9000;
                     include         fastcgi_params;
                     fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                     fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
             }     
          } 
          location ~ \.php$ {              
               fastcgi_pass 127.0.0.1:9000;              
               include         fastcgi_params;
               fastcgi_param   SCRIPT_FILENAME
               $document_root$fastcgi_script_name;
               fastcgi_param   SCRIPT_NAME $fastcgi_script_name;
          } 
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {             
                  root   html;     
          }
 }

Recharger la nouvelle configuration de l’hôte virtuel et redémarrer le serveur Nginx

[jacqueline@vps709108 www]$ sudo nginx_dissite 001-famille-brachet.fr.conf
[jacqueline@vps709108 www]$ sudo nginx_ensite 001-famille-brachet.fr.conf
[jacqueline@vps709108 www]$ sudo service nginx restart

On peut accéder à PhpMyadmin en tapant l’url :http://vps709108.ovh.net/phpmyadmin/

Acheter un nom de domaine pour notre serveur chez Gandi

Alors, comment fait-on pour avoir son propre nom de domaine ? C’est ce que nous allons voir maintenant. 

Tout d’abord, il faut savoir que les noms de domaines ne sont pas gratuits : il faut les acheter auprès d’un opérateur spécialisé et autorisé appelé registrar. De plus, ces noms ne peuvent pas être achetés à vie, seulement loués pendant une période donnée (pouvant aller jusqu’à 10 ans).

Il existe quelques rares exceptions : ainsi les noms de domaine de second niveau en « .tk » sont fournis gratuitement. Quant aux noms de domaine de troisième niveau, de nombreux hébergeurs les proposent gratuitement, sous la forme votresite.hebergeur.com. En effet, la création de sous-domaines est gratuite et illimitée.

C’est un organisme américain, l’ICANN, qui gère les noms de domaine de premier niveau (TLD) comme .com, .net, .fr…
Il délègue la gestion technique de ces TLD à différents opérateurs appelés registry : c’est l’AFNIC qui gère les domaines .fr et .re par exemple.
Enfin chaque registry délègue à plusieurs registrar la vente des noms de domaine. Ceux-ci sont très nombreux. En France, citons GandiOVH1&1Nerim… Dans notre cas nous avons choisi Gandi.

On va créer compte sur le site de Gandi et se connecter pour louer un nom de domaine. Gandi est registar, je vous le rappelle. Le registrar se chargera d’inscrire votre nom de domaine sur les serveurs DNS du registry (l’AFNIC en France) qui aura donc connaissance de votre nom de domaine.

Une fois votre nom de domaine acheté chez un registrar, vous devez lui indiquer les adresses IP de vos serveurs DNS primaires et secondaire

Nous allons gérer notre serveur DNS nous-même à l’aide de MyDNS : dans ce cas on va donner au registrar l’adresse IP de notre serveur DNS qui gère le domaine que nous avez loué.

Pour acheter un domaine chez Gandi , il faut se connecter à son compte Gandi ou le créer si vous n’en possédez pas . Pour se connecter au compte Gandi , il faut taper l’url : https://id.gandi.net/fr/login

Choisissez l’onglet « NOM DE DOMAINE » et cliquer sur le bouton « Acheter »

Ensuite , il suffit de lancer une recherche sur le nom de domaine désiré. S’il est libre le nom de domaine apparaitra avec un bouton « panier d’achat » à côté. Il suffira de cliquer dessus pour acheter l’ajouter au panier d’achat.

Il suffira ensuite de cliquer sur le panier pour passer la commande et effectuer le paiement de la commande :

Installation et gestion du serveur de DNS : MyDNS

MyDNS est un serveur DNS qui utilise une base de données MySQL/MariaDB en tant que backend au lieu de fichiers de configuration comme avec Bind ou djbdns, par exemple.

L’avantage est que MyDNS est qu’il lit simplement les enregistrements de la base de données et qu’il n’est pas nécessaire de le redémarrer ou recharger lorsque les enregistrements DNS changent ou que des zones sont créées, modifiées ou supprimées. Un serveur de noms secondaire peut être facilement configuré en installant une seconde instance de MyDNS qui accède à la même base de données ou utiliser des fonctions de réplication maître/esclave pour répliquer les données sur le serveur de noms secondaire.

Installation de MyDNSConfig

MyDNSConfig est une interface Web conviviale pour MyDNS. MyDNSConfig peut créer tous les types d’enregistrements DNS disponibles dans MyDNS et ajoute des fonctionnalités telles que la gestion des utilisateurs et les privilèges d’accès.

Etape 1: Installation de PHP 5.6

MyDNSConfig est compatible avec PHP 5.6 à cause de fonction liées à MySQL (mysql_connect ect … ) .En effet ces extensions on été de PHP 7.0. À la place, vous pouvez utiliser l’extension MySQLi ou l’extension PDO_MySQL.

Pour faire fonctionner MyDNSConfig nous allons installer en parallèle PHP 5.6.Pour se faire nous allons utiliser le repository RPM de Remi.

Nous allons nous rendre sur la page du Wizard (assistant) : http://rpms.remirepo.net/wizard/ afin d’être aidé dans notre installation …

On sélectionne les options suivantes:

  • Système d’exploitation : Fedora 31
  • Version de PHP désirée : 5.6.40
  • Type d’installation : Multiples versions simultanées

Comme par magie, l’assistant nous toutes les instructions à suivre pour installer php 5.6 en utilisant le son dépôt:

a) On installe le package RPM nécessaire depuis le dépot de Remi

[jacqueline@vps709108]# sudo dnf install https://rpms.remirepo.net/fedora/remi-release-31.rpm

b) On installe php56

[jacqueline@vps709108]$sudo dnf --enablerepo=remi install php56 php56-php-fpm php56-php-mbstring php56-php-mysql

Pour accéder à PHP 5.6 depuis la ligne de commande, il suffit de taper : php56.

Vous le tester en tapant ma commande suivante :

[jacqueline@vps709108]$php56 --version

Il est ensuite nécessaire de modifier la configuration pour lui indiquer d’écouter sur l’ip 127.0.0.1 et le port 9070 de cette façon :

[jacqueline@vps709108]$ sudo nano /etc/opt/remi/php56/php-fpm.d/www.conf 
listen = 127.0.0.1:9070
[jacqueline@vps709108]$ sudo nano /etc/opt/remi/php56/php.ini 
[...] 
cgi.fix_pathinfo=1
[...] 
date.timezone="Europe/Paris" 
[…]


Par défaut, SELinux empêche Apache d’initier des connexions sortantes. Il ne peut donc pas envoyer de demandes proxy au serveur PHP-FPM.

Vous devez exécuter les commande suivante sur le serveur pour permettre à Apache d’établir des connexions sortantes.

[jacqueline@vps709108 ~]$ sudo semanage port -a -t http_port_t -p tcp 9070

c) On démarre le service php-fpm pour php 5.6

[jacqueline@vps709108 ~]$ sudo systemctl start php56-php-fpm
[jacqueline@vps709108 ~]$ sudo systemctl enable php56-php-fpm

d) On vérifie que php-fpm pour php 5.6 fonctionne correctement:

[jacqueline@vps709108 ~]$ sudo service php56-php-fpm status

Etape 2 : Se connecter à Mysql et créer la base de données utilisée par MyDNS

[jacqueline@vps709108 ~]$ mysql -u root -p
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 102
Server version: 10.3.18-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE mydns;
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.* TO 'mydns'@'localhost' IDENTIFIED BY '@secret';
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.* TO 'mydns'@'localhost.localdomain' IDENTIFIED BY '@secret';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> exit;

Replacer @secret par un mot de passe complexe créé par un générateur de mot de passe.

Etape 2: Récupérer MyDNSConfig depuis mon dépôt Gitlab:

[jacqueline@vps709108]$ cd /usr/share/
[jacqueline@vps709108 share]$ sudo git clone https://gitlab.brachet-breizh.fr/cbrachet/mydnsconfig-1.1.0/

Etape 3: Créer un lien symbolique:

[jacqueline@vps709108 share]$ sudo ln -s  /usr/share/mydnsconfig-1.1.0/web/ /var/www/mydnsconfig

Etape 4: Importer les tables nécessaire à MyDNSConfig dans la base de données mydns :

[[jacqueline@vps709108 share]$ mysql -u root -p mydns < install/mydnsconfig.sql
[[jacqueline@vps709108 share]$ sudo rm -R install

Etape 5: Vérifier que les tables ont bien été importées dans la base de données mydns :

[jacqueline@vps709108 share]$mysql -u root -p
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 105
Server version: 10.3.18-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use mydns;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mydns]> show tables;
MariaDB [mydns]> exit;
Bye

Etape 6: Editer le fichier de configuration MyDnsConfig pour adapter les paramétrages d’accès à la base de données

[jacqueline@vps709108 share]$sudo nano /usr/share/mydnsconfig-1.1.0/lib/config.inc.php
/*
         Database Settings
*/
$conf["db_type"]                = 'mysql';
$conf["db_host"]                = 'localhost';
$conf["db_database"]            = 'mydns';
$conf["db_user"]                = 'mydns';
$conf["db_password"]            = 'secret';

Etape 7: Paraméter le serveur web pour utiliser MyDNSConfig

Cas Apache2 :

[jacqueline@vps709108 share]$ sudo nano /etc/httpd/conf.d/001-famille-brachet.conf
Alias /phpmyadmin "/usr/share/phpMyAdmin"
Alias /mydns-config    "/var/www/mydnsconfig"
<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^51\.83\.40\.218$
        RewriteRule ^(.*)$ http://vps709108.net/$1 [L,R=301]
</IfModule>

<VirtualHost 51.83.40.218:80>
    ServerAdmin mmebrachet@orange.fr
    DocumentRoot /var/www/html
    ServerName vps709108.net
   <Directory /var/www/html>
        Require all granted
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9000/"
        </FilesMatch>
    </Directory>
  <Directory /usr/share/phpMyAdmin/>
       DirectoryIndex index.php
       AddDefaultCharset UTF-8
       Require all granted
      <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9000/"
        </FilesMatch>
    </Directory>
    <Directory /var/www/mydnsconfig>
        DirectoryIndex index.php
        Require all granted
           <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9070/"
           </FilesMatch>
       </Directory>

</VirtualHost>

Redémarrer le service Apache2:

[jacqueline@vps709108 share]$ sudo service httpd restart

Cas Nginx :

[jacqueline@vps709108 www]$  sudo nano /etc/nginx/sites-available/001-famille-brachet.fr.conf
server {
         listen       80;
         server_name  vps709108.ovh.net;
         root   /var/www/famille-brachet.fr/public_html;
         index  index.html index.htm;
         location / {
                 try_files $uri $uri/ =404;
         }
         location /phpmyadmin {
                 root /var/www;
                 index index.php index.html index.htm;
                 location ~ ^/phpmyadmin/(.+.php)$ {
                     try_files $uri =404;
                     root /var/www;
                     fastcgi_pass 127.0.0.1:9000;
                     include         fastcgi_params;
                     fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                     fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
             }     
          } 
          location /mydnsconfig {
                 root /var/www;
                 index index.php index.html index.htm;
                 location ~ ^/mydnsconfig/(.+.php)$ {
                     try_files $uri =404;
                     root /var/www;
                     fastcgi_pass 127.0.0.1:9070;
                     include         fastcgi_params;
                     fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                     fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
             }     
          } 
          location ~ \.php$ {              
               fastcgi_pass 127.0.0.1:9000;              
               include         fastcgi_params;
               fastcgi_param   SCRIPT_FILENAME
               $document_root$fastcgi_script_name;
               fastcgi_param   SCRIPT_NAME $fastcgi_script_name;
          } 
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {             
                  root   html;     
          }
 }

Recharger la nouvelle configuration de l’hôte virtuel et redémarrer le serveur Nginx

[jacqueline@vps709108 www]$ sudo nginx_dissite 001-famille-brachet.fr.conf
[jacqueline@vps709108 www]$ sudo nginx_ensite 001-famille-brachet.fr.conf
[jacqueline@vps709108 www]$ sudo service nginx restart

MyDnsConfig est accessible depuis l’url : http://vps709108.ovh.net/mydns-config/ :

Etape 8: Sécuriser l’accès de MyDNSconfig

Le nom de l’utilisateur et le mot de passe par défaut de MyDNSconfig sont:

  • Login : admin
  • Mot de passe : admin

Pour des raison de sécurité évidente, il est nécessaire de modifier ces information dés la première connexion en allant dans le menu System > Users :

Il faut ensuite cliquer sur le lien de l’utilisateur admin : (ne pas changer la langue sinon msconfig bug)

Une fois le login et le mot de passe modifiés , on valide .

Compilation et installation de MyDNS-NG

Ensuite, nous allons télécharger , compiler et installer mydns-ng depuis le site officiel http://mydns.bboy.net/download/ et l’installer de la façon suivante:

[jacqueline@vps709108]$ cd /tmp
[jacqueline@vps709108 tmp]$ sudo dnf install wget
[jacqueline@vps709108 tmp]$ wget https://sourceforge.net/projects/mydns-ng/files/mydns/1.2.8.31/mydns-1.2.8.31.tar.gz
[jacqueline@vps709108 tmp]$ sudo dnf -y install mariadb-devel
[jacqueline@vps709108 tmp]$ tar xfz mydns-1.2.8.31.tar.gz
[jacqueline@vps709108 tmp]$ cd mydns-1.2.8.31/
[jacqueline@vps709108 mydns-1.2.8.31]$ ./configure --without-pgsql --with-mysql-lib=/usr/lib64 --with-mysql-include=/usr/include/mysql --includedir=/usr/lib64 --with-zlib=/usr/lib64
[jacqueline@vps709108 mydns-1.2.8.31]$ make
[jacqueline@vps709108 mydns-1.2.8.31]$ sudo make install

Créez le fichier de définition de service :

[jacqueline@vps709108 mydns-1.2.8.31]$  sudo nano /etc/systemd/system/mydns.service
[Unit]
Description= A database-driven DNS server

[Service]
ExecStart=/usr/local/sbin/mydns start
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=mydns

[Install]
WantedBy=multi-user.target

Créer le fichier de configuration

[jacqueline@vps709108 mydns-1.2.8.31]$ sudo make conf
[jacqueline@vps709108 mydns-1.2.8.31]$ sudo nano /etc/mydns.conf
#/etc/mydns.conf
#Sat Nov 23 14:27:04 2019
#For more information, see mydns.conf(5).
##
# DATABASE INFORMATION
db-host = localhost             # SQL server hostname
db-user = mydns                 # SQL server username
db-password = secret             # SQL server password
database = mydns                # MyDNS database name
# GENERAL OPTIONS
user = nobody             # Run with the permissions of this user
group = nobody            # Run with the permissions of this group
listen = *               # Listen on these addresses ('*' for all)
no-listen =                     # Do not listen on these addresses
# CACHE OPTIONS
zone-cache-size = 1024  # Maximum number of elements stored in the zone cache
zone-cache-expire = 60  # Number of seconds after which cached zones expires
reply-cache-size = 1024  # Maximum number of elements stored in the reply cache
reply-cache-expire = 30  # Number of seconds after which cached replies expire
# ESOTERICA
 log = LOG_DAEMON # Facility to use for program output (LOG_*/stdout/stderr)
pidfile = /var/run/mydns.pid    # Path to PID file
timeout = 120     # Number of seconds after which queries time out
multicpu = 1             # Number of CPUs installed on your system
recursive = 51.83.40.218        # Location of recursive resolver
allow-axfr = yes                # Should AXFR be enabled?
allow-tcp = yes                 # Should TCP be enabled?
allow-update = no        # Should DNS UPDATE be enabled?
ignore-minimum = no      # Ignore minimum TTL for zone?
soa-table = soa           # Name of table containing SOA records
rr-table = rr                # Name of table containing RR data
soa-where =                  # Extra WHERE clause for SOA queries
rr-where =                   # Extra WHERE clause for RR queries

L’installation de base de MyDNS et MyDNSConfig est maintenant terminée. Nous allons maintenant nous connecter à MyDNSConfig et paramétrer notre serveur DNS.

Démarrer le service mydns

[jacqueline@vps709108 mydns-1.2.8.31]$ sudo service mydns start

On vérifie la configuration:

[jacqueline@vps709108 init.d]$ sudo netstat -plten |grep mydns

Enregistrer le fichier et activer le service.

[jacqueline@vps709108 mydns-1.2.8.31]$ sudo systemctl enable mydns.service

Configurer les zones et le serveur DNS :

Etape 1 – Paramétrer l’enregistrement SOA

Pour paramétrer l’enregistrement SOA, cliquer sur le bouton « Add New Zone » sous l’onglet DNS.

L’onglet SOA s’ouvre par défaut. Dans cet onglet , on va pouvoir définir l’ enregistrements SOA de notre serveur de DNS. L’enregistrement SOA (Start Of Authority) aussi appelé fichier d’autorité retourne des informations officielles sur la zone DNS, incluant la référence du serveur DNS principal (primaire), l’email de l’administrateur, un serial ainsi que divers timers définissant la fréquence de renouvellement et la durée de validité pour certains éléments.
Le service de gestion DNS ne propose qu’un seul enregistrement SOA. Le champ origin correspond au nom de domaine d’origine qui va être gérer. Dans notre cas, il s’agit du domaine que l’on vient de louer et que le serveur de DNS va gérer. Notez qu’il est important de mettre à la fin du nom de domaine un « .« .

Comme nous voulons gérer le domaine famille-brachet.fr , il faudra renseigner dans le champ origine : famille-brachet.fr. (n’oubliez pas le point à la fin du nom de domaine)

A cela s’ajoute d’autre champs à remplir :

  • Name Server: nom canonique du serveur qui joue le rôle de DNS primaire pour le domaine
  • Admin Email: adresse de messagerie électronique de la personne responsable de la gestion du service, le symbole @ est remplacé par un point ( . )
  • Serial No.: incrémenté dès modification de la zone DNS, celui-ci permet à chaque nouvelle valeur de notifier tout changement récent.
  • Refresh: intervalle en secondes défini entre chaque demande de mise à jour effectuée depuis le serveur secondaire.
  • Retry: intervalle en seconde avant que le serveur secondaire ne renouvèle une requête précédemment échouée
  • Expire: durée maximum de validité des données, exprimée en secondes, lorsque le serveur DNS secondaire n’est pas en mesure d’atteindre le serveur DNS primaire
  • Minimum TTL: durée de conservation en cache des réponses fournies à toute demande d’enregistrement inexistante
  • TTL: La valeur TTL (Time-To-Live) représente le temps, décompté en secondes, accordé au cache DNS pour stocker les informations au sujet d’un hôte avant d’interroger de nouveau les DNS référents. La valeur doit être un entier comme :
    86400
    et peut être décomposé ainsi : 60 pour 1 minute, 3600 pour 1 heure, 86400 pour une journée, 604800 pour 1 semaine, etc…
  • Active : Défini si l’enregistrement SOA doit être gérer par le serveur DNS.
  • Zone Transfers: Défini les serveurs qui sont autorisés à initier une zone de transfer. Dans il s’agit du serveur de DNS secondaire fourni par OVH : sdns2.ovh.net

Finalement , on obtient la configuration suivante pour le nom de domaine famille-brachet.fr :

Une fois que vous avez cliqué sur le bouton « save », votre nouvelle zone est répertoriée dans la page Zones (SOA). Cliquez sur le lien « famille-brachet.fr » qui correspond au nom de domaine que voulez gérer. Cela vous permettra pour accéder aux propriétés de la zone:

Ensuite cliquez sur l’onglet « Records » de la tabulation :

Puis cliquer sur le bouton « Add New Record » pour ajouter l’enregistrement que vous désirez (CNAME, MX, A … ) dans la zone.

Etape 2 : Paramétrer les enregistrements de type NS

L’enregistre NS pour serveur de noms (Name Server) spécifie un nom d’hôte (qui doit disposer d’un enregistrement A) où l’on pourra trouver les informations DNS à propos du domaine auquel l’enregistrement NS est rattaché. NS forme la base du fonctionnement des DNS.

Pour cette raison on va y spécifier les deux serveurs de noms :

  • Le DNS Primaire qui est notre propre serveur (c’est le nom de domaine de notre VPS (vps709108.ovh.net.)
  • Le DNS Secondaire fourni par OVH Cloud sur lequel va être répliqué les zones (sdns2.ovh.net.)

Il est important de mettre en place un serveur maître et un serveur esclave pour la gestion du DNS , car un serveur plante à cause de charge trop importante , l’autre prendra le relais…

Nous obtenons les configurations suivantes :

Etape 3 : Paramétrer les enregistrements de type A

C’est un enregistrement d’adresse. C’est lui qui indique si le nom de domaine demandé correspond bien à l’adresse IP du serveur. Dans mon cas j’ai associé le domaine famille-brachet.fr et le sous -domaine email.famille-brachet.fr à l’adresse IP de mon VPS soit 51.83.40.218 .

Nous obtenons les configurations suivantes :

Etape 4 : Paramétrer les enregistrements de type MX

Les enregistrements MX sont des enregistrements d’échange d’e-mail (Mail eXchange record). Il pointent vers le serveur de messagerie associé à une adresse IP. Chaque enregistrement MX spécifie un nom de domaine (qui doit de son côté disposer d’un enregistrement A) et d’ une priorité, afin d’ordonner correctement la suite des échanges.

L’enregistrement est capitale car sans lui les serveurs et clients de messageries sont incapablent de communiquer. En effet ils sont nécessairent pour traduire le nom de domaine d’une serveur de messagerie (POP 3 IMAP STMP) en adresse IP.

Dans notre cas le nom domaine de serveur de messagerie sera : email.famille-brachet.fr .

Ce qui se traduit par la configuration suivante :

Etape 5 – Paramétrer la résolution de nom inversée

Dans un serveur DNS vous avez deux types de zones : le premier type va résoudre les noms de domaine par nom d’hôte et le deuxième type va résoudre les noms de domaine par résolution inverse (A partir d’une adresse IP).

Pour paramétrer cette résolution inversée, une nouvelle Zone SOA ayant le format suivant doit être crée : trois-prmier-nombre-ip-publique-inversé.in-addr.arpa.

Dans notre cas , cela donne le nom suivant : 40.83.51.in-addr.arpa.

Nous obtenons la configuration suivante :

On paramètre les différents enregistrements de la résolution inversée de la façon suivante:

Il est important de remarquer l’enregistrement PTR sur le nom de domaine du serveur de messagerie. (email.famille-brachet.fr)

Un enregistrement PTR est comme un enregistrement à l’envers. Un enregistrement définit le nom de domaine à une adresse IP, le PTR définit une adresse IP à un nom d’hôte. Cependant, ces deux enregistrements sont indépendants. Par exemple, Un enregistrement de hostinger.com peut pointer vers 21.21.128.xx, tandis que 23.23.128.xx peut être défini à un nom d’hôte totalement différent.

Il est utile pour les serveurs de messagerie sortants. Cet enregistrement ajoute une fiabilité supplémentaire pour l’envoi au serveur et permet au destinataire de vérifier le nom d’hôte d’une adresse IP. C’est un excellent moyen de protection contre les spammeurs qui utilisent des noms de domaine frauduleux. C’est pourquoi notre serveur fait une recherche inverse de DNS avant d’accepter les e-mails entrants.

Etape 6 – Paramétrer le parefeux pour autoriser le service DNS et le port 53

 [root@vps709108 ~]$ sudo firewall-cmd --zone=public --add-port=53/tcp --permanent
 [root@vps709108 ~]$ sudo firewall-cmd --zone=public --add-service=dns --permanent
 [root@vps709108 ~]$ sudo systemctl reload firewalld

Installer le paquet dnsutils qui contient les client dns fournis avec BIND

[jacqueline@vps709108 ~]$ sudo dnf -y install dnsutils

Tester que le serveur de DNS fonctionne correctement à l’aide de la commande DIG

[jacqueline@vps709108 ~]$ dig famille-brachet.fr  A @127.0.0.1 

Lié le nom de domaine acheté chez Gandi à nos serveurs de nom.

Pour la propagation DNS fonctionne correctement, il va falloir lié le nom de domaine que l’on a acheté chez Gandi avec nos serveurs :, à savoir:

  • Le serveur DNS primaire que nous venons d’installer sur notre VPS : vps709108.ovh.net
  • Le serveur de DNS secondaire fourni par OVH Cloud: sdns2.ovh.net

Etape 1 : Pour effectuer cela vous devez vous connecter sur l’interface de Gandi (https://id.gandi.net/fr/login):

Etape 2- Cliquer sur le lien du nom de domaine concerné : (ici , il s’agit de famille-brachet.fr)

Etape 3- Cliquer sur l’onglet « Serveurs de noms »> »Modifier »

Etape 4- Ajouter les noms de domaine dans le type « Externe »

Ajouter le domaine famille-brachet.fr sur le DNS secondaire d’OVH Cloud

Etape 1- Se connecter à l’OVH Manager depuis l’url https://www.ovh.com/manager

Etape 2- Choisir votre VPS dans le menu « Serveur>VPS »

Etape 3- Ajouter le domaine famille-brachet.fr en cliquant sur le bouton « Ajouter un domaine »

Vérifier la propagation de notre nom de domaine dans le monde entier

Lorsqu’on change les DNS de son serveur, le plus long parfois, c’est la propagation de ces derniers. En effet la propagation sur Internet de vos modifications peut prendre jusqu’à 48 heures et il faut être patient ! En général, quand c’est pour moi, je demande autour de moi (via twitter) qui a accès à quoi, à partir de quel FAI et dans quel pays. Mais quand on n’a pas d’ami parce qu’on ne se brosse pas assez les dents ou qu’on est autiste comme moi, il existe des solutions alternatives pour savoir si une propagation DNS est en cours ou pas.

Un de ces solutions, c’est DNS Checker (https://dnschecker.org/) un site internet qui effectue des lookup sur votre nom de domaine ( A, AAAA, CNAME, MX, NS, PTR, SOA, ou TXT) un peu partout dans le monde, pour voir si ça avance… Cet outil ne changera pas la face du monde, mais ça vous rassurera peut-être un peu sur la progression de votre migration.

Dans l’exemple que vous montre le DNS s’est bien propagé dans le monde entier puisque tout est vert:

Ouf , que ça fait plaisir ! Le serveur de MyDNS est enfin paramètré et opérationnel . On en bien bavé et on a bien galéré mais ça marche bien enfin ! C’est à ce moment là que je suis plus heureux des hommes car cette partie de l’installation d’un serveur VPS m’a toujours paru prise de tête, longue et fastidieuse !

Et si l’on associait maintenant le jolie nom : www.famille-brachet.fr à un serveur web tout en lui ajoutant une petite couche de sécurité SSL. ça vous tente ? Et bien, on y go …

Installation du SSL et d’un nom de domaine associé

Récupérer le certificat SSL Let’s Encrypt sur Nginx

Pour sécuriser notre serveur nous allons devoir installer un certificat SSL.

Définition du SSL(Dixit Wikipédia)

Transport Layer Security (TLS) ou Sécurité de la couche de transport, et son prédécesseur Secure Sockets Layer (SSL), sont des protocoles de sécurisation des échanges sur Internet. Le protocole SSL a été développé à l’origine par Netscape. L’IETF en a poursuivi le développement en le rebaptisant Transport Layer Security (TLS). On parle parfois de SSL/TLS pour désigner indifféremment SSL ou TLS.

TLS (ou SSL) fonctionne suivant un mode client-serveur. Il permet de satisfaire les objectifs de sécurité suivants :

• l’authentification du serveur ; • la confidentialité des données échangées (ou session chiffrée) ; • l’intégrité des données échangées ; de manière optionnelle, l’authentification du client (mais dans la réalité celle-ci est souvent assurée par le serveur). Le protocole est très largement utilisé, sa mise en œuvre est facilitée par le fait que les protocoles de la couche application, comme HTTP, n’ont pas à être profondément modifiés pour utiliser une connexion sécurisée, mais seulement implémentés au-dessus de SSL/TLS, ce qui pour HTTP a donné le protocole HTTPS.

Un groupe de travail spécial de l’IETF a permis la création du TLS et de son équivalent en mode UDP, le DTLS. Depuis qu’il est repris par l’IETF, le protocole TLS a connu quatre versions : TLS v1.0 en 1999, TLS v1.1 en 2006, TLS v1.2 en 2008 et TLS v1.3 en 2018.

Voici un schéma de la connexion à un site en SSL :

Installer cerbot depuis la ligne de commande

Installation pour Nginx :

[jacqueline@vps709108 ~]$ sudo dnf -y install certbot certbot-nginx  

Installation pour Apache2 :

[jacqueline@vps709108 ~]$ sudo dnf -y install certbot certbot-apache

Mettre en place un certificat manuellement :

On arrête le serveur web :

Si le serveur web est Nginx, on tape la commande suivante :

[jacqueline@vps709108 ~]$ sudo service nginx stop

Si le serveur web est Apache 2, on tape la commande suivante:

[jacqueline@vps709108 ~]$ sudo service httpd stop

Pour obtenir un certificat spécifique (dans notre cas de www.famille-brachet.fr), on tape la commande suivante :

[jacqueline@vps709108 ~]$ sudo certbot certonly --standalone -d www.famille-brachet.fr

Si c’est la première fois que vous lancer Let’s Encrypt, le script va vous demander d’entrer votre email et d’accepter les ToS (Terms of Service).

Si tout se passe bien, vous obtiendrez votre certificat et ce message :

IMPORTANT NOTES: 
- Congratulations! Your certificate and chain have been saved at    /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will    expire on 2016-10-02. To obtain a new or tweaked version of this    certificate in the future, simply run letsencrypt-auto again. To    non-interactively renew *all* of your certificates, run    "letsencrypt-auto renew"  
- If you like Certbot, please consider supporting our work by:    

  Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate    
  Donating to EFF:                  https://eff.org/donate-le

Si vous voulez renouveler tous vos certificats sur votre serveur, il faut taper la commande suivante :

[jacqueline@vps709108 ~]$ sudo certbot renew

On redémarre le serveur web:

Si le serveur web est Nginx, on tape la commande suivante :

[jacqueline@vps709108 ~]$ sudo service nginx start

Si le serveur web est Apache2 , on tape la commande suivante :

[jacqueline@vps709108 ~]$ sudo service httpd start

On vérifie la nouvelle date d’expiration qui devrait désormais être d’environ 90 jours.

[jacqueline@vps709108 ~]$ sudo cerbot certificate

Le soucis c’est qu’avec cette méthode, il nécessaire de renouveler manuellement son certificat tous les 3 mois. Ce traduit par la réception dans notre boite mail d’administrateur d’un message demandant un renouvellement du certificat Let’s Encrypt. A la longue ce process peut être une charge de gestion assez lourde. Nous allons donc vous expliquer comment renouveler automatiquement votre certificat SSL Let’s Encrypt afin de dégager du temps pour des tâches plus intéressantes et moins rébarbatives.

Mettre en place le renouvellement automatiques des certificat SSL :

[jacqueline@vps709108 ~]$ sudo touch /var/log/certbot-renew.log
[jacqueline@vps709108 ~]$ sudo chmod 777 /var/log/certbot-renew.log
[jacqueline@vps709108 ~]$ sudo dnf -y install  mailx

On édite le crontab pour que la mise à jour du certificat se fasse tous les dimanches à 23h59 par l’utilisateur root (superadmin) .Les mises-jour de certificat sont enregistrés dans un fichier de log et ensuite envoyé par mail :

[jacqueline@vps709108 ~]$ export VISUAL=nano;
[jacqueline@vps709108 ~]$ crontab -e

Si le serveur web est Nginx, on tape :

59 23 * * 7 root /usr/bin/certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /var/log/certbot-renew.log | mail -s "CERTBOT Renouvellement" mmebrachet@orange.fr < /var/log/certbot-renew.log

Si le serveur web est Apache 2, on tape :

59 23 * * 7 root /usr/bin/certbot renew --pre-hook "service httpd stop" --post-hook "service httpd start" >> /var/log/certbot-renew.log | mail -s "CERTBOT Renouvellement" mmebrachet@orange.fr < /var/log/certbot-renew.log

Le service cron utilise le crontab pour effectuer ses tâches. ron est un programme disponible sur les systèmes de type Unix (Linux, Mac Osx …) permettant de planifier des taches régulières. Il est en effet intéressant que les tâches habituelles soient réalisées automatiquement par le système plutôt que d’avoir à les lancer manuellement en tant qu’utilisateur. Cron est un démon, il tourne donc en tâche de fond du système. Chaque utilisateur du système peut avoir sa propre liste de tâches planifiées. Le moyen le plus simple pour les utiliser est d’utiliser la commande crontab.

On vérifie que la tâche a bien été enregistrer à l’aide de la commande :

[jacqueline@vps709108 ~]$ export VISUAL=nano;
[jacqueline@vps709108 ~]$ crontab -l

Pour être sûre que la modification a bien été prise en compte. On redémarre le service cron mais ce n’est pas obligatoire !

[jacqueline@vps709108 ~]$ sudo service crond restart

Cas 1: Paramétrer le serveur web Nginx pour utiliser le certificat nouvellement obtenu

Les certificats sont installés dans /etc/letsencrypt/archive. Des liens symboliques pointant sur les dernières versions des certificats (puisqu’ils ne sont valides que 90 jours(3 mois)) sont disponible dans /etc/letsencrypt/live/. Cela permet de configurer statiquement Nginx sans avoir à changer le nom du fichier.
Avant de configurer Nginx, on va générer des paramètres Diffie-Hellman forts pour augmenter la sécurité et éviter les attaques man in the middle. Cela peut prendre quelques minutes.

[jacqueline@vps709108 ~]$ sudo openssl dhparam -out /etc/ssl/certs/dhparam_nginx.pem 2048

Nous allons donc modifier la configuration Nginx avec les nouveaux paramètres. Editons notre hôte virtuel:

[jacqueline@vps709108 ~]$ sudo nano /etc/nginx/sites-available/001-famille-brachet.fr.conf

Changez la directive listen 80; par listen 443 ssl; pour écouter sur le ports HTTPS. Ce qui donne :

listen 51.83.40.218:443 ssl;

On modifie le server_name par www.famille-brachet.fr

Ajouter les lignes suivante pour activer ssl :

ssl on; 
ssl_certificate /etc/letsencrypt/live/www.famille-brachet.fr/cert.pem; 
ssl_certificate_key /etc/letsencrypt/live/www.famille-brachet.fr/privkey.pem; 
ssl_trusted_certificate /etc/letsencrypt/live/www.famille-brachet.fr/chain.pem

Nous allons ajouter ces paramètres afin de rendre le SSL plus sûr :

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam_nginx.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;

On ajoute au début du fichier une redirection du port 80 vers le port 443. De cette façon le site sera obligatoirement redirigé en SSL :

server {
 listen ip_publique_du_serveur  51.83.40.218:80;
  server_name www.famille-brachet.fr;
  rewrite ^ https://$server_name$request_uri? permanent;
 }

On obtient la configuration finale suivante :

server {
 listen ip_publique_du_serveur  51.83.40.218:80;
  server_name www.famille-brachet.fr;
  rewrite ^ https://$server_name$request_uri? permanent;
 }
server {
         listen 51.83.40.218:443 ssl;
         server_name   www.famille-brachet.fr;
         root   /var/www/famille-brachet.fr/public_html;
         index  index.html index.htm;
         ssl on; 
         ssl_certificate /etc/letsencrypt/live/www.famille-brachet.fr/cert.pem; 
         ssl_certificate_key /etc/letsencrypt/live/www.famille-brachet.fr/privkey.pem; 
         ssl_trusted_certificate /etc/letsencrypt/live/www.famille-brachet.fr/chain.pem
         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
         ssl_prefer_server_ciphers on;
         ssl_dhparam /etc/ssl/certs/dhparam_nginx.pem;
         ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
         ssl_session_timeout 1d;
         ssl_session_cache shared:SSL:50m;
         ssl_stapling on;
         ssl_stapling_verify on;
         add_header Strict-Transport-Security max-age=15768000;
         location / {
                 try_files $uri $uri/ =404;
         }
         location /phpmyadmin {
                 root /var/www;
                 index index.php index.html index.htm;
                 location ~ ^/phpmyadmin/(.+.php)$ {
                     try_files $uri =404;
                     root /var/www;
                     fastcgi_pass 127.0.0.1:9000;
                     include         fastcgi_params;
                     fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                     fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
             }     
          } 
          location /mydnsconfig {
                 root /var/www;
                 index index.php index.html index.htm;
                 location ~ ^/mydnsconfig/(.+.php)$ {
                     try_files $uri =404;
                     root /var/www;
                     fastcgi_pass 127.0.0.1:9070;
                     include         fastcgi_params;
                     fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                     fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
             }     
          } 
          location ~ \.php$ {              
               fastcgi_pass 127.0.0.1:9000;              
               include         fastcgi_params;
               fastcgi_param   SCRIPT_FILENAME
               $document_root$fastcgi_script_name;
               fastcgi_param   SCRIPT_NAME $fastcgi_script_name;
          } 
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {             
                  root   html;     
          }
 }

Recharger la nouvelle configuration de l’hôte virtuel et redémarrer le serveur Nginx

[jacqueline@vps709108 www]$ sudo nginx_dissite 001-famille-brachet.fr.conf
[jacqueline@vps709108 www]$ sudo nginx_ensite 001-famille-brachet.fr.conf
[jacqueline@vps709108 www]$ sudo service nginx restart

Cas 2: Paramétrer le serveur web Apache2 pour utiliser le certificat nouvellement obtenu

Les certificats sont installés dans /etc/letsencrypt/archive. Des liens symboliques pointant sur les dernières versions des certificats (puisqu’ils ne sont valides que 90 jours(3 mois)) sont disponible dans /etc/letsencrypt/live/. Cela permet de configurer statiquement Apache2 sans avoir à changer le nom du fichier.
Avant de configurer Apache2, on va générer des paramètres Diffie-Hellman forts pour augmenter la sécurité et éviter les attaques man in the middle. Cela peut prendre quelques minutes.

[jacqueline@vps709108 ~]$ sudo openssl dhparam -out /etc/ssl/certs/dhparam_apache.pem 2048

Nous allons donc modifier la configuration Apache2 avec les nouveaux paramètres. Editons notre fichier vhost :

[jacqueline@vps709108 ~]$  sudo nano /etc/httpd/conf.d/001-famille-brachet.conf

Changez l’entête VirtualHost de la balise pour écouter sur le ports HTTPS. Ce qui donne :

<VirtualHost 51.83.40.218:443>

On modifie le ServerName par www.famille-brachet.fr

Ajouter les lignes suivante pour activer ssl :

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.famille-brachet.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.famille-brachet.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.famille-brachet.fr/chain.pem

Nous allons ajouter ces paramètres afin de rendre le SSL plus sûr :

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam_apache.pem"
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

On ajoute au début du fichier une redirection du port 80 vers le port 443. De cette façon le site sera obligatoirement redirigé en SSL :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^51\.83\.40\.218$
    RewriteRule ^(.*)$ http://www.famille-brachet.fr/$1 [L,R=301]
</IfModule>

On obtient la configuration finale suivante :

Listen 443 https
Alias /mydns-config    "/var/www/mydnsconfig"
Alias /phpmyadmin "/usr/share/phpMyAdmin"
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^51\.83\.40\.218$
    RewriteRule ^(.*)$ http://www.famille-brachet.fr/$1 [L,R=301]
</IfModule>
<VirtualHost 51.83.40.218:80>

    ServerName famille-brachet.fr
    ServerAlias www.famille-brachet.fr

    RewriteEngine on
    RewriteCond %{HTTPS} !on
    RewriteRule ^(.*)$ https://www.famille-brachet.fr$1 [L,R=301]

</VirtualHost>

<VirtualHost 51.83.40.218:443>
    ServerAdmin mmebrachet@orange.fr
    DocumentRoot /var/www/html
    ServerName www.famille-brachet.fr
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/www.famille-brachet.fr/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.famille-brachet.fr/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/www.famille-brachet.fr/chain.pem
    SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam_apache.pem"
    
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCompression off
    SSLOptions +StrictRequire
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
   <Directory /var/www/html>
        Require all granted
    <FilesMatch \.php$>
            SetHandler "proxy:fcgi://127.0.0.1:9000/"
        </FilesMatch>
    </Directory>
   <Directory /usr/share/phpMyAdmin/>
       DirectoryIndex index.php
       AddDefaultCharset UTF-8
       Require all granted
       <FilesMatch \.php$>
            SetHandler "proxy:fcgi://127.0.0.1:9000/"
       </FilesMatch>
   </Directory>

 <Directory /var/www/mydnsconfig>
        DirectoryIndex index.php
        Require all granted
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9070/"
        </FilesMatch>
    </Directory>
</VirtualHost>

On redémarre Apache2 pour prendre en compte la nouvelle configuration :

[jacqueline@vps709108 ~]$  sudo service httpd restart

Vérifier le certificat SSL

Vous pouvez vérifier la sécurité de votre certificat (et de votre serveur web) en visitant ce site : https://www.ssllabs.com/ssltest/analyze.html?d=www.famille-brachet.fr

Vous obtiendrez un score ndlr, A+, ce qui est un bon niveau sécurité.

Installation du serveur de messagerie électronique

Introduction

Un serveur de messagerie électronique regroupe plusieurs logiciels qui s’occupent d’envoyer ou de recevoir des courriers électroniques. Autour de ces 2 fonctions principales plusieurs tâches essentielles s’y greffent : filtres anti-virus, filtres anti-spams et black/white/grey-listing principalement.

La fonction d’envoi et de réception de courriers électroniques s’effectue à travers le protocole SMTP (Simple Mail Tansfer Protocol) et cette fonction est gérée par un logiciel appelé MTA (Mail Transfert Agent). Le MTA communique avec d’autres MTA pour assurer le transport du courrier. La livraison des emails est assurée par un logiciel appelé MDA (Mail Delivery Agent) ou LDA (Local Delivery Agent). Il est courant que les fonctions de MTA et MDA/LDA cohabitent au sein d’un même logiciel par exemple Postfix.

Les clients de courriers électroniques (i.e. les logiciels utilisés par les utilisateurs : ThunderbirdKmailEvolution, webmails…) sont appelés MUA (Mail User Agent). Les clients de messagerie électronique dialoguent avec le serveur à l’aide des protocoles POP3 ou  IMAP.

La portée de ce tutoriel est la mise en place d’un serveur de messagerie électronique à l’aide de Postfix et Dovecot incluant un filtre anti-virus (ClamAv) et anti-spam (SpamAssassin) ainsi qu’une solution de grey-listing (SQLgrey). Sera également abordé la mise en place de SPF et de signature DKIM pour assurer la légitimité des emails. Finalement, la configuration de filtres coté serveur à l’aide de Sieve et Dovecot est abordée. La configuration décrite ici n’est pas unique et peut être modifiée pour s’adapter à d’autres usages. Les utilisateurs des comptes emails seront des utilisateurs virtuels stockés dans une base de données MariaDB et pourront être gérer grâce à Postfix Admin.

Conventions

  • Le domaine géré par le serveur est : famille-brachet.fr
  • L’adresse email de test est test@example.com, son mot de passe : « motdepasse »
  • Utilisateur et groupe UNIX des emails : vmail (uid=5000 et gid=5000)
  • Chemin de stockage des emails : /home/mail/
  • Utilisateur MariaDB pour la base de données : mail
  • Nom de la base de données MariaDB : mail
  • Ports utilisés :
imap : 143 
smtp : 25 
smtp-auth : 587 
sieve : 4190

Création du dossier racine de stockage des emails

Un utilisateur unix est créé pour la gestion et le stockage des boîtes aux lettres. Il est nommé « vmail » et a pour uid et gid 5000 .L’emplacement pour le stockage des boîtes aux lettres a été choisi dans le cadre de ce tutoriel pour /home/mail/ avec les droits vmail:vmail.

[jacqueline@vps709108 ~]$ sudo groupadd -g 5000 vmail
[jacqueline@vps709108 ~]$ sudo  adduser -u 5000 -g 5000 -d /home/mail vmail

 Création de la base de donnée mail

Un utilisateur dédié pour la base MariaDB est créé pour l’occasion. Le nom choisi est « mail » et la base données se nomme également « mail ».

On se connecte à la base de données en mode root :

[jacqueline@vps709108 ~]$ mysql -u root -p
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 102
Server version: 10.3.18-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE mail;
MariaDB [(none)]> CREATE USER 'mail'@'localhost' IDENTIFIED BY 'secret';
MariaDB [(none)]> GRANT USAGE ON *.* TO 'mail'@'localhost';
uery OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost';
uery OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;

 Installation et configuration de PostfixAdmin

PostfixAdmin est téléchargeable depuis l’url http://postfixadmin.sourceforge.net/

PostfixAdmin est une interface web qui permet de gérer simplement vos domaines, vos adresses virtuelles ainsi que vos alias. Dès que vous aurez besoin d’une nouvelle adresse email, c’est par cette interface qu’il faudra passer.

Etape 1 : Télécharger l’archive la plus récente et la décompresser sur le serveur :

[jacqueline@vps709108 ~]$ cd /var/www 
[jacqueline@vps709108 www]$ sudo  wget https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz 
[jacqueline@vps709108 www]$ sudo tar -xzf postfixadmin-3.2.tar.gz [jacqueline@vps709108 www]$ sudo rm -rf postfixadmin-3.2.tar.gz [jacqueline@vps709108 www]$ sudo chown -R jacqueline:apache /var/www 
[jacqueline@vps709108 www]$ sudo mv postfixadmin-3.2 postfixadmin

Etape 2: Editer le fichier de configuration et modifiez les paramètres suivants :

[jacqueline@vps709108 www]$ sudo nano  /var/www/postfixadmin/config.inc.php
$CONF['postfix_admin_url'] = 'http://famille-brachet.fr/postfixadmin';
$CONF['configured'] = true;
$CONF['default_language'] = 'fr';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mail';
$CONF['database_password'] = 'secret';
$CONF['database_name'] = 'mail';
$CONF['admin_email'] = 'admin@famille-brachet.fr';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';
$CONF['fetchmail'] = 'NO';

Etape 3 : Paraméter le serveur web pour faire fonctionner Postfixadmin

a) Cas d’Apache2

[jacqueline@vps709108 www]$ sudo nano /etc/httpd/conf.d/001-famille-brachet.conf 
Listen 443 https
Alias /phpmyadmin "/usr/share/phpMyAdmin"
Alias /mydns-config    "/var/www/mydnsconfig"
Alias /postfixadmin    "/var/www/postfixadmin/public"
<VirtualHost 51.83.40.218:80>

    ServerName famille-brachet.fr
    ServerAlias wwwfamille-brachet.fr

    RewriteEngine on
    RewriteCond %{HTTPS} !on
    RewriteRule ^(.*)$ http://www.famille-brachet.fr$1 [L,R=301]

</VirtualHost>

<VirtualHost 51.83.40.218:443>
    ServerAdmin mmebrachet@orange.fr
    DocumentRoot /var/www/html
    ServerName www.famille-brachet.fr
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/www.famille-brachet.fr/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.famille-brachet.fr/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/www.famille-brachet.fr/chain.pem
    SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam_apache.pem"

    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCompression off
    SSLOptions +StrictRequire
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  # ErrorLog /var/www/log/error_log
   #CustomLog /var/www/log/access_log common
   <Directory /var/www/html>
        Require all granted
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9000/"
        </FilesMatch>
    </Directory>
   <Directory /var/www/postfixadmin/public>
        DirectoryIndex index.php
        Require all granted
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9000/"
        </FilesMatch>
    </Directory>
   <Directory /usr/share/phpMyAdmin/>
       DirectoryIndex index.php
       AddDefaultCharset UTF-8
       Require all granted
       <FilesMatch \.php$>
            SetHandler "proxy:fcgi://127.0.0.1:9000/"
       </FilesMatch>
   </Directory>

 <Directory /var/www/mydnsconfig>
        DirectoryIndex index.php
        Require all granted
        <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9070/"
        </FilesMatch>
    </Directory>
</VirtualHost>

On redémarre le serveur Apache2 :

[jacqueline@vps709108 www]$ sudo service httpd restart

Etape 4- Créer le dossier template_c en donnant les droits d’écriture pour SELinux

Il est ensuite nécessaire de créer le dossier template_c

[jacqueline@vps709108 www]$ sudo mkdir   /var/www/postfixadmin/templates_c  
[jacqueline@vps709108 www]$ sudo chmod 777 -R  /var/www/postfixadmin/templates_c  
[jacqueline@vps709108 www]$ sudo chown apache:apache  -R  /var/www/postfixadmin/templates_c  
[jacqueline@vps709108 www]$ sudo chcon -R -t httpd_sys_content_rw_t  /var/www/postfixadmin/templates_c  

Etape 5- Lancer l’assistant d’installation de PostfixAdmin

Taper l’adresse suivante : https://www.famille-brachet.fr/postfixadmin/setup.php et suivez les indications .

Le script crée toutes les tables nécessaires au bon fonctionnement de Postfix.

En bas de la page, il faut générer le hash du mot de passe d’installation et créez un compte administrateur  (example admin@famille-brachet.fr). C’est à partir de ce compte que vous allez gérer toutes vos adresses emails.

a) On défini un mot de passe d’installation

b) On récupère la valeur de $CONF[‘setup_password’] et on l’ajoute au fichier /var/www/postfixadmin/config.inc.phptfixadmin

[jacqueline@vps709108 www]$ sudo nano  /var/www/postfixadmin/config.inc.php
$CONF['setup_password'] = 'b5b9430fd3633cac56079fdssdds1e3da48a4c:bbdf81c671dfdfdf3e599a87996147970d4b42636604a7lojres36f4c';

c) On renseigne le mot de passe de l’administrateur

d) L’administrateur a été ajouté, on peut, dés lors se connecter à l’admin de postfixadmin avec l’identifiant et le mot de passe de l’administrateur que l’on vient de renseigner:

e) Pour des raisons de sécurité, on supprime le script setup.php du serveur

[jacqueline@vps709108 www]$ sudo rm /var/www/postfixadmin/public/setup.php 

f) Vous pouvez maintenant vous connecter via le formulaire de connexion : https://www.famille-brachet.fr/postfixadmin/login.php

g) On va commencer par ajouter un nouveau domaine, dans notre exemple il s’agit de famille-brachet.fr :

Le domaine est dés lors visible dans la liste des domaines comme vous pouvez le constater sur cette copie d’écran:

h) Cliquer dans la liste sur le lien du domaine puis sur le bouton « Ajouter un compte courriel« 

Voila, vous avez ajouté votre première adresse email, like un chef, maintenant on va passer aux choses sérieuses …

Installation de Dovecot

Définition

Dovecot est un serveur IMAP et POP3. Le but ici est la mise en place du serveur en ce basant sur des utilisateurs virtuels stockés dans une base de données MariaDB.

Etape 1- Installation de Dovecot

[jacqueline@vps709108 www]$sudo  dnf -y  install dovecot-pigeonhole dovecot-mysql dovecot

Etape 2- Mise en place de l’authentification

L’authentification repose sur une base Mysql avec des utilisateurs virtuels. L’utilisateur UNIX propriétaire des emails à pour UID 5000 et GID 5000. L’authentification est de type PLAIN, c’est à dire que le mot de passe est transmis en clair. Pour une meilleure sécurité, on chiffre donc tout le canal de communication avec TLS. Dovecot externalisera également une interface SASL pour Postfix .

a) Faire une sauvegarde du fichier original /etc/dovecot/conf.d/10-auth.conf

[jacqueline@vps709108 www]$sudo cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.back

b) Mettre à jour le fichier  /etc/dovecot/conf.d/10-auth.conf comme ceci :

[jacqueline@vps709108 www]$sudo nano /etc/dovecot/conf.d/10-auth.conf
# N'autorise le login que si la couche tls est chargée
disable_plaintext_auth = yes
auth_mechanisms = plain
#commenter la ligne :
!include auth-system.conf.ext
#décommenter la ligne :
!include auth-sql.conf.ext

c) Ajouter le fichier /etc/dovecot/dovecot-sql.conf.ext

[jacqueline@vps709108 www]$sudo nano   /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=mail user=mail password=secret
#Type de hash pour le mot de passe
default_pass_scheme = MD5
#Get the mailbox
user_query = SELECT '/home/mail/%d/%u' as home,'maildir:/home/mail/%d/%u' as mail, 5000 AS uid, 5000 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'
#Get the password
password_query = SELECT username as user, password,'/home/mail/%d/%u' as userdb_home,'maildir:/home/mail/vhosts/%d/%u' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

d) Mettre en place la couche SSL pour Dovecot

Avec la version de dovecot fournie par Fedora, un certificat auto-signé est déjà en place. Nous allons le remplacer par notre propre certificat SSL Let’s Encrypt. Ensuite nous allons activer le support ssl (ssl = required). Pour rappel, la configuration décrite ici utilise obligatoirement une authentification de type plain-text, il est donc nécessaire d’imposer une liaison chiffrée via TLS. Il est important de savoir que les certificats pour les serveurs web sont les mêmes que pour les messageries. Un certificat SSL reste un certificat SSL ! Ce certification SSL sera généré, dans notre cas pour le nom de domaine : email.famille-brachet.fr

d-1) Arrêter le serveur web

Cas 1: Pour Apache 2

[jacqueline@vps709108 www]$sudo service httpd stop

Cas 1: Pour Nginx

[jacqueline@vps709108 www]$sudo service nginx stop

d-2) Générer le certificat SSL

[jacqueline@vps709108 www]$ sudo certbot certonly --standalone -d email.famille-brachet.fr

d-3) Redémarrer le serveur web

Cas 1: Pour Apache 2

[jacqueline@vps709108 www]$sudo service httpd start

Cas 2: Pour Nginx

[jacqueline@vps709108 www]$sudo service nginx start

d-4) Sauvegarder le fichier /etc/dovecot/conf.d/10-ssl.conf 

[jacqueline@vps709108 www]$ sudo cp /etc/dovecot/conf.d/10-ssl.conf  /etc/dovecot/conf.d/10-ssl.conf.back

d-5)Modifier le fichier  /etc/dovecot/conf.d/10-ssl.conf 

[jacqueline@vps709108 www]$ sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_ca = </etc/letsencrypt/live/email.famille-brachet.fr/chain.pem
ssl_cert = </etc/letsencrypt/live/email.famille-brachet.fr/cert.pem
ssl_key = </etc/letsencrypt/live/email.famille-brachet.fr/privkey.pem
#The file should contain the CA certificate(s)
ssl_verify_client_cert=yes

d-6) Redémarrer le service Dovecot

[jacqueline@vps709108 www]$ sudo service dovecot restart

d-8) Paramétrer le parefeux pour ouvrir les ports : 995,110 (ports POP3) et 143,993 (port IMAP)

[root@vps709108 ~]$ sudo firewall-cmd --zone=public --add-port=110/tcp --permanent
 [root@vps709108 ~]$ sudo firewall-cmd --zone=public --add-port=995/tcp --permanent
 [root@vps709108 ~]$ sudo firewall-cmd --zone=public --add-port=143/tcp --permanent
[root@vps709108 ~]$ sudo firewall-cmd --zone=public --add-port=993/tcp --permanent
[root@vps709108 ~]$ sudo firewall-cmd --zone=public --add-service=pop3 --permanent
[root@vps709108 ~]$ systemctl reload firewalld

d-8) Vérifier que le service Dovecot fonctionne correctement

[jacqueline@vps709108 www]$ sudo service dovecot status

e) Tester la connexion au serveur dovecot en ligne de commande depuis un poste client (ici en exemple poste MacOS)

e-1) Installer le gestionnaire de paquet pour MacOS homebrew.

iMac-de-Jacqueline-Brachet:~ jacquelinebrachet$/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

e-2) Installer telnet

iMac-de-Jacqueline-Brachet:~ jacquelinebrachet$brew install telnet 

Telnet ne permet pas d’utiliser TLS simplement. À la place, il est possible d’utiliser Openssl pour vérifier que tout fonctionne :

iMac-de-Jacqueline-Brachet:~ jacquelinebrachet$ openssl s_client -connect email.famille-brachet.fr:imap -crlf -starttls imap

Si la connexion fonctionne , vous devriez voir ce genre de réponse .

OK Pre-login signifie que la connexion en SSL fonctionne

L’authentification est alors possible, nous allons donc nous authentifier au serveur Dovecot : (le compte utilisé est celui avec postfixadmin précédemment)

1 login contact@famille-brachet.fr password

on arrive à se connecter :

Installation de Postfix

Définition

Postfix est un serveur de messagerie électronique (MTA) et un logiciel libre développé par Wietse Venema et plusieurs contributeurs. Il se charge de la livraison (envoi et réception) de courriers électroniques (courriels).

Installation

a) Désactiver et arrêter sendmail

Sendmail est installé par défaut, il faut soit le désinstaller ou arrêter et désactiver le service. Pour l’arrêter et le désactiver :

[jacqueline@vps709108 ~]$ sudo  systemctl stop sendmail.service
[jacqueline@vps709108 ~]$ sudo systemctl disable sendmail.service

b) Installer postfix

[jacqueline@vps709108 ~]$ sudo dnf -y  install postfix

c) Installation de cyrus-sasl pour mettre en place un serveur SMTP par authentification se basant sur l’outil Postfix 

[jacqueline@vps709108 ~]$ sudo dnf install -y cyrus-sasl-plain

d) Modifier le fichier main.cf

[jacqueline@vps709108 ~]$ sudo nano /etc/postfix/main.cf

Et ajouter la ligne suivante :

myhostname = famille-brachet.fr

e) Démarrer le serveur postfix

[jacqueline@vps709108 ~]$ sudo service postfix start

Envoyer un email à l’aide de telnet en local

Le bon fonctionnement de Postfix est testé tout le long du tutoriel à l’aide de la commande telnet.

Simple Mail Transfert Protocol : protocole simple de transfert de courrier. Ce protocole est tellement simple qu’avec le développement d’Internet et du courrier électronique, il a été nécessaire de créer un nouveau standard ESMTP, E pour Extended.

A l’instar de http, SMTP est un protocole client serveur en mode texte Il est défini dans la RFC 821. Cette dernière écrite en 1982 par Jon Postel (la légende, le père de l’Internet), se base sur une infrastructure bien moins performante que celle dont on dispose aujourd’hui. Il est donc prévu que les caractères transmis soient codés sur 7bits, oubliez les caractères accentués et autre gothique. Pour se connecter à un serveur SMTP (celui mis à disposition par votre fournisseur d’accès Internet fera parfaitement l’affaire), un simple telnet est utilisé :

[jacqueline@vps709108 ~]$ sudo dnf install telnet
[jacqueline@vps709108 ~]$ telnet localhost 25

Le port 25 est celui généralement utilisé par le serveur pour recevoir une connexion. Vous retrouverez cette valeur si vous jetez un œil dans le fichier /etc/services. Une fois la connexion établie, le serveur s’identifie.

220 vps709108.localdomain ESMTP Postfix

On notera au passage que c’est un serveur ESMTP. Ensuite il convient d’être poli et de s’identifier en déclinant son nom de domaine:

ehlo test@localhost

Cette première opération sert à vérifier que la connexion est établie correctement et que les deux participants peuvent s’échanger des informations. (le  » HELLO protocole  » est une technique très répandue pour valider la qualité d’un lien ). Quant une opération se déroule bien, le serveur répond avec le code 250. Ce qui est notre cas :

250-vps709108.localdomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

Nous allons ensuite envoyer un message à christophe_brachet@sfr.fr en tant que localhost. Rentrons un peu dans le détails, une fois le HELO de courtoisie échangé (il n’est pas toujours nécessaire), on utilise la commande ‘MAIL FROM:’ suivi du chemin de retour. Il s’agit en fait de l’endroit ou sera envoyé le message s’il n’est pas possible de le délivrer au destinataire. Dans la pratique, on utilise ici sa propre adresse email entourée de chevrons <>.  Par exemple :

MAIL FROM: <contact>

La réponse est un code 250, ce qui signifie que l’opération s’est bien déroulée :

250 2.1.0 Ok

La commande ‘RCPT TO:’ est suivi du chemin d’accès du destinataire. On parle ici de chemin et nom d’adresse car il est possible de spécifier plusieurs hôtes avant l’adresse. Un chemin a la forme « @UN,@DEUX:JOE@TROIS », dans laquelle UN, DEUX, et TROIS sont des noms d’hôtes. Cette forme est employée dans le but d’accentuer la différence formelle entre une adresse et une route. La boîte aux lettres est une adresse absolue, la route est une information permettant d’y accéder. Ces deux concepts doivent toujours être dissociés, cependant dans la vraie vie de l’utilisateur lambda à la maison cela n’arrive jamais (pour plus détails consultez la rfc). Je vais donc me contenter d’utiliser une simple adresse. On peut utiliser la commande RCPT plusieurs fois pour envoyer un même message à différentes adresses. Exemple :

RCPT TO: <christophe_brachet@sfr.fr>

Le serveur valide l’adresse en renvoyant le code 250 .

250 2.1.0 Ok

La commande Data nécessite deux étapes. On passe la commande au serveur, il répond : 354 Start mail input; end with . La saisie du message peut commencer. Pour l’envoyer, saisissez uniquement et en début de ligne le caractère ‘.’ (comme l’indique la réponse du serveur). Si vous souhaitez qu’une ligne ne contienne qu’un seul point il faut en mettre deux. Ainsi on a la commande :

data

En réponse , on a :

354 End data with <CR><LF>.<CR><LF>

On saisi le message :

Message de test
.

Sur la réception de la ligne avec le ‘.’, le serveur valide la requête et envoie l’email. Si tout se passe bien il renvoie le code 250. Attention, si l’adresse email est invalide ou si la boite aux lettres du destinataire est inexistante ou encore pleine, le message ne sera pas délivré et vous recevrez quand même le code 250. Comme nous le verrons plus loin, la section DATA peut être composée d’un entête et d’un corps séparé par une ligne blanche, pour éviter les mauvaises surprises, si vous ne mettez pas d’entête à vos messages commencez les par une ligne blanche sous peine de perdre le première ligne d’information.

250 2.0.0 Ok: queued as 957DC106860

Et sans surprise la commande ‘QUIT’ permet de terminer la transaction.

quit

On reçoit et code 221 et telnet se déconnecte du serveur postfix :

221 2.0.0 Bye

Lorsque je me connecte au compte de ma boite mail sfr : christophe_brachet@sfr.fr, j’ai bien reçu mon courrier. C’est super , il est possible d’envoyer des mail depuis le serveur avec postfix !

Le contenu du mail reçu :

C’est bien le contenu du message que j’ai envoyé en ligne de commande telnet !

Petite info : Pour connaitre les log de postfix (ce qui peut être utile pour le débugage) , vous pouvez taper les lignes suivantes :

[jacqueline@vps709108 ~]$ journalctl -u postfix

Et pour les logs complets :

[jacqueline@vps709108 ~]$ journalctl -u postfix -f

Paramétrage de la configuration générale de postfix

La configuration de Postfix est réalisée à l’aide des fichiers « /etc/postfix/master.cf » et « /etc/postfix/main.cf ». Certains fichiers doivent être créés s’ils n’existent pas.

a) Modification de l’interface d’écoute :

Par défaut, sur GNU/Linux Fedora, postfix écoute uniquement sur le localhost. Cela peut poser problème si l’utilisateur souhaite envoyer un mail depuis un messagerie externe de type mail ou firebird qu’il a installé sur sa machine. Nous allons donc modifier les ip d’écoute en changeant la valeur de la variable inet_interfaces dans le fichier : /etc/postfix/main.cf de cette façon :

[jacqueline@vps709108 ~]$ sudo nano /etc/postfix/main.cf
inet_interfaces = 51.83.40.218,127.0.0.1

Installation de Gitea


Le contrôle des versions distribuées n’a jamais été facile avec git. Git est un logiciel gratuit et open source de versioning qui a été conçu tout type de projets du petits aux très grands avec facilité et rapidité. Git a d’abord été développé par Linus Torvalds qui était également le fondateur du célèbre noyau Linux. Gitea est un impressionnant développement en ligne pour gérer le système de contrôle de version distribué git. Il s’agit d’une application de gestion de dépôts Git basée sur le Web qui comprend des fonctionnalités telles que : les révisions de code, les wikis, le suivi des issues et bien plus encore … La création, la révision, le déploiement, la gestion de codes sont très faciles et rapides avec Gitea. Il peut être hébergé sur son propre serveur.Gitea est un logiciel gratuit et open source complet sous licence MIT. Dans cette partie du tutoriel nous allons voir comment installer Gitea sur notre serveur Gnu/Linux Fedora. Gitea est une forge logiciel libre à source ouverte et une branche de Gogs. C’est un logiciel écrit en langage Go et une alternative auto-hébergeable à Github qui se veut plus légère que Gitlab tant en terme de consommation de ressources qu’en fonctionnalités. Gitea peut être hébergé sur toutes les plates-formes prises en charge par Go , y compris Linux, macOS et Windows.Le projet est financé par Open Collective.

Etape 1 – Installer Gitea

Pour installer Gitea, taper les commandes suivante dans le terminal:

[jacqueline@vps709108 ~]$ sudo useradd git -r --create-home
[jacqueline@vps709108 ~]$ sudo mkdir /opt/gitea
[jacqueline@vps709108 ~]$ sudo chown -R git: /opt/gitea
[jacqueline@vps709108 ~]$ sudo wget -O /opt/gitea/gitea https://dl.gitea.io/gitea/1.10.1/gitea-1.10.1-linux-amd64
[jacqueline@vps709108 ~]$ sudo chmod +x /opt/gitea/gitea
[jacqueline@vps709108 ~]$ sudo -u git bash -c "cd /opt/gitea && ./gitea web"

Le serveur web interne de Gitea démarre sur le port 3000 ….

Etape 2 – Créer la base de donnée gitea

[jacqueline@vps709108 ~]$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE gitea;
MariaDB [(none)]> GRANT all privileges on gitea.* to 'gitea'@'localhost' identified by 'secret_password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;

Etape 3 – Paramétrer le fichier de configuration de gitea : app.ini

[jacqueline@vps709108 ~]$ sudo nano /opt/gitea/custom/conf/app.ini
SSH_DOMAIN       = gitea.famille-brachet.fr DOMAIN           = gitea.famille-brachet.fr HTTP_PORT        = 3000 ROOT_URL         = https://gitea.famille-brachet.fr/

Etape 4 – Créer un sous domaine gitea.famille-brachet.fr

A – Se connecter à MyDnsConfig en tapant l’url suivante : https://www.famille-brachet.fr/mydns-config/

B – Sélectionner le domaine famille-brachet.fr

C – Cliquer sur le bouton « Add New Record » pour ajouter un nouvel enregistrement

D – Ajouter l’enregistrement CNAME : gitea

E – Vérifier que le sous domaine se propage bien à l’aide de la commande dig

[jacqueline@vps709108 ~]$ dig @127.0.0.1 gitea.famille-brachet.fr
[jacqueline@vps709108 ~]$ dig @51.83.40.218 gitea.famille-brachet.fr

Etape 5 – Générer le certificat SSL à l’aide Let’s Encrypt:

[jacqueline@vps709108 ~]$ sudo service httpd stop
[jacqueline@vps709108 ~]$ sudo certbot certonly --standalone -d gitea.famille-brachet.fr
[jacqueline@vps709108 ~]$ sudo service httpd start

Etape 6 – Créer le service Linux Gitea

A – Démarrez le serveur interne de Gitea en tant que service systemd , en créant le fichier /etc/systemd/system/gitea.service .

[jacqueline@vps709108 ~]$ sudo nano /etc/systemd/system/gitea.service
[Unit]
Description=gitea
After=network.target
[Service]
ExecStart=/opt/gitea/gitea web
WorkingDirectory=/opt/gitea
User=git
Type=simple
[Install]
WantedBy=multi-user.target

B – Démarrer le service

[jacqueline@vps709108 ~]$ sudo systemctl daemon-reload
[jacqueline@vps709108 ~]$ sudo systemctl start gitea

B – Vérifier de que le service fonctionne correctement

[jacqueline@vps709108 ~]$ sudo systemctl status gitea

D – Activer le service pour démarre du VPS

[jacqueline@vps709108 ~]$ sudo systemctl enable gitea

Etape 7 – Paramétrer le serveur Web pour héberger Gitea

A – Cas d’Apache 2

On édite le fichier de configuration d’Apache 2:

[jacqueline@vps709108 ~]$ sudo nano /etc/httpd/conf.d/002-gitea.conf
<VirtualHost 51.83.40.218:80>
     ServerName gitea.famille-brachet.fr
     RewriteEngine on
     RewriteCond %{HTTPS} !on
     RewriteRule ^(.*)$ https://gitea.famille-brachet.fr$1 [L,R=301]
</VirtualHost>
 <VirtualHost 51.83.40.218:443>
     ServerAdmin mmebrachet@orange.fr
     ServerName gitea.famille-brachet.fr
     DirectoryIndex  index.php
     SSLEngine on
     SSLCertificateFile /etc/letsencrypt/live/gitea.famille-brachet.fr/cert.pem
     SSLCertificateKeyFile /etc/letsencrypt/live/gitea.famille-brachet.fr/privkey.pem
     SSLCertificateChainFile /etc/letsencrypt/live/gitea.famille-brachet.fr/chain.pem
     SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam_apache.pem"
    SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-> Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" 
      ProxyPreserveHost On 
      ProxyRequests off AllowEncodedSlashes NoDecode 
      ProxyPass / http://localhost:3000/ nocanon 
      ProxyPassReverse / http://localhost:3000/
 </VirtualHost>

On redémarre le service web Apache 2 :

[jacqueline@vps709108 ~]$ sudo service httpd restart

Gitea est dorénavant accessible depuis l’url : https://gitea.famille-brachet.fr/

Etape 8 – lance l’interface web de configuration initiale de Gitea

On tape l’url : https://gitea.famille-brachet.fr/install

A – Paramétrer la configuration de l’accès à la base de données

Renseigner les informations de connexion à la base de données en remplissant le champs manquant du mot de passe. C’est le mot de passe que vous avez donné lors de la création de la base de données Gitea.

  • Type de base de données : Mysql (Nous utilisons MariaDB qui est un fork de Mysql)
  • Hôte : 127.0.0.1:3306
  • Nom d’utilisateur : gitea
  • Mot de passe : Mot de passe de l’utilisateur gitea de la base de données gitea
  • Nom de la base de données : gitea
  • Jeux de caractères : utf8

B- Paramétrer la configutaion générale

  • Titre du site : Gitea de la famille Brachet
  • Emplacement racine des dépôts : /home/git/gitea-repositories
  • Répertoire racine Git LFS : /opt/gitea/data/lfs
  • Exécuter avec le compte d’un autre utilisateur : git
  • Domaine du serveur SSH : gitea.famille-brachet.fr
  • Port du serveur SSH : 6849 (il s’agit du port que l’on modifié lors de l’installation du SSH)
  • Port d’écoute HTTP de Gitea: 3000
  • Url de base de Gitea : https://gitea.famille-brachet.fr/
  • Chemin des fichiers log : /opt/gitea/log

C- Effectuer les paramétrages facultatifs :

On déroule le menu « Paramètres Serveur et Tierce Parties » et on coche les options suivantes :

  • Activer les avatars unifiés
  • Activer le Captcha
  • Autoriser la création d’organisations par défaut
  • Activé le suivi de temps par défaut

On dérouler le menu  » Paramètres de compte administrateur  » pour renseigner les informations concernant le compte administrateur à savoir:

  • Nom d’utilisateur administrateur : christophe
  • Mot de passe : mot de passe de christophe
  • Adresse e-mai : christophe_brachet@sfr.fr

On clique ensuite sur le bouton « installer Gitea » pour effectuer l’installation de Gitea. L’installation terminée, l’utilisateur est redirigé vers le tableau de bord de Gitea :

Créer son premier dépôt sur Gitea et l’utiliser

Cliquer sur le bouton « + » dans la zone « Dépôts » :

On doit ensuite renseigner :

  • Le propriétaire : (ici c’est l’administrateur christophe)
  • Le nom du dépôt : site-famille-brachet
  • La visibilité : public ou privé. En mode privé, il est necessaire d’être connecté pour accéder au dépôt.
  • La description (petit texte qui décrit le dépôt) : Site la famille Brachet développé sous le framework php Zend
  • Il est possible de choisir un fichier .gitignore préformaté :Dans notre cas nous choisissons ZendFramework car notre site est programmé sous ce cadriciel.
  • Il possible de la choisir la license du code parmis une liste préformatée: Nous avons choisi la license MIT qui est très permissive.
  • On laisse le fichier lisez-moi par défaut : REDME.md (il s’agit d’un fichier en markedown qui pourra contenir des informations sur le projet.
  • On cache « Initiliser le dépôt » pour l’initialiser.

Pour lancer la création du dépôt, il suffit de cliquer sur le bouton « Créer un dépôt ». Le dépôt est ensuite crée comme ci-dessous:

Petite astuce, si vous avez perdu le mot de passe d’un compte administrateur , vous pouvez le redéfinir en utilisant la commande suivante depuis votre terminal :

[jacqueline@vps709108 ~]$ sudo -u git bash -c "cd /opt/gitea && ./gitea admin change-password --username christophe --password votre_nouveau_mot_de_passe"