Iptables+mise à niveau

Bonjour,

Je cherche toujours à régler mon problème avec squid+dansguardian qui ne fonctionne plus suite à mise à niveau wheezy --> jessie --> stretch.
Je voudrais déjà savoir si les règles NAT ont été préservées ; pour éditer la table la commande me renvoie des lignes que je ne comprends pas :
# iptables -v -n -L
Chain INPUT (policy ACCEPT 624K packets, 55M bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 4752K packets, 3877M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 645K packets, 921M bytes)
 pkts bytes target     prot opt in     out     source               destination         
root@serveur-debian:/home/tristan# iptables -t nat -v -L -n
Chain PREROUTING (policy ACCEPT 73969 packets, 10M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 12567 packets, 2235K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 2921 packets, 392K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 594 packets, 127K bytes)
 pkts bytes target     prot opt in     out     source               destination         
47342 5324K MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0

# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere

Dansguardian écoute sur le port 8080. Je dois donc rediriger les paquets entrants sur le port 80 vers le port 8080. Or, je ne vois aucune règle dans la table concernant PREROUTING :
Cette règle a nécessairement dû être mise en place à la mise en place du serveur.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
De plus, sur le post précédent on m’a signalé que squid écoutait sur ipv6 et dansguardian sur ipv4. Je peux forcer squid à écouter sur ipv4.
Mais iptables a été configuré pour ipv4 pas pour ipv6.
Sac de noeuds ?!?

Utilise plutôt iptables-save et ip6tables-save pour afficher les règles iptables IPv4 et IPv6. Et
netstat -nltp
pour voir qui écoute en quoi sur quoi.

iptables-save
# Generated by iptables-save v1.6.0 on Sun Oct 15 14:06:41 2017
*security
:INPUT ACCEPT [16104:2195752]
:FORWARD ACCEPT [1306890:967341930]
:OUTPUT ACCEPT [2104:252444]
COMMIT
# Completed on Sun Oct 15 14:06:41 2017
# Generated by iptables-save v1.6.0 on Sun Oct 15 14:06:41 2017
*raw
:PREROUTING ACCEPT [1325309:969907951]
:OUTPUT ACCEPT [2110:253308]
COMMIT
# Completed on Sun Oct 15 14:06:41 2017
# Generated by iptables-save v1.6.0 on Sun Oct 15 14:06:41 2017
*mangle
:PREROUTING ACCEPT [1325311:969908055]
:INPUT ACCEPT [16107:2195908]
:FORWARD ACCEPT [1306890:967341930]
:OUTPUT ACCEPT [2115:255192]
:POSTROUTING ACCEPT [1309411:967641742]
COMMIT
# Completed on Sun Oct 15 14:06:41 2017
# Generated by iptables-save v1.6.0 on Sun Oct 15 14:06:41 2017
*nat
:PREROUTING ACCEPT [101882:13222206]
:INPUT ACCEPT [14130:2467202]
:OUTPUT ACCEPT [3143:423097]
:POSTROUTING ACCEPT [645:138449]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Sun Oct 15 14:06:41 2017
# Generated by iptables-save v1.6.0 on Sun Oct 15 14:06:41 2017
*filter
:INPUT ACCEPT [641271:57100270]
:FORWARD ACCEPT [6159621:4915389500]
:OUTPUT ACCEPT [647298:921138025]
COMMIT
# Completed on Sun Oct 15 14:06:41 2017

# ip6tables-save
# Generated by ip6tables-save v1.6.0 on Sun Oct 15 14:09:05 2017
*security
:INPUT ACCEPT [1087:74223]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1048:51786]
COMMIT
# Completed on Sun Oct 15 14:09:05 2017
# Generated by ip6tables-save v1.6.0 on Sun Oct 15 14:09:05 2017
*raw
:PREROUTING ACCEPT [1929:197625]
:OUTPUT ACCEPT [1048:51786]
COMMIT
# Completed on Sun Oct 15 14:09:05 2017
# Generated by ip6tables-save v1.6.0 on Sun Oct 15 14:09:05 2017
*mangle
:PREROUTING ACCEPT [1929:197625]
:INPUT ACCEPT [1087:74223]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1048:51786]
:POSTROUTING ACCEPT [1066:54012]
COMMIT
# Completed on Sun Oct 15 14:09:05 2017
# Generated by ip6tables-save v1.6.0 on Sun Oct 15 14:09:05 2017
*filter
:INPUT ACCEPT [17166:1311617]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16614:882217]
COMMIT
# Completed on Sun Oct 15 14:09:05 2017

netstat -nltp
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name    
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      977/dnsmasq         
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      7010/cupsd          
tcp        0      0 0.0.0.0:3128            0.0.0.0:*               LISTEN      2814/(squid-1)      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1323/exim4          
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      699/smbd            
tcp        0      0 127.0.0.1:3493          0.0.0.0:*               LISTEN      1339/upsd           
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      699/smbd            
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      582/rpcbind         
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      7042/dansguardian   
tcp        0      0 0.0.0.0:1969            0.0.0.0:*               LISTEN      940/sshd            
tcp6       0      0 :::53                   :::*                    LISTEN      977/dnsmasq         
tcp6       0      0 ::1:631                 :::*                    LISTEN      7010/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1323/exim4          
tcp6       0      0 :::445                  :::*                    LISTEN      699/smbd            
tcp6       0      0 ::1:3493                :::*                    LISTEN      1339/upsd           
tcp6       0      0 :::139                  :::*                    LISTEN      699/smbd            
tcp6       0      0 :::111                  :::*                    LISTEN      582/rpcbind         
tcp6       0      0 :::80                   :::*                    LISTEN      1254/apache2        
tcp6       0      0 :::1969                 :::*                    LISTEN      940/sshd
tcp        0      0 0.0.0.0:3128            0.0.0.0:*               LISTEN      2814/(squid-1)      
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      7042/dansguardian

On peu constater que squid et dansguardian écoutent tous les deux en IPv4 et pas en IPv6, respectivement sur les ports 3128 de n’importe quelle adresse locale et 8080 de l’adresse de loopback 127.0.0.1.

Par contre iptables-save montre que la règle REDIRECT n’est pas présente. Il n’y a qu’une règle de MASQUERADE (NAT source) en sortie sur eth0. Sais-tu où est le fichier qui crée cette règle ? Il devrait suffire d’y ajouter l’autre.

Note concernant la règle REDIRECT mentionnée dans ton message initial :

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

Elle redirige les connexions HTTP entrantes vers le port 8080, celui de dansguardian. Cela ne peut pas fonctionner car dansguardian n’écoute que sur l’adresse de loopback 127.0.0.1, or cette adresse ne peut recevoir que des connexions provenant de la machine elle-même (par exemple de squid). Il ne faudrait pas plutôt rediriger vers le port 3128 de squid ?

C’est normal que squid écoute sur ipv4 : je lui ai forcé la main :
http_port 0.0.0.0:3128

Je vais donc modifier cette ligne en :
http_port 0.0.0.0:8080

Ça va coincer car dansguardian écoute déjà sur ce port.
A mon avis il vaudrait mieux modifier la règle iptables.

C’est Dansguardian qui filtre pas squid. Donc c’est Dansguardian qui doit écouter sur le port 80.Ensuite il rebalance l’info à squid . Enfin je crois avoir compris cela comme çà. Un post sur le forum :
https://www.debian-fr.org/t/iptables-squid-et-dansguardian/71795/3

Squid est en mode transparent. Les navigateurs sont configurés sur le port 8080.

Je ne retrouve plus le post que j’avais créé lors de la configuration de ma passerelle sur squid. Tout y était.

Je ne sais pas lequel de squid ou dansguardian doit recevoir la connexion en premier et se connecter à l’autre, mais une chose est sûre : ils ne peuvent pas écouter tous les deux sur le même port 8080.

