Guide de renforcement du serveur CentOS 7 | Lisenet.com :: Linux | Sécurité – Serveur d’impression

Author: Titanfall —

Short summary: Ce guide est basé sur une installation minimale de CentOS 7 selon l’idée que vous n’installez que les logiciels dont vous avez besoin. Pour ceux qui connaissent OpenSCAP, vous remarquerez le guide divisé en deux sections principales: Paramètres du système et Services. La première partie contient des règles qui vérifient les paramètres du système, tandis […]

Quick overview

Site
Tutos GameServer
Canonical URL
https://tutos-gameserver.fr/2019/05/04/guide-de-renforcement-du-serveur-centos-7-lisenet-com-linux-securite-serveur-dimpression/
LLM HTML version
https://tutos-gameserver.fr/2019/05/04/guide-de-renforcement-du-serveur-centos-7-lisenet-com-linux-securite-serveur-dimpression/llm
LLM JSON version
https://tutos-gameserver.fr/2019/05/04/guide-de-renforcement-du-serveur-centos-7-lisenet-com-linux-securite-serveur-dimpression/llm.json
Manifest
https://tutos-gameserver.fr/llm-endpoints-manifest.json
Estimated reading time
43 minutes (2564 seconds)
Word count
8544

Key points

Primary visual

Guide de renforcement du serveur CentOS 7 | Lisenet.com :: Linux | Sécurité

 – Serveur d’impression
Main illustration associated with the content.

Structured content

Ce guide est basé sur une installation minimale de CentOS 7 selon l’idée que vous n’installez que les logiciels dont vous avez besoin. Pour ceux qui connaissent OpenSCAP, vous remarquerez le guide divisé en deux sections principales: Paramètres du système et Services. La première partie contient des règles qui vérifient les paramètres du système, tandis que la seconde partie vise à renforcer les services. Une clause de non-responsabilité générale s'applique: n'implémentez pas les modifications dans les systèmes de production à moins que vous ne compreniez ce qu'elles font. 1. Paramètres système – Partitionnement de disque et post-installation 1.1 Cryptage de disque avec kickstart Le moyen le plus simple de chiffrer une partition est lors de l'installation de Kickstart. Ceci peut être réalisé en ajoutant le –Crypté et –Passphrase = options à la définition d'un volume physique LVM. Notre modèle de Kickstart est fourni ci-dessous. Notez que le modèle nécessite un disque de 32 Go. # version = CentOS7.5

# Informations d'autorisation du système

auth --enableshadow --passalgo = sha512 # Utiliser le support d'installation du CD-ROM

CD ROM

ignoredisk --only-use = sda

# Disposition du clavier

clavier --vckeymap = gb --xlayouts = 'gb' # Langue du système

lang en_GB.UTF-8 # SELinux

selinux - en vigueur

# Informations sur le réseau

réseau --bootproto = dhcp --device = eth0 --onboot = on --activate réseau --hostname = ks-c7.example.com

# Mot de passe root en clair: PleaseChangeMe

rootpw --iscrypted $ 6 $ nS0mBJyS $ q / QgCof5unWrT9W3qngTISueSDhDHVNntDqd8sOcgmHp2lq4f / niUbjCmoEzaf3EWQ2x3z / k0eIZaOxkfNtJw # Fuseau horaire du système

fuseau horaire Europe / London --isUtc # Configuration du chargeur de démarrage du système

chargeur de démarrage --location = mbr --boot-drive = sda --timeout = 3 # Informations de nettoyage de partition

clearpart --all --drives = sda zerombr

# Informations de partitionnement de disque # # Votre disque doit faire 32 Go: 1 Go pour / boot et 30 Go pour le volume physique. # # Journal pour le démarrage n'est pas nécessaire donc ext2

part / boot --fstype = "ext2" --ondisk = sda --size = 1024 --label = boot --mkfsoptions = "- m 0" --fsoptions = "rw, nodev, noexec, nosuid"

# La ligne ci-dessous créera un volume physique de 30 Go

part pv.01 --fstype = "lvmpv" --ondisk = sda --size = 30720 --encrypted --passphrase = PleaseChangeMeToSomethingElse volgroup vg_crypto pv.01

# Besoin de pouvoir réduire les systèmes de fichiers donc ext4 sur xfs par défaut

logvol / --fstype = "ext4" --size = 6144 --vgname = vg_crypto --name = lv_root --mkfsoptions = "- m 1" logvol / home --fstype = "ext4" --size = 2048 --vgname = vg_crypto --name = lv_home --mkfsoptions = "- m 0" --fsoptions = "rw, nodev, nosuid" logvol / tmp --fstype = "ext4" --size = 1024 --vgname = vg_crypto --name = lv_tmp --mkfsoptions = "- m 1" --fsoptions = "rw, nodev, noexec, nosuid" logvol / var --fstype = "ext4" --size = 4096 --vgname = vg_crypto --name = lv_var --mkfsoptions = "- m 1" --fsoptions = "rw, nosuid" logvol / var / log --fstype = "ext4" --size = 1024 --vgname = vg_crypto --name = lv_var-log --mkfsoptions = "- m 0" --fsoptions = "rw, nodev, noexec, nosuid " logvol / var / log / audit --fstype = "ext4" --size = 512 --vgname = vg_crypto --name = lv_var-aud --mkfsoptions = "- m 0" --fsoptions = "rw, nodev, noexec , nosuid " logvol / var / tmp --fstype = "ext4" --size = 1024 --vgname = vg_crypto --name = lv_var-tmp --mkfsoptions = "- m 1" --fsoptions = "rw, nodev, noexec, nosuid " logvol / var / www --fstype = "ext4" --size = 1024 --vgname = vg_crypto --name = lv_var-www --mkfsoptions = "- m 0" --fsoptions = "rw, nodev, nosuid" logvol swap --fstype = "swap" --size = 512 --vgname = vg_crypto --name = lv_swap --fsoptions = "swap"

%paquets @coeur

%fin 1.2 Schéma de partitionnement Gardez les partitions suivantes séparées: /démarrage, /maison, / tmp, / var, / var / log, / var / tmp, / var / log / audit, / var / www. Le fait de les placer dans leurs propres partitions donne plus de contrôle sur les options de montage. Cela garantit également que le système ne peut pas être arrêté en raison de l’espace disque insuffisant sur une partition. Se séparer /opter dépend d'une configuration et n'est généralement pas utile, mais non plus nuisible. 1.3 Post-installation Sauvegarder un en-tête LUKS, où / dev / sda2 est la partition chiffrée de LUKS: # cryptsetup luksHeaderBackup / dev / sda2 --header-backup-file /root/luks-header.backup Assurez-vous que le fichier de sauvegarde est stocké hors site, puis supprimé du serveur. Assurez-vous que le système est à jour: # miam mise à jour Supprimez les packages dont vous n’avez pas besoin sur un serveur, par exemple firmware des cartes son, firmware de WinTV, pilotes sans fil, etc. # yum remove alsa- * ivtv- * iwl * firmware aic94xx-firmware 2. Paramètres système – Autorisations de fichiers et masques 2.1 Limiter les options de montage de partition Les partitions doivent avoir des options de montage renforcées:

