CentOSDepuis quelques années, la société Online propose une gamme de serveurs dédiés à des prix extrêmement intéressants, notamment la Dedibox Start, qui vous permet de disposer d’un accès root sur votre propre machine pour une dizaine d’euros par mois. Cet article décrit de manière succincte l’installation et la configuration de CentOS sur une Dedibox de type Start-2-S ou Start-1-L.

Online ou Scaleway ?

Le nom de la marque Online est devenu une cible mouvante ces deux dernières années. Voici comment ça se présente du point de vue du simple consommateur.

  • Cet article explique que la marque Online s’appelle désormais « Online by Scaleway ».
  • Cet autre article annonce fièrement que la Dedibox fournie par Online by Scaleway s’appelle désormais « Scaleway Dedibox ».
  • Le site https://www.online.net offre une redirection vers https://www.scaleway.com/fr/dedibox.
  • La console https://console.online.net ne change pas mais affiche « Scaleway Dedibox » lorsqu’on se connecte.
  • Les paramètres de connexion de chez Online ne permettent pas de se connecter à la nouvelle console de chez Scaleway.

J’imagine vaguement que toute cette confusion a été savamment concoctée par des experts en communication qui gagnent des salaires obscènes et « créent une synergie autour d’un café fédérateur » (vécu). En attendant que ça se tasse un peu, je continuerai à utiliser les liens habituels de chez Online, qui fonctionnent toujours.

Choix de l’OS

Dans un premier temps, il faut procéder au choix de la machine et du système d’exploitation.

  1. Se connecter à la console d’Online : https://console.online.net.
  2. Ouvrir le menu Serveur > Liste des serveurs.
  3. Sélectionner la machine > Administrer > Installer.
  4. Distributions serveur > CentOS > CentOS 7 64bits > Installer CentOS.

Installation Dedibox

Partitionnement

Online propose un schéma de partitionnement par défaut, que nous allons modifier.

  1. Réduire la taille de la partition principale pour avoir un peu de marge.
  2. Augmenter la taille de la partition /boot : 500 Mo.
  3. La partition /boot sera formatée en ext2.
  4. Augmenter la taille de la partition d’échange en fonction de la RAM disponible.
  5. Remplir l’espace disponible pour la partition principale qui reste en ext4.

ImportantLe schéma de partitionnement proposé par défaut mérite une remarque. Online affiche une partition /boot d’une taille de 200 Mo par défaut. Or, depuis CentOS 7.5, la taille des images initrd (Initial RAM Disk) a considérablement augmenté. Le résultat de l’affaire, c’est une partition /boot saturée au bout de la deuxième mise à jour du noyau, et un serveur qui ne démarre plus en conséquence. J’ai signalé le problème à Online début 2018, mais apparemment ça ne leur fait ni chaud ni froid.

Voici ce que l’on obtient sur une Dedibox Start-2-S-SATA.

Partitionnement Dedibox

Sur une Dedibox Start-1-L-SATA, on aura quelque chose comme ceci.

Partitionnement Dedibox

Définition des utilisateurs

L’écran subséquent permet de choisir le mot de passe root, de définir un utilisateur « commun mortel » et de choisir un mot de passe pour cet utilisateur.

Installation Dedibox

ImportantL’installateur impose une limite de 15 caractères alphanumériques. Le cas échéant, on peut choisir un mot de passe provisoire ici et définir quelque chose de plus robuste à la première connexion.

Paramètres réseau

L’interface affiche ensuite un récapitulatif des paramètres réseau de la machine. On peut éventuellement noter ces paramètres pour les avoir sous la main.

  • Nom d’hôte
  • Adresse IP
  • Masque de sous-réseau
  • IP de la passerelle
  • DNS primaire et secondaire

Installation Dedibox

Installation de CentOS

Il ne reste plus qu’à cliquer sur Effacer l’intégralité de mes disques durs pour procéder à l’installation.

Installation Dedibox

L’installation du système initial dure une petite heure.

Installation Dedibox

Comptes et connexion

Mettre en place l’authentification par clé SSH pour travailler plus confortablement.

