Problème IPtables

Bonjour,
Je suis étudiant à la fac et j’ai des TP chaque semaine de réseau sous Debian. La version que nous utilisons est la 4.0r5a “Etch”.
En fait, plusieurs binômes ont chacun à administrer un serveur (DHCP, DNS, Web…etc).
Moi et mon binôme avons à nous occuper du Firewall. Nous nous sommes donc logiquement orientés vers NetFilter et donc IPtables.

La configuration de notre réseau local est la suivante : une adresse IP publique nous a été attribuée par la fac (appelons cette adresse 100.100.100.100 pour se comprendre), l’adresse IP du Firewall sur le réseau local est 192.168.1.1, celle du serveur Web 192.168.1.7…etc

Les redirection des paquets IP vers les bons serveurs ont bien lieu (par exemple des requêtes http venant de l’extérieur de notre réseau local arrivent bien sur le serveur Web) : nous avons vérifié cela à l’aide de la cible LOG ; nous voyons bien les requêtes passant à travers les chaînes PREROUTING et FORWARD. De même, lorsqu’un PC du réseau local tape dans un navigateur internet l’adresse IP de ce serveur Web (donc 192.168.1.7), le site s’affiche correctement.

En revanche, lorsque qu’un PC du réseau local, tape l’adresse IP publique (donc 100.100.100.100 dans mon exemple) dans son navigateur internet : RIEN ! Même en traçant le passage des paquets (toujours à l’aide de la cible LOG), nous ne voyons absolument rien passer ! En théorie, les paquets devraient sortir de la chaîne FORWARD, POSTROUTING, rentrer dans PREROUTING puis FORWARD, mais dans aucune de ces chaînes nous ne voyons le moindre paquet passer.

Avez-vous une idée du problème posé ?
Merci à vous pour votre aide. Je vous signale tout de suite, qu’étant en vacances (et oui je suis encore écolier… :stuck_out_tongue:), je n’ai pas accès aux ordinateurs de ma fac, je ne pourrais donc pas encore vous répondre à des questions trop précises, mais si vous avez une idée sur la solution, n’hésitez pas !
En vous remerciant encore une fois.

Ça n’est pas la même interface. Imaginons que 100.100.100.100 soit eth0 et 192.168.1.1 soit eth1. La requête venant du réseau locale vient de eth1 et non eth0 donc elle ne parviendra jamais à tcpdump qui écoute sur eth0 ce qui explique qu’on ne la voit pas passer. Imaginons que le serveur soit 192.168.1.4 sur le port 80, il faut faire une redirection de port mais si on fait

iptables -A PREROUTING -p tcp --dport 80 -j DNAT -i eth0 -d 100.100.100.100 --to 192.168.1.4:80
ça ne marchera pas, si 192.168.1.3 interroge 100.100.100.100:80, il recevra une réponse de 192.168.1.4 et ne la reconnaitra pas. Il faut donc faire un NAT.

(cette dernère règle est inutile pour les machines à l’extérieure car tout semble venir de 100.100.100.100)

Tout d’abord, merci de ta réponse rapide !
J’essaierai dès que possible ta solution…à vrai dire, je ne saisis pas ta dernière phrase :

Ce que je comprends pas c’est qu’en traçant les paquets (donc avec la cible LOG comme je te l’ai dit précédemment), je ne vois vraiment aucun paquet passer, ça veut donc dire que le problème serait encore en amont ?
En fait, en traçant ces paquets-là, j’essayais de voir où ils étaient rejetés (“dropés” en franglais dirons-nous :stuck_out_tongue: ) et ainsi de les accepter à l’endroit concerné. Etant donné, que je ne les vois même pas sortir de FORWARD, j’ai du mal à comprendre pourquoi tu veux créer une règle (qui me semble légitime soit dit en passant) dans la chaîne POSTROUTING puisqu’ils ne l’atteignent même pas ?
Merci à toi.

Tu captures les paquets passant sur eth1, tout ce qui passe sur eth0 est invisible…

La dernière règle de «masquerading» est là pour obliger le serveur à repasser par le parefeu pour répondre.

Ok, j’essaye ça à la rentrée (ce sera le jeudi 08/01), et je te tiens au courant !
Merci encore ! :slightly_smiling:

On peut voir le jeu de règles affiché par iptables-save, avec la signification des différentes interfaces le cas échéant ?

Excusez-moi pour le temps de réponse assez lent…
fran.b : Ta règle iptables n’a pas résolu notre problème mais j’ai du nouveau : nous voyons les paquets cherchés passer dans la chaîne PREROUTING et INPUT. Ils doivent donc passer avec succès PREROUTING mais ce doit être soit dans la chaîne INPUT soit plus loin qu’ils sont bloqués…c’est très bizarre !
De plus je ne t’ai pas précisé mais comme tu l’as “deviné” 100.100.100.100 est sur eth0 et 192.168.1.1 sur eth1.
Merci encore à toi

