# Ufw (gufw) et iptables

**URL:** <https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347>\
**Category:** Support Debian\
**Created:** [Août 11, 2018, 7:59 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347 "2018-08-11T07:59:08Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Août 11, 2018, 7:59 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/1 "2018-08-11T07:59:08Z")

</div>

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 😉

Merci.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Août 11, 2018, 8:30 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/2 "2018-08-11T08:30:01Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Août 11, 2018, 8:36 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/3 "2018-08-11T08:36:26Z")

</div>

> [@PascalHambourg](#):
>
> Le paquet ufw (et pas seulement gufw) a-t-il bien été désinstallé ?

oui

> [@PascalHambourg](#):
>
> Y a -t-il un autre paquet du genre iptables-persistent qui pourrait avoir enregistré et restauré automatiquement les règles iptables ?

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…

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Août 11, 2018, 8:41 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/4 "2018-08-11T08:41:42Z")

</div>

Ca y est je l’ai, ouf…

/etc/iptables/iptables.rules  
Tout simplement

Merci

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Août 11, 2018, 10:16 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/5 "2018-08-11T10:16:45Z")

</div>

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

J’ai ça maintenant 🤬

```
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

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Août 11, 2018, 11:11 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/7 "2018-08-11T11:11:58Z")

</div>

> [@jul](#):
>
> /etc/iptables/iptables.rules  
> Tout simplement

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.

> [@jul](#):
>
> Visiblement iptables cherche le fichier /etc/iptables/iptables.rules

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`

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Août 12, 2018, 7:26 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/8 "2018-08-12T07:26:55Z")

</div>

> [@PascalHambourg](#):
>
> 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 ?

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Août 12, 2018, 1:30 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/9 "2018-08-12T13:30:11Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Août 14, 2018, 8:32 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/10 "2018-08-14T08:32:30Z")

</div>

Merci pour la digression.

> [@PascalHambourg](#):
>
> 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.

Je retiens ça 😉  
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](https://www.debian-fr.org/t/pare-feu-ipv4-ipv6-versions-bureau-et-serveur/68665)), je pense obtenir «&nbsp;l’équivalent&nbsp;» 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 ?

```plaintext
#!/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

```

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Août 16, 2018, 9:51 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/11 "2018-08-16T09:51:35Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Août 20, 2018, 9:30 UTC](https://www.debian-fr.org/t/ufw-gufw-et-iptables/77347/12 "2018-08-20T09:30:49Z")

</div>

> [@PascalHambourg](#):
>
> ufw avait quelques subtilités

On va faire sans…

> [@PascalHambourg](#):
>
> dans l’ensemble ça doit être equivalent pour l’IPv4

ipv6 désactivé chez moi.  
Merci bcp
