Proxy transparent et ping www impossible depuis client

Bonjour tout le monde,

Malgré mes recherches sur le forum et ailleurs, je n’ai malgré tout pas réussi à autoriser mon poste client sous debian à ping le web (ex: google). Aucun souci pour la navigation mais le ping est impossible. Ce qui, vous le comprendrez, pose problème lors d’installation de paquets…

Synthétiquement, voici mon réseau:
Freebox —> serveur proxy 192.168.0.31 en eth0 (wan) et 192.168.2.100 en eth1 (lan) —> switch —> client debian 192.168.2.x (eth0). x est attribué par le couple DHCP&DDNS du proxy.

Ping proxy <—> client ==> pose aucun problème
Ping client —> google.fr
Ping client —> 74.125.132.94 ==> ping se lance mais aucun résultat

[code]# The loopback network interface
auto lo
iface lo inet loopback

The primary network interface

allow-hotplug eth0
iface eth0 inet dhcp

This is an autoconfigured IPv6 interface

iface eth0 inet6 auto

#Config eth1 pour reseau le lan
auto eth1
iface eth1 inet static
address 192.168.2.100
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
#gateway 192.16.2.100
echo 1 > /proc/sys/net/ipv4/ip_forward
[/code]
Voici les règles iptables:

[code]#Pour accepter tout ce qui se passe sur le réseau local.
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT

#pour activer le NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.2.0/24 -j SNAT --to-source 192.168.0.31

#Pour Accepter la resolution de nom DNS pour le firewall
iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 53 -j ACCEPT

Ouvrir le http

iptables -A OUTPUT -p tcp -o eth0 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT

Ouvrir le https

iptables -A OUTPUT -p tcp -o eth0 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --sport 443 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 443 -m state --state ESTABLISHED,RELATED -j ACCEPT

autorise les paquets icmp (ping, traceroute, etc.) de mon ordinateur vers internet

(mais pas d’internet vers mon ordinateur)

iptables -A INPUT -i eth0 -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT[/code]
iptables -L[code]
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere
ACCEPT udp – anywhere anywhere udp spt:domain
ACCEPT tcp – anywhere anywhere tcp spt:domain
ACCEPT tcp – anywhere anywhere tcp spt:http state RELATED,ESTABLISHED
ACCEPT udp – anywhere anywhere udp spt:http state RELATED,ESTABLISHED
ACCEPT tcp – anywhere anywhere tcp spt:https state RELATED,ESTABLISHED
ACCEPT udp – anywhere anywhere udp spt:https state RELATED,ESTABLISHED
ACCEPT icmp – anywhere anywhere state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere
ACCEPT all – anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere
ACCEPT udp – anywhere anywhere udp dpt:domain
ACCEPT tcp – anywhere anywhere tcp dpt:domain
ACCEPT tcp – anywhere anywhere tcp dpt:http state NEW,ESTABLISHED
ACCEPT udp – anywhere anywhere udp dpt:http state NEW,ESTABLISHED
ACCEPT tcp – anywhere anywhere tcp dpt:https state NEW,ESTABLISHED
ACCEPT udp – anywhere anywhere udp dpt:https state NEW,ESTABLISHED
ACCEPT icmp – anywhere anywhere state NEW,RELATED,ESTABLISHED
[/code]
route -n

Destination Passerelle Genmask Indic Metric Ref Use Iface 0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
/etc/squid/squid.conf

acl all src all acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow all http_access deny all icp_access allow localnet icp_access deny all http_port 3128 transparent hierarchy_stoplist cgi-bin ? access_log /var/log/squid/access.log squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320 acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9] upgrade_http0.9 deny shoutcast acl apache rep_header Server ^Apache broken_vary_encoding allow apache extension_methods REPORT MERGE MKACTIVITY CHECKOUT hosts_file /etc/hosts coredump_dir /var/spool/squid
Je m’en remet à votre aide…

Saloute,

Si j’ai bien compris t’as conf :
Tu as un serveur squid3 transparent (192.168.2.100) passerelle par défaut 192.168.0.254 ?
Tes clients en 192.168.2.0/24 passerelle par défaut 192.168.2.100 ?
Ta FreeBox est en 192.168.0.254

  • Ton DNS fonctionne t-il correctement ? Ton squid peux-il résoudre www.google.fr par exemple ? Peux-tu nous montrer le fichier /etc/resolv.conf ?

  • Tu effectue du NAT, tes clients peuvent-ils pinger ta Freebox (192.168.0.254) ?

  • Quand tu utilises Iptables, penses à faire des logs des paquets bloqués ou non ?