/démarrage – rw, nodev, noexec, nosuid /maison – rw, nodev, nosuid / tmp – rw, nodev, noexec, nosuid / var – rw, nosuid / var / log – rw, nodev, noexec, nosuid / var / log / audit – rw, nodev, noexec, nosuid / var / www – rw, nodev, nosuid

En règle générale, les applications malveillantes écrivent généralement sur / tmp et ensuite essayer d'exécuter tout ce qui était écrit. Un moyen d'éviter cela est de monter / tmp sur une partition séparée avec les options noexec, Nodev et nosuid activée. Cela empêchera l'exécution binaire de / tmp, désactivez tout binaire en tant que suid root et désactivez la création de tout bloc de périphériques. Le lieu de stockage / var / tmp devrait être lié à monté / tmp, car il n’est pas nécessaire d’avoir plusieurs emplacements pour le stockage temporaire: / tmp / var / tmp none, nodev, noexec, nosuid, bind 0 0 La même chose s'applique à la mémoire partagée / dev / shm: tmpfs / dev / shm tmpfs rw, nodev, noexec, nosuid 0 0 Le pseudo-système de fichiers proc / proc devrait être monté avec caché. Lorsque vous définissez hidepid sur 2, les entrées de répertoires dans / proc sera caché. proc / proc proc rw, hidepid = 2 0 0 Durcissez les supports amovibles en ajoutant Nodev, noexec et nosuid, par exemple.: / dev / cdrom / mnt / cdrom iso9660 ro, noexec, nosuid, nodev, noauto 0 0 2.2 Restreindre le montage et le démontage dynamiques de systèmes de fichiers Ajouter ce qui suit à /etc/modprobe.d/hardening.conf pour désactiver les systèmes de fichiers inhabituels: installer cramfs / bin / true installer freevxfs / bin / true installer jffs2 / bin / true installer hfs / bin / true installer hfsplus / bin / true installer squashfs / bin / true installer udf / bin / true Selon la configuration (si vous n’exécutez pas de grappes, NFS, CIFS, etc.), vous pouvez également désactiver les éléments suivants: installer fat / bin / true installer vfat / bin / true installer cifs / bin / true installer nfs / bin / true installer nfsv3 / bin / true installer nfsv4 / bin / true installer gfs2 / bin / true Il est sage de laisser ext4, xfs et btrfs activés à tout moment. 2.3 Empêcher les utilisateurs de monter un stockage USB Ajouter ce qui suit à /etc/modprobe.d/hardening.conf Pour désactiver le chargement de modprobe des pilotes de stockage USB et FireWire: liste noire usb-storage liste noire firewire-core installer usb-storage / bin / true Désactiver l'autorisation USB. Créer un fichier /opt/usb-auth.sh avec le contenu suivant: #! / bin / bash echo 0> / sys / bus / usb / devices / usb1 / autorisé echo 0> / sys / bus / usb / devices / usb1 / registered_default Si plusieurs périphériques USB sont disponibles, ajoutez-les tous. Créer un fichier de service /etc/systemd/system/usb-auth.service avec le contenu suivant: [Unit]

Description = Désactiver l'authentification USB DefaultDependencies = no

[Service] Type = coup unique ExecStart = / bin / bash /opt/usb-auth.sh

[Install] WantedBy = multi-user.target Définissez les autorisations, activez et démarrez le service: # chmod 0700 /opt/usb-auth.sh # systemctl enable usb-auth.service # systemctl start usb-auth.service Si nécessaire, désactivez la prise en charge du noyau pour USB via la configuration du chargeur de démarrage. Pour ce faire, ajoutez nousb à la ligne de noyau GRUB_CMDLINE_LINUX dans / etc / default / grub et générez le fichier de configuration Grub2: # grub2-mkconfig -o / boot/grub2/grub.cfg Notez que la désactivation de toute la prise en charge du noyau pour USB causera probablement des problèmes pour les systèmes dotés de claviers USB, etc. 2.4 Restreindre les programmes à partir de schémas d'exécution dangereux Configurer /etc/sysctl.conf avec ce qui suit: # Désactiver les core dumps

fs.suid_dumpable = 0

# Désactiver la fonctionnalité de débogage des requêtes système

kernel.sysrq = 0

# Restreindre l'accès aux journaux du noyau

kernel.dmesg_restrict = 1

# Activer la protection ExecShield - non disponible sur CentOS 7

# kernel.exec-shield = 1

# Randomise l'espace mémoire

kernel.randomize_va_space = 2

# Masquer les pointeurs du noyau

kernel.kptr_restrict = 2 Charger les paramètres sysctl: # sysctp -p 2.5 Set UMASK 027 Les fichiers suivants nécessitent le renforcement de umask: / etc / bashrc, /etc/csh.cshrc, /etc/init.d/functions et / etc / profile. Sed one-liner: # sed -i -e '/ umask 022 / umask 027 / g' -e '/ umask 002 / umask 027 / g' / etc / bashrc # sed -i -e '/ umask 022 / umask 027 / g' -e '/ umask 002 / umask 027 / g' /etc/csh.cshrc # sed -i -e '/ umask 022 / umask 027 / g' -e '/ umask 002 / umask 027 / g' / etc / profile # sed -i -e '/ umask 022 / umask 027 / g' -e '/ umask 002 / umask 027 / g' /etc/init.d/functions 2.6 Désactiver les core dumps Ouvrir /etc/security/limits.conf et définissez les éléments suivants: * noyau dur 0 2.7 Fixer des limites de sécurité pour empêcher les dénis de service Ajouter ce qui suit à /etc/security/limits.conf pour appliquer des limites de sécurité sensibles: # 4096 est un bon point de départ

* nofile souple 4096 * nofile dur 65536 * soft nproc 4096 * dur nproc 4096 * Soft Locks 4096 * serrures dures 4096 * pile souple 10240 * pile dure 32768 * Soft Memlock 64 * memlock difficile 64 * maxlogins durs 10

# Soft limite 32 Go, 64 Go dur

* taille douce 33554432 * taille dure 67108864

# Limites pour root

