Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tech:sql-01 [23/10/2025 17:09] – [Paquets installés] LibertAdmintech:sql-01 [23/10/2025 17:36] (Version actuelle) – [Routage et filtrage avec iptables] LibertAdmin
Ligne 79: Ligne 79:
 Le paquet ''iptables-persistent'' doit avoir été installé pour conserver les modifications du pare-feu entre chaque redémarrage. Le paquet ''iptables-persistent'' doit avoir été installé pour conserver les modifications du pare-feu entre chaque redémarrage.
  
-Il est bien sûr extrêmement important de sécuriser SSH : interdire le login root avec mot de passe, utiliser de bons algorithmes de chiffrement, changer le port, n'autoriser qu'une IP distante (ou mieux, ne rien autoriser depuis internet et utiliser un VPN) et mettre en place un faux serveur SSH pour que les attaquants perdent leur temps à essayer de se connecter, sans vous faire perdre le vôtre (et ajouter un Fail2Ban évidemment). La recette reste secrète, désolé ! ;-) +Pour IPv4, nous n'avons besoin d'aucune règle, cette machine est uniquement accessible au réseau local.
- +
-Cela dit, pour information une configuration similaire à la suivante est en place : +
- +
-<code bash> +
-# /etc/ssh/sshd_config.d/liberta.conf +
- +
-# Common parameters: +
-Port <un_port> +
-Port <un_autre_port> +
-AcceptEnv LANG LC_*  +
-ChallengeResponseAuthentication no  +
-KbdInteractiveAuthentication no +
-PrintMotd no +
-PasswordAuthentication no +
-Subsystem sftp /usr/lib/openssh/sftp-server +
-UsePAM yes  +
-X11Forwarding no +
- +
-# Port <un_port> configuration for IPv4/IPv6: +
-Match Address="<adresse_ipv4_de_confiance>,127.0.0.0/8,<adresse_ipv6_de_confiance>,fd00::/8" LocalPort=<un_port> +
-    AllowUsers root <utilisateurice_de_confiance> +
- +
-# Port <un_autre_port> configuration for IPv4/IPv6: +
-Match LocalPort=<un_autre_port> +
-    AllowUsers <utilisateurice_de_confiance> +
-</code> +
- +
-Pour IPv4, l'hyperviseur s'occupe déjà de tout router et rediriger, nous n'avons besoin d'aucune règle.+
  
 En revanche, nous disposons d'une IPv6 routable et exposée sur internet ! Nous devons donc avoir des règles de pare-feu actives. Dans ''/etc/iptables-persistent/rules.v6'' : En revanche, nous disposons d'une IPv6 routable et exposée sur internet ! Nous devons donc avoir des règles de pare-feu actives. Dans ''/etc/iptables-persistent/rules.v6'' :
Ligne 729: Ligne 701:
 ==== Sauvegardes des bases ==== ==== Sauvegardes des bases ====
  
 +La plus critique et souvent la plus négligée des tâches est souvent cette partie, étrangement (Liberta en fait aussi partie et a déjà eu quelques sueurs froides par le passé).
 +
 +Nous utiliserons les outils standards fournis par MariaDB et PostgreSQL, bien plus fiables et adaptés que si nous avions compté sur nos partages ZFS (entre les contraintes de NFS et la multitude de paramètres de ZFS pour s'adapter au stockage de bases de données, nous avons choisi le plus simple et le plus fiable).
 +
 +Ici les prénoms ont été modifiés pour préserver leur confidentialité :)
 === MySQL/MariaDB === === MySQL/MariaDB ===
  
-== PostgreSQL ===+Nous utilisons le paquet ''mariadb-backup'', lequel permet de faire nos sauvegardes complètes des bases sans avoir à suspendre ou verrouiller nos bases. 
 + 
 +Nous avons créé dans MySQL un « super admin » qui peut accéder à toutes les bases : 
 + 
 +<code bash> 
 +mysql 
 +MariaDB [(none)]> CREATE USER 'libertasuperuser'@'%' IDENTIFIED BY 'motdepassecomplexe'; 
 +MariaDB [(none)]> grant all privileges on *.* to 'libertasuperuser'@'%' with grant option; 
 +MariaDB [(none)]> flush privileges; 
 +</code> 
 + 
 +Notre tâche planifiée qu'on créé dans une tâche ''cron''. Nous gardons les 7 derniers jours localement pour en disposer facilement en cas de coup dur, ensuite ce sont nos snapshots ZFS qui s'occupent du reste : 
 + 
 +<code bash> 
 +@daily find /mysql_backups/ -type d -ctime +7 -exec rm -rf {}+ && mariadb-backup --backup --target-dir=/mysql_backups/$(date +"%Y%m%d-%H%M%S") --user='libertasuperuser' --password='motdepassecomplexe' 
 +</code> 
 + 
 + 
 +=== PostgreSQL === 
 + 
 +Pour PostgreSQL, il faut également créer un « super-admin » avec tous les droits et corriger les droits et permissions.  
 +Notre serveur écoute sur son IPv4 192.168.10.6 et notre super admin doit disposer des droits de réplication pour que ''pg_basebackup'' fonctionne : 
 + 
 +<code bash> 
 +su - postgres  
 +postgres@sql-01:~$ psql 
 +postgres=# CREATE USER libertasuperuser WITH SUPERUSER; 
 +postgres=# ALTER USER libertasuperuser WITH PASSWORD 'motdepassecomplexe'; 
 +postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO libertasuperuser; 
 +postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO libertasuperuser; 
 +postgres=# ALTER ROLE libertasuperuser WITH REPLICATION; 
 +postgres=# SELECT rolreplication FROM pg_roles WHERE rolname = 'libertasuperuser'; 
 +postgres=# \q 
 +</code> 
 + 
 +Dans ''/etc/postgresql/<version>/main/pg_hba.conf'', nous définissons les permissions : 
 + 
 +<code bash> 
 +# "local" is for Unix domain socket connections only 
 +local   all             all                                     peer 
 +# IPv4 local connections: 
 +host    all             all             127.0.0.1/32            scram-sha-256 
 +# IPv6 local connections: 
 +host    all             all             ::1/128                 scram-sha-256 
 +# On permet à Peertube de se connecter : 
 +host    all             all             192.168.10.5/32           md5 
 +# On permet à Funkwhale de se connecter : 
 +host    all             all             192.168.10.9/32           md5 
 +# On permet à Zabbix/OpenObserve de se connecter : 
 +host    all             all             192.168.10.250/32         md5 
 +# On permet au superadmin de se connecter localement : 
 +host    all             libertasuperuser  127.0.0.1/32            md5 
 + 
 +# Allow replication connections from localhost, by a user with the 
 +# replication privilege. 
 +local   replication     all                                     peer 
 +host    replication     all             127.0.0.1/32            scram-sha-256 
 +host    replication     all             ::1/128                 scram-sha-256 
 +host    replication     libertasuperuser     192.168.10.6/32     md5 
 +</code> 
 + 
 +Nous utilisons l'outil fourni en standard ''pg_basebackup'' dans une tâche planifiée ''cron'' pour l'utilisateur standard ''postgres''. Idem que pour MySQL, nous conservons 7 jours en local et les snapshots ZFS s'occupent du reste : 
 + 
 +<code bash> 
 +export PGPASSWORD='motdepassecomplexe' && pg_basebackup -h 192.168.10.6 --username=libertasuperuser --no-password -D /postgresql_backups/$(date +"%Y%m%d-%H%M%S"
 +</code> 
 +