$ ssh-copy-id -i .ssh/id_rsa.pub microlinux@sd-100246.dedibox.fr

Dans la configuration par défaut, l’utilisateur initial créé par l’installateur ne peut pas utiliser la commande sudo.

$ su -
# usermod -a -G wheel microlinux
# exit
$ exit

Redéfinir les mots de passe pour l’utilisateur initial et pour root.

$ passwd
$ sudo passwd root

Configuration automatique

L’utilitaire git ne fait pas partie d’une installation par défaut.

$ sudo yum install git

Récupérer le contenu de mon dépôt Gitlab.

$ git clone https://gitlab.com/kikinovak/centos.git

Le répertoire centos fournit un script de configuration post-installation.

$ cd centos/
$ sudo ./centos-7.x-setup.sh --setup

Le script gère automatiquement les opérations suivantes :

  • Configurer Bash et Vim.
  • Passer le système en anglais pour root.
  • Configurer les dépôts de paquets officiels et tiers.
  • Installer les groupes de paquets [Core] et [Base].
  • Récupérer quelques outils supplémentaires.
  • Supprimer une poignée de paquets inutiles.
  • Rendre les logs système accessibles à l’utilisateur initial.
  • Désactiver l’IPv6 et reconfigurer les services de base.
  • Rendre le mot de passe persistant pour sudo.

Éventuellement, passer le système en anglais pour l’utilisateur initial.

# ~/.bashrc
LANG=en_US.utf8
export LANG

Peaufiner la configuration réseau

Vérifier si NetworkManager est démarré.

$ systemctl status NetworkManager

Afficher les interfaces réseau gérées par NetworkManager.

$ nmcli dev
DEVICE  TYPE      STATE     CONNECTION  
eth0    ethernet  connecté  System eth0 
lo      loopback  non-géré  --   

Configurer la connexion.

$ sudo nmtui
  1. Supprimer la connexion existante System eth0.
  2. Éditer la connexion Wired connection 1.
  3. Remplacer le nom de profil Wired connection 1 par WAN.
  4. Passer IPv4 CONFIGURATION de Automatic à Manual.
  5. Cliquer sur Show pour afficher les détails.
  6. Fournir l’adresse IP du serveur en notation CIDR, par exemple 163.172.220.174/24.
  7. Renseigner l’adresse IP de la passerelle dans le champ Gateway.
  8. Ne rien indiquer dans les champs DNS server et Search domains.
  9. Passer IPv6 CONFIGURATION de Automatic à Ignore.
  10. Confirmer par OK.
  11. Revenir à la fenêtre principale.
  12. Activer la connexion WAN : Activate a connection > WAN
  13. Quitter NetworkManager TUI : Quit

NetworkManager TUI

Les deux serveurs DNS seront renseignés dans /etc/resolv.conf.

# /etc/resolv.conf
nameserver 62.210.16.6
nameserver 62.210.16.7

Le fichier /etc/hosts ressemblera à ceci.

# /etc/hosts
127.0.0.1       localhost.localdomain localhost
163.172.220.174 sd-100246.dedibox.fr sd-100246

Quant à /etc/hostname, il est censé contenir le nom d’hôte simple, et c’est tout.

sd-100246

ImportantVeillez à ne surtout pas ajouter de commentaires dans ce fichier, sous peine de provoquer toute une série d’erreurs bizarres.

 

Activer SELinux

SELinux est désactivé dans la configuration par défaut chez Online.

Dans un premier temps, activer SELinux en mode permissif.

# /etc/selinux/config
SELINUX=permissive
SELINUXTYPE=targeted

Procéder à un réétiquetage du système de fichiers.

$ sudo touch /.autorelabel
$ sudo reboot

Compter cinq bonnes minutes pour un réétiquetage complet.

Lancer un audit SELinux.

$ sudo sealert -a /var/log/audit/audit.log

Éventuellement, restaurer le contexte par défaut comme indiqué.

$ sudo restorecon -v /etc/ld.so.cache

Vérifier si l’intervention a réglé le problème.

