Iptables et portail captif

Bonjour,
Je suis en train d’installer un portail captif : NoTalweg > talweg.univ-metz.fr/doku.php?id= … ationlenny
Tout est Ok, ça fonctionne très bien ! C’est la solution la plus simple que j’ai testé, très efficace !
Voici les règles iptables qui rendent la chose “possible”…
Les paquets sont soit acceptés, soit rejetés en fonction d’une authentification par login/mot de passe et d’un marquage.

#!/bin/sh
 
IPT="/sbin/iptables"
#Ip of notalweg gateway
IP_PRIVATE="10.13.0.1"
#Notalweg private interface
NTINT="eth1"
 
test -f $IPT || exit 0
 
case "$1" in
        start)
    echo -n "Loading firewall's rules: "
    echo 1 > /proc/sys/net/ipv4/ip_forward
 
    # Flush table
    $IPT -t nat -F
    $IPT -t mangle -F
    $IPT -t filter -F
 
    $IPT -t mangle -A PREROUTING -i $NTINT -j CONNMARK --restore-mark
    $IPT -t mangle -A PREROUTING -p TCP -i $NTINT -d $IP_PRIVATE -j ACCEPT
    $IPT -t mangle -A PREROUTING -p TCP -i $NTINT -m state --state NEW -j QUEUE
 
    $IPT -t nat -A PREROUTING -p TCP -i $NTINT -j CONNMARK --save-mark
    # MARK 0xFFFFFFFF = Openacls
    $IPT -t nat -A PREROUTING -p TCP -i $NTINT -m mark --mark 0xFFFFFFFF -j ACCEPT
 
    # MARK 0xFFFFFFFE = use http-to-https redirection
    $IPT -t nat -A PREROUTING -p TCP -i $NTINT -m mark --mark 0xFFFFFFFE -j DNAT --to-destination $IP_PRIVATE
 
    # MARK 0x0 = unauthenticated - 80 is redirected to authentication page
    $IPT -t nat -A PREROUTING -p TCP --dport 80 -i $NTINT -m mark --mark 0 -j DNAT --to-destination $IP_PRIVATE:8080
 
    # MARK 0x1 blacklistacls
    $IPT -t filter -A FORWARD -m mark --mark 0x1 -j REJECT
 
    $IPT -t nat -A POSTROUTING -m mark ! --mark 0 -j MASQUERADE
 
    echo "Done."
    ;;
  stop)
    echo -n "Flushing firewall's rules: "
	echo 0  > /proc/sys/net/ipv4/ip_forward
 
    ###########################
    # FLUSH TABLES
    ###########################
    $IPT -t filter -F
    $IPT -t nat -F
    $IPT -t mangle -F
    echo "Done."
    ;;
 
  status)
    # List tables
    echo
    echo "---------- FILTER TABLE -----------"
    echo
    $IPT -t filter -L -v
    echo
    echo "----------   NAT TABLE  -----------"
    echo
    $IPT -t nat -L -v
    echo
    echo "----------   MANGLE TABLE  -----------"
    echo
    $IPT -t mangle -L -v
    echo
    ;;
        restart|force-reload)
                $0 stop
                $0 start
                echo "Done."
                ;;
 
        *)
    echo "Usage: /etc/init.d/firewall {start|stop|status|restart}"
    exit 1
    ;;
esac
 
exit 0

Ma question… J’aimerais que certaines IP (un pool d’adresses distribuées par DHCP en fonction de l’adresse MAC) puissent accéder à Internet sans authentification (peut-être via un proxy transparent ?).
Pourriez-vous me donner un coup de main parce que je suis une brèle en iptables, et marquage des paquets ne simplifie pas mon apprentissage…
Je ne sais pas comment m’y prendre… :blush:
Merci d’avance !

Bon,
J’ai lu des tas de trucs… Pas évident, j’ai surtout trouvé des tutos “par l’exemple” !

J’ai essayé 2/3 choses, sans succès.

J’ai pensé à utiliser --src-range avec ou sans l’option “!”