Un autre chose est sûre : dansguardian écoute sur l’adresse 127.0.0.1 mais la cible REDIRECT redirige vers l’adresse IP de l’interface d’entrée qui n’est pas 127.0.0.1, donc les paquets redirigés ne peuvent pas être reçus par dansguardian.

Dernière chose : si squid est en mode transparent, pourquoi les navigateurs ont-ils besoin d’être “configurés sue le port 8080” ?

Dansguardian se place entre le client et le serveur proxy. Il reçoit les requêtes sur le port 8080 et les transmets à squid sur le port 3128.
Dansguardian n’est qu’une solution de filtrage.Il a besoin de squid pour sortir sur la toile.

Dans ce cas la configuration de dansguardian n’est pas bonne car actuellement il n’écoute que sur l’adresse de loopback 127.0.0.1 qui ne permet pas de recevoir des connexions de l’extérieur, même redirigées depius l’extérieur. Il faut qu’il écoute sur l’adresse de l’interface du réseau interne ou sur l’adresse indefinie 0.0.0.0 (= n’importe quelle adresse).

Quant à squid, il faut laisser son port d’écoute à 3128, et laisser l’adresse d’écoute 0.0.0.0 seulement si tu veux qu’il soit utilisable indépendamment de dansguardian. Si tu veux qu’il ne soit utilisable qu’à travers dansguardian, il faut changer son adresse d’écoute en 127.0.0.1.

Les paramètres de configuration de dansguardian ne permettent de configurer que certaines choses :
le port sur lequel il écoute : 8080
l’adresse du proxy : 172.16.10.1
le port du proxy : 3128

C’est sûrement pour cela que ‘iptables’ est utilisé pour rediriger les paquets exterieurs vers le port d’écoute de Dansguardian.

Non, ce n’est pas pour cela. La redirection sert à intercepter les connexions HTTP, qui autrement traverseraient la machine sans passer par le filtrage. Avec une règle REDIRECT les connexions sont redirigées vers l’adresse IP de l’interface par laquelle les connexions entrent, pas vers 127.0.0.1. Et il est inutile d’essayer de remplacer REDIRECT par DNAT pour pouvoir spécifier l’adresse de redirection : on ne peut pas recevoir de paquets provenant de l’extérieur destinés à une adresse de loopback (avant ou après redirection), le noyau l’interdit par sécurité car ces adresses sont réservées aux communications entre processus locaux de la machine.

Ah non, il semblerait qu’on puisse modifier l’adresse sur laquelle il écoute :
# Network Settings
#
# the IP that DansGuardian listens on. If left blank DansGuardian will
# listen on all IPs. That would include all NICs, loopback, modem, etc.
# Normally you would have your firewall protecting this, but if you want
# you can limit it to a certain IP. To bind to multiple interfaces,
# specify each IP on an individual filterip line.
filterip = 127.0.0.1

Je vais rechercher les anciens fichiers de conf.

tu as une commande pour retirer toutes les lignes commentées dans un fichier ouvert avec ‘nano’. C’est l’enfer à lire ; on ne s’ retrouve pas.

oct. 16 18:09:57 serveur-debian dansguardian[1589]: Error connecting to proxy

ma commande pour enlever les ‘#’ ne fonctionne pas :
sed '/^#/d' squid.conf > squid.conf.sans#

J’ai réussi à virer les # ; on y voit plus clair. Les lignes dé-commentées ne sont finalement pas si différentes du précédent fichier de la version 2.7.

Je viens de retrouver ma config iptables qui fonctionnait avant la migration :
sauvegarde_passerelle# cat rules_iptables_config_squid3
# Generated by iptables-save v1.4.14 on Tue Feb 4 02:15:36 2014
*nat
:PREROUTING ACCEPT [1:211]
:INPUT ACCEPT [1:211]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A PREROUTING -i br0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Feb 4 02:15:36 2014

Tout est ok aprè réinstallation des règles NAT. Mon filtrage fonctionne à nouveau :wink: