LXD – Apache – multi PHP – ISPconfig


Référence: Ubuntu 22.04 – PHP 8.1 et 7.4

Instructions de configuration du conteneur lxd: lxdvm-ns1

Ce Howto est la suite du tuto: LXD – Configuration de l’hôte et conteneur

Cette portion du howto est une traduction et adaptation de:
howtoforge_perfect-server-ubuntu-20.04-apache2-php-mariadb-pureftpd-bind-dovecot-ispconfig-3

Les commandes de ce tutoriel doivent être exécutées avec les permissions root. Ceci évite d’ajouter sudo devant chacune des commandes. Pour devenir root taper:

sudo -s

Déactiver cloud-init:
touch /etc/cloud/cloud-init.disabled
nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

network: {config: disabled}

Ubuntu 22.04 a configuré notre système de façon à utiliser DHCP.  Il nous faut donc modifier celui-ci afin d’utiliser une adresse IP statique.

sur lxdvm-ns1, configurer le réseau avec une adresse IP fixe:

ls /etc/netplan

>50-cloud-init.yaml

nano /etc/netplan/50-static-public-ip.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.0.4/24]
      nameservers:
        addresses:
          - 192.168.0.6
          - 208.67.220.220
      routes:
        - to: default
          via: 192.168.0.1

Appliquer les changements

netplan apply

Vérifier le résultat des modifications:

ip addr show dev eth0

5: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:16:3e:34:df:eb brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.0.4/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fe34:dfeb/64 scope link 
valid_lft forever preferred_lft forever

 

nano /etc/hosts

127.0.0.1 localhost
192.168.0.4 lxdvm-ns1.infolaf.ca lxdvm-ns1

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

echo lxdvm-ns1 > /etc/hostname
hostname lxdvm-ns1

hostname
hostname -f

Voici la sortie des deux commandes précédentes:

root@lxdvm-ns1:/home/infolaf# hostname
lxdvm-ns1
root@lxdvm-ns1:/home/infolaf# hostname -f
lxdvm-ns1.infolaf.ca

Modifier /etc/apt/sources.list. Mettre en commentaires l’utilisation du CD et s’assurer que les dépôts universe et multiverse sont activés. Voici l’allure attendue après les modifications:

nano /etc/apt/sources.list

deb http://archive.ubuntu.com/ubuntu jammy-updates universe
deb http://archive.ubuntu.com/ubuntu jammy-updates multiverse

apt update
apt full-upgrade
reboot

3. Modifier l’interpréteur de commande par défaut.

/bin/sh est un lien symbolique vers /bin/dash, mais nous souhaitons plutôt /bin/bash, et non pas /bin/dash. Donc lancer la commande suivante:

dpkg-reconfigure dash

Use dash as the default system shell (/bin/sh)? <-- No
Removing 'diversion of /bin/sh to /bin/sh.distrib by dash'
Adding 'diversion of /bin/sh to /bin/sh.distrib by bash'
Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'
Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'

Si cette étape n’est pas respectée, l’installation de ISPConfig échoura.

4. Désactiver AppArmor

service apparmor stop
update-rc.d -f apparmor remove
apt remove apparmor apparmor-utils

5. Synchroniser l’horloge système

apt -y install ntp

6. Installation de Postfix, Dovecot, MariaDB, rkhunter et binutils

Afin d’installer postfix, nous devons être certain que sendmail n’est pas installé et fonctionnel. Pour arrêter et retirer sendmail, exécuter cette commande:

service sendmail stop; update-rc.d -f sendmail remove

Le message d’erreur:

Failed to stop sendmail.service: Unit sendmail.service not loaded.

est normal, celui-ci indique simplement que sendmail n’était pas installé et qu’il n’y a donc rien à retirer.

Installons Postfix, Dovecot, MariaDB (remplace MySQL), rkhunter, et binutils:

 

 

 

 

apt -y install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail6 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve sudo patch

Les questions suivantes seront posées:

General type of mail configuration: <-- Internet Site
System mail name: <-- lxdvm-ns1.infolaf.ca

Il est important d’utiliser un sous domaine comme « system mail name » tel que server1.example.com ou server1.yourdomain.com et non pas un domaine qui sera utilisé comme domaine de courriel (c.à.d. yourdomain.tld) dans une étape ultérieure.