Mais j’ai ce genre de message au démarrage du script : host/network `192.168.0.1-192.168.0.150’ not found

Ceci : -i $NTINT -m iprange --src-range 192.168.0.1-192.168.0.150 ne me donne pas d’erreur au démarrage du script, mais est-ce que -i et --src-range sont compatibles/complémentaires ? Ce n’est pas parce qu’il n’y a pas d’erreur que c’est fonctionnel…

Je dois avouer que c’est très obscur pour moi… Il faudrait déjà que je comprenne parfaitement l’enchaînement des règles du script initial, avant d’essayer d’y insérer les miennes…

Je continue mon chemin de croix ! :wink:

Je “crois” avoir trouvé.

SRC1="iprange --src-range 192.168.0.1-192.168.0.150" [...] # Redirige SRC1 sur squid3 $IPT -t nat -A PREROUTING -p TCP --dport 80 -i $NTINT -m $SRC1 -j DNAT --to-destination $IP_PRIVATE:3128 # MARK 0x0 = unauthenticated - 80 is redirected to authentication page $IPT -t nat -A PREROUTING -p TCP --dport 80 -i $NTINT -m mark --mark 0 -j DNAT --to-destination $IP_PRIVATE:8080

Qui me donne : Chain PREROUTING (policy ACCEPT 211 packets, 40682 bytes) pkts bytes target prot opt in out source destination 0 0 CONNMARK tcp -- eth1 any anywhere anywhere CONNMARK save 0 0 ACCEPT tcp -- eth1 any anywhere anywhere mark match 0xffffffff 0 0 DNAT tcp -- eth1 any anywhere anywhere mark match 0xfffffffe to:192.168.0.3 0 0 DNAT tcp -- eth1 any anywhere anywhere tcp dpt:www source IP range 192.168.0.1-192.168.0.150 to:192.168.0.3:3128 0 0 DNAT tcp -- eth1 any anywhere anywhere tcp dpt:www mark match 0x0 to:192.168.0.3:8080

Est-ce que ça vous semble acceptable ?

Bon, je ma gouravé… Pas étonnant :mrgreen:
Vous m’excuserez de poluer le forum avec mes divagations… :blush:

  1. c’est pas -m mais -s qu’il faut utiliser ?
  2. C’est pas DNAT mais REDIRECT ?
  3. Il faut que je rajoute une entrée dans la table “mangle” ?

Pour les essais j’ai utilisé une seule IP (IP2=“192.168.0.2”) c’est + simple…

Ce qui donnerait :

$IPT -t mangle -A PREROUTING -p TCP --dport 80 -i $NTINT -s $IP2 -j ACCEPT $IPT -t nat -A PREROUTING -p TCP --dport 80 -i $NTINT -s $IP2 -j REDIRECT --to-port 3128

Chain PREROUTING (policy ACCEPT 771 packets, 126K bytes)
[...]
    0     0 REDIRECT   tcp  --  eth1   any     deb501.local         anywhere            tcp dpt:www redir ports 3128 
[...]
----------   MANGLE TABLE  -----------
Chain PREROUTING (policy ACCEPT 13671 packets, 2426K bytes)
[...]
    0     0 ACCEPT     tcp  --  eth1   any     deb501.local         anywhere            tcp dpt:www 

J’espère que c’est bon là… Faut tester.

Salut,

Tu voles tellement haut que je ne penses pas qu’il y ait beaucoup de monde capable de te suivre ! Pas moi, toujours :smiley:

[quote=“ggoodluck47”]Salut,

Tu voles tellement haut que je ne penses pas qu’il y ait beaucoup de monde capable de te suivre ! Pas moi, toujours :smiley:[/quote]

Merci pour le compliment :wink: Mais il y a bien plus fort que moi, et ce n’est pas difficile :laughing:
Mais c’est contraint et forcé que je suis obligé de traîner dans ces marécages…
Il y a deux jours je n’y comprenais rien à ces foutus iptables. J’ai débuté avec Shorewall qui mâche le travail et simplifie la création du pare-feu. Mais si je veux avancer, il faut que j’en passe par là. Je me suis tapé le man du début à la fin, plusieurs fois… Carrément indigeste :mrgreen:
Et pour être franc c’est devenu translucide, pas transparent… :laughing: Encore beaucoup de chemin.

Eureka…

J’ai testé, ça fonctionne. Les IP sélectionnées accèdent au réseau sans identification via squid (avec squidguard je bloque l’accès à tout ce qui ne concerne pas le boulot, et je contrôle les horaires d’accès au net). Les autres se retrouvent sur le portail captif… :smiley: Trop content…
Il me reste à ouvrir quelques port pour que mon “ancien serveur” puisse accéder à quelques services sur le net.
L’ancien serveur ne se retrouve plus en première ligne, c’est bien !

Bonjour,

j’écris ici, ayant le même genre de problème.

J’essaye de mettre en place un portail captif, je dis bien “j’essaye”,

mon problème, est la redirection sur le port 80 de mon serveur.

j’ai pour le moment la page it work d’apache pour les tests.

dans mon script iptables, je redirige avec cette commande:

iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j DNAT --to-destination 192.168.100.1:80

hélas, je tombe sur un 404, mon apache me réponds comme s’il faisait une recherche de ma requete google chez lui (et donc il ne trouve rien) au lieu de m’afficher mon site.

je précise que lorsque je tape l’ip dans le navigateur depuis mon client, j’y accède, de même avec les dns.

si quelqu’un à une idée, je lui serai éternellement reconnaissant (si ça marche hein!)

merci d’avance!

Salut,
Quelle solution as-tu choisi pour ton portail ?
Quelle est l’infrastructure réseau, le portail est sur le routeur/pare-feu ?
Tu as suivi un tuto ?

Voilà quelque questions pour essayer d’y voir clair…

En passant la problématique de mon sujet était un peu particulière, il s’agissait de diriger certaines ip sur un proxy sans quelles ne soient contraintes de passer par le portail…

la solution est une “home made”:
andybev.com/index.php/Settin … ing_Debian

et le portail est sur le routeur/firewall

tuto suivi mais ne change rien,

je ne comprends pas "logiquement " pourquoi ça ne marche pas,

l’antenne wifi est branché sur eth1 eth0 dans mon lan privé.

toute les requêtes sur le port 80 devrai être redirigé sur mon apache avec ça non?

merci pour ta réponse

Re,

J’ai utilisé NoTalweg : talweg.univ-metz.fr/notalweg:installationlenny

C’est super… Il existe un paquet Lenny en 32 et 64 bits. C’est très simple à installer et ça fonctionne. J’ai juste provisoirement suspendu car il ne prend pas en charge la gestion du temps…
Je te conseillerais de regarder.

Sinon, envoie le script iptables, je regarderais, mais je ne suis pas un cador…

mon problème est qu’il faut que le client quand il se connecte soi redirigé sur une page web pour s’inscrire, et non pas pour se logger, il faut qu’ils s’inscrivent en ligne pour pouvoir surfer ensuite.

je ne pense pas que no talweg le fasse?

le script iptables je veux bien, mais il à 5 ligne il me sers juste à faire la redirection pour le moment, mais vu que ça ne marche pas…c po cool.
Donc si tu arrive à me dire comment faire simplement un portail captif. simplement dans le sens où je ne veux que rediriger les requettes http sur mon site local.

merci pour ton aide.

Re,
Dis donc, le script… c’est pas de la tarte ! C’est beau, mais c’est compliqué…

Et ta ligne, je ne la vois pas dans le script proposé sur le tuto que tu suis…

Le principe du script qui est proposé pour le portail que tu as l’intention d’installer est le marquage des paquets qui parviennent au pare-feu. Si la marque est Ok il sortent, sinon, c’est bloqué. C’est compliqué (simple sur le principe)… Je suis incapable de vérifier ce script… surtout que la règle que tu me balance n’est pas dans ce script…

Alors si tu t’amuses à sortir du script, il faut être docteur es iptables… Ce n’est pas mon cas… Éventuellement, si tu installe NoTalweg, je pourrais t’aider, j’ai pratiqué, et je suis un peu plus familier des règles utilisées…

Sinon, désolé, sans moi… :mrgreen:

Edit : Réponse à ta question : non Notalweg ne fait pas l’inscription préalable… Pour ça c’est Wifidog ! Pas si compliqué à installer… Je l’ai installé il y a une semaine (c’est simple), mais j’ai laissé tomber justement à cause de cette inscription libre des “clients”…

alors tu peux peut être m’aider, je peux vite tester une wifidog, tu as des liens des tutos?

je l’avais essayé au préalable, mais je crois que ça ne fonctionnait pas convenablement, mais si tu as réussi avec ton aide ça serai possible.

Et pour les script iptables, j’ai appris avec ce tuto, à la fin ça ne marchai pas donc j’ai décortiqué chaque commande pour comprendre et refaire “mon script” mais ne marchant toujours pas, j’ai fait une version simplifié de l’install avec juste une redirection, sans marquage, mais là non plus ça ne marche pas.
J’ai l’impression d’avoir un soucis avec apache, mais alors lui… je le connais pas ou peu.

en somme je deviens dingue, et il faut que ça marche.

merci pour ton aide en tout cas :wink:

Re,
Je regarde ça demain matin. Quel est ton “cahier des charges” exactement ?

[quote=“smiley2”]…à la fin ça ne marchai pas donc j’ai décortiqué chaque commande pour comprendre et refaire “mon script” mais ne marchant toujours pas, j’ai fait une version simplifié de l’install avec juste une redirection, sans marquage…[/quote]Le principe du système que tu as choisi étant le marquage des paquets, soit tu fait avec soit ça ne fonctionne pas… C’est loin d’être simple d’appréhender comment les paquets circulent, comment ils sont marqués, et comment faire sa “gare de triage”…

un pc fait office de routeur/firewall/portail captif, il a 2 cartes réseaux une sur une box et l’autre avec un point d’acces wifi.

le client se connecte au wifi, et est loggé selon les lois en vigueur. :unamused:
3 choses sont importante:
1- gratuit
2- aucune intervention humaine pour la création d’utilisateur
3- facilité d’enregistrement des logs.

merci pour ton aide c’est super! :mrgreen:

[quote=“smiley2”]un pc fait office de routeur/firewall/portail captif, il a 2 cartes réseaux une sur une box et l’autre avec un point d’acces wifi.

le client se connecte au wifi, et est loggé selon les lois en vigueur. :unamused:
3 choses sont importante:
1- gratuit
2- aucune intervention humaine pour la création d’utilisateur
3- facilité d’enregistrement des logs.

merci pour ton aide c’est super! :mrgreen:[/quote]

Re,
Pour le point N°2 Wifidof le fait, mais la confirmation est par mail… Il faut donc un serveur de mail opérationnel sur la machine (postfix). Attention, sur le tuto l’installaton de postfix, c’est une ligne, en réalité, c’est un peu plus compliqué… :mrgreen: La validation doit être immédiate ?

J’ai suivi ce tuto : dev.wifidog.org/wiki/doc/install … uth-server
J’ai fait tourné une heure… ça fonctionnait ! Mais j’ai laissé tomber à cause du point N° 2 (chez toi)…

attends je pige pas, tu reçois une confirmation par mail pour te donner le code de connexion?
mais tu fais comment pour recevoir tes mails si tu n’es pas connecté au net?
postfix ok, j’ai déjà fais ça il y a 2 ans, mais je ne comprends pas le fonctionnement pour le moment.

edit:et oui oui la validation doit être immédiate, enfin même par mail ça irai, mais comment recevoir ce mail en fait? s’il faut que tu rentres chez toi, c’est sur ce n’est pas la peine.

re-edit: en fait c’est bon après lecture du site j’ai compris le principe de 15 min d’internet pour valider ton inscription.
donc parfait!

je essayer de l’installer.

merci et surement à plus tard avec d’autre problèmes! :wink:

[quote=“smiley2”]attends je pige pas, tu reçois une confirmation par mail pour te donner le code de connexion?
mais tu fais comment pour recevoir tes mails si tu n’es pas connecté au net?
postfix ok, j’ai déjà fais ça il y a 2 ans, mais je ne comprends pas le fonctionnement pour le moment.[/quote]

[quote]You need to have a valid mailer in order to mail account confirmation![/quote]C’est pas moi qui le dit… Je ne sais pas si il y a un moyen plus rapide…

Mais il suffit d’offrir quelques minutes gratuites, le temps d’aller chercher le mail de confirmation…

Pour information ::

andybev.com/index.php/Settin … ing_Debian

andybev.com/index.php/Settin … ing_Debian