Ufw (gufw) et iptables

Bjr,
Après un erreur au boot de ufw (j’utilise gufw qui ne démarrait pas), je l’ai désinstallé. J’ai voulu voir ce qui se passait dans iptables :

root@Bureau:~#  iptables -L #### exécuté après suppression de ufw et gufw #####
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:19859
ufw-before-logging-input  all  --  anywhere             anywhere            
ufw-before-input  all  --  anywhere             anywhere            
ufw-after-input  all  --  anywhere             anywhere            
ufw-after-logging-input  all  --  anywhere             anywhere            
ufw-reject-input  all  --  anywhere             anywhere            
ufw-track-input  all  --  anywhere             anywhere            

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ufw-before-logging-forward  all  --  anywhere             anywhere            
ufw-before-forward  all  --  anywhere             anywhere            
ufw-after-forward  all  --  anywhere             anywhere            
ufw-after-logging-forward  all  --  anywhere             anywhere            
ufw-reject-forward  all  --  anywhere             anywhere            
ufw-track-forward  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ufw-before-logging-output  all  --  anywhere             anywhere            
ufw-before-output  all  --  anywhere             anywhere            
ufw-after-output  all  --  anywhere             anywhere            
ufw-after-logging-output  all  --  anywhere             anywhere            
ufw-reject-output  all  --  anywhere             anywhere            
ufw-track-output  all  --  anywhere             anywhere            

Chain ufw-after-forward (1 references)
target     prot opt source               destination         

Chain ufw-after-input (1 references)
target     prot opt source               destination         
ufw-skip-to-policy-input  udp  --  anywhere             anywhere             udp dpt:netbios-ns
ufw-skip-to-policy-input  udp  --  anywhere             anywhere             udp dpt:netbios-dgm
ufw-skip-to-policy-input  tcp  --  anywhere             anywhere             tcp dpt:netbios-ssn
ufw-skip-to-policy-input  tcp  --  anywhere             anywhere             tcp dpt:microsoft-ds
ufw-skip-to-policy-input  udp  --  anywhere             anywhere             udp dpt:bootps
ufw-skip-to-policy-input  udp  --  anywhere             anywhere             udp dpt:bootpc
ufw-skip-to-policy-input  all  --  anywhere             anywhere             ADDRTYPE match dst-type BROADCAST

Chain ufw-after-logging-forward (1 references)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             limit: avg 3/min burst 10 LOG level warning prefix "[UFW BLOCK] "

Chain ufw-after-logging-input (1 references)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             limit: avg 3/min burst 10 LOG level warning prefix "[UFW BLOCK] "

Chain ufw-after-logging-output (1 references)
target     prot opt source               destination         

Chain ufw-after-output (1 references)
target     prot opt source               destination         