Ensuite, ouvrons les ports (submission ports) requis pour les connexion SSL-TLS dans Postfix:

nano /etc/postfix/master.cf

Décommenter les sections submission et smtps telle qu’indiquée et ajouter la ligne suivante aux deux sections et laisser tout le reste en commentaires.

 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
[...]
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
[...]

NOTE: L’absence d’espaces vides devant les lignes « -o ….  » est important!

Redémarrage de Postfix suite aux modifications:

service postfix restart

MySQL doit être à l’écoute de toutes les interfaces, pas seulement localhost. En conséquence, éditons /etc/mysql/mariadb.conf.d/50-server.cnf et commenter la ligne bind-address = 127.0.0.1:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1

[...]

 

La méthode d’authentification est maintenant différente pour MariaDB.  Il n’y a plus de mot de passe root et donc pas de sécurisation à effectuer lors de l’installation comme au paravant.

ISPconfig requiert un utilisateur et un mot de passe pour MariaDB lors de l’installation.

Définir la méthode d’authentification par mot de passe (password authentication method) pour MariaDB à native ainsi, nous pourrons plus tard utiliser ISPconfig et PHPMyAdmin pour se connecter comme utilisateur root:

mysql
ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD("votremotdepasse");
\q

Normalement mySQL refusera la connection:
mysql

Normalement mySQL acceptera la connection:
mysql -pvotremotdepasse

Ouvrir le fichier /etc/security/limits.conf avec l’éditeur nano:

nano /etc/security/limits.conf

Ajouter les lignes suivantes à la fin du fichier.

mysql soft nofile 65535
mysql hard nofile 65535

Ensuite, créer un nouveau répertoire /etc/systemd/system/mysql.service.d/

mkdir /etc/systemd/system/mysql.service.d/

Créer un nouveau fichier dans ce répertoire:

nano /etc/systemd/system/mysql.service.d/limits.conf

copier les lignes suivantes dans ce fichier:

[Service]
LimitNOFILE=infinity

Enregistrer et fermer l’éditeur nano.

Ajouter des paramètres à my.cnf
nano /etc/mysql/my.cnf

max_allowed_packet = 128M

[mysqld]
wait_timeout = 86400
interactive_timeout = 86400
innodb_log_file_size = 128MB

Rechargeons systemd et effectuons un redémarrage de MariaDB:

systemctl daemon-reload
service mariadb restart

Vérifions que la connexion réseau pour MySQL est bien active avec la commande suivante:

netstat -tap | grep mysql

La sortie de cette commande doit ressembler à ceci:

tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 234/mariadbd 
tcp6 0 0 [::]:mysql [::]:* LISTEN 234/mariadbd

 

7. Installation de Amavisd-new, SpamAssassin et Clamav
apt -y install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl postgrey

Lors de l’installation d’ISPConfig 3, amavisd est installé et les librairies de filtres de SpamAssassin sont alors chargées, nous pouvons donc arrêter SpamAssassin pour libérer un peu de RAM:

service spamassassin stop
update-rc.d -f spamassassin remove

Démarrer ClamAV:

freshclam
service clamav-daemon start

Cette erreur peut être ignorée lors du premier démarrage de freshclam.

ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
8. Installation d’Apache, PHP, phpMyAdmin, FCGI, SuExec, Pear

Apache 2, PHP 8.1, PHP 7.4, phpMyAdmin, FCGI, suExec et Pear sont intallés comme suit:

Ajouter le dépôt pour avoir accès à PHP 7.4 ainsi que des mises à jour pour PHP 8.1
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt full-upgrade

apt -y install apache2 apache2-doc apache2-utils libapache2-mod-php php8.1 php8.1-common php8.1-gd php8.1-mysql php8.1-imap phpmyadmin php8.1-cli php8.1-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear libruby libapache2-mod-python php8.1-curl php8.1-intl php8.1-pspell php8.1-sqlite3 php8.1-tidy php8.1-xmlrpc php8.1-xsl memcached php-memcache php-imagick php8.1-zip php8.1-mbstring php-soap php8.1-soap php8.1-opcache php-apcu php8.1-fpm libapache2-reload-perl
apt -y install php7.4 php7.4-cli php7.4-cgi php7.4-fpm php7.4-gd php7.4-mysql php7.4-imap php7.4-curl php7.4-intl php7.4-pspell php7.4-sqlite3 php7.4-tidy php7.4-xmlrpc php7.4-xsl php7.4-zip php7.4-mbstring php7.4-soap php7.4-opcache php7.4-common php7.4-json php7.4-readline php7.4-xml