oui, je fais cela avec la commande iptables -L -n -v
Merci ! :slightly_smiling:

oui, je fais cela avec la commande iptables -L -n -v
Merci ! :slightly_smiling:[/quote]
je crois que ce que te demande PascalHambourg est de lui envoyer le résultat de la commande, afin qu’il puisse t’aider :mrgreen:

Olala excusez-moi j’avais pas du tout compris ce que demandais PascalHambourg ! Et excusez-moi aussi pr le retard de ma réponse une fois de plus, mais moi et mon binôme n’avons pas accès tous les jours au PC sur lequel est le firewall donc on ne peut pas répondre rapidement…
Alors voilà le résultat de iptables-save : [code]# Generated by iptables-save v1.4.1.1 on Wed Jan 28 17:24:08 2009
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -s 192.168.16.4/32 -i eth1 -p tcp -m tcp --dport 3128 -j DROP
-A PREROUTING -s 192.168.16.0/24 -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A PREROUTING -s 192.168.16.0/24 -i eth1 -p udp -m udp --dport 80 -j REDIRECT --to-ports 8080
-A PREROUTING -s 192.168.16.0/24 -d 192.168.16.1/32 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.16.4
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.16.4
-A PREROUTING -i eth0 -p udp -m udp --dport 80 -j DNAT --to-destination 192.168.16.4
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.16.2
-A PREROUTING -i eth0 -p udp -m udp --dport 25 -j DNAT --to-destination 192.168.16.2
-A PREROUTING -i eth0 -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.16.4
-A PREROUTING -i eth0 -p udp -m udp --dport 21 -j DNAT --to-destination 192.168.16.4
-A POSTROUTING -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A POSTROUTING -s 192.168.16.0/24 -o eth0 -p tcp -m tcp --dport 80 -j MASQUERADE
-A POSTROUTING -s 192.168.16.0/24 -d ! 192.168.16.0/24 -o eth0 -j MASQUERADE
COMMIT

Completed on Wed Jan 28 17:24:08 2009

Generated by iptables-save v1.4.1.1 on Wed Jan 28 17:24:08 2009

*mangle
:PREROUTING ACCEPT [11:582]
:INPUT ACCEPT [11:582]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [10:5960]
:POSTROUTING ACCEPT [10:5960]
-A PREROUTING -p tcp -m tcp --dport 20 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 21 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 22 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 23 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 25 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p udp -m udp --dport 53 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 67 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 80 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 110 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 113 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 123 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 143 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 443 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 993 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 995 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 1080 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 6000:6063 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 20 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 21 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 22 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 23 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 25 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 67 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 110 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 113 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 123 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 143 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 993 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 995 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 1080 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 6000:6063 -j TOS --set-tos 0x08/0x3f
COMMIT

Completed on Wed Jan 28 17:24:08 2009

Generated by iptables-save v1.4.1.1 on Wed Jan 28 17:24:08 2009

