Bonjour,
J’ai voulu bien faire et supprimer ufw (et donc iptables) de ma debian bookworm, installés par habitude, afin d’utiliser nftables puisque c’est désormais le défaut.
J’ai donc suivi cette page pour migrer les régles, et tout s’est bien passé (export, translate, puis import). J’ai ensuite supprimé les paquets iptables et ufw. Et passé le service nftables à « enable ».
$ sudo systemctl status nftables
● nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; enabled; preset: enabled)
Active: active (exited) since Fri 2022-08-12 18:10:54 CEST; 16h ago
Docs: man:nft(8)
http://wiki.nftables.org
Main PID: 716 (code=exited, status=0/SUCCESS)
CPU: 6ms
J’avais une VM de démarrée, elle a immédiatement disparue, et dans virt-manager, toutes mes VMs définies ont également disparues. Bon, j’ai fini par désinstaller/réinstaller tous les paquets pour KVM, et elles sont revenues (les fichiers .xml de mes VMs sont dans /etc/libvirt/qemu/).
Mais je n’arrive plus à démarrer le network, avec un message d’erreur faisant référence à /usr/sbin/iptables (qui effectivement n’est plus présent, et pour cause !) :
$ sudo virsh net-list --all
Nom État Démarrage automatique Persistent
---------------------------------------------------------
default inactif Oui Oui
$ sudo virsh net-autostart default
Réseau default marqué en démarrage automatique
$ sudo virsh net-start default
erreur :Impossible de démarrer le réseau default
erreur :internal error: Failed to apply firewall rules /usr/sbin/iptables -w --table filter --list-rules: libvirt: erreur : cannot execute binary /usr/sbin/iptables: Aucun fichier ou dossier de ce type
J’ai cherché sur le net sans rien trouvé de consistant avec cette erreur. Est-ce qu’il faut réinstaller iptables ? faire un purge ou un truc du genre ? cette référence à iptables est bizarre tout de même, ou un truc m’a échappé…
J’ai aussi vu des références à firewalld nécessaire pour libvirt ?? est-ce qu’il faut l’installer (je n’ai pas testé) ?
Si quelqu’un a-t-il une idée pour démarrer ce réseau ?
Merci d’avance.
Mise à jour : après beaucoup de recherches infructueuses, j’ai réinstallé le paquet iptables pour résoudre l’erreur, mais j’avais toujours le même message bien que le binaire était présent.
J’ai alors réinstallé ufw, et passer nftables en disabled, décidé à revenir à ma situation de départ. J’ai alors eu des erreurs avec ufw sur un simple $ sudo ufw status verbose.
En désespoir de cause, j’ai redémarré , je n’avais alors plus accès au réseau. J’ai alors supprimé ufw et iptables et réactivé nftables, et là miracle, tout fonctionne. Je n’y comprend rien !
Là, je me bat pour trouver la syntaxe des rules pour mon serveur samba… Je vais finir par y arriver ! MAis si quelqu’un a un lien sympa pour apprendre nftables, je suis preneur !
Good job.
L’architecture nftables est directement embarquée dans le noyau.
Après passage {ip->nf}tables, il faut donc quand-même rebooter pour prévenir le noyau qu’il va gérer les tables nf.
Un peu de lecture de fond, à la demande.
――――――――――
What are the benefits of nftables?
→ The main advantages of nftables are:
Merci pour les liens, j’ai pu recréer proprement mes « rules » (et les retrouver au redémarrage !).
Car si j’ai bien compris, les commandes « nft add ... » sont dynamiques et perdues si l’on s’arrête là. Une fois les règles créées, il faut afficher les tables (nft list table …) puis en faire un copier/coller dans /etc/nftables.conf pour les retrouver au prochain redémarrage !
Mais hélas mon problème de virtual network qui ne démarre pas est réapparu, et mes VMs ne démarrent plus.
Il semble bien qu’il y ait un problème entre libvirt et un système qui n’utilise que nftables : j’ai enfin trouvé une page qui évoque ce problème.
Le contournement serait de ne pas utiliser le réseau virtuel créé par libvirt : $ sudo virsh net-autostart --network default --disable
(voir le supprimer $ sudo virsh net-destroy default)
pour ensuite utiliser des « bridge network » dans les VMs qui ne n’ajoutent pas de règles.
Voilà j’en suis là, je regarde comment créer cette interface réseau de type bridge dans mes VMs… Finalement ce ne sera pas plus mal qu’une interface de type NAT, où l’on est toujours embêté pour les accès aux machines du LAN…
Ton problème de compatibilité ‹ nftables / virtual network › est pointu, et comme je ne peux pas expérimenter, je ne sais pas. A creuser.
Ça par contre, un peu étrange.
Mon fichier /etc/nftables.conf ne bouge pas, heureusement.
A moins que tu évoques quelque-chose de spécifiquement relatif à la virtualisation.
Tu ne commences pas par le plus simple…
D’abord commencer par résoudre « le problème de virtual network qui ne démarre pas est réapparu ».
Pour le virtual network , je me demande si le message d’erreur est parlant, j’ai bien peur que cela n’ait rien à voir avec iptables…
Mais concernant nftables, voilà ce que je fais et constate. Je crée une table, une chain et une règle comme le dit la documentation :
Donc je ne sais pas ce que je loupe, mais la seule manière que j’ai trouvé de conserver mes tables/chain/règles, c’est de les ajouter au fichier /etc/nftables.confdont je lis d’ailleurs qu’il contient la configuration de nftables dans la page wiki de debian : "By default, rules are located in /etc/nftables.conf".
J’ai pu réactiver le réseau virtuel en réinstallant iptables (+reboot, ce que je n’avais pas fait la dernière fois). Donc mes VMs démarrent, tout va bien.
Mais du coup je ne sais plus trop où j’en suis côté iptables. Le service n’existe pas :
$ sudo systemctl status iptables.service
Unit iptables.service could not be found.
Mais je vois les rules sans doute crées par libvirt lors de l’activation du réseau : sur un sudo iptables -L, je vois plein de rules à propos de LIBVIRT_ INP, ou LIBVIRT_FWX, etc…
Et quand je tape sudo nft list tables, je vois d’autres tables que la mienne qui ont été ajoutées :
$ sudo nft list tables
table inet filter
table inet incoming-traffic
table ip filter
table ip nat
table ip mangle
table ip6 filter
table ip6 nat
table ip6 mangle
Que faut-il en conclure ?
Je pense que ces tables « ip filter », « ip nat », « ip mangle », « ip6 filter », « ip6 nat », « ip6 mangle » ont été ajoutées par libvirt.
Mais que seul nftables gère désormais le firewall.
Et éventuellement une dépendance de libvirt sur iptables !
Je me suis mal exprimé en parlant de dépendances. Le binaire n’a pas de dépendances, ok, mais de ce que je comprend de mon problème, c’est qu’en utilisant la commande virsh pour activer le réseau virtuel créé, si iptables n’est pas présent sur le système, cela ne fonctionne pas.
Je ne vois pas ce que je pourrais conclure d’autre, et en l’état, je suis bien obligé d’avoir à la fois iptables et nftables d’installés si je veux pouvoir utiliser mes VMs.
J’essaierai de voir si je peux reproduire le problème sur une autre machine. Pour l’instant je reste comme ça, je n’ai pas vraiment d’autre solution.
$ sudo apt remove -s iptables
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Le paquet suivant a été installé automatiquement et n'est plus nécessaire :
libip6tc2
Veuillez utiliser « sudo apt autoremove » pour le supprimer.
Les paquets suivants seront ENLEVÉS :
iptables
0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.
Remv iptables [1.8.8-1]
$ sudo virsh net-list --all
[sudo] Mot de passe de pascal :
Nom État Démarrage automatique Persistent
-------------------------------------------------------
default actif Oui Oui
Et je vire iptables :
$ sudo apt remove iptables
Et je redémarre.
$ sudo virsh net-list --all
Nom État Démarrage automatique Persistent
---------------------------------------------------------
default inactif Oui Oui
$ sudo virsh net-start default
erreur :Impossible de démarrer le réseau default
erreur :internal error: Failed to apply firewall rules /usr/sbin/iptables -w --table filter --list-rules: libvirt: erreur : cannot execute binary /usr/sbin/iptables: Aucun fichier ou dossier de ce type
Il faut donc purger/nettoyer tes configurations, et repartir sur du propre.
Ça m’étonnerait qu’il y ait une erreur de dépendance de tes paquets ‹ virsh** ›, à moins que tu pointes un bug de dépendance.
Pas besoin d’une si longue liste pour N-M.
Network-manager ne dépend pas, mais Suggère: iptables, comme il pourrait suggérer nftables, c’est-à-dire suggère un firewall.
Tu ne pourrais pas enlever un paquet qui dépendrait d’iptables, sans supprimer iptables.
Toujours pas d’iptables.
Que dit ceci:
Tout s’éclaire ! Avant-hier, en désespoir de cause, j’avais envoyé un mail à la mailing list support user de libvirt (chez redhat en fait). Et j’ai eu la réponse hier soir.
Il y a bien une dépendance entre libvirt et iptables. Sur Debian, elle se trouve dans le paquet libvirt-daemon-system. D’après le type, si debian te laisse retirer iptables sans te prévenir, il s’agit d’un bug.
@Verner : je vais t’envoyer la réponse complète en MP, c’est très intéressant.
Maintenant, je me demande s’il ne faudrait pas créer un bug dans bookworm à ce sujet ? JE ne l’ai jamais fait, je ne sais même si j’ai le droit de le faire ?
»»» iptables ou firewalld
Tu peux donc installer firewalld au lieu d’iptables, pour réellement éviter iptables.
▸▸ Le point qui m’échappe dans ce que je t’ai demandé, c’est comment tu peux supprimer iptables, sans supprimer libvirt-daemon-system. Pas normal.
Maintenant, quand je donne des commandes, ce n’est pas juste pour faire joli, j’aime bien voir le retour, sans avoir à redemander. C’est vous qui voyez.
Désolé, je n’ai pas renvoyé le retour des commandes parce que je croyais le problème identifié avec la réponse du support libvirt.
Le voilà :
$ sudo grep -r '/usr/sbin/iptables' /etc/
$ dpkg -l |awk '$2 ~ /tables|qemu|fail|fire/ {print $1,$2}'
ii firefox-esr
ii firefox-esr-l10n-fr
ii firewalld
ii iptables
ii ipxe-qemu
ii libnftables1:amd64
ii libvirt-daemon-driver-qemu
ii libxtables12:amd64
ii nftables
ii python3-firewall
ii python3-nftables
ii qemu-block-extra
ii qemu-efi-aarch64
ii qemu-efi-arm
ii qemu-system
ii qemu-system-arm
ii qemu-system-common
ii qemu-system-data
ii qemu-system-gui
ii qemu-system-mips
ii qemu-system-misc
ii qemu-system-ppc
ii qemu-system-sparc
ii qemu-system-x86
ii qemu-utils
Par ailleurs, le paquet firewalld est bien installé sur le système (même si le service est ‹ disabled ›).
Enfin, pour t’enlever tes doutes (!) … après c’est bookworm (testing), il peut y avoir des bugs, ce n’est pas un scandale :
$ sudo apt policy iptables
iptables:
Installé : 1.8.8-1
Candidat : 1.8.8-1
Table de version :
*** 1.8.8-1 500
500 http://deb.debian.org/debian bookworm/main amd64 Packages
100 /var/lib/dpkg/status
$ sudo apt policy libvirt-daemon-system
libvirt-daemon-system:
Installé : 8.5.0-1
Candidat : 8.5.0-1
Table de version :
*** 8.5.0-1 500
500 http://deb.debian.org/debian bookworm/main amd64 Packages
100 /var/lib/dpkg/status
$ sudo apt remove iptables
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Le paquet suivant a été installé automatiquement et n'est plus nécessaire :
libip6tc2
Veuillez utiliser « sudo apt autoremove » pour le supprimer.
Les paquets suivants seront ENLEVÉS :
iptables
0 mis à jour, 0 nouvellement installés, 1 à enlever et 153 non mis à jour.
Après cette opération, 2 536 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] o
(Lecture de la base de données... 226007 fichiers et répertoires déjà installés.
)
Suppression de iptables (1.8.8-1) ...
Traitement des actions différées (« triggers ») pour man-db (2.10.2-1) ...
$ sudo apt policy libvirt-daemon-system
libvirt-daemon-system:
Installé : 8.5.0-1
Candidat : 8.5.0-1
Table de version :
*** 8.5.0-1 500
500 http://deb.debian.org/debian bookworm/main amd64 Packages
100 /var/lib/dpkg/status
$ sudo apt policy iptables
iptables:
Installé : (aucun)
Candidat : 1.8.8-1
Table de version :
1.8.8-1 500
500 http://deb.debian.org/debian bookworm/main amd64 Packages