racine molle nofile 4096 racine dure nofile 65536 racine douce nproc 4096 racine dure nproc 4096 pile logicielle racine 10240 racine dure pile 32768 racine molle fsize 33554432 2.8 Vérifier les autorisations des fichiers Assurez-vous que tous les fichiers appartiennent à un utilisateur: # find / -ignore_readdir_race -nouser -print -exec racine chown ; Assurez-vous que tous les fichiers appartiennent à un groupe: # find / -ignore_readdir_race -nogroup -print -exec chgrp root ; Si nécessaire, un chemin spécifique peut être exclu de la recherche, par exemple: # find / -ignore_readdir_race -not -path "/ proc / *" -nouser -print -exec chown root ; Automatiser le processus en créant un fichier cron /etc/cron.daily/unowned_files avec le contenu suivant: #! / bin / bash find / -ignore_readdir_race (-nouser -print -exec chown root ; ), (-nogroup -print -exec chgrp root ; ) Définir la propriété et les autorisations: # racine chown: root /etc/cron.daily/unowned_files # chmod 0700 /etc/cron.daily/unowned_files 2.9 Surveiller les fichiers SUID / GUID Recherchez les fichiers setuid / setgid et identifiez-les si tous sont requis: # find / -xdev -type f -perm -4000 -o -perm -2000 3. Paramètres système – Configuration du pare-feu et du réseau 3.1 Pare-feu Si vous définissez la zone de pare-feu par défaut à supprimer, tous les paquets qui ne sont pas explicitement autorisés à être rejetés. # sed -i "s / DefaultZone =. * / DefaultZone = déposer / g" /etc/firewalld/firewalld.conf Sauf si firewalld est requis, masquez-le et remplacez-le par iptables: # systemctl stop firewalld.service # systemctl mask firewalld.service # systemctl daemon-reload # miam installe iptables-services # systemctl enable iptables.service ip6tables.service Ajouter ce qui suit à / etc / sysconfig / iptables pour n'autoriser que le trafic sortant minimal (DNS, NTP, HTTP / S et SMTPS): *filtre -F INPUT -F SORTIE -F EN AVANT -PASSEMENT ACCEPTER -P FORWARD DROP -P OUTPUT ACCEPT -A INPUT -i lo -m commentaire - commentaire local -j ACCEPTER -A INPUT -d 127.0.0.0/8! -i lo -j REJECT - rejette-avec icmp-port-inaccessible -A INPUT -m conntrack --ctstate CONNEXE, ÉTABLI -j ACCEPTER -A INPUT -p tcp -m tcp -m conntrack --ctstate NOUVEAU --dport 22 -s 10.0.0.0/8 -j ACCEPTER -A INPUT -p tcp -m tcp -m conntrack --ctstate NOUVEAU --dport 22 -s 172.16.0.0/12 -j ACCEPTER -A INPUT -p tcp -m tcp -m conntrack --ctstate NOUVEAU --dport 22 -s 192.168.0.0/16 -j ACCEPT -A INPUT -p tcp -m tcp -m conntrack --ctstate NOUVEAU - rapport 22 -j ACCEPTER -Une entrée -j DROP -A SORTIE -d 127.0.0.0/8 -o lo -m commentaire - commentaire local -j ACCEPTER -A OUTPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A SORTIE -p icmp -m icmp --icmp-type quelconque -j ACCEPTER -A SORTIE -p udp -m udp -m conntrack --ctstate NOUVEAU --dport 53 -j ACCEPTER -A SORTIE -p tcp -m tcp -m conntrack --ctstate NOUVEAU - rapport 53 -j ACCEPTER -A SORTIE -p udp -m udp -m conntrack --ctstate NOUVEAU - rapport 123 -j ACCEPTER -A SORTIE -p tcp -m tcp -m conntrack --ctstate NOUVEAU --dport 80 -j ACCEPT -A SORTIE -p tcp -m tcp -m conntrack --ctstate NOUVEAU --dport 443 -j ACCEPTER -A SORTIE -p tcp -m tcp -m conntrack --ctstate NOUVEAU - rapport 587 -j ACCEPTER -A SORTIE -j LOG - préfixe-journal "iptables_output" -A SORTIE -j REJET - rejette-avec icmp-port-inaccessible COMMETTRE Notez que la règle autorisant tout le trafic SSH entrant doit être supprimée, limitant l'accès à une liste blanche IP uniquement ou masquant SSH derrière un VPN. Idéalement, les règles sortantes devraient être renforcées en limitant l'accès aux serveurs DNS, NTP et SMTP locaux uniquement. Si un système de correctif local est utilisé (par exemple, Red Hat Satellite), le trafic HTTP / S peut également être renforcé, en fonction de la configuration. Ajouter ce qui suit à / etc / sysconfig / ip6tables refuser tout IPv6: *filtre -F INPUT -F SORTIE -F EN AVANT -PUT ENTREE DROP -P FORWARD DROP -P SORTIE DROP COMMETTRE Appliquer les configurations: # iptables-restore </ etc / sysconfig / iptables # ip6tables-restore </ etc / sysconfig / ip6tables 3.2 TCP Wrappers Ouvrir /etc/hosts.allow et autoriser le trafic localhost et SSH: TOUS: 127.0.0.1 sshd: ALL Le fichier /etc/hosts.deny devrait être configuré pour tout refuser par défaut: TOUS: TOUS 3.3 Paramètres du noyau qui affectent la mise en réseau Ouvrir /etc/sysctl.conf et ajoutez ce qui suit: # Désactiver le transfert de paquets

net.ipv4.ip_forward = 0

# Désactive les redirections, pas un routeur

net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0

# Désactiver le routage source

net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0

# Activer la validation de la source par chemin inversé

net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1

# Journalise les paquets avec des adresses impossibles dans le journal du noyau

net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1

# Désactiver les diffusions ICMP

net.ipv4.icmp_echo_ignore_broadcasts = 1

# Ignorer les erreurs fictives ICMP

net.ipv4.icmp_ignore_bogus_error_responses = 1

# Contre les attaques par inondation SYN

net.ipv4.tcp_syncookies = 1

# La désactivation des horodatages peut améliorer la sécurité mais dégrader les performances. # Les horodatages TCP sont utilisés pour améliorer les performances et se protéger contre # Les paquets en retard perturbent votre flux de données. Un effet secondaire de cette fonctionnalité est # que le temps de disponibilité de l'hôte peut parfois être calculé. # Si vous désactivez les horodatages TCP, vous devriez vous attendre à de moins bonnes performances. # et des connexions moins fiables.

net.ipv4.tcp_timestamps = 1

# Désactiver IPv6 sauf si requis

net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1

# Ne pas accepter les annonces de routeur

net.ipv6.conf.all.accept_ra = 0 net.ipv6.conf.default.accept_ra = 0 3.4 Modules de noyau qui affectent la mise en réseau Ouvrir /etc/modprobe.d/hardening.conf et désactivez les modules du noyau Bluetooth: installer bnep / bin / true installer bluetooth / bin / true installer btusb / bin / true installer net-pf-31 / bin / true Désactivez également AppleTalk: installer appletalk / bin / true Si nécessaire, désactivez la prise en charge d'IPv6: options ipv6 désactiver = 1 Désactiver les protocoles (rares): installer dccp / bin / true installez sctp / bin / true installer rds / bin / true installer tipc / bin / true Puisque nous examinons la sécurité des serveurs, le sans fil ne devrait pas être un problème, nous pouvons donc désactiver tous les pilotes sans fil. # pour i dans $ (trouver / lib / modules / $ (uname -r) / kernel / drivers / net / wireless -name "* .ko" -type f);   echo blacklist "$ i" >> / etc / modprobe.d / hardening-wireless.conf; done 3.5 Désactiver les radios Désactiver les radios (wifi et wwan): # nmcli radio tout est éteint 3.6 Désactiver le réseau Zeroconf Ouvrir / etc / sysconfig / network et ajoutez ce qui suit: NOZEROCONF = oui 3.7 Désactiver l'utilisation de l'interface IPv6 par l'interface Ouvrir / etc / sysconfig / network et ajoutez ce qui suit: NETWORKING_IPV6 = no IPV6INIT = no 3.8 renifleur de réseau Le serveur ne doit pas agir comme un renifleur réseau et une capture de packages. Exécutez ce qui suit pour déterminer si une interface est en cours d'exécution en mode promiscuous: # lien ip | grep PROMISC 3.9 Connexion VPN sécurisée Installez le paquet libreswan si la mise en oeuvre de IPSec et IKE est requise. # miam installer libreswan 3.10 Désactiver le client DHCP L'attribution manuelle d'adresses IP offre un degré de gestion supérieur. Pour chaque interface réseau disponible sur le serveur, ouvrez un fichier correspondant. / etc / sysconfig / network-scripts / ifcfg-interface et configurez les paramètres suivants: BOOTPROTO = aucun IPADDR = NETMASK = PASSERELLE = 4. Paramètres système – SELinux Assurez-vous que SELinux n'est pas désactivé dans / etc / default / grubet vérifiez que l'état applique: # sestatus 5. Paramètres système – Contrôle de compte et d'accès 5.1 Supprimer les comptes et les groupes inutilisés Supprimez tout compte non requis, par exemple: # userdel -r adm # userdel -r ftp # userdel -r jeux # userdel -r lp Supprimer tout groupe non requis, par exemple: # jeux groupdel 5.2 Désactiver la connexion root directe # echo> / etc / securetty 5.3 Activer la stratégie de mot de passe sécurisé (haute qualité) Notez que lancer authconfig va écraser les fichiers de configuration PAM détruisant les modifications apportées manuellement. Assurez-vous que vous avez un sauvegarde. Les règles de stratégie de mot de passe sécurisé sont décrites ci-dessous.