$ echo | sudo tee /var/log/audit/audit.log
$ sudo reboot

Relancer un audit.

$ sudo sealert -a /var/log/audit/audit.log
100% done
found 0 alerts in /var/log/audit/audit.log

Passer en mode renforcé par défaut.

# /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted

Activer le mode renforcé.

$ sudo setenforce 1

Configurer le pare-feu

Vérifier si le pare-feu FirewallD est lancé.

$ systemctl status firewalld

Le serveur dispose d’une interface réseau eth0 avec une ouverture frontale sur Internet.

$ nmcli con show
NAME  UUID                                  TYPE      DEVICE 
WAN   f1f2025e-dbed-3596-b314-371972966e30  ethernet  eth0

Dans la configuration par défaut, cette interface est associée à la zone public.

$ firewall-cmd --get-active-zones
public
  interfaces: eth0

Inscrire la zone explicitement dans la configuration de l’interface réseau.

$ echo "ZONE=public" | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-WAN

Afficher la configuration de la zone.

$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Supprimer dhcpv6-client pour ne garder que le seul service ssh.

$ sudo firewall-cmd --permanent --remove-service=dhcpv6-client
success
$ sudo firewall-cmd --reload
success

Intégrer Fail2ban au pare-feu

Installer Fail2ban.

$ sudo yum install fail2ban-server fail2ban-firewalld

Créer un fichier /etc/fail2ban/jail.d/sshd.local pour protéger le service SSH
contre les attaques par force brute.

# /etc/fail2ban/jail.d/sshd.local

[DEFAULT]
bantime = 86400
ignoreip = 78.197.22.147 163.172.63.88

[sshd]
enabled = true

Basculer SELinux en mode permissif.

$ sudo setenforce 0

Activer et démarrer le service.

$ sudo systemctl enable fail2ban --now

Régler un problème relatif à SELinux.

$ sudo ausearch -c 'f2b/server' --raw | sudo audit2allow -M my-f2bserver
$ sudo semodule -i my-f2bserver.pp

Alternativement :

$ sudo ausearch -c 'f2b/f.sshd' --raw | sudo audit2allow -M my-f2bfsshd
$ sudo semodule -i my-f2bfsshd.pp

Vérifier si le problème est réglé.

$ echo | sudo tee /var/log/audit/audit.log
$ sudo systemctl restart fail2ban
$ sudo sealert -a /var/log/audit/audit.log
100% done
found 0 alerts in /var/log/audit/audit.log

Repasser en mode renforcé.

$ sudo setenforce 1

Afficher les adresses IP bannies.

$ sudo fail2ban-client status sshd

Synchronisation NTP avec Chrony

Supprimer ntps’il est installé.

$ sudo yum remove ntp

Vérifier si Chrony est installé.

$ rpm -q chrony
chrony-3.4-1.el7.x86_64

Configurer Chrony.

# /etc/chrony.conf
server 0.fr.pool.ntp.org iburst
server 1.fr.pool.ntp.org iburst
server 2.fr.pool.ntp.org iburst
server 3.fr.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony

Activer et démarrer le service.

$ sudo systemctl enable chronyd --now

Afficher la liste des serveurs auxquels on est connecté et vérifier la synchronisation.

$ chronyc sources
210 Number of sources = 4
MS Name/IP address     Stratum Poll Reach LastRx Last sample
===========================================================================
^- ntp2k.versadns.com        2   6    17    23  -1162us[  +85us] +/-  127ms
^- reinhardt.pointpro.nl     2   6    17    24  +4042us[+5290us] +/-   33ms
^* 46-243-26-34.tangos.nl    1   6    17    23  -2618us[-1371us] +/- 8551us
^+ debmirror.tuxis.net       2   6    17    24  +3501us[+4749us] +/-   20ms

Postfix minimal

Vérifier si Postfix et la commande mail sont installés.

$ rpm -q postfix mailx
postfix-2.10.1-7.el7.x86_64
mailx-12.5-19.el7.x86_64

Vider /etc/postfix/main.cf et adapter la configuration suivante.

# /etc/postfix/main.cf
#
# Minimal Postfix configuration for Internet-facing servers

