Cette 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
- Langue et clavier
- Réseau et nom d’hôte
- Date et heure
- Désactivation de Kdump
- Partitionnement manuel
- Partition /boot
- Partition swap
- Partition principale
- Choix des paquets
- Utilisateur initial
- Synchronisation de la grappe RAID
- Configuration automatique
- Régler un problème avec RPCbind
- Configurer NetworkManager
- Configurer le pare-feu
- Synchronisation NTP avec Chrony
- Postfix minimal
- Mises à jour automatiques
- Vérifier les alertes SELinux
- Conclusion
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é enext2
- 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
.
- Cliquer sur Destination de l’installation.
- Vérifier si le ou les disques durs sont bien sélectionnés.
- Cocher Je vais configurer le partitionnement et cliquer sur Terminé.
- 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.
- Cliquer sur le bouton [+] pour créer un nouveau point de montage.
- Créer le point de montage
/boot
avec une capacité de 500 MiB ou plus. - Définir le type de périphérique RAID avec un niveau 1.
- Choisir le système de fichiers
ext2
et l’étiquetteboot
. - 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.
- Cliquer sur le bouton [+] pour créer un autre point de montage.
- Créer le point de montage
swap
en spécifiant sa capacité en GiB. - Définir le type de périphérique RAID avec un niveau 1.
- Choisir l’étiquette
swap
. - Confirmer Mise à jour des paramètres.
Partition principale
La partition principale occupera tout l’espace disque restant.
- Cliquer sur le bouton [+] pour créer un dernier point de montage.
- Créer le point de montage
/
sans spécifier la capacité souhaitée. - Définir le type de périphérique RAID et le niveau de RAID 1 ou 6.
- 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. - Choisir le système de fichiers
ext4
et l’étiquetteroot
. - 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.
- un serveur simple muni d’une seule interface réseau
- un routeur muni de deux interfaces réseau
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
- Sélectionner
Edit a connection
. - Supprimer le profil existant.
- Éditer la connexion
Wired connection 1
. - Remplacer le nom de profil
Wired connection 1
parLAN
. - Passer
IPv4 CONFIGURATION
deAutomatic
àManual
. - Cliquer sur
Show
pour afficher les détails. - Fournir l’adresse IP du serveur en notation CIDR, par exemple
192.168.2.3/24
. - Renseigner l’adresse IP de la passerelle dans le champ
Gateway
. - Ne rien indiquer dans les champs
DNS server
etSearch domains
. - Passer
IPv6 CONFIGURATION
deAutomatic
àIgnore
. - Confirmer par
OK
. - Revenir à la fenêtre principale.
- Activer la connexion
LAN
:Activate a connection
>LAN
- 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
- Sélectionner
Edit a connection
. - Supprimer le profil correspondant à l’interface active.
- Éditer la connexion
Wired connection 1
. - Remplacer le nom de profil
Wired connection 1
parWAN
. - Passer
IPv4 CONFIGURATION
deAutomatic
àManual
. - Cliquer sur
Show
pour afficher les détails. - Fournir l’adresse IP du serveur en notation CIDR, par exemple
192.168.2.5/24
. - Renseigner l’adresse IP de la passerelle dans le champ
Gateway
. - Ne rien indiquer dans les champs
DNS server
etSearch domains
. - Passer
IPv6 CONFIGURATION
deAutomatic
àIgnore
. - Confirmer par
OK
. - Supprimer le profil correspondant à la deuxième interface.
- Sélectionner
Add
>Ethernet
. - Remplacer le nom de profil
Ethernet connection 1
parLAN
. - Renseigner la rubrique
Device
, par exempleenp3s1
. - Passer
IPv4 CONFIGURATION
deAutomatic
àManual
. - Cliquer sur
Show
pour afficher les détails. - Fournir l’adresse IP de la deuxième interface, par exemple
192.168.3.1/24
. - Ne rien indiquer dans les champs
Gateway
,DNS server
etSearch domains
. - Passer
IPv6 CONFIGURATION
deAutomatic
àIgnore
. - Confirmer par
OK
. - Revenir à la fenêtre principale.
- Activer les deux connexions
WAN
etLAN
. - 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.
- un serveur simple muni d’une seule interface réseau
- un routeur muni de deux interfaces réseau
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_passwd
et 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.conf
et 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.