Longueur minimale du mot de passe – 16. Nombre minimum de classes de caractères dans un mot de passe – 4. Nombre maximum de mêmes caractères consécutifs dans un mot de passe – 2. Nombre maximal de caractères consécutifs de la même classe dans un mot de passe – 2. Exigez au moins une lettre minuscule et une lettre majuscule dans un mot de passe. Exiger au moins un chiffre dans un mot de passe. Exiger au moins un autre caractère dans un mot de passe.

La commande suivante activera SHA512 et définira les exigences de mot de passe ci-dessus: # authconfig --passalgo = sha512  --passminlen = 16  --passminclass = 4  --passmaxrepeat = 2  --passmaxclassrepeat = 2  --enablereqlower  --enablerequpper  --enablereqdigit  --enablereqother  --mettre à jour Ouvrir /etc/security/pwquality.conf et ajoutez ce qui suit: difok = 8 gecoscheck = 1 Cela garantira que 8 caractères du nouveau mot de passe ne seront pas présents dans l'ancien mot de passe et vérifiera les mots de la chaîne GECOS de mot de passe de l'utilisateur. 5.4 Empêcher la connexion à des comptes avec un mot de passe vide Supprimer toutes les occurrences de nullok de /etc/pam.d/system-auth et /etc/pam.d/password-auth pour empêcher les connexions avec des mots de passe vides. Sed one-liner: # sed -i's / // g '/etc/pam.d/system-auth /etc/pam.d/system-auth-ac # sed -i's / // g '/etc/pam.d/password-auth /etc/pam.d/password-auth-ac 5.5 Définir l'expiration du compte après l'inactivité Désactivez les comptes dès que le mot de passe a expiré. Ouvrir / etc / default / useradd et définissez les éléments suivants: INACTIF = 0 Sed one-liner: # sed -i 's / ^ INACTIVE. * / INACTIF = 0 /' / etc / default / useradd 5.6 Politique de mot de passe sécurisé Ouvrir /etc/login.defs et définissez les éléments suivants: PASS_MAX_DAYS 60 PASS_MIN_DAYS 1 PASS_MIN_LEN 14 PASS_WARN_AGE 14 Sed one-liner: # sed -i -e '/ ^ PASS_MAX_DAYS. * / PASS_MAX_DAYS 60 /'   -e 's / ^ PASS_MIN_DAYS. * / PASS_MIN_DAYS 1 /'   -e 's / ^ PASS_MIN_LEN. * / PASS_MIN_LEN 14 /'   -e 's / ^ PASS_WARN_AGE. * / PASS_WARN_AGE 14 /' /etc/login.defs 5.7 Journal des tentatives de connexion infructueuses Ouvrir /etc/login.defs et activer la journalisation: FAILLOG_ENAB oui Ajoutez également un délai en secondes avant de pouvoir effectuer une autre tentative après un échec de connexion: FAIL_DELAY 4 5.8 S'assurer que les répertoires de base sont créés pour les nouveaux utilisateurs Ouvrir /etc/login.defs et configurer: CREATE_HOME oui 5.9 Vérifier que tous les mots de passe du compte sont masqués La commande ci-dessous devrait renvoyer «x»: # cut -d: -f2 / etc / passwd | uniq 5.10 Définir le délai de refus et de verrouillage pour les tentatives de mot de passe infructueuses Ajouter la ligne suivante immédiatement avant le pam_unix.so déclaration dans le AUTH section de /etc/pam.d/system-auth et /etc/pam.d/password-auth: auth requis pam_faillock.so preauth silencieux deny = 3 unlock_time = 900 fail_interval = 900 Ajoutez la ligne suivante immédiatement après le pam_unix.so déclaration dans le AUTH section de /etc/pam.d/system-auth et /etc/pam.d/password-auth: auth [default=die] pam_faillock.so authfail deny = 3 unlock_time = 900 fail_interval = 900 Ajouter la ligne suivante immédiatement avant le pam_unix.so déclaration dans le COMPTE section de /etc/pam.d/system-auth et /etc/pam.d/password-auth: compte requis pam_faillock.so Le contenu du fichier /etc/pam.d/system-auth peut être vu ci-dessous. #% PAM-1.0

auth requis pam_env.so auth requis pam_faillock.so preauth silencieux deny = 3 unlock_time = 900 fail_interval = 900 autorisation suffisante pam_unix.so try_first_pass auth [default=die] pam_faillock.so authfail deny = 3 unlock_time = 900 fail_interval = 900 autorisation requise pam_succeed_if.so uid> = 1000 quiet_success auth requis pam_deny.so

compte requis pam_faillock.so compte requis pam_unix.so compte suffisant pam_localuser.so compte suffisant pam_succeed_if.so uid <1000 silencieux compte requis pam_permit.so

mot de passe requis pam_pwquality.so try_first_pass local_users_only retry = 3 authtok_type = mot de passe suffisant pam_unix.so sha512 shadow try_first_pass use_authtok rappelez-vous = 5 mot de passe requis pam_deny.so

session facultative pam_keyinit.so révoquer session requise pam_limits.so -session optionnel pam_systemd.so session [success=1 default=ignore] pam_succeed_if.so service dans crond quiet use_uid session requise pam_unix.so De plus, n'autorisez pas les utilisateurs à réutiliser des mots de passe récents en ajoutant le rappelles toi option. Faire /etc/pam.d/system-auth et /etc/pam.d/password-auth configurations immuables pour qu’elles ne soient pas écrasées lors de l’exécution d’authconfig: # chattr + i /etc/pam.d/system-auth /etc/pam.d/password-auth Les comptes seront verrouillés après 3 tentatives de connexion infructueuses: s'identifier[]: pam_faillock (login: auth): échecs de connexion consécutifs pour le compte utilisateur tomas temporairement bloqué Utilisez ce qui suit pour effacer le nombre d’échecs de l’utilisateur: # faillock --user tomas --reset 5.11 Définir le mot de passe du chargeur d'amorçage Empêcher les utilisateurs d’entrer dans la ligne de commande grub et d’éditer les entrées du menu: # grub2-setpassword # grub2-mkconfig -o / boot/grub2/grub.cfg Cela va créer le fichier /boot/grub2/user.cfg s'il n'y en a pas déjà un, qui contiendra le mot de passe haché du chargeur de démarrage Grub2. Vérifier les autorisations de /boot/grub2/grub.cfg: # chmod 0600 /boot/grub2/grub.cfg 5.12 Mode utilisateur unique protégé par mot de passe Le mode utilisateur unique CentOS 7 est protégé par mot de passe par le mot de passe root par défaut dans le cadre de la conception de Grub2 et de systemd. 5.13 Assurer que les utilisateurs s'authentifient de nouveau pour l'escalade des privilèges La balise NOPASSWD permet à un utilisateur d’exécuter des commandes à l’aide de sudo sans devoir fournir de mot de passe. Bien que cela puisse parfois être utile, il est également dangereux. Assurez-vous que la balise NOPASSWD n’existe pas dans / etc / sudoers fichier de configuration ou /etc/sudoers.d/. 5.14 Écrans multiples de la console et verrouillage de la console Installez le package d'écran pour pouvoir émuler plusieurs fenêtres de console: # yum install screen Installez le paquet vlock pour activer le verrouillage de l’écran de la console: # miam installer vlock 5.15 Désactiver l'activation de redémarrage Ctrl-Alt-Suppr Empêcher un utilisateur de la console connecté localement de redémarrer le système lorsque vous appuyez sur Ctrl-Alt-Suppr: # systemctl mask ctrl-alt-del.target 5.16 Bannières d'avertissement pour l'accès au système Ajouter la ligne suivante aux fichiers / etc / issue et /etc/issue.net: Accès non autorisé interdit. Les journaux sont enregistrés et surveillés. 5.17 Définir le délai d'expiration de la session interactive Ouvrir / etc / profile Et mettre: en lecture seule TMOUT = 900 5.18 Authentification à deux facteurs La version récente du serveur OpenSSH permet de chaîner plusieurs méthodes d'authentification, ce qui signifie qu'elles doivent toutes être satisfaites pour qu'un utilisateur puisse se connecter avec succès. Ajout de la ligne suivante à / etc / ssh / sshd_config nécessiterait que l'utilisateur s'authentifie d'abord avec une clé, puis fournisse également un mot de passe. AuthenticationMethods publickey, mot de passe Il s’agit par définition d’une authentification à deux facteurs: le fichier de clé est une propriété de l’utilisateur et le mot de passe du compte est connu de l’utilisateur. L'authentification à deux facteurs pour SSH peut également être configurée à l'aide de Google Authenticator. 5.19 Configurer la taille du fichier d'historique Ouvrir / etc / profile et définissez le nombre de commandes à mémoriser dans l'historique des commandes à 5000: HISTSIZE = 5000 Sed one-liner: # sed -i's / HISTSIZE =. * / HISTSIZE = 5000 / g '/ etc / profile 6. Paramètres système – Comptabilité système avec auditd 6.1 Configuration auditée Ouvrir /etc/audit/auditd.conf et configurez les éléments suivants: local_events = yes write_logs = yes log_file = /var/log/audit/audit.log max_log_file = 25 num_logs = 10 max_log_file_action = rotation space_left = 30 space_left_action = email admin_space_left = 10 admin_space_left_action = email disk_full_action = suspendre disk_error_action = suspendre action_mail_acct = [email protected] flush = data La configuration auditd ci-dessus ne doit jamais utiliser plus de 250 Mo d’espace disque (10 x 25 Mo = 250 Mo) sur / var / log / audit. Ensemble admin_space_left_action = single si vous souhaitez que le système passe en mode utilisateur unique pour une action corrective plutôt que d'envoyer un courrier électronique. Rotation automatique des bûches (max_log_file_action = rotation) minimise les chances que le système manque d’espace disque de manière inattendue en étant rempli de données de journal. Nous devons nous assurer que les données d’événement d’audit sont entièrement synchronisées (flush = data) avec les fichiers de log sur le disque. 6.2 Règles d'audit Les règles d'audit système doivent avoir le mode 0640 ou moins permissif et appartenir à l'utilisateur root: # racine chown: root /etc/audit/rules.d/audit.rules # chmod 0640 /etc/audit/rules.d/audit.rules Ouvrir /etc/audit/rules.d/audit.rules et ajoutez ce qui suit: # Supprimer toutes les règles actuellement chargées

-RÉ

# Définir la taille de la mémoire tampon du noyau

-b 8192

# Définit l'action à effectuer lorsqu'une erreur critique est détectée. # Modes d'échec: 0 = silencieux 1 = printk 2 = panique

-f 1

# Record tente de modifier le fichier localtime

-w / etc / localtime -p wa -k audit_time_rules

# Enregistrer des événements qui modifient les informations utilisateur / groupe

-w / etc / group -p wa -k audit_rules_usergroup_modification -w / etc / passwd -p wa -k audit_rules_usergroup_modification -w / etc / gshadow -p wa -k audit_rules_usergroup_modification -w / etc / shadow -p wa -k audit_rules_usergroup_modification -w / etc / security / opasswd -p wa -k audit_rules_usergroup_modification

# Enregistrer des événements qui modifient l'environnement réseau du système

-w /etc/issue.net -p wa -k audit_rules_networkconfig_modification -w / etc / issue -p wa -k audit_rules_networkconfig_modification -w / etc / hosts -p wa -k audit_rules_networkconfig_modification -w / etc / sysconfig / network -p wa -k audit_rules_networkconfig_modification -a toujours, quittez -F arch = b32 -S nom_hôte -S nom_domaine_s -k audit_rules_networkconfig_modification -a toujours, quittez -F arch = b64 -S nom_hôte -S nom_domaine_s -k audit_rules_networkconfig_modification

# Enregistrer des événements qui modifient les contrôles d'accès obligatoires du système

-w / etc / selinux / -p wa -k MAC-policy

# Enregistrer les tentatives de modification des événements de connexion et de déconnexion

-w / var / log / tallylog -p wa -k connexions -w / var / log / lastlog -p wa -k connexions -w / var / run / faillock / -p wa -k connexions

# Enregistrer les tentatives de modification des informations de démarrage du processus et de la session

-w / var / log / btmp -p wa -k session -w / var / log / wtmp -p wa -k session -w / var / run / utmp -p wa -k session

# Assurez-audit auditd de collecter des informations sur le chargement et le déchargement des modules du noyau

-w / usr / sbin / insmod -p x -k modules -w / usr / sbin / modprobe -p x -k modules -w / usr / sbin / rmmod -p x -k modules -a toujours, quittez -F arch = b64 -S init_module -S delete_module -k modules

# S'assurer que auditd collecte les actions de l'administrateur système

