CentOSCette page décrit de manière succincte l’installation et la configuration de CentOS 7 sur un serveur de réseau local (Local Area Network). Le terme « serveur de réseau local » est une distinction purement pragmatique qui me sert avant tout à organiser les rubriques de ce blog. Il désigne ici une machine telle qu’on la trouve dans le local de serveurs d’une école, d’une mairie, d’une médiathèque ou d’une PME, par opposition à un serveur dédié installé dans un datacenter.

CentOS 7 est officiellement supporté jusqu’au 30 juin 2024. On choisira cette branche sur du matériel raisonnablement récent qui supporte un OS 64-bits. L’installateur de CentOS 7 requiert au moins 1 Go de RAM. Pour plus de détails, lire la documentation officielle.

Confectionner la clé USB d’installation

Sur la page du projet, suivre les liens Get CentOS Now > alternative downloads > CentOS Linux version > 7 > mirrors.

Sélectionner un site miroir et télécharger l’ISO minimal.

  • CentOS-7-x86_64-Minimal-2003.iso

Remarque : rien n’empêche d’utiliser les images CentOS-7-x86_64-DVD-2003.iso ou CentOS-7-x86_64-NetInstall-2003.iso.

L’image ISO est hybride et peut s’écrire directement sur une clé USB.

$ sudo dd if=CentOS-7-x86_64-Minimal-2003.iso \
  of=/dev/sdX bs=1M

Langue et clavier

Dans l’écran de bienvenue, sélectionner la langue (Français) et la localisation (Français > France). La disposition du clavier sera définie par le biais de l’écran principal de l’installateur.

Réseau et nom d’hôte

Le réseau n’est pas activé par défaut, il faut donc songer à l’activer explicitement.

Les noms des interfaces réseau ont changé depuis CentOS 7.0. Désormais, on n’a plus affaire à eth0, eth1, eth2, wlan0, etc. Le nouveau schéma de nommage est moins arbitraire et offre davantage de consistance en se basant sur l’emplacement physique de la carte dans la machine.

  • enp2s0
  • enp3s0
  • enp3s1
  • etc.

Choisir un nom d’hôte simple en remplacement de localhost.localdomain par défaut.

  • centosbox
  • serveur-linux
  • amandine
  • etc.

Date et heure

Vérifier si le fuseau horaire (Europe/Paris) est correctement configuré. Éventuellement, activer Heure du réseau et vérifier les serveurs NTP.

Désactivation de Kdump

Kdump est un mécanisme de capture lors du plantage d’un noyau. Il peut être désactivé.

Partitionnement manuel

L’outil de partitionnement graphique de CentOS est un peu spécial à prendre en main. Voici un exemple de schéma de partitionnement courant.

  • un disque RAID pour /boot de 500 MiB, formaté en ext2
  • un disque RAID pour la partition swap, équivalent à la RAM disponible
  • un disque RAID pour la partition principale, formaté en ext4

Avec deux disques, on optera pour le RAID 1. Si l’on dispose de quatre disques, on pourra choisir le RAID 6 pour la partition principale et le RAID 1 pour /boot et swap.

  1. Cliquer sur Destination de l’installation.
  2. Vérifier si le ou les disques durs sont bien sélectionnés.
  3. Cocher Je vais configurer le partitionnement et cliquer sur Terminé.
  4. Dans le menu déroulant, sélectionner Partition standard au lieu de LVM.

Partition /boot

La taille de la partition /boot sera relativement réduite. Il faudra veiller à ne pas laisser s’entasser les vieux kernels sous peine de la remplir assez rapidement.

  1. Cliquer sur le bouton [+] pour créer un nouveau point de montage.
  2. Créer le point de montage /boot avec une capacité de 500 MiB ou plus.
  3. Définir le type de périphérique RAID avec un niveau 1.
  4. Choisir le système de fichiers ext2 et l’étiquette boot.
  5. Confirmer Mise à jour des paramètres.

Partition swap

Dans certains cas, la partition swap pourra être reléguée à la fin du disque par l’installateur pour une utilisation optimale.

  1. Cliquer sur le bouton [+] pour créer un autre point de montage.
  2. Créer le point de montage swap en spécifiant sa capacité en GiB.
  3. Définir le type de périphérique RAID avec un niveau 1.
  4. Choisir l’étiquette swap.
  5. Confirmer Mise à jour des paramètres.

Partition principale

La partition principale occupera tout l’espace disque restant.

  1. Cliquer sur le bouton [+] pour créer un dernier point de montage.
  2. Créer le point de montage / sans spécifier la capacité souhaitée.
  3. Définir le type de périphérique RAID et le niveau de RAID 1 ou 6.
  4. Si l’on utilise le RAID 6, il faudra revoir la capacité souhaitée à la hausse.
    Pour ce faire, on peut se servir de la valeur Espace total en bas à gauche
    de l’écran et spécifier cette valeur – voire un peu plus – dans le champ
    Capacité souhaitée. L’installateur se chargera de recalculer l’espace
    disponible en fonction de la capacité des disques et du niveau de RAID.
  5. Choisir le système de fichiers ext4 et l’étiquette root.
  6. Confirmer Mise à jour des paramètres, puis Terminé.

