Les systèmes Linux sont des choses compliquées. Prête à l'emploi, chaque distribution comprend un certain nombre de services destinés à vous aider à faire fonctionner les choses. Certaines distributions activent moins de services par défaut, et d'autres en activent davantage. La différence est dans le confort. Certaines distributions essaient de vous permettre de démarrer rapidement, elles ont donc un grand nombre de services par défaut activés pour vous faciliter l'installation, la connexion et la configuration. D'autres adoptent l'approche inverse et n'installent presque rien par défaut.
Cet article est le début d'une courte série, où nous parlerons un peu de durcissement, un peu de segmentation, et enfin comment analyser nos réseaux pour voir si nous avons bien fait les choses. Alors attendez et laissez-moi vous montrer quelques couches de défense.
Installer moins de logiciels
Lorsque j'installe un nouveau système, j'essaie d'en installer le moins possible. Je commence avec l'ensemble de packages de base et n'installe vraiment rien d'autre. Il est simple d'ajouter des services après l'installation, alors pourquoi compliquer le processus ? De plus, si vous le faites souvent, vous souhaiterez probablement installer à partir d'un système Kickstart (ou modèle). Donc, vous voudriez que cette configuration soit aussi simple et générique que possible.
Pour cet article, j'ai installé un système de base Red Hat Enterprise Linux (RHEL) 7.6 pour effectuer de vrais tests. J'ai fait le strict minimum lors de l'installation, en sélectionnant la base
ensemble de paquets et configuration de mes mots de passe, noms d'utilisateur et réseau. J'ai également activé le protocole NTP (Network Time Protocol).
Identifier les ports ouverts
Après l'installation, nous pouvons voir la liste des ports ouverts. Les ports sont la façon dont les services exécutés sur votre serveur permettent à d'autres systèmes de s'y connecter. Un serveur Web, par exemple, liera les ports 80 et 443 au service du serveur Web. Dans cet article, nous identifierons les services qui ont des ports ouverts dans votre installation de base, puis verrons comment répertorier les services et désactiver ceux dont nous ne voulons pas.
Sur un système Red Hat Enterprise Linux 7.6, nous utilisons le ss
commande pour voir ces informations. Sur les systèmes toujours livrés avec netstat
, vous utiliserez le netstat
commande.
Exécution de ss
sur notre système de test montre quelques ports ouverts :
[root@rhel76test ~]# ss -tulnp --no-header | awk '{print($1, $5, $7)}'
udp *:68 users:(("dhclient",pid=3316,fd=6))
udp 127.0.0.1:323 users:(("chronyd",pid=2974,fd=1))
udp ::1:323 users:(("chronyd",pid=2974,fd=2))
tcp *:22 users:(("sshd",pid=3523,fd=3))
tcp 127.0.0.1:25 users:(("master",pid=3771,fd=13))
tcp :::22 users:(("sshd",pid=3523,fd=4))
tcp ::1:25 users:(("master",pid=3771,fd=14))
Il semble que la base RHEL 7.6 ne soit pas mauvaise. Remarquez dans la deuxième colonne, certains des ports ouverts affichent une adresse IP puis un port, et d'autres ont un *
puis un port. Les entrées qui ressemblent à 127.0.0.1:25
signifie qu'ils écoutent simplement sur localhost. Ce résultat signifie qu'ils ne sont pas accessibles à distance. Les services qui ressemblent à *:22
signifie qu'ils écoutent sur n'importe quelle interface. De même, pour les adresses IPv6, nous avons ::1:323
, et :::22
. Le ::1
les entrées sont localhost, le :::
sont grands ouverts.
Tout cela signifie que ce système n'a que deux ports IPv4 et un port IPv6, ouverts sur le monde. Le dhclient
service est probablement un bon exemple de quelque chose que nous pourrions désactiver (ce qui fermerait son port), mais seulement si votre serveur n'utilise pas DHCP pour obtenir son adresse IP. Dans le cas de mon serveur de test, c'est le cas.
Désactiver les services
Répertorier les services et les arrêter/désactiver est relativement facile sur Red Hat Enterprise Linux 7. Nous utiliserons systemd
pour lister toutes les unités actives, puis lui dire d'arrêter et de désactiver celles que nous ne voulons pas exécuter.
Pour répertorier tous les services en cours d'exécution, vous pouvez utiliser systemctl list-units --type=service --state=running
. Sur mon système de test, le résultat montre un nombre très modeste de 19 services, et la plupart d'entre eux semblent nécessaires. Nous en choisirons un pour la démonstration :
[root@rhel76test ~]# systemctl list-units --type=service --state=running
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
firewalld.service loaded active running firewalld - dynamic firewall daemon
[email protected] loaded active running Getty on tty1
lvm2-lvmetad.service loaded active running LVM2 metadata daemon
NetworkManager.service loaded active running Network Manager
polkit.service loaded active running Authorization Manager
postfix.service loaded active running Postfix Mail Transport Agent
qemu-guest-agent.service loaded active running QEMU Guest Agent
rhnsd.service loaded active running LSB: Starts the Spacewalk Daemon
rhsmcertd.service loaded active running Enable periodic update of entitlement certificates.
rsyslog.service loaded active running System Logging Service
sshd.service loaded active running OpenSSH server daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
systemd-udevd.service loaded active running udev Kernel Device Manager
tuned.service loaded active running Dynamic System Tuning Daemon
Disons que nous ne voulions pas que Postfix soit chargé au démarrage. Nous utiliserions simplement systemctl stop postfix
, puis systemctl disable postfix
, comme ceci :
[root@rhel76test ~]# systemctl stop postfix
[root@rhel76test ~]# systemctl disable postfix
Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.
[root@rhel76test ~]# systemctl list-units --type=service --state=running | grep postfix
Maintenant, vous ne voulez probablement pas désactiver Postfix, mais vous avez compris.
Conclusion
Donc, voilà. J'ai appris quelque chose aujourd'hui :prêt à l'emploi, Red Hat Enterprise Linux 7.6 est plutôt soigné et ordonné. J'espère que vous avez appris à rechercher et à désactiver des services pour réduire votre surface d'attaque.
Connectez-vous pour le prochain épisode de cette série, où je parlerai de la segmentation du réseau et du pare-feu
Merci d'avoir lu !