-w / etc / sudoers -p wa -k actions -w /etc/sudoers.d/ -p wa -k actions

# Enregistrez les tentatives de modification du temps avec adjtimex

-a toujours, quittez -F arch = b32 -S adjtimex -S settimeofday -S temps -k audit_time_rules

# Record tentatives de changer le temps par settimeofday

-a toujours, quittez -F arch = b64 -S adjtimex -S settimeofday -k audit_time_rules

# Enregistrez les tentatives de modification de l'heure via clock_settime

-a toujours, quitte -F arch = b32 -S clock_settime -F a0 = 0x0 -k changement d'heure

# Enregistrez les tentatives de modification de l'heure via clock_settime

-a toujours, quitte -F arch = b64 -S clock_settime -F a0 = 0x0 -k changement d'heure

# Enregistrer des événements qui modifient les contrôles d'accès discrétionnaires du système

-a toujours, quittez -F arch = b32 -S chmod -S fchmod -S fchmodat -F auid> = 1000 -F auid! = 4294967295 -k perm_mod -a toujours, quittez -F arch = b32 -S chown -S fchown -S fchownat -S lchown -F auid> = 1000 -F auid! = 4294967295 -k perm_mod -a toujours, quittez -F arch = b64 -S chmod -S fchmod -S fchmodat -F auid> = 1000 -F auid! = 4294967295 -k perm_mod -a toujours, quittez -F arch = b64 -S chown -S fchown -S fchownat -S lchown -F auid> = 1000 -F auid! = 4294967295 -k perm_mod -a toujours, quittez -F arch = b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid> = 1000 -F auid! = 4294967295 -k perm_mod -a toujours, quittez -F arch = b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid> = 1000 -F auid! = 4294967295 -k perm_mod

# S'assurer que auditd collecte les tentatives d'accès non autorisé aux fichiers (non réussi)

-a toujours, quittez -F arch = b32 -S cré -S ouvert -S ouvert à -S ouvert_by_handle_at -S tronqué -S ftruncate -F sortie = -EACCES -F auid> = 1000 -F auid! = 4294967295 -k accès -a toujours, quittez -F arch = b32 -S cré -S ouvrir -S ouvrirat -S open_by_handle_at -S tronquer -S ftronquer -F quitter = -EPERM -F auid> = 1000 -F auid! = 4294967295 -k accès -a toujours, quittez -F arch = b64 -S cré -S ouvert -S ouvert à -S ouvert_by_handle_at -S tronqué -S ftruncate -F sortie = -EACCES -F auid> = 1000 -F auid! = 4294967295 -k accès -a toujours, quittez -F arch = b64 -S cré -S ouvrir -S ouvrirat -S open_by_handle_at -S tronquer -S ftronquer -F quitter = -EPERM -F auid> = 1000 -F auid! = 4294967295 -k accès

# S'assure que auditd collecte des informations sur l'exportation vers le support (avec succès)

-a toujours, quittez -F arch = b32 -S montage -F auid> = 1000 -F auid! = 4294967295 -k export -a toujours, quittez -F arch = b64 -S montage -F auid> = 1000 -F auid! = 4294967295 -k export

# S'assure que auditd collecte les événements de suppression de fichier par utilisateur

-a toujours, quittez -F arch = b32 -S rmdir -S unlink -S unlinkat -S renommer -S renameat -F auid> = 1000 -F auid! = 4294967295 -k supprimer -a toujours, quittez -F arch = b64 -S rmdir -S unlink -S unlinkat -S renommer -S renameat -F auid> = 1000 -F auid! = 4294967295 -k supprimer

# Assurez-audit auditd de collecter des informations sur l'utilisation de commandes privilégiées

-a toujours, sortie -F chemin = / usr / bin / chage -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, quitte -F chemin = / usr / bin / chcon -F perm = x -F auid> = 1000 -F auid! = 4294967295 -F clé = privileged-priv_change -a toujours, quitte -F chemin = / usr / bin / chfn -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, sortie -F chemin = / usr / bin / chsh -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, sortie -F chemin = / usr / bin / crontab -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, sortie -F chemin = / usr / bin / gpasswd -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, sortie -F chemin = / usr / bin / mount -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, quitte -F chemin = / usr / bin / newgrp -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, quitter -F chemin = / usr / bin / passwd -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, quitter -F chemin = / usr / bin / pkexec -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, quitte -F chemin = / usr / bin / screen -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, quittez -f chemin = / usr / bin / ssh-agent -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, sortie -F chemin = / usr / bin / sudo -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, quitte -F chemin = / usr / bin / sudoedit -F perm = x -F auid> = 1000 -F auid! = 4294967295 -F clé = privilégié -a toujours, quitter -F chemin = / usr / bin / su -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, sortie -F chemin = / usr / bin / umount -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, sortie -F chemin = / usr / bin / mur -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a toujours, sortie -F chemin = / usr / bin / écriture -F perm = x -F auid> = 1000 -F auid! = 4294967295 -k privilégié -a always,exit -F path=/usr/lib64/dbus-1/dbus-daemon-launch-helper -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/libexec/openssh/ssh-keysign -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/libexec/utempter/utempter -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/lib/polkit-1/polkit-agent-helper-1 -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/netreport -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/pam_timestamp_check -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/postdrop -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/postqueue -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/restorecon -F perm=x -F auid>=1000 -F auid!=4294967295 -F key=privileged-priv_change -a always,exit -F path=/usr/sbin/semanage -F perm=x -F auid>=1000 -F auid!=4294967295 -F key=privileged-priv_change -a always,exit -F path=/usr/sbin/setsebool -F perm=x -F auid>=1000 -F auid!=4294967295 -F key=privileged-priv_change -a always,exit -F path=/usr/sbin/unix_chkpwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/userhelper -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/usernetctl -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged

# Make the auditd configuration immutable. # The configuration can only be changed by rebooting the machine.

-e 2 The auditd service does not include the ability to send audit records to a centralised server for management directly. It does, however, include a plug-in for audit event multiplexor to pass audit records to the local syslog server. To do so, open the file /etc/audisp/plugins.d/syslog.conf and set: active = yes Enable and start the service: # systemctl enable auditd.service # systemctl start auditd.service 6.3. Enable Kernel Auditing Ouvrir /etc/default/grub and append the following parameter to the kernel boot line GRUB_CMDLINE_LINUX: audit=1 Update Grub2 configuration to reflect changes: # grub2-mkconfig -o /boot/grub2/grub.cfg 7. System Settings – Software Integrity Checking 7.1 Advanced Intrusion Detection Environment (AIDE) Install AIDE: # yum install aide Build AIDE database: # /usr/sbin/aide --init By default, the database will be written to the file /var/lib/aide/aide.db.new.gz. # cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz Storing the database and the configuration file /etc/aide.conf (or SHA2 hashes of the files) in a secure location provides additional assurance about their integrity. Check AIDE database: # /usr/sbin/aide --check By default, AIDE does not install itself for periodic execution. Configure periodic execution of AIDE by adding to cron: # echo "30 4 * * * root /usr/sbin/aide --check|mail -s 'AIDE' [email protected]" >> /etc/crontab Periodically running AIDE is necessary in order to reveal system changes. 7.2 Tripwire Open Source Tripwire is an alternative to AIDE. It is recommended to use one or another, but not both. Install Tripwire from the EPEL repository: # yum install epel-release # yum install tripwire # /usr/sbin/tripwire-setup-keyfiles The Tripwire configuration file is /etc/tripwire/twcfg.txt and the policy file is /etc/tripwire/twpol.txt. These can be edited and configured to match the system Tripwire is installed on, see this blog post for more details. Initialise the database to implement the policy: # tripwire --init Check for policy violations: # tripwire --check Tripwire adds itself to /etc/cron.daily/ for daily execution therefore no extra configuration is required. 7.3 Prelink Prelinking is done by the prelink package, which is not installed by default. # yum install prelink To disable prelinking, open the file /etc/sysconfig/prelink and set the following: PRELINKING=no Sed one-liner: # sed -i 's/PRELINKING.*/PRELINKING=no/g' /etc/sysconfig/prelink Disable existing prelinking on all system files: # prelink -ua 8. System Settings – Logging and Message Forwarding 8.1 Configure Persistent Journald Storage By default, journal stores log files only in memory or a small ring-buffer in the directory /run/log/journal. This is sufficient to show recent log history with journalctl, but logs aren’t saved permanently. Enabling persistent journal storage ensures that comprehensive data is available after system reboot. Open the file /etc/systemd/journald.conf and put the following: [Journal]

Storage=persistent

# How much disk space the journal may use up at most

SystemMaxUse=256M

# How much disk space systemd-journald shall leave free for other uses

SystemKeepFree=512M

# How large individual journal files may grow at most

SystemMaxFileSize=32M Restart the service: # systemctl daemon-reload # systemctl restart systemd-journald 8.2 Configure Message Forwarding to Remote Server Depending on your setup, open /etc/rsyslog.conf and add the following to forward messages to a some remote server: *.* @graylog.example.com:514 Ici *.* représente facility.severity. Note that a single @ sends logs over UDP, where a double @ sends logs using TCP. 8.3 Logwatch Logwatch is a customisable log-monitoring system. # yum install logwatch Logwatch adds itself to /etc/cron.daily/ for daily execution therefore no configuration is mandatory. 9. System Settings – Security Software 9.1 Malware Scanners Install Rkhunter and ClamAV: # yum install epel-release # yum install rkhunter clamav clamav-update # rkhunter --update # rkhunter --propupd # freshclam -v Rkhunter adds itself to /etc/cron.daily/ for daily execution therefore no configuration is required. ClamAV scans should be tailored to individual needs. 9.2 Arpwatch Arpwatch is a tool used to monitor ARP activity of a local network (ARP spoofing detection), therefore it is unlikely one will use it in the cloud, however, it is still worth mentioning that the tools exist. Be aware of the configuration file /etc/sysconfig/arpwatch which you use to set the email address where to send the reports. 9.3 Commercial AV Consider installing a commercial AV product that provides real-time on-access scanning capabilities. 9.4 Grsecurity Grsecurity is an extensive security enhancement to the Linux kernel. Although it isn’t free nowadays, the software is still worth mentioning. The company behind Grsecurity stopped publicly distributing stable patches back in 2015, with an exception of the test series continuing to be available to the public in order to avoid impact to the Gentoo Hardened and Arch Linux communities. Two years later, the company decided to cease free distribution of the test patches as well, therefore as of 2017, Grsecurity software is available to paying customers only. 10. System Settings – OS Update Installation Install the package yum-utils for better consistency checking of the package database. # yum install yum-utils Configure automatic package updates via yum-cron. # yum install yum-cron Add the following to /etc/yum/yum-cron.conf to get notified via email when new updates are available: update_cmd = default update_messages = yes download_updates = no apply_updates = no emit_via = email email_from = [email protected] email_to = [email protected] email_host = localhost Add the following to /etc/yum/yum-cron-hourly.conf to check for bugfix-related updates every hour and automatically download and install them: update_cmd = minimal # yum --bugfix update-minimal

update_messages = yes download_updates = yes apply_updates = yes emit_via = stdio Remarque: security information is provided by RedHat only. When you query a repository that is provided by CentOS it does not supply security metadata (however the EPEL repository does have security metadata). Therefore if you decide to use update_cmd = security, yum will always tell you that nothing from CentOS needs a security update. Enable and start the service: # systemctl enable yum-cron.service # systemctl start yum-cron.service 11. System Settings – Process Accounting The package psacct contain utilities for monitoring process activities:

ac – displays statistics about how long users have been logged on. lastcomm – displays information about previously executed commands. accton – turns process accounting on or off. sa – summarises information about previously executed commands.

Install and enable the service: # yum install psacct # systemctl enable psacct.service # systemctl start psacct.service 1. Services – SSH Server Create a group for SSH access as well as some regular user account who will be a member of the group: # groupadd ssh-users # useradd -m -s /bin/bash -G ssh-users tomas Generate SSH keys for the user: # su - tomas $ mkdir --mode=0700 ~/.ssh $ ssh-keygen -b 4096 -t rsa -C "tomas" -f ~/.ssh/id_rsa Generate SSH host keys: # ssh-keygen -b 4096 -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key # ssh-keygen -b 1024 -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key # ssh-keygen -b 521 -t ecdsa -N "" -f /etc/ssh/ssh_host_ecdsa_key # ssh-keygen -t ed25519 -N "" -f /etc/ssh/ssh_host_ed25519_key Pour RSA keys, 2048 bits is considered sufficient. DSA keys must be exactly 1024 bits as specified by FIPS 186-2. Pour ECDSA keys, the -b flag determines the key length by selecting from one of three elliptic curve sizes: 256, 384 or 521 bits. ED25519 keys have a fixed length and the -b flag is ignored. The host can be impersonated if an unauthorised user obtains the private SSH host key file, therefore ensure that permissions of /etc/ssh/*_key are properly set: # chmod 0600 /etc/ssh/*_key Configurer /etc/ssh/sshd_config with the following: # SSH port.

Port 22

# Listen on IPv4 only.

ListenAddress 0.0.0.0

# Protocol version 1 has been exposed.

Protocol 2

# # OpenSSH cipher-related release notes. # OpenSSH 6.2: added support for AES-GCM authenticated encryption. # The cipher is available as [email protected] et [email protected] # OpenSSH 6.5: added new cipher [email protected] # OpenSSH 6.7: removed unsafe algorithms. CBC ciphers are disabled by default: # aes128-cbc, aes192-cbc, aes256-cbc, 3des-cbc, blowfish-cbc, cast128-cbc. # OpenSSH 6.9: promoted [email protected] to be the default cipher. #

Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr

# # OpenSSH 6.2: added support for the UMAC-128 MAC as [email protected] # and [email protected] The latter being an encrypt-then-mac mode. # Do not use umac-64 or umac-64-etm because of a small 64 bit tag size. # Do not use any SHA1 (e.g. hmac-sha1, [email protected]) MACs # because of a weak hashing algorithm. # Do not use hmac-sha2-256, hmac-sha2-512 or [email protected] # because of an encrypt-and-MAC mode. See the link below: # https://crypto.stackexchange.com/questions/202/should-we-mac-then-encrypt-or-encrypt-then-mac #

