Impossible d'interdire à une station servant de firewall d'aller sur Internet

Tags: #<Tag:0x00007fd6f3b7c830>

Bonjour Tous.

J’utilise Shorewall pour gérer un firewall d’une station jouant, entre autres, le rôle de passerelle Internet pour un petit réseau local.

La situation de celui-ci est décrite dans ce post :

À l’origine, j’avais interdit à la passerelle toutes connexions vers Internet, hormis de quoi assurer les mises à jour.

Dans /etc/shorewall/policy, j’ai la directive :

$FW net REJECT $LOG_LEVEL

Mais rien à faire, de ce coté là, c’est une véritable passoire ! Je peux me balader comme je veux sur internet, grâce par exemple à w3m (il n’y a pas de serveur X sur cette station).

J’ai même fait l’essai en supprimant le fichier « rules ».

Pourtant, il me semblait bien cela fonctionnait bien il y a encore quelques temps. Je me demande, si je n’ai pas manqué de vigilance lors d’une monté de version.

Je n’ai pas trop inondé de contenus de fichiers ce premier post, mais si vous souhaitez en savoir plus de ce coté, je me ferai un plaisir de vous les communiquer.

En tout cas, cela fait des jours que je tourne ne rond à ce sujet, même si c’est une occasion de réviser mes vielles connaissances en matière de réseau. :wink:

Sur ce, je vous dis merci pour l’attention que vous porterez à ma supplique… Là, je suis peut-être un peu lyrique, mais je n’arrive vraiment à rien…

Note : je ne connais pas shorewall, j’utilise directement iptables.

Avec quelles règles ?
Y a-t-il moyen de demander à shorewall d’afficher les politiques et règles actives ? Si ça ne suffit pas, il faudra afficher les règles iptables (ou nftables, selon le frontal netfilter que shorewall utilise) actives pour en savoir plus, mais la liste risque d’être longue.

Pareil, si tu veux que ta passerelle n’ait pas accès à Internet alors que le réseau qu’elle sert y ait accès, il faut appliquer des règles sur les flux OUTPUT. Ça ne bloquera que le trafic sortant, le routage passe dans les flux FORWARD.

Pour répondre à la question de @PascalHambourg, tu peux nous mettre le retour des commandes iptable-save et ip6tables-save.

Que donne un shorewall compile?
le fichier rules sert à ouvrir des ports d’une policy bloquante (par DROP ou par REJECT), ou pour fermer des ports d’une policy ouverte (ACCEPT).

peux tu nous donner ton fichier policy complet et rules complet stp?

Merci pour votre participation.

Je vous livre tous les fichiers que vous m’avez demandés, en vrac, dans un conteneur « tar.gz ». Ils ont des noms évocateurs, donc cela ne devrait pas poser de problème pour s’y retrouver. *
v00-pbm_shorewall.tar.gz.txt (21,1 Ko)

j’avais supprimé un moment le fichier rules afin de me débarrasser d’une éventuelle « pollution » de la part d’une exception.

Bon courage pour le dépouillement. :slight_smile:

  • Le format « tar.gz » ne passe malheureusement pas sur le forum, j’ai un peu triché en lui accolant le suffixe « .txt ». Un peu limite, mais bon…

Question subsidiaire…
Connaissez vous un bon tuto ou cours sur « Iptables », parce que j’en ai assez de ne rien maîtriser. Et que Shorewall commence à me courrir sur le haricot ! :frowning:

|net|$FW||DROP||$LOG_LEVEL|
|net|all||DROP||$LOG_LEVEL|

La première ne sert à rien: net all DROP $LOG_LEVEL suffit.

Quelle est ton interface publique (enp2s2?) et ton interface privée (enp2s5?) ?

Le lien suivant donne une bonne idée de structure du réseau.

Donc,
enp2s2 : interface vers Internet.
enp2s5 : interface vers réseau local.