Répondre aux questions suivantes:

Web server to reconfigure automatically: <-- apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter
Password of the database's administrative user: <-- root mysql password

Afin d’être en mesure d’importer de grosses tables dans phpmyadmin, il faut faire les ajustements suivants au fichier php.in
sudo nano /etc/php/8.1/apache2/php.ini

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
memory_limit = 512M

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

upload_max_filesize = 10G
post_max_size = 10G

Il faut aussi modifier cette configuration pour PHP-FPM 7.4
sudo nano /etc/php/7.4/fpm/php.ini

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
memory_limit = 512M

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

upload_max_filesize = 10G
post_max_size = 10G

restart php7.4-fpm.service
restart php8.1-fpm.service

Vérier que PHP 8.1 est bien la version qui tourne par défaut pour Apache:
php --version

Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.9, Copyright (c), by Zend Technologies

Si requis ajuster PHP 8.1 comme version par défaut:

update-alternatives --config php
update-alternatives --config php-cgi
update-alternatives --config php-fpm.sock
systemctl restart apache2.service

Vérifier les versions PHP disponible sur le système
ls -al /etc/php

total 11
drwxr-xr-x   4 root root   4 déc 21 21:22 .
drwxr-xr-x 130 root root 242 déc 21 19:26 ..
drwxr-xr-x   6 root root   6 déc 21 21:22 7.4
drwxr-xr-x   7 root root   7 déc 20 16:04 8.1

Vérifier les versions PHP actives sur le système
ls -al /run/php

total 8
drwxr-xr-x  2 www-data www-data 140 déc 22 15:03 .
drwxr-xr-x 31 root     root     920 déc 22 12:01 ..
-rw-r--r--  1 root     root       6 déc 22 15:03 php7.4-fpm.pid
srw-rw----  1 www-data www-data   0 déc 22 15:03 php7.4-fpm.sock
-rw-r--r--  1 root     root       3 déc 21 21:29 php8.1-fpm.pid
srw-rw----  1 www-data www-data   0 déc 21 19:57 php8.1-fpm.sock
lrwxrwxrwx  1 root     root      30 déc 21 19:57 php-fpm.sock -> /etc/alternatives/php-fpm.sock

C’est possible de vérifier que PHPMyAdmin est fonctionnel:

http://192.168.0.4/phpmyadmin/

 

Exécuter les commandes suivantes pour activer les modules Apache: suexec, rewrite, ssl, actions et include (plus dav, dav_fs et auth_digest si vous désirez utiliser WebDAV):

a2enmod suexec rewrite ssl actions include cgi alias proxy_fcgi

a2enmod dav_fs dav auth_digest headers

Pour s’assurer que le serveur ne puisse pas être attaqué via la vulnerabilité HTTPOXY, désactiver globalement l’entête HTTP_PROXY dans apache. Créer un nouveau fichier httpoxy.conf file avec nano:

nano /etc/apache2/conf-available/httpoxy.conf

Coller les lignes suivantes ans le fichier:

<IfModule mod_headers.c>
RequestHeader unset Proxy early
</IfModule>

Activer le fichier de configuration:

a2enconf httpoxy

Redémarrer Apache:

service apache2 restart

Si vous voulez héberger sur vos sites crées avec ISPConfig, des fichiers Ruby avec l’extension .rb, vous devez mettre en commentaire la ligne application/x-ruby rb in /etc/mime.types:

nano /etc/mime.types

[...]
#application/x-ruby rb
[...]

(Ceci n’est requis que pour les fichiers .rb; Les fichiers Ruby avec l’extension .rbx fonctionnent « out of the box ».)

Redémarrer Apache:

service apache2 restart

9. Installation de Let’s Encrypt

ISPConfig 3.2 supporte nativement la création de certificat SSL gratuit « Certificate Authority Let’s encrypt ». La fonction de création Let’s Encrypt vous permet de générer vos certificats SSL gratuits pour vos sites web directement dans ISPConfig.