Chain ufw-before-forward (1 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere             icmp destination-unreachable
ACCEPT     icmp --  anywhere             anywhere             icmp source-quench
ACCEPT     icmp --  anywhere             anywhere             icmp time-exceeded
ACCEPT     icmp --  anywhere             anywhere             icmp parameter-problem
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request
ufw-user-forward  all  --  anywhere             anywhere            

Chain ufw-before-input (1 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ufw-logging-deny  all  --  anywhere             anywhere             ctstate INVALID
DROP       all  --  anywhere             anywhere             ctstate INVALID
ACCEPT     icmp --  anywhere             anywhere             icmp destination-unreachable
ACCEPT     icmp --  anywhere             anywhere             icmp source-quench
ACCEPT     icmp --  anywhere             anywhere             icmp time-exceeded
ACCEPT     icmp --  anywhere             anywhere             icmp parameter-problem
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request
ACCEPT     udp  --  anywhere             anywhere             udp spt:bootps dpt:bootpc
ufw-not-local  all  --  anywhere             anywhere            
ACCEPT     udp  --  anywhere             224.0.0.251          udp dpt:mdns
ACCEPT     udp  --  anywhere             239.255.255.250      udp dpt:1900
ufw-user-input  all  --  anywhere             anywhere            

Chain ufw-before-logging-forward (1 references)
target     prot opt source               destination         

Chain ufw-before-logging-input (1 references)
target     prot opt source               destination         

Chain ufw-before-logging-output (1 references)
target     prot opt source               destination         

Chain ufw-before-output (1 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ufw-user-output  all  --  anywhere             anywhere            

Chain ufw-logging-allow (0 references)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             limit: avg 3/min burst 10 LOG level warning prefix "[UFW ALLOW] "

Chain ufw-logging-deny (2 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere             ctstate INVALID limit: avg 3/min burst 10
LOG        all  --  anywhere             anywhere             limit: avg 3/min burst 10 LOG level warning prefix "[UFW BLOCK] "

Chain ufw-not-local (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL
RETURN     all  --  anywhere             anywhere             ADDRTYPE match dst-type MULTICAST
RETURN     all  --  anywhere             anywhere             ADDRTYPE match dst-type BROADCAST
ufw-logging-deny  all  --  anywhere             anywhere             limit: avg 3/min burst 10
DROP       all  --  anywhere             anywhere            

Chain ufw-reject-forward (1 references)
target     prot opt source               destination         

Chain ufw-reject-input (1 references)
target     prot opt source               destination         

Chain ufw-reject-output (1 references)
target     prot opt source               destination         

Chain ufw-skip-to-policy-forward (0 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            

Chain ufw-skip-to-policy-input (7 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            

Chain ufw-skip-to-policy-output (0 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            

Chain ufw-track-forward (1 references)
target     prot opt source               destination         

Chain ufw-track-input (1 references)
target     prot opt source               destination         

Chain ufw-track-output (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             ctstate NEW
ACCEPT     udp  --  anywhere             anywhere             ctstate NEW

Chain ufw-user-forward (1 references)
target     prot opt source               destination         

Chain ufw-user-input (1 references)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:10263
ACCEPT     udp  --  anywhere             anywhere             udp dpt:10298
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:10478
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:15487
ACCEPT     udp  --  anywhere             anywhere             udp dpt:15487
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ipp
ACCEPT     udp  --  anywhere             anywhere             udp dpt:ipp
ACCEPT     udp  --  anywhere             anywhere             udp dpt:1900
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:47896
ACCEPT     udp  --  anywhere             anywhere             udp dpt:47896
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:14896
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:14896
ACCEPT     udp  --  anywhere             anywhere             multiport dports netbios-ns,netbios-dgm
ACCEPT     udp  --  anywhere             Bureau               multiport sports netbios-ns,netbios-dgm
ACCEPT     tcp  --  anywhere             anywhere             multiport dports netbios-ssn,microsoft-ds
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:mysql
ACCEPT     udp  --  anywhere             anywhere             udp dpt:19866

Chain ufw-user-limit (0 references)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             limit: avg 3/min burst 5 LOG level warning prefix "[UFW LIMIT BLOCK] "
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain ufw-user-limit-accept (0 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            

Chain ufw-user-logging-forward (0 references)
target     prot opt source               destination         

Chain ufw-user-logging-input (0 references)
target     prot opt source               destination         

Chain ufw-user-logging-output (0 references)
target     prot opt source               destination         

Chain ufw-user-output (1 references)
target     prot opt source               destination    

On voit que iptables fait encore référence à ufw (y compris les ports ouverts par moi grâce à ufw), et ce même après désinstallation. Soit, je “réinitialise” iptables :

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Résultat ok (enfin je crois…) :

root@Bureau:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source  

MAIS, après redémarrage, iptables fait de nouveau référence à ufw (iptables -L identique au premier). J’ai pourtant bien tout nettoyer…

Comment se débarrasser de ufw une fois pour toute ?

PS : je ne manipule jamais iptables car je n’en ai pas l’utilité ni les compétences d’ailleurs :wink:

Merci.

Le paquet ufw (et pas seulement gufw) a-t-il bien été désinstallé ?
Y a -t-il un autre paquet du genre iptables-persistent qui pourrait avoir enregistré et restauré automatiquement les règles iptables ?

oui

Je cherche, je cherche, mais ne trouve pas… une idée où il pourrait être ? j’ai viré tout ce qui faisait référence à ufw…

1 J'aime

Ca y est je l’ai, ouf…

/etc/iptables/iptables.rules
Tout simplement

Merci

J’ai “dé-résolu…”

J’ai ça maintenant :face_with_symbols_over_mouth:

root@Bureau:~# systemctl status iptables.service
● iptables.service - Packet Filtering Framework
   Loaded: loaded (/etc/systemd/system/iptables.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2018-08-11 01:53:03 CEST; 10h ago
  Process: 293 ExecStart=/sbin/iptables-restore /etc/iptables/iptables.rules (code=exited, status=1/FAILURE)
 Main PID: 293 (code=exited, status=1/FAILURE)

août 11 01:53:03 Bureau iptables-restore[293]: Can't open /etc/iptables/iptables.rules: No such file or directory
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

Visiblement iptables cherche le fichier /etc/iptables/iptables.rules que j’ai viré !!!
Pénible cet iptables (ou plutôt ufw d’ailleurs…)

Comment remettre tout ça d’équerre proprement ?

Merci

Non, pas si simple car ce fichier ne fait rien par lui-même. Si son contenu correspond aux règles actives après un démarrage, il y a forcément un programme qui le lit pour appliquer ces règles.

Non, ce n’est pas iptables qui a besoin de ce fichier mais un service systemd défini dans /etc/systemd/system/iptables.service. Ce service semble n’appartenir à aucun paquet Debian (en tout cas pas au paquet iptables) et si c’était le cas il serait plutôt situé dans /lib/systemd/system/, ce qui me laisse penser qu’il a été mis en place manuellement par l’administrateur du système.

Tu as différentes options possibles, comme :

  • désactiver ce service avec une commande du genre (vérifier la syntaxe)
    systemctl disable iptables.service

  • recréer le fichier de règles avec les règles actives après avoir les avoir réinitialisées manuellement, avec
    iptables-save > /etc/iptables/iptables.rules

Les deux solutions fonctionnent. Merci.

Du coup, je me pose la question de l’utilité du pare feu dans mon cas. C’est mon PC perso de maison, derrière une box configurée en routeur (3-4 appareils connectés).
Quel est l’intérêt de configurer un pare feu sur le PC, ne filtrant que les connexions entrantes comme je le faisais avec GUFW (connexions sortantes ouvertes). Le routage des ports via la box ne suffit-il pas ?

Un pare feu sur ce PC sert davantage à filtrer les connexions sortantes non ?

Le NAT n’est pas conçu et ne doit pas être considéré comme une protection. Il sert avant tout à fournir un semblant de connectivité publique à des machines qui n’ont qu’une adresse IP privée. Il ne faut pas considérer qu’une box internet ou n’importe quel routeur fait office de pare-feu juste parce qu’elle fait du NAT. Ne pas oublier aussi qu’une box internet est souvent sous le contrôle du FAI, et qu’elle n’est pas à l’abri d’une erreur de configuration ou d’un piratage (c’est déjà arrivé).

D’autre part de plus en plus de FAI proposent de l’IPv6, et avec l’IPv6 pas besoin de NAT puisque le FAI n’alloue pas une seule adresse IPv6 publique (ou globale) mais un bloc plus ou moins gros, donc chaque machine peut avoir une adresse IPv6 globale et non pas une adresse privée comme en IPv4.

Donc ne pas considérer qu’on est plus à l’abri derrière une box que n’importe où ailleurs. Ceci étant dit, a-t-on besoin d’un pare-feu pour autant ?
La première ligne de défense doit consister à maintenir à jour son système d’exploitation et ses applications, et les configurer correctement. Désactiver les services qui acceptent des connexions de l’extérieur dont on n’a pas besoin, ou les configurer pour n’accepter que les connexions locales.

Le filtrage des connexions entrantes par un pare-feu n’intervient éventuellement qu’en deuxième ligne de défense, en cas de configuration ou d’impossibilité de restreindre les connexions qu’accepte un service dont on a besoin, de faille de sécurité non corrigée ou de compromission pour limiter les dégâts.

1 J'aime

Merci pour la digression.

Je retiens ça :wink:
Je remets donc en place le pare feu et me penche (modestement) sur iptables… Si j’utilise des règles comme ça (Merci à Pare-feu IPv4/IPv6, versions bureau et serveur), je pense obtenir “l’équivalent” de ce que j’avais avec gufw, cad quelque chose de très simple ouvert en sortie et n’autorisant en entrée que les ports ouverts manuellement (avec les ports SMB, CUPS et RYGEL restreints au lan). Me trompe-je ?

#!/bin/sh
#### Nettoyage ####
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#### IPV4 ####
# droper l'input et le forward par défaut, accepter l'output
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# laisser l'interface lo (loop) tranquille
iptables -A INPUT -i lo -j ACCEPT
# maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# accepter en entrée le ping (icmp)
#iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
# connexions sur les ports nécessaires
#### Transmission
iptables -A INPUT -p udp --dport XXXX -j ACCEPT
iptables -A INPUT -p tcp --dport XXXX -j ACCEPT
#### CUPS
iptables -A INPUT -s 192.168.1.1/24 -p udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.1/24 -p tcp --dport 631 -j ACCEPT
#### Rygel
iptables -A INPUT -p udp -s 192.168.1.1/24 --dport 1900 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.1/24 --dport 1900 -j ACCEPT
#### VNC
iptables -A INPUT -p tcp --dport XXXX -j ACCEPT
#### SSH
iptables -A INPUT -p tcp --dport XXXX -j ACCEPT
#### SMB
iptables -A INPUT -s 192.168.1.1/24 -p udp -m multiport --dport 137,138 -j ACCEPT
iptables -A INPUT -s 192.168.1.1/24 -p tcp -m multiport --dport 139,445 -j ACCEPT
#### MySQL
iptables -A INPUT -p tcp --dport XXXX -j ACCEPT
#### Persistence (via iptables.service) ####
iptables-save > /etc/iptables/iptables.rules

Le jeu de règles mis en place par ufw avait quelques subtilités qui ne sont pas reprises, mais dans l’ensemble ça doit être equivalent pour l’IPv4.

On va faire sans…

ipv6 désactivé chez moi.
Merci bcp