1.13. Configuration du verrouillage du pare-feu
Les applications ou services locaux peuvent modifier la configuration du pare-feu s'ils sont exécutés en tant que root
(par exemple), libvirt). Cette fonction permet à l'administrateur de verrouiller la configuration du pare-feu de sorte qu'aucune application ou uniquement les applications ajoutées à la liste d'autorisation de verrouillage puissent demander des modifications du pare-feu. Les paramètres de verrouillage sont désactivés par défaut. S'ils sont activés, l'utilisateur peut être sûr qu'aucune modification indésirable n'est apportée à la configuration du pare-feu par des applications ou des services locaux.
1.13.1. Configuration du verrouillage à l'aide de l'interface de programmation
Vous pouvez activer ou désactiver la fonction de verrouillage à l'aide de la ligne de commande.
Procédure
Pour savoir si le verrouillage est activé, utilisez la commande suivante à l'adresse
root
:# firewall-cmd --query-lockdown
La commande affiche
yes
avec l'état de sortie0
si le verrouillage est activé. Dans le cas contraire, elle afficheno
avec l'état de sortie1
.Pour activer le verrouillage, entrez la commande suivante à l'adresse
root
:# firewall-cmd --lockdown-on
Pour désactiver le verrouillage, utilisez la commande suivante à l'adresse
root
:# firewall-cmd --lockdown-off
1.13.2. Configuration des options de la liste d'autorisation de verrouillage à l'aide de l'interface de gestion
La liste des autorisations de verrouillage peut contenir des commandes, des contextes de sécurité, des utilisateurs et des identifiants d'utilisateur. Si une entrée de commande dans la liste d'autorisation se termine par un astérisque "*", toutes les lignes de commande commençant par cette commande seront prises en compte. Si l'astérisque n'est pas présent, la commande absolue, y compris les arguments, doit correspondre.
Le contexte est le contexte de sécurité (SELinux) d'une application ou d'un service en cours d'exécution. Pour obtenir le contexte d'une application en cours d'exécution, utilisez la commande suivante :
$ ps -e --context
Cette commande renvoie toutes les applications en cours d'exécution. Faites passer la sortie par l'outil grep pour obtenir l'application qui vous intéresse. Par exemple :
$ ps -e --context | grep example_program
Pour dresser la liste de toutes les lignes de commande figurant dans la liste d'autorisation, entrez la commande suivante à l'adresse
root
:# firewall-cmd --list-lockdown-whitelist-commands
Pour ajouter une commande command à la liste des autorisations, entrez la commande suivante sous la forme
root
:# firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'
Pour supprimer une commande command de la liste des autorisations, entrez la commande suivante sous la forme
root
:# firewall-cmd --remove-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'
Pour savoir si la commande command figure dans la liste des autorisations, entrez la commande suivante sous la forme
root
:# firewall-cmd --query-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'
La commande affiche
yes
avec l'état de sortie0
si elle est vraie. Elle afficheno
avec l'état de sortie1
dans le cas contraire.Pour dresser la liste de tous les contextes de sécurité figurant dans la liste d'autorisations, entrez la commande suivante à l'adresse
root
:# firewall-cmd --list-lockdown-whitelist-contexts
Pour ajouter un contexte context à la liste des autorisations, entrez la commande suivante sous
root
:# firewall-cmd --add-lockdown-whitelist-context=context
Pour supprimer un contexte context de la liste des autorisations, entrez la commande suivante sous
root
:# firewall-cmd --remove-lockdown-whitelist-context=context
Pour savoir si le contexte context figure dans la liste des autorisations, entrez la commande suivante en tant que
root
:# firewall-cmd --query-lockdown-whitelist-context=context
Imprime
yes
avec l'état de sortie0
, si vrai, imprimeno
avec l'état de sortie1
sinon.Pour dresser la liste de tous les ID d'utilisateur figurant dans la liste d'autorisation, entrez la commande suivante à l'adresse
root
:# firewall-cmd --list-lockdown-whitelist-uids
Pour ajouter l'ID d'utilisateur uid à la liste d'autorisations, entrez la commande suivante sous
root
:# firewall-cmd --add-lockdown-whitelist-uid=uid
Pour supprimer l'ID d'utilisateur uid de la liste des autorisations, entrez la commande suivante en tant que
root
:# firewall-cmd --remove-lockdown-whitelist-uid=uid
Pour savoir si l'ID de l'utilisateur uid figure dans la liste des autorisations, entrez la commande suivante :
$ firewall-cmd --query-lockdown-whitelist-uid=uid
Imprime
yes
avec l'état de sortie0
, si vrai, imprimeno
avec l'état de sortie1
sinon.Pour dresser la liste de tous les noms d'utilisateur figurant dans la liste d'autorisation, entrez la commande suivante à l'adresse
root
:# firewall-cmd --list-lockdown-whitelist-users
Pour ajouter le nom d'utilisateur user à la liste des autorisations, entrez la commande suivante en tant que
root
:# firewall-cmd --add-lockdown-whitelist-user=user
Pour supprimer le nom d'utilisateur user de la liste des autorisations, entrez la commande suivante en tant que
root
:# firewall-cmd --remove-lockdown-whitelist-user=user
Pour savoir si le nom d'utilisateur user figure dans la liste des autorisations, entrez la commande suivante :
$ firewall-cmd --query-lockdown-whitelist-user=user
Imprime
yes
avec l'état de sortie0
, si vrai, imprimeno
avec l'état de sortie1
sinon.
1.13.3. Configuration des options de la liste d'autorisation de verrouillage à l'aide de fichiers de configuration
Le fichier de configuration de la liste d'autorisations par défaut contient le contexte NetworkManager
et le contexte par défaut libvirt
. L'ID utilisateur 0 figure également sur la liste.
Les fichiers de configuration d'allowlist sont stockés dans le répertoire /etc/firewalld/
.
<?xml version="1.0" encoding="utf-8"?> <whitelist> <selinux context="system_u:system_r:NetworkManager_t:s0"/> <selinux context="system_u:system_r:virtd_t:s0-s0:c0.c1023"/> <user id="0"/> </whitelist>
Voici un exemple de fichier de configuration allowlist autorisant toutes les commandes de l'utilitaire firewall-cmd
, pour un utilisateur appelé user dont l'identifiant est 815
:
<?xml version="1.0" encoding="utf-8"?> <whitelist> <command name="/usr/libexec/platform-python -s /bin/firewall-cmd*"/> <selinux context="system_u:system_r:NetworkManager_t:s0"/> <user id="815"/> <user name="user"/> </whitelist>
Cet exemple montre à la fois user id
et user name
, mais une seule option est nécessaire. Python est l'interpréteur et est ajouté à la ligne de commande. Vous pouvez également utiliser une commande spécifique, par exemple :
# /usr/bin/python3 /bin/firewall-cmd --lockdown-on
Dans cet exemple, seule la commande --lockdown-on
est autorisée.
Dans Red Hat Enterprise Linux, tous les utilitaires sont placés dans le répertoire /usr/bin/
et le répertoire /bin/
est lié par symétrie au répertoire /usr/bin/
. En d'autres termes, bien que le chemin d'accès à firewall-cmd
, lorsqu'il est saisi sous la forme root
, puisse se résoudre en /bin/firewall-cmd
, /usr/bin/firewall-cmd
peut désormais être utilisé. Tous les nouveaux scripts doivent utiliser le nouvel emplacement. Mais attention, si les scripts qui s'exécutent sous root
sont écrits pour utiliser le chemin /bin/firewall-cmd
, ce chemin de commande doit être ajouté à la liste des autorisations, en plus du chemin /usr/bin/firewall-cmd
, traditionnellement utilisé uniquement par les utilisateurs qui ne sont pas deroot
.
Le *
à la fin de l'attribut name d'une commande signifie que toutes les commandes qui commencent par cette chaîne correspondent. Si le *
n'est pas présent, la commande absolue, y compris les arguments, doit correspondre.