*filter
:INPUT DROP [3:158]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:412]
:DMZ_INET_FORWARD_CHAIN - [0:0]
:DMZ_INPUT_CHAIN - [0:0]
:DMZ_LAN_FORWARD_CHAIN - [0:0]
:EXT_ICMP_FLOOD_CHAIN - [0:0]
:EXT_INPUT_CHAIN - [0:0]
:EXT_OUTPUT_CHAIN - [0:0]
:HOST_BLOCK - [0:0]
:INET_DMZ_FORWARD_CHAIN - [0:0]
:LAN_INET_FORWARD_CHAIN - [0:0]
:LAN_INPUT_CHAIN - [0:0]
:MAC_FILTER - [0:0]
:RESERVED_NET_CHK - [0:0]
:SPOOF_CHK - [0:0]
:UPNP_FORWARD - [0:0]
:VALID_CHK - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state RELATED -m tcp --dport 1024:65535 -j ACCEPT
-A INPUT -p udp -m state --state RELATED -m udp --dport 1024:65535 -j ACCEPT
-A INPUT -p icmp -m state --state RELATED -j ACCEPT
-A INPUT -j HOST_BLOCK
-A INPUT -i eth1 -j MAC_FILTER
-A INPUT -j SPOOF_CHK
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -j VALID_CHK
-A INPUT -i eth0 -p ! icmp -m state --state NEW -j EXT_INPUT_CHAIN
-A INPUT -i eth0 -p icmp -m state --state NEW -m limit --limit 60/sec --limit-burst 100 -j EXT_INPUT_CHAIN
-A INPUT -i eth0 -p icmp -m state --state NEW -j EXT_ICMP_FLOOD_CHAIN
-A INPUT -i eth1 -j LAN_INPUT_CHAIN
-A INPUT -m limit --limit 1/sec -j LOG --log-prefix "Dropped INPUT packet: " --log-level 6
-A INPUT -j DROP
-A FORWARD -i lo -j ACCEPT
-A FORWARD -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m state --state RELATED -m tcp --dport 1024:65535 -j ACCEPT
-A FORWARD -p udp -m state --state RELATED -m udp --dport 1024:65535 -j ACCEPT
-A FORWARD -p icmp -m state --state RELATED -j ACCEPT
-A FORWARD -j HOST_BLOCK
-A FORWARD -i eth1 -j MAC_FILTER
-A FORWARD -d 192.168.16.4/32 -i eth0 -o ! eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -d 192.168.16.4/32 -i eth0 -o ! eth0 -p udp -m udp --dport 80 -j ACCEPT
-A FORWARD -d 192.168.16.2/32 -i eth0 -o ! eth0 -p tcp -m tcp --dport 25 -j ACCEPT
-A FORWARD -d 192.168.16.2/32 -i eth0 -o ! eth0 -p udp -m udp --dport 25 -j ACCEPT
-A FORWARD -d 192.168.16.4/32 -i eth0 -o ! eth0 -p tcp -m tcp --dport 21 -j ACCEPT
-A FORWARD -d 192.168.16.4/32 -i eth0 -o ! eth0 -p udp -m udp --dport 21 -j ACCEPT
-A FORWARD -i eth0 -o ! eth0 -j UPNP_FORWARD
-A FORWARD -j SPOOF_CHK
-A FORWARD -i eth0 -j VALID_CHK
-A FORWARD -i eth1 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j LAN_INET_FORWARD_CHAIN
-A FORWARD -m limit --limit 1/min --limit-burst 3 -j LOG --log-prefix "Dropped FORWARD packet: " --log-level 6
-A FORWARD -j DROP
-A OUTPUT -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A OUTPUT -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -j HOST_BLOCK
-A OUTPUT -f -m limit --limit 3/min -j LOG --log-prefix "FRAGMENTED PACKET (OUT): " --log-level 6
-A OUTPUT -f -j DROP
-A OUTPUT -o eth0 -j EXT_OUTPUT_CHAIN
-A EXT_ICMP_FLOOD_CHAIN -p icmp -j DROP
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0 -j DROP
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0 -j DROP
-A EXT_INPUT_CHAIN -p tcp -m tcp --sport 0 -j DROP
-A EXT_INPUT_CHAIN -p udp -m udp --sport 0 -j DROP
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 20/sec --limit-burst 100 -j ACCEPT
-A EXT_INPUT_CHAIN -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A EXT_INPUT_CHAIN -p tcp -j DROP
-A EXT_INPUT_CHAIN -p udp -j DROP
-A EXT_INPUT_CHAIN -p icmp -j DROP
-A EXT_INPUT_CHAIN -j DROP
-A EXT_OUTPUT_CHAIN -j ACCEPT
-A LAN_INET_FORWARD_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 20/sec --limit-burst 100 -j ACCEPT
-A LAN_INET_FORWARD_CHAIN -p icmp -m icmp --icmp-type 8 -j DROP
-A LAN_INET_FORWARD_CHAIN -j ACCEPT
-A LAN_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 20/sec --limit-burst 100 -j ACCEPT
-A LAN_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -j DROP
-A LAN_INPUT_CHAIN -j ACCEPT
-A RESERVED_NET_CHK -s 10.0.0.0/8 -j DROP
-A RESERVED_NET_CHK -s 172.16.0.0/12 -j DROP
-A RESERVED_NET_CHK -s 192.168.0.0/16 -j DROP
-A RESERVED_NET_CHK -s 169.254.0.0/16 -j DROP
-A SPOOF_CHK -s 192.168.16.0/24 -i eth1 -j RETURN
-A SPOOF_CHK -s 192.168.16.0/24 -m limit --limit 3/min -j LOG --log-prefix "Spoofed packet: " --log-level 6
-A SPOOF_CHK -s 192.168.16.0/24 -j DROP
-A SPOOF_CHK -j RETURN
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-option 64 -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-option 128 -j DROP
-A VALID_CHK -m state --state INVALID -j DROP
-A VALID_CHK -f -j DROP
COMMIT

Completed on Wed Jan 28 17:24:08 2009

[/code]

Je vous précise que pour notre firewall nous avons installé arno-iptables-firewall donc il y a plein de chaînes créées autres que celles habituelles. Enfin bref, bonne lecture ^^
Merci à vous :slightly_smiling: