Projet

Général

Profil

Audit » Historique » Version 5

David Mercereau, 08/06/2026 16:45

1 4 David Mercereau
# Audit de l'existant et relevé technique - serveur srv2 le  28/05/2026
2 2 David Mercereau
3 4 David Mercereau
## Synthèse
4 1 David Mercereau
5 4 David Mercereau
Le serveur actuel est un dédié ancien hébergeant plusieurs sites PHP, MariaDB, Postfix pour le mail sortant, OpenDKIM, et des sauvegardes Duplicity vers Scaleway. La migration est techniquement justifiée : Ubuntu 21.04, PHP 7.4, Apache/MariaDB/Postfix issus de cette génération, et plusieurs éléments de sécurité/maintenabilité sont dégradés.
6
7
Les ressources matérielles actuelles sont largement au-dessus de la volumétrie observée : environ 17 Go utilisés sur `/`, 4,6 Go sur `/srv`, 1,4 Go de données MariaDB, 2,3 Go de sites, 1,9 Go de dumps SQL locaux. CPU et RAM ne sont pas saturés au moment de l'audit. Un futur serveur de taille nettement inférieure peut probablement suffire, sous réserve de confirmer le trafic réel via les journaux Apache et mail, non accessibles avec l'utilisateur fourni.
8
9
Points critiques : 
10
11
- PHP 7.4 utilisé
12
- OS Ubuntu plus mis à jour et deprecated
13
- `apache2ctl configtest` échoue : certificat manquant ou vide pour `ess-et-societe.net`; un reload/redémarrage Apache risque donc d'échouer.
14
- MariaDB écoute sur `0.0.0.0:3306` et le port 3306 est ouvert depuis Internet.
15
16
- SSH autorise `PermitRootLogin yes` et `PasswordAuthentication yes`.
17
- Les sauvegardes Scaleway échouent actuellement avec une erreur GPG `Unusable public key`; les derniers logs indiquent `Last full backup date: none`.
18
- `freshclam` est en échec depuis le 2026-05-12; ClamAV n'est donc pas un filet de sécurité opérationnel à ce stade.
19
- Plusieurs répertoires applicatifs sont possédés par `www-data`, certains sont apache-writable, et `www-data` dispose d'un shell `/bin/bash`.
20
- Pas d'anti-spam sortant
21
22
## Système et matériel
23
24
| Élément      | Valeur observée                           |
25
| ------------ | ----------------------------------------- |
26
| Hostname     | `srv2`                                    |
27
| OS           | Ubuntu 21.04 Hirsute                      |
28
| Noyau        | `5.11.0-49-generic`, build janvier 2022   |
29
| Architecture | x86_64                                    |
30
| CPU          | Intel Xeon E3-1225 v2, 4 coeurs, 3.20 GHz |
31
| RAM          | 15 GiB                                    |
32
| Swap         | 1,5 GiB                                   |
33
| Uptime       | 20 jours au moment du relevé              |
34
| IP publique  | `94.23.62.195`                            |
35
| IPv6         | `2001:41d0:2:3fc3::1/56`                  |
36
37
Stockage :
38
39
| Montage |   FS | Taille | Utilisé | Libre | Usage |
40
| ------- | ---: | -----: | ------: | ----: | ----: |
41
| `/`     | ext4 |    96G |     17G |   75G |   19% |
42
| `/boot` | ext4 |   488M |    252M |  206M |   56% |
43
| `/srv`  | ext4 |   3.4T |    4.6G |  3.3T |    1% |
44
45
Disques et RAID :
46
47
- 3 disques HDD d'environ 1,8 To : `sda`, `sdb`, `sdc`.
48
- `/boot` et `/` en RAID1 logiciel sur 3 disques.
49
- `/srv` en RAID5 logiciel sur 3 disques.
50
- `/proc/mdstat` indique les grappes en état `[UUU]`, donc pas de disque manquant détecté.
51
52
Charge observée :
53
54
- Load autour de `0.8` sur 4 coeurs.
55
- CPU instantané autour de 90% idle lors des mesures courtes.
56
- RAM : environ 3,5 GiB utilisés, 11 GiB disponibles.
57
- MariaDB utilise environ 18% de RAM, avec `innodb_buffer_pool_size = 2G`.
58
- Réseau instantané faible pendant l'audit, environ 90 KiB/s sortant sur l'interface publique.
59
60
## Ports et exposition réseau
61
62
Ports en écoute côté serveur :
63
64
|      Port | Écoute            | Usage                      |
65
| --------: | ----------------- | -------------------------- |
66
|    80/tcp | `*:80`            | HTTP Apache                |
67
|   443/tcp | `*:443`           | HTTPS Apache               |
68
|   499/tcp | `0.0.0.0` et IPv6 | SSH                        |
69
|    25/tcp | `0.0.0.0` et IPv6 | SMTP Postfix               |
70
|   587/tcp | `0.0.0.0` et IPv6 | Submission Postfix         |
71
|  3306/tcp | `0.0.0.0`         | MariaDB                    |
72
|  9100/tcp | `127.0.0.1`       | métriques `noderig`        |
73
| 12301/tcp | `127.0.0.1`       | milter OpenDKIM            |
74
|   525/tcp | `127.0.0.1`       | service SMTP local Postfix |
75
76
Scan externe ponctuel depuis la machine d'audit :
77
78
|     Port | État externe |
79
| -------: | ------------ |
80
|   25/tcp | filtered     |
81
|   80/tcp | open         |
82
|  443/tcp | open         |
83
|  499/tcp | open         |
84
|  587/tcp | open         |
85
| 3306/tcp | open         |
86
87
Constat important : MariaDB est accessible depuis Internet sur `3306/tcp`. Même avec authentification forte, ce port devrait être fermé publiquement sauf besoin applicatif externe explicitement justifié.
88
89
## Services principaux
90
91
Services actifs notables :
92
93
- `apache2`
94
- `php7.4-fpm`
95
- `mariadb`
96
- `postfix`
97
- `opendkim`
98
- `saslauthd`
99
- `cron`
100
- `smartmontools`
101
- `mdmonitor`
102
- `beamium`
103
- `noderig`
104
- `snapd`
105
- `ssh`
106
- `rsyslog`
107
108
## Apache, PHP et sites web
109
110
Problème de configuration critique :
111
112
```text
113
apache2ctl configtest
114
AH00526: Syntax error on line 21 of /etc/apache2/sites-enabled/00-root-le-ssl.conf:
115
SSLCertificateFile: file '/etc/letsencrypt/live/ess-et-societe.net/fullchain.pem' does not exist or is empty
116 1 David Mercereau
```
117
118 4 David Mercereau
L'Apache actuellement en mémoire tourne, mais la configuration sur disque ne passe pas un configtest. Toute opération `reload`, `restart`, renouvellement certbot avec hook Apache, ou migration automatisée qui valide la conf peut échouer.
119 1 David Mercereau
120 4 David Mercereau
Vhosts et applications identifiés :
121
122
| Domaine                     | Racine                      | Application probable                        |              Taille |
123
| --------------------------- | --------------------------- | ------------------------------------------- | ------------------: |
124
| `ess-et-societe.net`        | `/srv/sites/actu/`          | SPIP 3.2.19, redirection vers `www`         |                564M |
125
| `www.ess-et-societe.net`    | `/srv/sites/actu/`          | SPIP 3.2.19                                 |                564M |
126
| `chocteau.eu`               | `/srv/sites/chocteaudoteu/` | SPIP 3.2.19, redirection vers `www`         |                208M |
127
| `www.chocteau.eu`           | `/srv/sites/chocteaudoteu/` | SPIP 3.2.19                                 |                208M |
128
| `foad.chocteau.eu`          | `/srv/sites/foad/`          | SPIP 3.2.19                                 |                219M |
129
| `lettre.ess-et-societe.net` | `/srv/sites/lettres/`       | outil de mailing PHP, version interne 2.0.5 |                593M |
130
| `poche.ess-et-societe.net`  | `/srv/sites/poche/web`      | wallabag 2.4.3                              |                314M |
131
| `groot.ess-et-societe.net`  | `/srv/sites/groot/`         | phpMyAdmin/sql-webui 4.9.0, auth Apache     |                108M |
132
| `srv2.ess-et-societe.net`   | `/var/www/html/`            | vhost technique/default                     | non mesuré finement |
133
| `nuage.chocteau.eu`         | `/srv/sites/nuage/`         | racine quasi vide                           |                  4K |
134
| `rss.chocteau.eu`           | `/srv/sites/rss/`           | Leed RSS 1.8.4 dev                          |                 30M |
135
136
Permissions web notables :
137
138
- `/srv/sites` appartient globalement à `www-data:www-data`.
139
- Répertoires apache-writable détectés : `/srv/sites/foad`, `/srv/sites/foad/lib`, `/srv/sites/actu/lib`, `/srv/sites/chocteaudoteu/lib`.
140
- `www-data` a pour home `/var/www` et shell `/bin/bash`, avec un dossier `.ssh` présent. À reprendre plus proprement sur le nouveau serveur.
141
142
### Analyse trafic/log
143
144
Nombre de requêtes par log Apache :
145
146
| Log             |  Requêtes |
147
| --------------- | --------: |
148
| `actu`          | 5 661 350 |
149
| `blogsdetest`   |    89 428 |
150
| `chocteaudoteu` |    21 876 |
151
| `lettres`       |    21 609 |
152
| `foad`          |     6 244 |
153
| `actu-test`     |     3 965 |
154
| `srv1`          |     3 881 |
155
| `date`          |     2 455 |
156
| `poche`         |     2 439 |
157
| `groot`         |     2 250 |
158
| `accolade`      |     2 235 |
159
| `nuage`         |     1 844 |
160
| `equipe`        |     1 818 |
161
| `rss`           |       108 |
162
163
Lecture : `actu` concentre environ 97% des requêtes relevées. Les autres vhosts existent fonctionnellement, mais ne dimensionnent pas le serveur.
164
165
Répartition globale des codes de retours :
166
167
| Code |  Requêtes | Lecture                        |
168
| ---: | --------: | ------------------------------ |
169
|  403 | 3 154 153 | refus très majoritaires        |
170
|  200 | 2 239 143 | réponses utiles                |
171
|  301 |   172 502 | redirections                   |
172
|  404 |   157 453 | absents/scans/liens morts      |
173
|  304 |    23 863 | cache navigateur               |
174
|  204 |    19 317 | principalement cron SPIP       |
175
|  302 |    15 003 | redirections temporaires       |
176
|  206 |     3 356 | réponses partielles            |
177
|  429 |     1 230 | limitation ponctuelle          |
178
|  401 |     1 126 | authentification               |
179
|  500 |     1 025 | erreurs applicatives           |
180
|  504 |     1 022 | timeouts gateway/FastCGI/proxy |
181
|  503 |       146 | service indisponible           |
182
|  502 |         1 | erreur proxy/gateway           |
183
184
Le volume de 403 est anormalement haut : plus de la moitié des requêtes. Ce n'est pas forcément une panne, mais cela confirme une pression de crawlers/robots et de ressources refusées.
185
186
## MariaDB
187
188
MariaDB 10.5.13 est actif le point a voir c'est le bind 0.0.0.0. 
189
190
Volume relevé :
191
192
- `/var/lib/mysql` : environ 1,4G, avec permissions limitant le détail.
193
- `/srv/db-backups` : environ 1,9G.
194
195
Préconisation : dump local avec rotation sur quelques jours puis sauv
196
197
## Mail sortant, relais et DKIM
198
199
Postfix est actif
200
201
Domaines relayés :
202
203
- `ess-et-societe.net`
204
- `chocteau.eu`
205
- `solinuage.fr`
206
207
OpenDKIM :
208
209
- signatures configurées pour :
210
  - `*@ess-et-societe.net` avec sélecteur `mail`;
211
  - `*@lettre.ess-et-societe.net` avec sélecteur `mail`;
212
  - `*@chocteau.eu` avec sélecteur `default`;
213
  - `*@solinuage.fr` avec sélecteur `default`.
214
215
DNS mail observé :
216
217
| Domaine              | MX     | SPF/DMARC                                            |
218
| -------------------- | ------ | ---------------------------------------------------- |
219
| `ess-et-societe.net` | MX OVH | SPF inclut srv1, srv2, OVH; DMARC quarantine         |
220
| `chocteau.eu`        | MX OVH | SPF inclut MX, srv2, OVH; DMARC quarantine           |
221
| `solinuage.fr`       | MX OVH | SPF inclut OVH/MX; pas de DMARC trouvé, **pas srv2** |
222
223
### Etude log
224
225
Statuts Postfix relevés :
226
227
| Statut     | Occurrences |
228
| ---------- | ----------: |
229
| `deferred` |     428 315 |
230
| `sent`     |      45 582 |
231
| `bounced`  |      16 087 |
232
| `expired`  |       4 799 |
233
234
Interprétation :
235
236
- Le ratio `deferred` est très élevé. Il ne s'agit pas seulement de boîtes inexistantes, mais de refus temporaires de réputation, volume ou comportement.
237
- La migration doit tenir compte de la réputation de l'IP actuelle et de la future IP.
238
239
Éléments observés :
240
241
- Environ 15 406 lignes liées à authentification/rejets/sasl/relay checks dans l'ensemble analysé.
242
- Beaucoup de connexions `auth=0/1` depuis des IP inconnues : tentatives d'authentification SMTP qui échouent ou clients qui testent.
243
- Quelques `Relay access denied`, ce qui est normal pour des tentatives de relais non autorisé.
244
- `mail.err` contient des erreurs OpenDKIM anciennes et récentes sur `solinuage.fr` : clé `default.private` impossible à charger, `Permission denied`, datées notamment du 2026-05-27.
245
246
Point important : la signature DKIM pour `ess-et-societe.net` est très utilisée et fonctionne dans les logs (`DKIM-Signature field added`). Pour `solinuage.fr`, il faut vérifier les droits de clé DKIM avant migration ou régénérer proprement la clé.
247
248
Pour migration :
249
250
- reprendre ou régénérer les clés DKIM ;
251
- mettre à jour SPF si le mail sortant part du nouveau serveur/IP ;
252
- configurer le reverse DNS/PTR de la nouvelle IP mail ;
253
- reprendre les comptes SASL si des clients utilisent le port 587.
254
255
## Sauvegardes
256
257
Cron système :
258
259
```text
260
45 4 * * * root /srv/backups/backup-sites2scw.sh
261
15 4 * * * root /srv/backups/backup-db2scw.sh
262 1 David Mercereau
```
263
264 4 David Mercereau
Mécanisme :
265 1 David Mercereau
266 4 David Mercereau
- dumps SQL quotidiens dans `/srv/db-backups` via `mysqldump`;
267
- sauvegarde Duplicity chiffrée vers Scaleway S3/C14 ;
268
- source sites : `/srv/sites/`;
269
- source bases : `/srv/db-backups/`;
270
- GPG configuré par empreinte ;
271
- logs sous `/srv/backups/log/`.
272 1 David Mercereau
273 4 David Mercereau
État observé le 2026-05-28 :
274 1 David Mercereau
275 4 David Mercereau
- les dumps SQL locaux se créent ;
276
- certains dumps système (`information_schema`, `performance_schema`) échouent avec droits insuffisants, ce qui n'est pas bloquant pour la reprise métier ;
277
- l'envoi Duplicity vers Scaleway échoue pour les sites et les bases avec `GPGError: GPG Failed` et `Unusable public key`;
278
- les logs indiquent `Last full backup date: none`.
279
280
Point de sécurité : les scripts de sauvegarde contiennent des identifiants Scaleway en clair. Le rapport ne les reproduit pas. Ils doivent être considérés comme compromis, révoqués et remplacés.
281
282
## Sécurité et durcissement constatés
283
284
Points défavorables :
285
286
- OS hors support.
287
- PHP 7.4 hors support.
288
- MySQL ouvert publiquement.
289
- SSH avec root login et mot de passe autorisés.
290
- Pas de Fail2ban/CrowdSec installé.
291
- ClamAV/Freshclam en échec.
292
- Apache ne passe pas le configtest.
293
- Plusieurs permissions web trop larges.
294
- Secrets de sauvegarde dans scripts lisibles.
295
296
Points favorables :
297
298
- RAID logiciel en état cohérent `[UUU]`.
299
- DKIM est en place.
300
- Rate limiting Postfix configuré de façon prudente.
301
- Monitoring OVH/RTM via `noderig`/`beamium` présent, localement exposé uniquement pour `noderig`.
302
- Smartmontools et mdmonitor actifs.
303
304
## Dimensionnement proposé
305
306
Sur la base des mesures accessibles  (difficile, c'est un temps T, des graph's de monitoring aurait permis d'affiner cette vue) :
307
308
- CPU actuel peu chargé : 4 vCPU modernes suffiraient probablement.
309
- RAM actuelle très confortable : 8 Go semblent suffisants pour Apache/PHP-FPM/MariaDB/Postfix/ISPConfig, 16 Go si l'on veut garder beaucoup de marge.
310
- Stockage live très faible : moins de 10 Go pour sites + bases + dumps courants, mais il faut prévoir logs, caches, préproduction, snapshots et marge.
311
- Le stockage actuel de 3,4 To sur `/srv` est très largement surdimensionné pour la volumétrie observée.
312
313
Recommandation pragmatique :
314
315
- **VPS**/dédié : 4 vCPU, 8 Go RAM, 160 à 200 Go NVMe/SSD.
316
- Variante confortable : 4 vCPU, 16 Go RAM, 200 à 300 Go NVMe/SSD.
317
318
Un VPS peut suffire si le trafic réel Apache est modéré. Si le site principal est réellement à fort trafic ou soumis à des crawlers agressifs, choisir un VPS avec CPU garanti ou un petit dédié SSD sera plus prévisible.
319
320
Globalement pas mal de ressource matériel pour de la réponse à des bots...
321
322
## A éclaircir
323
324
* Quel site est à migrer ? 
325
* Quelle version de PHP est à installer : PHP 7.4 a minima + PHP 8.x ?
326
* La connexion SSH via www-data sera proscrire sur le nouveau serveur ISPconfig, la bonne hygiène c'est un utilisateur par site et un compte SFTP / SSH dédier par site (la clé SSH peut être partout...)
327
* Partie e-mail : 
328
  * solinuage.fr envoi toujours du mail ?
329
  * Aujourd'hui c'est pour de la notification / application ?
330
  * Est-ce satisfaisant en termes de légitimité d'émission ?
331
  * Je me demande si j'inclus ou non la configuration mail dans ISPconfig, j'ai l'impression que ce n'est pas nécessaire...
332
  * Est-ce qu'il y a de l'authentification SMTP dans les apps ou c'est "localhost" sans rien d'autre ?
333
334
* Pour la migration / les test, il me faudra la main sur la zone DNS (ajouter les SPF...)
335
* Il me faudra une adresse "admin" pour les notifications d'erreur, échec de tâche cron... ça permet d'être pro-actif
336
* IPv6 pour le web ?
337
* Gestion de la sauvegarde ? Qui ?
338
* Config particulière PHP pour les applicatifs ? limit_memory, post_max_size et compagnie...
339 5 David Mercereau
340
### Réponse : 
341
342
* Quel site : liste fournie ~4
343
* Attention Nextcloud dans le futur mais peu de data
344
* PHP plusieurs version (7.3 ? 7.4 8.0 8.3 8.4) liste fournie
345
* Guillaume remet son script rclone
346
* Pas d'IMAP, pas de DNS...
347
* PHPmyAdmin paquet debian (pour éviter trop de maintenance) + sécurité htpassword
348
* IPv6 OUI (web+ssh)
349
* Port SSH sur un autre (plus que 1024)
350
* PHP : reprendre conf actuel
351
* Captcha hors UE
352
* Mail : peut être prestataire externe.. a voir...