Iptables et redirection

Salut, j’aimerais avoir un coup de main sur iptables s’il vous plais !

Sur mon réseau, j’ais 2 types de personnes, ceux qui payent internet et ceux qui ne payent pas.
Pour l’instant, tout la politique est à DROP et je fais une boucle avec un ACCEPT pour toutes les chambres inscrites dans le fichier /etc/internet…ça donne ce qui suis :

...
 
# Seuls les residents qui payent pour internet(ils sont identifies par leurs numeros de chambre : c'est leur nom d'hote) y ont acces :
for CHAMBRE in `cat /etc/internet`; do
  
   
   $IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE -m state --state NEW -j ULOG --ulog-prefix "NAT :";
   $IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE -j ACCEPT;

done
...

Ceci fonctionne bien…
MAINTENANT, j’aimerais un peu compliquer la chose, j’aimerais que tout ceux qui ne payent pas internet, sois redirigés vers le site http qui est installé sur la même machine qui fais passerelle/firewall
J’ais donc fais comme ceci :

[code]…
#Pour tout le monde on les redirige vers le serveur http qui est sur la passerelle/firewall
$IPTABLES -A PREROUTING -t nat -i $RINTERFACE -d ! 172.20.0.1 -p tcp --dport 80 -j REDIRECT --to-port 80

Seuls les residents qui payent pour internet(ils sont identifies par leurs numeros de chambre : c’est leur nom d’hote) y ont acces :

#Pour chaque chambre dans /etc/internet :
for CHAMBRE in cat /etc/internet; do

  #On annule la redirection pour toutes les chambres qui sont dans /etc/internet
   $IPTABLES -A PREROUTING -t nat -i $RINTERFACE -s $CHAMBRE -j ACCEPT

   #On log tout leur traffic
    $IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE -m state --state NEW -j ULOG --ulog-prefix "NAT :";
    #On autorise leur accés a internet
    $IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE -j ACCEPT;

done

[/code]

Le problème c’est que avec cette dernière méthode, tout le monde est redirigé vers le site, même ceux qui payent internet… Et je ne vois pas comment régler ce problème…

Pouvez vous m’aider ?
Merci d’avance

Comment ça qui payent internet ??
heu … moi je mettrais ceci : #Pour tout le monde on les redirige vers le serveur http qui est sur la passerelle/firewall $IPTABLES -A PREROUTING -t nat -i $RINTERFACE -d ! 172.20.0.1 -p tcp --dport 80 -j REDIRECT --to-port 80
Aprés le done, vu que toute règle qui est appliquée pendant la boucle n’est plus remis en cause par la suite …
Si tu mets ça en premier, tout le monde est concernés … même si iptables -L t’affiche les règles créées par la boucle, personne ne passera par ces règles, vu que tout le monde à son compte avant la boucle, tu saisis ?
C’est donc la première règle trouvée qui match l’internaute qui sera appliquée, pas la dernière …

Excellent merci infiniment, je n’avais pas saisis ça comme ça :smiley:

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

Maintenant tout ce passe bien ou presque !
Il reste juste un petit truc qui ne fonctionne pas :
En effet lorsqu’une personne qui ne paye pas internet va sur voyages-sncf.com/leisure/fr/launch/home/ alors elle tombe pas sur la page ni sur la redirection mais simplement sur une page disant que la page n’a pas été trouvée.

J’en conclu que quand une personne tape :
voyages-sncf.com
elle est redirgée vers :
mon_site_en_interne

par contre si elle tape :
voyages-sncf.com/leisure/fr/launch/home/
alors elle est redirigée vers :
mon_site_en_interne/leisure/fr/launch/home/

Comment faire pour que la redirection aille toujours à la racine ?

De plus c’est aussi génant pour mon site interne car tout les liens relatifs qui sont sur ma page deviennnent mon_site_en_interne/truc/truc.html :frowning:

La solution serait peut-etre de SNATER les paquets non ?

Merci d’avance

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

Autre chose, je ne suis pas sur mais j’aimerais savoir pour les cas de figure ci dessous si j’ai raison : ( la ou il y a des “Apparament…”)


......

   $IPTABLES -A INPUT -i ! $IINTERFACE -j ACCEPT
   ######################################
   # (Apparament la ligne ci dessous ne sert a rien puisque l'on vient d'accepter tout ce qui ne vient pas de l'internet. VRAI OU FAUX ?)
   ####################################
   $IPTABLES -A INPUT -i lo -j ACCEPT

....
  
  
  #########################################
  # (Apparament les lignes ci dessous ne servent a rien puisque la politique par default est a DROP. VRAI OU FAUX ?)
  ###############################
  $IPTABLES -A FORWARD -m state --state INVALID -j DROP
  $IPTABLES -A FORWARD -p tcp --dport 135 -j DROP
  $IPTABLES -A FORWARD -p udp --dport 135 -j DROP
  $IPTABLES -A FORWARD -i $RINTERFACE -o $AINTERFACE -j DROP
  $IPTABLES -A FORWARD -i $AINTERFACE -o $RINTERFACE -j DROP
  
  ....
  
  # Tout est acceptee 
  $IPTABLES -A OUTPUT -j ACCEPT
   ##########################################
  #(Apparement la ligne ci dessous ne sert a rien puisque l'on vient de tout accepter. VRAI OU FAUX ?)
   ########################################
  $IPTABLES -A OUTPUT -o lo -j ACCEPT

....

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

PS : Pour ce qui est de payer internet, c’est tout simplement parceque je suis l’admin d(une résidence (300 personnes) et la politique est de faire payer internet pour ce qui veulent et ne pas emmerder ce qui veulent pas !

Bonjour,
pour ton problème de redirection, c’est peut-être avec une directive RedirectMatch permanent dans la conf d’apache que tu trouveras une solution.
Ou alors pourquoi pas une page d’erreur (à spécifier aussi dans la conf d’apache) qui contiendrait un code javascript avec un timer et utilisant window.location.replace(‘http://ta_racine’); en disant que dans x secondes, redirection vers l’accueil ?

Pour le vrai/faux de tes commande iptables, d’autres répondront mieux que moi en fait … :wink:

Ok merci beaucoup pour ton aide, je vais voir du cote d’apache