Comme j’ai fait pas mal d’essais, les fichiers sont entachés de règles redondantes. Je n’ai pas encore fait le nettoyage. Désolé pour la gène.

Si tu trouve shorewall compliqué, iptables l’est encore plus.

J’ai examiné le jeu de règles iptables exporté par iptables-save et les seuls trafics autorisés en sortie vers internet que j’y vois sont DHCP, ICMP et les requêtes DNS.

*filter
:OUTPUT DROP [0:0]
-A OUTPUT -o enp2s2 -j fw-net
-A fw-net -p udp -m udp --dport 67:68 -j ACCEPT
-A fw-net -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A fw-net -p udp -m udp --dport 53 -m comment --comment DNS -j ACCEPT
-A fw-net -p tcp -m tcp --dport 53 -m comment --comment DNS -j ACCEPT
-A fw-net -p icmp -j ACCEPT
-A fw-net -m addrtype --dst-type BROADCAST -j DROP
-A fw-net -m addrtype --dst-type ANYCAST -j DROP
-A fw-net -m addrtype --dst-type MULTICAST -j DROP
-A fw-net -m hashlimit --hashlimit-upto 1/sec --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name lograte -j LOG --log-prefix "fw-net REJECT " --log-level 6
-A fw-net -g reject

Je ne vois rien là-dedans qui autorise des connexions de type HTTP ou autre en IPv4.
Mais quid d’IPv6 ? Il faudrait regarder la configuration IPv6 de l’interface enp2s2 et l’export du jeu de règles par ip6tables-save.

1 J'aime

En fait, je l’ai choisi pour sa simplicité. Mais, je m’aperçois qu’il opère je ne sais quoi dans mon dos et je n’aime pas ça du tout. Il s’agit là, d’un domaine sensible.

Voila pour la configuration de enp2s2 :

Root /!\ : ip address show enp2s2
2: enp2s2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000             
    link/ether 00:50:8d:5b:23:76 brd ff:ff:ff:ff:ff:ff                                                              
    inet 192.168.1.36/24 brd 192.168.1.255 scope global dynamic enp2s2                                              
       valid_lft 39372sec preferred_lft 39372sec                                                                    
    inet6 2a01:e0a:326:5030:250:8dff:fe5b:2376/64 scope global dynamic mngtmpaddr                                   
       valid_lft 86273sec preferred_lft 86273sec                                                                    
    inet6 fe80::250:8dff:fe5b:2376/64 scope link                                                                    
       valid_lft forever preferred_lft forever                                                                      

Te faut il autre chose ?

Si non, pour ip6tables-save, voici le résultat… tin-tin-tin…

Root /!\ : ip6tables-save                                                                        
Root /!\ :

Impressionnant n’est-ce pas ?

Ça veut dire quoi ? Open bar ou confinement strict ?

Une sortie vide signifie qu’aucune table ip6tables n’est chargée, donc aucun filtrage IPv6.
Et l’interface réseau a une adresse IPv6 globale (2a01:…) appartenant à Free donc peut communiquer avec toute machine disposant aussi d’une adresse IPv6 globale comme le serveur de ce forum.

Donc, je suis en danger…

Il faut configurer shorewall pour filtrer aussi en IPv6.
(je considère qu’en 2020 désactiver la connectivité IPv6 n’est plus une option)

Le problème doit ce trouver dans le fichier shorewall.conf.

Je vais regarder ça de près.

Courage, bientôt l’époque où activer la connectivité IPv4 ne sera plus une option…

Comment faire et quelles en seraient les répercutions pour les utilisateurs se connectant essentiellement sur des sites web.

Les sites web qui n’ont pas d’adresse IPv4 seraient inaccessibles.

shorewall6.conf.

Dans Shorewall, il y a séparation de l’IPv4 et de l’IPv6 dont les conf sont respectivements dans /etc/shorewall et /etc/shorewall6, chacun avec ses propres fichiers interfaces, params, policy, zones, rules, ainsi que shorewall.conf et shorewall6.conf.