#1 Le 31/05/2007, à 13:49
- lex111
[RESOLU] iptables : rediriger vers une page web ?
Salut a tous, j'aurais besoin d'un petit coup de main pour fignioler le script du firewall du reseau que j'administre...
En gros il est fais comme ça :
1) On bloque tout le monde
2) On autorise ceux qui ont payer internet à acceder au net
Ce que j'aimerais avoir c'est ça :
1) On bloque tout le monde
2) On autorise ceux qui ont payer internet à acceder au net
3) Pour les autres (ceux qui ne payent pas), on les redirigent vers le site du reseau (http://187.*.*.*)
Je précise que se n'est pas moi qui ais fais le script mais mon prédecesseur, et que je ne m'y connais presque pas en iptables
Merci a tout ceux qui prendront le temps de m'aider
Voici le script actuel :
#!/bin/bash
#Script de pare feu pour le réseau
# /!\ ce script utilise ULOG et non syslog
#TODO : ne logguer que les paquets en state NEW
IPTABLES=/sbin/iptables
IINTERFACE=eth2
RINTERFACE=eth1
AINTERFACE=eth0
#eth2 est l interface reliée a Internet (I).
#eth1 est l'interface gérant le réseau de la Résidence (R).
#eth0 est l'interface gérant le réseau de l'Administration (A).
stop() {
echo "Arret du firewall"
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
}
start() {
echo "Mise en place des regles de securite"
# on met en dur les adresses MAC pour être sûr des personnes conncetées
/usr/sbin/arp -f /etc/ethers
# Règles par défaut :
# tous les paquets qui n'ont pas été acceptés sont détruits .
echo "Mise en place des regles par defaut : DROP"
$IPTABLES -P FORWARD DROP
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
# On cree la chaine utilisateur "connexion-autorise"
# on la vide de toutes regles qu elles pourraient avoir
# on accepte les paquets faisant parti d'un session existante (ou en cours).
# Ainsi nous ne sommes pas obligés d'ouvrir toues les ports supérieurs à 1024 !
# le moteur de suivi de session s'occupera de savoir quelle connexion a été initiée
# et reste valide.
# Nous allons donc pouvoir interdire toute ouverture de session de l'exterieur (eth0).
echo "Creation de la chaine de suivi des états"
$IPTABLES -N connexion-autorise
$IPTABLES -F connexion-autorise
$IPTABLES -A connexion-autorise -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A connexion-autorise -i $IINTERFACE -m limit -j ULOG --ulog-prefix "Mauvais paquet d' ${IINTERFACE}:"
# traffic ICMP.
# On autorise les messages d'erreurs ICMP provenant de l'exterieur (avec un etat NEW)
echo "Creation de la chaine gerant ICMP"
$IPTABLES -N icmp_autorise
$IPTABLES -F icmp_autorise
$IPTABLES -A icmp_autorise -i lo -j ACCEPT
$IPTABLES -A icmp_autorise -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A icmp_autorise -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A icmp_autorise -p icmp -j ULOG --ulog-prefix "Mauvais traffic ICMP :"
$IPTABLES -A icmp_autorise -p icmp -j DROP
# Traffic entrant ssh
echo "Creation de la chaine gerant le traffic ssh en entree"
$IPTABLES -N autorise-traffic-ssh-en-entree
$IPTABLES -F autorise-traffic-ssh-en-entree
#Pour eviter d'etre flooder, on met en place des regles :
$IPTABLES -A autorise-traffic-ssh-en-entree -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport ssh -j ACCEPT
$IPTABLES -A autorise-traffic-ssh-en-entree -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport ssh -j ACCEPT
$IPTABLES -A autorise-traffic-ssh-en-entree -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport ssh -j ACCEPT
$IPTABLES -A autorise-traffic-ssh-en-entree -p tcp --dport ssh -j ACCEPT
# Traffic sortant ssh
echo "Creation de la chaine gerant le traffic ssh en sortie"
$IPTABLES -N autorise-traffic-ssh-en-sortie
$IPTABLES -F autorise-traffic-ssh-en-sortie
$IPTABLES -A autorise-traffic-ssh-en-sortie -p tcp --dport ssh -j ACCEPT
# on ulogue ceux qui essaient de scanner les ports
echo "Creation de la chaine de detection de scans de ports"
$IPTABLES -N scan-ports
$IPTABLES -F scan-ports
$IPTABLES -A scan-ports -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j ULOG --ulog-prefix "NMAP-XMAS:"
$IPTABLES -A scan-ports -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A scan-ports -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j ULOG --ulog-prefix "XMAS:"
$IPTABLES -A scan-ports -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A scan-ports -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j ULOG --ulog-prefix "XMAS-PSH:"
$IPTABLES -A scan-ports -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A scan-ports -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j ULOG --ulog-prefix "NULL_SCAN:"
$IPTABLES -A scan-ports -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A scan-ports -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j ULOG --ulog-prefix "SYN/RST:"
$IPTABLES -A scan-ports -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A scan-ports -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j ULOG --ulog-prefix "SYN/FIN:"
$IPTABLES -A scan-ports -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
##################################################################
# chaine INPUT #
##################################################################
# On règle le problème des paquets invalides.
# Tout paquet provenant de l'intérieur (eth0 ou eth1) en direction du serveur est accepte (sauf scans de ports).
# On essaie des chaines definies plus haut.
echo "Creation de la chaine INPUT"
$IPTABLES -A INPUT -m state --state INVALID -j DROP
#$IPTABLES -A INPUT -j icmp_autorise
$IPTABLES -A INPUT -j scan-ports
$IPTABLES -A INPUT -j autorise-traffic-ssh-en-entree
$IPTABLES -A INPUT -i ! $IINTERFACE -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -j connexion-autorise
##################################################################
# chaine FORWARD #
##################################################################
echo "Creation de la chaine FORWARD"
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
#pour blaster sql:
$IPTABLES -A FORWARD -p tcp --dport 135 -j DROP
$IPTABLES -A FORWARD -p udp --dport 135 -j DROP
# -On bloque toute communication entre le reseau (eth0) et l'administration (eth1) :
# ils n'ont aucune raison de communiquer entre eux (l'administration ne veut pas savoir ce que font les
# residents et ils ne veulent pas acceder au reseau).
$IPTABLES -A FORWARD -i $RINTERFACE -o $AINTERFACE -j DROP
$IPTABLES -A FORWARD -i $AINTERFACE -o $RINTERFACE -j DROP
# -tout paquet provenant de l'administration (eth1) vers l'exterieur(eth2) est autorise
$IPTABLES -A FORWARD -i $AINTERFACE -o $IINTERFACE -j ACCEPT
# Seuls ceux du reseaux 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
$IPTABLES -A FORWARD -j icmp_autorise
$IPTABLES -A FORWARD -j scan-ports
$IPTABLES -A FORWARD -o lo -j ACCEPT
$IPTABLES -A FORWARD -j autorise-traffic-ssh-en-entree
$IPTABLES -A FORWARD -j connexion-autorise
##################################################################
# chaine OUTPUT #
##################################################################
echo "Creation de la chaine OUTPUT"
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP
# Tout paquet du firewall vers l'intérieur (eth0 ou eth1) est accepte
#==> tout est accepté finalement... pour les MAJ
$IPTABLES -A OUTPUT -j ACCEPT
# Un paquet provenant du firewall vers l'exterieur (eth2) est :
# -un paquet icmp
# -ou du ssh
#$IPTABLES -A OUTPUT -j icmp_autorise
$IPTABLES -A OUTPUT -j scan-ports
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A OUTPUT -j autorise-traffic-ssh-en-sortie
$IPTABLES -A OUTPUT -j connexion-autorise
# Mise en place du NAT :
$IPTABLES -t nat -A POSTROUTING -o $IINTERFACE -j MASQUERADE
}
showstatus() {
echo "Statut"
$IPTABLES -L -n -v --line-numbers
echo "Statut du NAT"
$IPTABLES -L -n -v --line-numbers -t nat
}
panic() {
echo "Mise en place de regles draconiennes"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -P FORWARD DROP
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
showstatus
;;
panic)
panic
;;
*)
echo "Utilisation: $0 {start|panic|stop|restart|showstatus}"
echo "start) On restaure les regles du parefeu si elles existent, sinon on met en place les règles par défaut"
echo "stop) on accepte tout "
echo "panic) on refuse tout "
echo "status) Montre le statut,cad les regles des chaines"
;;
esac
exit 0
Dernière modification par lex111 (Le 02/06/2007, à 10:17)
Hors ligne
#2 Le 31/05/2007, à 17:08
- fugitif
Re : [RESOLU] iptables : rediriger vers une page web ?
D'après se que je vois il utilise cette règle pour autoriser les connexions de ceux qui ont payer, via un fichier /etc/internet qui doit contenir de quoi les identifier.
# Seuls ceux du reseaux 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;
$IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE --protocol tcp --destination-port 1:111 -j ACCEPT;
done
Mais que contient /etc/internet ? Leurs IP je pense ? Surement pas leurs N° de chambre comme indiquer lol
En passant, pas très fortiche en orthographe ton prédécesseur.
#Script de pare feu pour la réseau
On dit le réseau et pas la reseau
Et
#eth1 est l'interface gérant le réseau de la Réseau (R).
Tu peut traduire ? C'est quoi le réseau de la Réseau ?
Et son script est à revoir. Un exemple sur la méthode employer qui autorise le surf des gens qui ont payer.
D'abord il accepte le forward de tout traffic qui viens de $RINTERFACE à destination de $IINTERFACE et dont la source est $CHAMBRE
$IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE -j ACCEPT
Et après il limite à certains ports.
$IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE --protocol tcp --destination-port 1:111 -j ACCEPT
Donc la 2è règle ne sert strictement à rien puisque la précédente autorise TOUT traffic.
J'ai pas regarder le reste en détails, vu qu'il manque le contenu du fichier /etc/internet
Opteron 165 - 2Go DDR - Ubuntu Hardy - 32bits
Hors ligne
#3 Le 31/05/2007, à 23:29
- lex111
Re : [RESOLU] iptables : rediriger vers une page web ?
Merci d'avoir pris le temps de repondre, alors je vais essayer de faire de même :
D'après se que je vois il utilise cette règle pour autoriser les connexions de ceux qui ont payer, via un fichier /etc/internet qui doit contenir de quoi les identifier.
# Seuls ceux du reseaux 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;
$IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE --protocol tcp --destination-port 1:111 -j ACCEPT;
doneMais que contient /etc/internet ? Leurs IP je pense ? Surement pas leurs N° de chambre comme indiquer lol
Alors /etc/internet contient bien les numeros de chambre, ce qui ne change rien puisque l'analogie entre les chambres et les ips sont dans /etc/hosts
En passant, pas très fortiche en orthographe ton prédécesseur.
#Script de pare feu pour la réseau
On dit le réseau et pas la reseau
Et#eth1 est l'interface gérant le réseau de la Réseau (R).
Tu peut traduire ? C'est quoi le réseau de la Réseau ?
En fait il faut m'excuser, c'est moi qui ais enlevé quelques commentaires qui étaient ininteressant voir à ne pas divulguer....
Donc ça donnerais ça :
#Script de pare feu pour le réseau
et
#eth1 est l'interface gérant le réseau de la Résidence (reseau interne)(R).
Et son script est à revoir. Un exemple sur la méthode employer qui autorise le surf des gens qui ont payer.
D'abord il accepte le forward de tout traffic qui viens de $RINTERFACE à destination de $IINTERFACE et dont la source est $CHAMBRE
$IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE -j ACCEPT
Et après il limite à certains ports.
$IPTABLES -A FORWARD -s $CHAMBRE -i $RINTERFACE -o $IINTERFACE --protocol tcp --destination-port 1:111 -j ACCEPT
Donc la 2è règle ne sert strictement à rien puisque la précédente autorise TOUT traffic.
C'est vrai j'avais remarqué ça et je m'étais posé la même question... Je vais changer ça...
J'ai pas regarder le reste en détails, vu qu'il manque le contenu du fichier /etc/internet
Et bien maintenant je pense que tu sais tout ! le /etc/internet contient tout les numeros de chambre, mais ça revient au même que de mettre les ips puisque l'analogie est faite dans le fichier /etc/hosts....
A toi la parole !
EDIT : Sur irc on m'a indiqué que pour rediriger les personnes du réseau vers le site il faut utiliser cette règle :
$IPTABLES -t nat -A PREROUTING -i $RINTERFACE -s $CHAMBRE -p tcp --dport 80 -j ACCEPT
Je précise que le site est sur le même pc que la passerelle/firewall
Cette règle fonctionne bien, le problème c'est que tout le monde est redirigé sur le site, même ceux qui payent internet. Et je ne vois pas comment faire pour limiter cette redirection à ceux qui ne le payent pas....
Une idée ? !!!!
Dernière modification par lex111 (Le 31/05/2007, à 23:38)
Hors ligne
#4 Le 01/06/2007, à 13:00
- fugitif
Re : [RESOLU] iptables : rediriger vers une page web ?
Pour faire se que tu veux il faut créer une règle, mais avec une inversion "!" Ce qui veux dire que, se qui n'est pas dans /etc/internet aura une règle spécial qui redirige leurs traffic vers ton site.
En clair se qui vient de $RINTERFACE à déstination de $IINTERFACE et qui n'est pas dans /etc/internet est rediriger vers ton serveur web sur le port 80.
Voilà se que je ferait pour avoir des logs et rester dans FORWARD plutôt que la règle trouver sur irc :
for CHAMBRE in `cat /etc/internet`; do
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:";
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -j DNAT --to-destination 192.187.0.5:80;
done
Juste penser à remplacer 192.187.0.5:80 par l'ip où se trouve ton serveur web, ainsi que le port utiliser.
Tu peut aussi créer un virtualhost avec apache et rediriger vers une page de se virtualhost sur un autre port. Le 81 par exemple.
Parce que là ont redirige vers l'index de ton serveur.
PS: de la doc sur iptables http://www.linux-france.org/prj/inetdoc/guides/iptables-tutorial/traversingoftables.html
Dernière modification par fugitif (Le 01/06/2007, à 13:12)
Opteron 165 - 2Go DDR - Ubuntu Hardy - 32bits
Hors ligne
#5 Le 01/06/2007, à 13:25
- lex111
Re : [RESOLU] iptables : rediriger vers une page web ?
Salut... alors si je mets :
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:";
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -j DNAT --to-destination 192.187.0.5:80;
Ca me renvoi le message ci dessus x fois :
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.2.11: Need TCP or UDP with port specification
Si je met ça :
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:";
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE [b] -p tcp [/b] -j DNAT --to-destination 192.187.0.5:80;
Ca me renvoie ce message x fois ...
iptables: Invalid argument
De plus ça me parrait bizarre, parceque dans la boucle, on dit que tout ceux qui sont different de la chambre en cours dans la boucle sont redirigés, donc en principe ça redirige aussi tout ceux qui payent internet mais qui ne sont pas en train de passer dans la boucle...
Au final je pense que c'est la dernière fois que la boucle est effectué qui va fixer ceux qui vont être redirigés, c'est a dire que tout le monde sera redirigé sauf celui qui se trouve a la fin du fichier /etc/internet
Je ne sais pas si je m'explique clairement, mais dans le principe je pense que ça ne peux pas fonctionner
PS : merci pour le lien
Dernière modification par lex111 (Le 01/06/2007, à 13:31)
Hors ligne
#6 Le 01/06/2007, à 14:25
- fugitif
Re : [RESOLU] iptables : rediriger vers une page web ?
Salut... alors si je mets :
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:"; $IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -j DNAT --to-destination 192.187.0.5:80;
Ca me renvoi le message ci dessus x fois :
Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.11: Need TCP or UDP with port specification
Il faut alors spécifier le protocole (tcp où udp) ainsi que le port s'il le demande
Essai ceci :
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:";
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -p tcp -j DNAT --to-destination 192.187.0.5:80;
Si ca ne fonctionne pas, met aussi le port.
Si je met ça :
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:"; $IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -p tcp -j DNAT --to-destination 192.187.0.5:80;
Ca me renvoie ce message x fois ...
iptables: Invalid argument
Ok, donc, il faut spécifier le port alors '-p tcp -dport 80'
Et j'ai vu que la police par défaut de FORWARD est à DROP. Il faut donc laisser passer sur le port 80 avant le FORWARD.
Essai ceci
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:";
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -p tcp --dport 80 -j ACCEPT;
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -p tcp --dport 80 -j DNAT --to-destination 192.187.0.5:80;
Mais le problème avec cette règle, c'est que tout ceux qui ne sont pas dans /etc/internet pourront surfer sur le port 80.
A mon avis tu doit passer par le virtualhost pour utiliser un autre port que le 80.
Essai voir cette règle
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:";
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -p tcp --dport 80 -j DNAT --to-destination 192.187.0.5:80;
Sinon il faudra voir à créer un virtualhost ou se trouve ta page, et rediriger vers ce port.
Peut être une autre solution :
$IPTABLES -t nat -A PREROUTING -i $RINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:"
$IPTABLES -t nat -A PREROUTING -i $RINTERFACE ! -s $CHAMBRE -p tcp --dport 80 -j ACCEPT
Essai les deux pour voir.
Dernière modification par fugitif (Le 01/06/2007, à 14:54)
Opteron 165 - 2Go DDR - Ubuntu Hardy - 32bits
Hors ligne
#7 Le 01/06/2007, à 15:34
- lex111
Re : [RESOLU] iptables : rediriger vers une page web ?
Essai voir cette règle
$IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:"; $IPTABLES -A FORWARD -i $RINTERFACE -o $IINTERFACE ! -s $CHAMBRE -p tcp --dport 80 -j DNAT --to-destination 192.187.0.5:80;
Ceci me renvoi x fois : "iptables: Invalid argument" même après un upgrade....
Sinon il faudra voir à créer un virtualhost ou se trouve ta page, et rediriger vers ce port.
Le site est a la racine
Peut être une autre solution :
$IPTABLES -t nat -A PREROUTING -i $RINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:" $IPTABLES -t nat -A PREROUTING -i $RINTERFACE ! -s $CHAMBRE -p tcp --dport 80 -j ACCEPT
Ceci ne change rien...les personnes qui ne payent pas n'ont pas accés a internet, mais ne sont pas redirigé vers le site...
QUESTION : Est il possible de mettre dans la variable $CHAMBRE toutes les chambres d'un coup ?
Comme cela, il n'y aurai pas besoin de faire de boucle, et la règle serait mieux traduite....
Dernière modification par lex111 (Le 01/06/2007, à 16:51)
Hors ligne
#8 Le 01/06/2007, à 17:31
- lex111
Re : [RESOLU] iptables : rediriger vers une page web ?
Bon je m'y perds un peu, j'ai essayé autre chose, je ne comprends pas ce qui cloche car tout le monde est redirigé vers mon site :
Voila ce que j'ai fais :
...
#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 :
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;
#On annule la redirection pour toutes les chambres qui sont dans /etc/internet
$IPTABLES -A PREROUTING -t nat -i $RINTERFACE -s $CHAMBRE -j ACCEPT
done
...
Dernière modification par lex111 (Le 01/06/2007, à 18:05)
Hors ligne
#9 Le 01/06/2007, à 20:34
- fugitif
Re : [RESOLU] iptables : rediriger vers une page web ?
fugitif a écrit :Peut être une autre solution :
$IPTABLES -t nat -A PREROUTING -i $RINTERFACE ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:" $IPTABLES -t nat -A PREROUTING -i $RINTERFACE ! -s $CHAMBRE -p tcp --dport 80 -j ACCEPT
Ceci ne change rien...les personnes qui ne payent pas n'ont pas accés a internet, mais ne sont pas redirigé vers le site...
QUESTION : Est il possible de mettre dans la variable $CHAMBRE toutes les chambres d'un coup ?
Comme cela, il n'y aurai pas besoin de faire de boucle, et la règle serait mieux traduite....
Je comprend pas se que tu veux dire. La variable $CHAMBRE c'est le contenu de ton fichier /etc/internet. Donc si tu met toutes les chambres, tous auront accès au net.
Il faut trouver une règle qui utilise ! (c'est à dire une inversion), rediriger se qui ne viens pas de $CHAMBRE dans ton cas vers ta page.
Exemple :
$IPTABLES -A INPUT -s $CHAMBRE -p tcp --dport 80 -j ACCEPT
Traduction: tout ce qui viens de $CHAMBRE à destination du port 80 est accepter
$IPTABLES -A INPUT ! -s $CHAMBRE -p tcp --dport 80 -j ACCEPT
Traduction: tout ce qui ne viens PAS de $CHAMBRE à destination du port 80 est accepter
Essai cette règle :
$IPTABLES -t nat -A PREROUTING ! -s $CHAMBRE -m state --state NEW -j ULOG --ulog-prefix "NAT des chambres non payer:"
$IPTABLES -t nat -A PREROUTING ! -s $CHAMBRE -p tcp --dport 80 -j ACCEPT
$IPTABLES -t nat -A PREROUTING ! -s $CHAMBRE -p tcp --dport 80 -j REDIRECT --to-destination 172.20.0.1
Dernière modification par fugitif (Le 01/06/2007, à 20:49)
Opteron 165 - 2Go DDR - Ubuntu Hardy - 32bits
Hors ligne
#10 Le 01/06/2007, à 21:03
- lex111
Re : [RESOLU] iptables : rediriger vers une page web ?
Je comprend pas se que tu veux dire. La variable $CHAMBRE c'est le contenu de ton fichier /etc/internet. Donc si tu met toutes les chambres, tous auront accès au net.
Non la variable $CHAMBRE c'est une ligne du fichier /etc/internet, celle qui est en cours dans la boucle donc ! $CHAMBRE c'est tout le monde (y compris les autres chambres qui correspondent aux autres lignes de /etc/internet) sauf la chambre de la ligne en cours
PS : dans le fichier /etc/internet, il y a plusieurs chambres, il n'yen a pas qu'une....
Dernière modification par lex111 (Le 01/06/2007, à 21:05)
Hors ligne
#11 Le 01/06/2007, à 21:44
- fugitif
Re : [RESOLU] iptables : rediriger vers une page web ?
fugitif a écrit :Je comprend pas se que tu veux dire. La variable $CHAMBRE c'est le contenu de ton fichier /etc/internet. Donc si tu met toutes les chambres, tous auront accès au net.
Non la variable $CHAMBRE c'est une ligne du fichier /etc/internet, celle qui est en cours dans la boucle donc ! $CHAMBRE c'est tout le monde (y compris les autres chambres qui correspondent aux autres lignes de /etc/internet) sauf la chambre de la ligne en cours
PS : dans le fichier /etc/internet, il y a plusieurs chambres, il n'yen a pas qu'une....
Non non, la variable $CHAMBRE liste TOUT ton fichier, pas seulement la première ligne. Regarde un peu mieux le script iptables.
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;#On annule la redirection pour toutes les chambres qui sont dans /etc/internet
$IPTABLES -A PREROUTING -t nat -i $RINTERFACE -s $CHAMBRE -j ACCEPTdone
S'il n'y avais qu'une ligne dans /etc/internet je vois pas pourquoi ton prédécesseur aurai fait une boucle et inclus un fichier pour cette variable.
De toutes façon c'est simple, fait un cat /etc/internet et tu verra se qu'inclus la variable.
En principe ton fichier /etc/internet doit contenir les chambres autoriser à surfer, et pas les autres.
Dernière modification par fugitif (Le 01/06/2007, à 21:54)
Opteron 165 - 2Go DDR - Ubuntu Hardy - 32bits
Hors ligne
#12 Le 01/06/2007, à 21:55
- lex111
Re : [RESOLU] iptables : rediriger vers une page web ?
Je ne dis pas qu'il ya q'une seule ligne dans /etc/internet, je dis qu'il y a qu'une seule ligne qui rentre dans la variable $CHAMBRE, et ça pour toutes les lignes de /etc/internet, d'ou la boucle
Dans la variable $CHAMBRE, il n'y a pas toutes les lignes du fichiers /etc/internet, mais une seule qui change a chaque a chaque fois que la boucle est incrémentée
La solution serait peut être d'inclure toutes les chambres de /etc/internet dans la variable $CHAMBRE, mais je ne sais pas si c'est possible
Dernière modification par lex111 (Le 01/06/2007, à 22:10)
Hors ligne
#13 Le 02/06/2007, à 10:16
- lex111
Re : [RESOLU] iptables : rediriger vers une page web ?
Hors ligne