MACs [email protected],[email protected],[email protected]

# # OpenSSH 6.5: added support for ssh-ed25519. It offers better security # than ECDSA and DSA. # OpenSSH 7.0: disabled support for ssh-dss. # OpenSSH 7.2: added support for rsa-sha2-512 and rsa-sha2-256. #

HostKeyAlgorithms ssh-ed25519,[email protected],ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,[email protected],[email protected],[email protected],[email protected],[email protected]

# # OpenSSH 6.5: added support for key exchange using elliptic-curve # Diffie Hellman in Daniel Bernstein's Curve25519. # OpenSSH 7.3: added support for diffie-hellman-group14-sha256, # diffie-hellman-group16-sha512 and diffie-hellman-group18-sha512. #

KexAlgorithms [email protected],diffie-hellman-group18-sha512,diffie-hellman-group16-sha512,diffie-hellman-group14-sha256

# HostKeys for protocol version 2.

HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ed25519_key

# Disabled because uses a small 1024 bit key.

#HostKey /etc/ssh/ssh_host_dsa_key

# Disabled because uses weak elliptic curves. # See: https://safecurves.cr.yp.to/

#HostKey /etc/ssh/ssh_host_ecdsa_key

# INFO is a basic logging level that will capture user login/logout activity. # DEBUG logging level is not recommended for production servers.

LogLevel INFO

# Disconnect if no successful login is made in 60 seconds.

LoginGraceTime 60

# Do not permit root logins via SSH.

PermitRootLogin no

# Check file modes and ownership of the user's files before login.

StrictModes yes

# Close TCP socket after 2 invalid login attempts.

MaxAuthTries 2

# The maximum number of sessions per network connection.

MaxSessions 3

# User/group permissions.

AllowUsers AllowGroups ssh-users DenyUsers root DenyGroups root

# Password and public key authentications.

PasswordAuthentication no PermitEmptyPasswords no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys

# Disable unused authentications mechanisms.

RSAAuthentication no # DEPRECATED

RhostsRSAAuthentication no # DEPRECATED

ChallengeResponseAuthentication no KerberosAuthentication no GSSAPIAuthentication no HostbasedAuthentication no IgnoreUserKnownHosts yes

# Disable insecure access via rhosts files.

IgnoreRhosts yes

AllowAgentForwarding no AllowTcpForwarding no

# Disable X Forwarding.

X11Forwarding no

# Disable message of the day but print last log.

PrintMotd no PrintLastLog yes

# Show banner.

Banner /etc/issue

# Do not send TCP keepalive messages.

TCPKeepAlive no

# Default for new installations.

UsePrivilegeSeparation sandbox

# Prevent users from potentially bypassing some access restrictions.

PermitUserEnvironment no

# Disable compression.

Compression no

# Disconnect the client if no activity has been detected for 900 seconds.

ClientAliveInterval 900 ClientAliveCountMax 0

# Do not look up the remote hostname.

UseDNS no

UsePAM yes You can use the ssh-audit tool to test your SSH server configuration. In case you want to change the default SSH port to something else, you will need to tell SELinux about it. # yum install policycoreutils-python For example, to allow SSH server to listen on TCP 2222, do the following: # semanage port -a -t ssh_port_t 2222 -p tcp Ensure that the firewall allows incoming traffic on the new SSH port and restart the sshd service. 2. Service – Network Time Protocol CentOS 7 should come with Chrony, make sure that the service is enabled: # systemctl enable chronyd.service 3. Services – Mail Server 3.1 Postfix Postfix should be installed and enabled already. In case it isn’t, the do the following: # yum install postfix # systemctl enable postfix.service Ouvrir /etc/postfix/main.cf and configure the following to act as a null client: smtpd_banner = $myhostname ESMTP inet_interfaces = loopback-only inet_protocols = ipv4 mydestination = local_transport = error: local delivery disabled unknown_local_recipient_reject_code = 550 mynetworks = 127.0.0.0/8 relayhost = [mail.example.com]:587 Optionally (depending on your setup), you can configure Postfix to use authentication: # yum install cyrus-sasl-plain Ouvrir /etc/postfix/main.cf and add the following: smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_CApath = /etc/ssl/certs smtp_use_tls = yes Ouvrir /etc/postfix/sasl_passwd and put authentication credentials in a format of: [mail.example.com]:587 [email protected]:password Set permissions and create a database file: # chmod 0600 /etc/postfix/sasl_passwd # postmap /etc/postfix/sasl_passwd Restart the service and ensure that firewall allows outgoing traffic to the SMTP relay server. 3.2 Mail Distribution to Active Mail Accounts Configure the file /etc/aliases to have a forward rule for the root user. 4. Services – Remove Obsolete Services None of these should be installed on CentOS 7 minimal: # yum remove xinetd telnet-server rsh-server   telnet rsh ypbind ypserv tfsp-server bind   vsfptd dovecot squid net-snmpd talk-server talk Check all enabled services: # systemctl list-unit-files --type=service|grep enabled Disable kernel dump service: # systemctl disable kdump.service # systemctl mask kdump.service Disable everything that is not required, e.g.: # systemctl disable tuned.service 5. Services – Restrict at and cron to Authorised Users Si le fichier cron.allow exists, then only users listed in the file are allowed to use cron, and the cron.deny file is ignored. # echo root > /etc/cron.allow # echo root > /etc/at.allow # rm -f /etc/at.deny /etc/cron.deny Note that the root user can always use cron, regardless of the usernames listed in the access control files. 6. Services – Disable X Windows Startup This can be achieved by setting a default target: # systemctl set-default multi-user.target 7. Services – Fail2ban Install Fail2ban from the EPEL repository: # yum install epel-release # yum install fail2ban If using iptables rather than firewalld, open the file /etc/fail2ban/jail.d/00-firewalld.conf and comment out the following line: #banaction = firewallcmd-ipset Fail2Ban uses /etc/fail2ban/jail.conf. Configuration snippet for SSH is provided below: [sshd]

port = ssh enabled = true ignoreip = 10.8.8.61 bantime = 600 maxretry = 5 If you run SSH on a non-default port, you can change the port value to any positive integer and then enable the jail. # systemctl enable fail2ban.service # systemctl start fail2ban.service 8. Services – Sysstat to Collect Performance Activity Sysstat may provide useful insight into system usage and performance, however, unless used, the service should be disabled, or not installed at all. # yum install sysstat # systemctl enable sysstat.service # systemctl start sysstat.service Références OpenSCAP Security Guide NSA Guide to the Secure Configuration of Red Hat Enterprise Linux 5 https://highon.coffee/blog/security-harden-centos-7/ https://linux-audit.com/linux-system-hardening-adding-hidepid-to-proc/ https://www.openssh.com/releasenotes.html Secure Secure Shell What is pam_faillock and how to use it in Red Hat Enterprise Linux Revision This guide was last updated on 26/03/2018.

Click to rate this post! [Total: 0 Average: 0]

Topics and keywords

Themes: Serveur d'impression

License & attribution

License: CC BY-ND 4.0.

Attribution required: yes.

Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json

LLM Endpoints plugin version 1.1.2.