Choix des paquets

  • Si l’on utilise le support d’installation complet, on optera pour le groupe de paquets Installation minimale dans l’écran de sélection des logiciels.
  • L’installateur minimal ne laisse pas le choix de toute façon.

Utilisateur initial

Créer un utilisateur normal (par exemple microlinux) en prenant soin de cocher la case Faire de cet utilisateur un administrateur. L’utilisateur sera ajouté au groupe wheel et pourra se servir de la commande sudo.

Synchronisation de la grappe RAID

La synchronisation initiale d’une grappe RAID peut être assez longue. L’astuce suivante permet d’accélérer le processus de façon significative.

$ echo 50000 | sudo tee /proc/sys/dev/raid/speed_limit_min

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

Régler un problème avec RPCbind

La désactivation de l’IPv6 risque de poser un problème avec RPCbind au prochain redémarrage.

$ journalctl -p err
... systemd[1]: Failed to listen on RPCbind Server Activation Socket.

Il suffit de reconstruire le disque mémoire initial pour résoudre le problème.

$ sudo dracut -f -v
$ sudo reboot

Configurer NetworkManager

Pour la configuration réseau, je distingue les deux cas de figure les plus courants.

Exemple de configuration sur un serveur simple

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

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

Lancer NetworkManager TUI pour configurer la connexion.

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

Renseigner le ou les serveurs DNS.

# /etc/resolv.conf
search microlinux.lan
nameserver 192.168.2.1

Corriger la configuration du nom d’hôte.

# /etc/hosts
127.0.0.1   localhost.localdomain localhost
192.168.2.3 bernadette.microlinux.lan bernadette

Le fichier /etc/hostname devra juste contenir le nom d’hôte simple sans le domaine.

bernadette

Exemple de configuration sur un routeur

Sur une machine dotée de plusieurs interfaces réseau, on aura quelque chose comme ceci.

$ nmcli dev
DEVICE  TYPE      STATE         CONNECTION 
enp2s0  ethernet  connecté      enp2s0     
enp3s1  ethernet  indisponible  --         
lo      loopback  non-géré      --  

Lancer NetworkManager TUI pour configurer la connexion.

$ sudo nmtui
  1. Sélectionner Edit a connection.
  2. Supprimer le profil correspondant à l’interface active.
  3. Éditer la connexion Wired connection 1.
  4. Remplacer le nom de profil Wired connection 1 par WAN.
  5. Passer IPv4 CONFIGURATION de Automatic à Manual.
  6. Cliquer sur Show pour afficher les détails.
  7. Fournir l’adresse IP du serveur en notation CIDR, par exemple 192.168.2.5/24.
  8. Renseigner l’adresse IP de la passerelle dans le champ Gateway.
  9. Ne rien indiquer dans les champs DNS server et Search domains.
  10. Passer IPv6 CONFIGURATION de Automatic à Ignore.
  11. Confirmer par OK.
  12. Supprimer le profil correspondant à la deuxième interface.
  13. Sélectionner Add > Ethernet.
  14. Remplacer le nom de profil Ethernet connection 1 par LAN.
  15. Renseigner la rubrique Device, par exemple enp3s1.
  16. Passer IPv4 CONFIGURATION de Automatic à Manual.
  17. Cliquer sur Show pour afficher les détails.
  18. Fournir l’adresse IP de la deuxième interface, par exemple 192.168.3.1/24.
  19. Ne rien indiquer dans les champs Gateway, DNS server et Search domains.
  20. Passer IPv6 CONFIGURATION de Automatic à Ignore.
  21. Confirmer par OK.
  22. Revenir à la fenêtre principale.
  23. Activer les deux connexions WAN et LAN.
  24. Quitter NetworkManager TUI : Quit

Renseigner provisoirement le ou les serveurs DNS en attendant d’installer Dnsmasq.

# /etc/resolv.conf
nameserver 192.168.2.1

Corriger la configuration du nom d’hôte.

# /etc/hosts
127.0.0.1   localhost.localdomain localhost
192.168.3.1 amandine.sandbox.lan amandine

Le fichier /etc/hostname devra juste contenir le nom d’hôte simple sans le domaine.

amandine

Configurer le pare-feu

Là aussi, on distinguera les deux cas de figure les plus courants.

Exemple de configuration sur un serveur simple

Le serveur dispose d’une interface réseau enp2s0 connectée au réseau local.

$ nmcli con show
NAME  UUID                                  TYPE      DEVICE 
LAN   2cbbaa36-a0c3-3134-b8ad-8b993258e548  ethernet  enp2s0

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

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

Définir la zone appropriée internal pour l’interface.

$ sudo firewall-cmd --permanent --zone=internal --change-interface=enp2s0

Définir cette zone comme zone par défaut.

$ sudo firewall-cmd --set-default-zone=internal

Supprimer quelques services prédéfinis.