# Disable IPv6
inet_protocols = ipv4

# Outbound mail only
mailbox_size_limit = 0
inet_interfaces = localhost

# Banner
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)

# Host
myhostname = sd-100246.dedibox.fr

# Domain
mydomain = dedibox.fr

# Domain that appears in mail posted on this machine
myorigin = $myhostname

# Authorize local machine only
mynetworks = 127.0.0.0/8

# Deliver mail directly to the Internet
relayhost =

# Local aliasing
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# Debugging
debugger_command =
  PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
  ddd $daemon_directory/$process_name $process_id & sleep 5

# Command paths
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix

# Documentation
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

Éditer la table de correspondance.

# /etc/aliases
# Basic system aliases -- these MUST be present.
mailer-daemon:  postmaster
postmaster:     root
# General redirections for pseudo accounts.
bin:            root
daemon:         root
adm:            root
...
# trap decode to catch security attacks
decode:         root
# Person who should get root's mail
root:           info@microlinux.fr

Construire le fichier indexé.

$ sudo newaliases

Activer et démarrer Postfix.

$ sudo systemctl enable postfix --now

Vérifier si Postfix tourne correctement.

$ systemctl status postfix
$ sudo cat /var/log/maillog

Envoyer un mail vers un compte externe.

$ mail info@microlinux.fr
Subject: Test Postfix
Ceci est un test.
.
EOT

Mises à jour automatiques

Installer le service de mises à jour automatiques.

$ sudo yum install yum-cron

Adapter la configuration suivante.

# /etc/yum/yum-cron.conf

[commands]
update_cmd = default
update_messages = yes
download_updates = yes
apply_updates = yes
random_sleep = 0

[emitters]
system_name = betadine.microlinux.fr
emit_via = email
output_width = 79

[email]
email_from = root@localhost
email_to = info@microlinux.fr
email_host = localhost

[groups]
group_list = None
group_package_types = mandatory, default

[base]
debuglevel = -2
mdpolicy = group:main

Activer et démarrer le service.

$ sudo systemctl enable yum-cron --now

Conclusion

Nous disposons à présent d’une installation serveur qui constitue l’équivalent d’une pâte à crêpes. À nous de voir si nous préférons les crêpes salées ou sucrées, si nous mettons de la confiture ou du Nutella, etc.

En l’occurence, cette base nous servira par la suite pour configurer un serveur web, un serveur mail, un serveur de messagerie ou de stockage réseau, un serveur de flux audio, etc.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


3 commentaires

Natalia · 28 juin 2020 à 3 h 51 min

Bonjour,
Merci pour ce tuto efficace ! J’ai une difficulté cependant pour peaufiner la connexion : en faisant tout ce qui précède comme il faut (je crois, pas vu d’erreur), les fichiers /etc/resolv.conf et /etc/hostname sont corrects, en revanche le fichier /etc/hosts n’est pas bon :
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Avez-vous une idée de ce que cloche ?

    kikinovak · 28 juin 2020 à 7 h 34 min

    Oui. Le nom d’hôte n’a pas été défini lors de l’installation. Mais ce n’est pas grave, il suffit de rectifier le tir à la main.

    [kikinovak@alphamule:~] $ ssh microlinux@betadine.microlinux.fr
    Last login: Thu Jun 25 08:40:19 2020 from zpt30-1-78-197-22-147.fbx.proxad.net
    [microlinux@sd-100246:~] $ cat /etc/hostname 
    sd-100246
    

    Donc, si votre serveur s’appelle sd-123456.dedibox.fr, faites simplement ceci.

    $ echo sd-123456 > sudo tee /etc/hostname
    

    Un gentil bonjour de la garrigue gardoise.

Hervé · 10 mars 2021 à 16 h 07 min

Je laisse un commentaire juste pour dire le plaisir que j’ai eu à lire cette phrase :
« J’imagine vaguement que toute cette confusion a été savamment concoctée par des experts en communication qui gagnent des salaires obscènes »
Excellent. Merci ! ?

Les commentaires sont fermés.