Ajoutons le support pour Let’s encrypt.

apt install certbot

10. Mailman pas requis dans ce projet
11. Installation de PureFTPd

PureFTPd et quota peuvent être installés avec la commande suivante:

apt -y install pure-ftpd-common pure-ftpd-mysql

Édition du fichier /etc/default/pure-ftpd-common

nano /etc/default/pure-ftpd-common

… vérifier que mode de démarrage est ajusté sur « standalone » et ajusté VIRTUALCHROOT=true:

[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

Configurons PureFTPd pour permettre les sessions FTP et TLS.  FTP est un protocol vraiment non sécuritaire parce que tous les mots de passe et données sont transférés en texte clair.  En utilisant plutôt TLS, l’ensemble des communications sont cryptées et donc beaucoup plus sécuritaire.

echo 1 > /etc/pure-ftpd/conf/TLS

Pour permettre l’utilisation de TLS, nous devons créer un certificat SSL. Le certificat sera créé dans le répertoire /etc/ssl/private/, donc il faut au préalable créer celui-ci:

mkdir -p /etc/ssl/private/

Ensuite, la création du certificat SSL:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:QC
Locality Name (eg, city) []:Lachine
Organization Name (eg, company) [Internet Widgits Pty Ltd]:infolaf
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:lxdvm-ns1.infolaf.ca
Email Address []:postmaster@infolaf.ca

Modification des permissions du certificat SSL:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Re-démarrage de PureFTPd:

service pure-ftpd-mysql restart

12. Installation de BIND DNS Server

BIND sera installé comme suit:

apt -y install bind9 dnsutils haveged

Activer et démarrer le service haveged:

systemctl enable haveged
systemctl start haveged

13. Installation de Vlogger, Webalizer, AWStats et GoAccess

Vlogger, Webalizer, and AWStats seront installés comme suit:

apt -y install vlogger webalizer awstats geoip-database libclass-dbi-mysql-perl

Installer la version la plus récente de GoAccess directement de son dépot:

echo "deb https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/goaccess.gpg add -
sudo apt update
sudo apt install goaccess

Ouvrir ensuite /etc/cron.d/awstats

nano /etc/cron.d/awstats

… mettre en commentaires l’ensemble des lignes:

#MAILTO=root

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# Generate static reports:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh
14. Installation de Jailkit

Jailkit est utilisé par ISPConfig pour confiner le shell des utilisateurs et les cronjobs.

apt -y install jailkit

15. Installation de fail2ban et UFW

Ceci est optionel mais recommandé car ISPConfig monitor traite les logs:

apt -y install fail2ban

Afin que fail2ban observe les services PureFTPd et Dovecot, Créer le fichier /etc/fail2ban/jail.local:

nano /etc/fail2ban/jail.local

[pure-ftpd]
enabled = true
port = ftp
filter = pure-ftpd
logpath = /var/log/syslog
maxretry = 3

[dovecot]
enabled = true
filter = dovecot
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

[postfix]
enabled = true
port = smtp
filter = postfix
logpath = /var/log/mail.log
maxretry = 3

Redémarrer fail2ban:

service fail2ban restart

Pour l’installation du coupe-feu UFW, exécuter cette commande:

apt-get install ufw

16. Installation de Roundcube Webmail – Non requis dans ce projet
17. Installation de ISPConfig 3.2

Utilisons la version stable de ISPConfig 3.2

cd /tmp
wget -O ispconfig.tar.gz https://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ispconfig.tar.gz
cd ispconfig3*/install/

L’étape suivante est d’éxécuter:

php -q install.php

Ceci va démarrer l’installation de ISPConfig 3. L’assistant d’installation va configurer pour vous tout les services comme Postfix, Dovecot, etc.

# php -q install.php

--------------------------------------------------------------------------------
_____ ___________ _____ __ _ ____
|_ _/ ___| ___ \ / __ \ / _(_) /__ \
| | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ /
| | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ |
_| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \
\___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/
__/ |
|___/
--------------------------------------------------------------------------------

>> Initial configuration

Operating System: Ubuntu 20.04.1 LTS (Focal Fossa)

Following will be a few questions for primary configuration so be careful.
Default values are in [brackets] and can be accepted with <ENTER>.
Tap in "quit" (without the quotes) to stop the installer.

Select language (en,de) [en]: <-- Hit Enter

Installation mode (standard,expert) [standard]: <-- Hit Enter

Full qualified hostname (FQDN) of the server, eg server1.domain.tld [server1.canomi.com]: <-- Hit Enter

MySQL server hostname [localhost]: <-- Hit Enter

MySQL server port [3306]: <-- Hit Enter

MySQL root username [root]: <-- Hit Enter

MySQL root password []: <-- Enter your MySQL root password

MySQL database to create [dbispconfig]: <-- Hit Enter

MySQL charset [utf8]: <-- Hit Enter

Configuring Postgrey
Configuring Postfix
Generating a 4096 bit RSA private key
.......................................................................++
........................................................................................................................................++
writing new private key to 'smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- Enter 2 letter country code
State or Province Name (full name) [Some-State]: <-- Enter the name of the state
Locality Name (eg, city) []: <-- Enter your city
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter company name or press enter
Organizational Unit Name (eg, section) []: <-- Hit Enter
Common Name (e.g. server FQDN or YOUR name) []: <-- Enter the server hostname, in my case: server1.example.com
Email Address []: <-- Hit Enter
Configuring Mailman
Configuring Dovecot
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring BIND
Configuring Jailkit
Configuring Pureftpd
Configuring Apache
Configuring vlogger
Configuring Metronome XMPP Server
writing new private key to 'localhost.key'
-----
Country Name (2 letter code) [AU]: <-- Enter 2 letter country code
Locality Name (eg, city) []: <-- Enter your city
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter company name or press enter
Organizational Unit Name (eg, section) []: <-- Hit Enter
Common Name (e.g. server FQDN or YOUR name) [server1.canomi.com]: <-- Enter the server hostname, in my case: server1.example.com
Email Address []: <-- Hit Enter

Configuring Ubuntu Firewall
Configuring Fail2ban
[INFO] service OpenVZ not detected
Configuring Apps vhost
Installing ISPConfig
ISPConfig Port [8080]:

Admin password [admin]:

Do you want a secure (SSL) connection to the ISPConfig web interface (y,n) [y]: <-- Hit Enter

Generating RSA private key, 4096 bit long modulus
.......................++
................................................................................................................................++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- Enter 2 letter country code
State or Province Name (full name) [Some-State]: <-- Enter the name of the state
Locality Name (eg, city) []: <-- Enter your city
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter company name or press enter
Organizational Unit Name (eg, section) []: <-- Hit Enter
Common Name (e.g. server FQDN or YOUR name) []: <-- Enter the server hostname, in my case: server1.example.com
Email Address []: <-- Hit Enter

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <-- Hit Enter
An optional company name []: <-- Hit Enter
writing RSA key

Symlink ISPConfig LE SSL certs to postfix? (y,n) [y]: <-- Hit Enter

Symlink ISPConfig LE SSL certs to pureftpd? Creating dhparam file takes some times. (y,n) [y]: <-- Hit Enter

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.............................................................+.........................................................................................................................................................................+...................

Configuring DBServer
Installing ISPConfig crontab
no crontab for root
no crontab for getmail
Detect IP addresses
Restarting services ...
Installation completed.

Il n’y a aucune configuration manuelle à effectuer car l’assistant d’installation a effectuée toute les configurations automatiquement.

Vous pouvez dorénavent accéder à ISPConfig 3 à l’URL: http(s)://server1.example.com:8080/ ou http(s)://192.168.0.4:8080/ (HTTP ou HTTPS selon des choix effectués durant l’installation). Authentifiez-vous avec l’utilisateur « admin » en utilisant le mot de passe « admin » (vous devez changer le mot de passe par défaut une fois votre première connexion à ISPConfig):

Activer PHP versions dans ISPConfig

Dans l’interface d’ISPConfig 3, Il est possible de configurer une version additionelle de PHP sous l’onglet System > Additional PHP Versions.

Indiquer:

PHP Name:PHP 7.4

onglet FastCGI settings:

Path to the PHP FastCGI binary:php-cgi7.4
Path to the php.ini directory:/etc/php/7.4/cgi

onglet PHP-FPM settings:

Path to the PHP-FPM init script:php-cgi7.4
Path to the php.ini directory:/etc/php/7.4/fpm
Path to the PHP-FPM pool directory:/etc/php/7.4/fpm/pool.d
PHP-FPM socket directory: laissez vide

18. Installation de rsync sur lsdvm-ns1 afin d’assurer la sauvegarde des sites, fichiers de configuration.

Cette étape, vient compléter la première étape réalisé sur la machine physique qui héberge le conteneur

apt install rsync

nano /etc/rsyncd.conf

Sauvegarder et fermer

cp /lib/systemd/system/rsync.service /etc/systemd/system/rsync.service

Redémarrer le service.

systemctl restart rsync

nano /etc/rsyncd.conf

log file = /var/log/rsync.log

[cumulus]
uid = web1
gid = client1
path = /var/www/clients/client1/web1/web
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup cumulus.infolaf.net
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[photos]
uid = web2
gid = client1
path = /var/www/clients/client1/web2/web
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup photos.infolaf.ca
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[matomo]
uid = web3
gid = client1
path = /var/www/clients/client1/web3/web
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup matomo.infolaf.ca
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[courriel]
uid = vmail
gid = vmail
path = /var/vmail
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup courriel
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[mysql]
uid = infolaf
gid = infolaf
path = /home/infolaf/backups/mysql_DB
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup mysql
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[scripts_NS1]
uid = infolaf
gid = infolaf
path = /home/infolaf/scripts/
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup scripts_NS1
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[rsync_NS1]
uid = root
gid = root
path = /etc/
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup rsync_NS1
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[bind_NS1]
uid = root
gid = root
path = /etc/bind
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup bind_NS1
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[crontab_NS1]
uid = root
gid = root
path = /var/spool/cron/crontabs/
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup crontab_NS1
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

[www-full]
uid = root
gid = root
path = /var/www/
hosts allow = 192.168.0.11 #ici votre IP
comment = Backup full path of www disk
read only = true
auth users = test
secrets file = /etc/rsyncd.scrt

Le fichier secret /etc/rsyncd.scrt devra contenir dans cet exemple les permissions 640:

personne1:motdepasse1
personne2:motdepasse2

nano /etc/rsyncd.scrt

test:votremotdepasse

chmod 640 /etc/rsyncd.scrt

Vous pouvez maintenant lancer rsync:

service rsync start

Redevenir un utilisateur normal pour ne pas créer les fichiers suivants comme root

exit

mkdir -p /home/infolaf/backups/mysql_DB

mkdir /home/infolaf/scripts/

nano /home/infolaf/scripts/backup_mysql.sh

#mysql> -uroot -p<motdepasse> -e FLUSH TABLES WITH READ LOCK;
mysqldump -uroot -p<motdepasse> --databases c1photos > /home/infolaf/backups/mysql_DB/c1photos.sql
mysqldump -uroot -p<motdepasse> --databases dbispconfig > /home/infolaf/backups/mysql_DB/dbispconfig.sql
mysqldump -uroot -p<motdepasse> --databases c1matomo > /home/infolaf/backups/mysql_DB/c1matomo.sql
mysqldump -uroot -p<motdepasse> --databases c1nextcloud > /home/infolaf/backups/mysql_DB/c1nextcloud.sql
#mysql> -uroot -p<motdepasse> -e UNLOCK TABLES;

echo "Bonjour,"
echo ""
echo "Ce message vous confirme que les bases de donnees MySQL de vos sites web sont bien sauvegardee localement dans ~/backups/mysql_DB/"
echo ""
echo "La sauvegarde sera complete lorsque host1 lancera son script de sauvegarde des sites web"
echo ""
echo "Message produit par le script de sauvegarde execute par CRON sur infolaf@192.168.0.4"

chmod 777 /home/infolaf/scripts/backup_mysql.sh

Nons n’avons pas à créer le fichier de mot de passe d’exécution automatique. Car rsync n’est pas lancer de lxdvm-ns1

et on ajoute les commandes suivantes dans crontab :

crontab -e

# m h dom mon dow command
MAILTO=root
00 00 * * 0-7 sh /home/infolaf/scripts/backup_mysql.sh