$ sudo firewall-cmd --permanent --remove-service=dhcpv6-client
$ sudo firewall-cmd --permanent --remove-service=mdns
$ sudo firewall-cmd --permanent --remove-service=samba-client

Prendre en compte les modifications.

$ sudo firewall-cmd --reload

Exemple de configuration sur un routeur

La machine dispose d’une interface réseau « publique » enp2s0 et d’une interface enp3s1 reliée au switch du réseau local.

$ nmcli con show
NAME  UUID                                  TYPE      DEVICE 
WAN   a46043b5-c71d-3795-9548-96e5c136f942  ethernet  enp2s0 
LAN   9667c35b-5f84-4de8-9300-f4144a6db1c6  ethernet  enp3s1

Dans la configuration par défaut, les deux interfaces sont associées à la zone public.

$ firewall-cmd --get-active-zones
public
  interfaces: enp2s0 enp3s1

Associer la zone external à l’interface enp2s0.

$ sudo firewall-cmd --permanent --zone=external --change-interface=enp2s0

Quant à l’interface enp3s1, elle va opérer la transition vers la zone internal.

$ sudo firewall-cmd --permanent --zone=internal --change-interface=enp3s1

Définir la zone internal comme zone par défaut.

$ sudo firewall-cmd --set-default-zone=internal

Supprimer quelques services prédéfinis.

$ sudo firewall-cmd --permanent --remove-service=dhcpv6-client
$ sudo firewall-cmd --permanent --remove-service=mdns
$ sudo firewall-cmd --permanent --remove-service=samba-client

Prendre en compte les modifications.

$ sudo firewall-cmd --reload

Redémarrer le serveur et vérifier successivement la configuration des zones.

$ sudo firewall-cmd --list-all --zone=internal
$ sudo firewall-cmd --list-all --zone=external

Synchronisation NTP avec Chrony

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

Alternativement, on pourra synchroniser la machine avec une source locale.

# /etc/chrony.conf
server 192.168.2.1 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony

Prendre en compte les modifications.

$ sudo systemctl restart chronyd

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

Éditer /etc/postfix/main.cf en adaptant la configuration.

# /etc/postfix/main.cf
#
# Minimal Postfix configuration for LAN 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 = amandine.microlinux.lan

# Domain
mydomain = microlinux.lan

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

# Authorize local machine only
mynetworks = 127.0.0.0/8

# Deliver via provider mailhub
relayhost = mail.isp.com
smtp_sasl_auth_enable = yes
smtpd_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtp_sasl_mechanism_filter = login, plain

# 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

Si l’on utilise Gmail comme relais SMTP, la directive relayhost devra être renseignée comme ceci.

relayhost = smtp.gmail.com:587

Le fichier /etc/postfix/sasl_passwd contiendra les paramètres de connexion.

mail.isp.com username:password

Avec Gmail, il devra être édité comme ceci.

smtp.gmail.com:587 username@gmail.com:password

Générer le fichier sasl_passwd.db.

$ sudo postmap sasl_passwd

Supprimer le fichier sasl_passwdet restreindre les permissions du fichier sasl_passwd.db.

$ sudo rm sasl_passwd
$ sudo chmod 0400 sasl_passwd.db

É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

Prendre en compte les modifications.

$ sudo systemctl restart postfix

Envoyer un mail de test.

$ mail root
Subject: Test Postfix
Ceci est un test.
.
EOT

Mises à jour automatiques

Installer le service de mises à jour automatiques.

$ sudo yum install yum-cron

Éditer /etc/yum/yum-cron.confet 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 = amandine.microlinux.lan
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

Vérifier les alertes SELinux

Pour finir, on pourra vérifier le bon fonctionnement du système de base avec SELinux.

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

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 DNS local, un serveur de fichiers, un serveur d’annuaires pour l’authentification centralisée, un proxy pour le monitoring et/ou le filtrage, 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.

 


5 commentaires

benziane · 3 avril 2020 à 22 h 37 min

Bjr,
Très bien construit et appliqué, grand MERCI.

Dario Volny · 9 avril 2020 à 15 h 49 min

Bonjour il sort quand linux par pratique 2 que j attends depuis.

    kikinovak · 9 avril 2020 à 16 h 05 min

    La sortie officielle était prévue aujourd’hui (9 avril) initialement. Avec la crise du COVID-19, il y a eu de fortes perturbations. Eyrolles est en télétravail, quelques imprimeurs ont fermé, etc.

    Dès qu’il sera disponible, je publierai un article sur ce blog.

      Dario Volny · 9 avril 2020 à 16 h 43 min

      Merci, pour tout le travail que vous faites, très pédagogique, avez vous pensez à devenir formateur dans un organisme,

        kikinovak · 9 avril 2020 à 19 h 30 min

        Vu que je suis un peu au chômage technique en ce moment, j’aime bien être productif en alimentant mon blog. Et pour ce qui est de la formation, vous serez peut-être surpris d’apprendre que Microlinux est déjà organisme de formation.

Les commentaires sont fermés.