[quote=“Bastichou”]Saloute,

Si j’ai bien compris t’as conf :
Tu as un serveur squid3 transparent (192.168.2.100) passerelle par défaut 192.168.0.254 ?[/quote]YES

[quote=“Bastichou”]Tes clients en 192.168.2.0/24 passerelle par défaut 192.168.2.100 ?[/quote]reYES

[quote=“Bastichou”]Ta FreeBox est en 192.168.0.254[/quote]rereYES

Hum…Depuis mon serveur:
nslookup google.fr

[code]nslookup google.fr
Server: 192.168.2.100
Address: 192.168.2.100#53

Non-authoritative answer:
Name: google.fr
Address: 173.194.45.87
Name: google.fr
Address: 173.194.45.88
Name: google.fr
Address: 173.194.45.95[/code]

mais nslookup google.fr

[code]Server: 192.168.2.100
Address: 192.168.2.100#53

** server can’t find http://www.google.fr: NXDOMAIN[/code]
resolv.conf

domain ecole.fr search ecole.fr nameserver 192.168.2.100 nameserver 212.27.60.20

[quote=“Bastichou”]- Tu effectue du NAT, tes clients peuvent-ils pinger ta Freebox (192.168.0.254) ?[/quote]Non…

[quote=“Bastichou”]- Quand tu utilises Iptables, penses à faire des logs des paquets bloqués ou non ?[[/quote]Non plus…comment faire?

On ne ping pas le web. Pas les mêmes protocoles. Le web, c’est du HTTP. Le ping, c’est de l’ICMP. Tu parles peut-être de l’internet ?

Non, je ne comprends pas. Comme dit ci-dessus, ce sont deux protocoles différents. HTTP n’a pas besoin de ping.

Tu as oublié de faire précéder la commande avec une option [mono]up[/mono] ou [mono]pre-up[/mono]. Par conséquent la fonction routeur n’est pas activée, ce qui suffit à expliquer l’absence de réponse au ping.

  • Les règles pour le DNS basées sur --sport sans utiliser le suivi de connexion représentent un risque.
  • HTTP et HTTPS n’utilisent que TCP, pas UDP, et un paquet d’une connexion HTTP ou HTTPS n’est jamais dans l’état RELATED.
  • Il y a un règle en doublon dans la chaîne FORWARD.
  • En revanche, il n’y a aucune règle pour accepter les paquets retour de l’extérieur vers l’intérieur.
  • Mais tout ceci n’a guère d’importance : toutes les règles de filtrage avec ACCEPT ne servent à rien puisque les politiques par défaut sont restées à ACCEPT et qu’il n’y a aucune règle DROP ni REJECT.
  • La seconde règle dans nat/POSTROUTING n’est jamais atteinte puisque la première règle est plus large. D’autre part, il n’est pas cohérent de configurer eth0 en DHCP et d’utiliser explicitement l’adresse IP qu’elle est censée avoir dans des règles iptables.
  • Je ne vois pas comment ton proxy peut être transparent avec ces règles : il n’y a pas de règle TPROXY, DNAT ou REDIRECT pour intercepter les connexions HTTP et les rediriger vers le port du proxy. D’autre part, le fonctionnement en proxy transparent nécessite que la résolution DNS fonctionne sur le poste client. Tu es sûr de n’avoir pas configuré le proxy dans les paramètres du navigateur ?
  • La sortie d’[mono]iptables -L[/mono] est peu pratique à lire, et surtout, incomplète (n’affiche que la table [mono]filter[/mono] par défaut). Préfère la commande [mono]iptables-save[/mono].

[quote=“cyberfrk”]Server: 192.168.2.100
Address: 192.168.2.100#53
** server can’t find google.fr: NXDOMAIN[/quote]
C’est quel serveur DNS sur 192.168.2.100 ? Configuré comment ?
Le [mono]http://[/mono] devant, c’est toi qui l’as mis ou c’est ajouté par le forum à cause du [mono]www[/mono] (il me semblait qu’il ne le faisait pas dans les blocs de code) ? Dans le premier cas, l’erreur est normale, un URL n’est pas un nom de domaine.

Je “redoutais” une réponse de ta part (PascalHambourg) car la plupart du temps quand on poste un problème sur un forum, on attend la réponse et non une piste qui permet de la trouver. :wink:

J’avoue ne pas tout comprendre ce que tu dis mais je vais néanmoins essayer de te répondre…!

En pingant google.fr, je parlais de ping (icmp) et de web (http).

J’ai modifié interface pour ajouter pre-up avant echo 1 etc…De plus, si j’ai bien compris (http://irp.nain-t.net/doku.php/110masquerade:030_passerelle_simple), il faut positionner cette ligne au niveau de la partie connectée au modem. Chose faite:
/etc/network/interfaces

[code]# The loopback network interface
auto lo
iface lo inet loopback

The primary network interface

allow-hotplug eth0
iface eth0 inet dhcp
pre-up echo 1 > /proc/sys/net/ipv4/ip_forward

This is an autoconfigured IPv6 interface

iface eth0 inet6 auto

#Config eth1 pour reseau DHCP
auto eth1
iface eth1 inet static
address 192.168.2.100
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
#gateway 192.16.2.100[/code]

Pour le moment, je ne me suis pas focaliser sur la sécurité mais la permission d’accès à internet pour le client ainsi que le ping et non sur la problématique de sécuriser mon serveur comme il se doit!
Quant à la configuration du navigateur, effectivement, j’ai dû mettre le proxy (ip+port). Cela aurait dû me mettre la puce à l’oreille. Il est pas si transparent que ça!

[quote=“PascalHambourg”]C’est quel serveur DNS sur 192.168.2.100 ? Configuré comment ?
Le [mono]http://[/mono] devant, c’est toi qui l’as mis ou c’est ajouté par le forum à cause du [mono]www[/mono] (il me semblait qu’il ne le faisait pas dans les blocs de code) ? Dans le premier cas, l’erreur est normale, un URL n’est pas un nom de domaine.[/quote]Contrairement à ce que je croyais, il s’agit d’un DNS dynamique mais au regard de ta réponse, je vais revoir mes fichiers conf. Je penses même repartir, dans un 1er temps, sur le couple DHCP+DNS simple et non dynamique.
En effet, c’est moi qui ai mis le .

Merci de consacrer du temps à ce sujet.

C’est l’un ou l’autre, ça ne peut pas être les deux en même temps.
Ping attend un nom d’hôte ou une adresse IP. Pour envoyer un ping, il faut utiliser le nom de domaine seul, sans [mono]http://[/mono] devant qui ne fait pas partie du nom.

Sinon il essaie de résoudre [mono]http://www.google.fr[/mono] comme un nom d’hôte, qui bien sûr n’existe pas. [mono]http://[/mono] ne doit se trouver que dans les URL qu’on utilise avec un navigateur web ou tout autre client HTTP qui comprend les URL.

Non, c’est strictement sans importance. Ce paramètre est global, il n’est lié à aucune interface en particulier. Une manière plus élégante et indépendante des interfaces d’activer ce paramètre est de le faire via le fichier /etc/sysctl.conf, en ajoutant ou décommentant la ligne suivante si elle y est déjà :

Il ne faut pas. Recommence sans.

Bonjour tout le monde,

Petite mise à jour du sujet pour dire que j’ai enfin réussi à mettre en place un proxy transparent (si si, nul de préciser le port), à accéder au web depuis un navigateur et à pinger google.fr.

Comme je l’avais dis, je suis reparti de 0 et après avoir mis en place le couple DHCP+DNS, j’ai configuré le forwarding puis le DHCP+DDNS.

En effet, c’était tout simple mais c’est toujours comme ça quand on a la solution.

A ce stade, je sais que mon serveur n’est pas sécurisé mais c’était pas le but initial, je travaillerais dessus en temps voulu. Finalement, le plus gros reste à venir.

S’il y a des amateurs, voici ce qu’il “suffisait” d’ajouter à /etc/network/interfaces:

Et cette régle iptables (qu’il me reste à rendre persistante) à exécuter au prompt:

Ahhh au fait, à quel endroit vaut-il mieux configurer l’ip_forward? interfaces ou sysctl.conf?

Merci à Bastichou et à PascalHambourg de m’avoir aiguillé. :wink:

Tu peux rendre la règle iptables persistante de la même façon que la commande echo, avec une option up ou pre-up dans le fichier /etc/network/interfaces.
Personnellement, je préfère configurer ip_forward dans /etc/sysctl.conf qui est fait pour ça.