URL: https://linuxfr.org/forums/linux-general/posts/iptablesportail-captif Title: iptables+portail captif Authors: serval21 Date: 2009年10月08日T03:15:20+02:00 Tags: Score: 0 Bonsoir à tous, J'expliquais dans un billet précédent mon désir de mettre en place un portail captif, j'ai essayé des logiciels tels coovachilli et alcasar. J'ai finalement retenu alacasar de par sa simplicité d'utilisation(basé aussi sur coovachilli). cependant j'ai rencontré quelques soucis du fait que mes clients viennent de différentes plages d'adresses ce qui crée un souci au niveau de la table arp de coova. j'ai alors décidé de simplifier les choses en utilisant juste iptables et apache, vu que je veux juste rediriger tous mes clients demandant n'importe quelle page web vers la page de mon serveur. J'ai adapté alors les deux scripts ci dessous que j'ai lancé sur une machine me servant de test, ensuite j'ai utlisé une autre machine cliente avec comme passerelle l'IP de mon serveur. Mais voilà avec le second script quand je lance une requête vers yahoo par exemple, je n'ai aucun résultat, mais par contre sur l'IP du serveur j'ai la page d'accueil d'apache. Avec le premier script rien ne fonctionne. Je vous laisse les scripts en espérant que vous y verrez plus clair que moi. ============ Script 1 ====================== #!/bin/sh IPTABLES="/sbin/iptables" INTIF="eth0" NETWORK="192.168.1.0/24" NETWORK_BROADCAST="192.168.1.255" PRIVATE_IP="192.168.1.2" # On vide (flush) toutes les règles existantes $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -F INPUT $IPTABLES -F FORWARD $IPTABLES -F OUTPUT # On indique les politiques par défaut $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT ACCEPT $IPTABLES -t nat -P PREROUTING ACCEPT $IPTABLES -t nat -P POSTROUTING ACCEPT $IPTABLES -t nat -P OUTPUT ACCEPT # On efface toutes les chaines qui ne sont pas par défaut dans les tables filter et nat $IPTABLES -X $IPTABLES -t nat -X # On autorise tout sur loopback $IPTABLES -A INPUT -i lo -j ACCEPT # on autorise les requêtes dhcp $IPTABLES -A INPUT -i $INTIF -p udp -m udp --sport bootpc --dport bootps -j ACCEPT # On autorise icmp sur INTIF $IPTABLES -A INPUT -i $INTIF -s $NETWORK -p icmp -j ACCEPT # Règles d'antispoofing #$IPTABLES -A INPUT -i $INTIF -s ! $NETWORK -j ULOG --ulog-prefix "RULE Antispoof1 -- DENY " #$IPTABLES -A INPUT -i $INTIF -s ! $NETWORK -j DROP # On drop les broadcast sur l'interface (sans Log) #$IPTABLES -A INPUT -i $INTIF -d $PRIVATE_BROADCAST -j DROP # On autorise le tranfert des requtes DNS (sans LOG) $IPTABLES -A FORWARD -i $INTIF -p udp --dport domain -j ACCEPT # On log les requêtes HTTP vers Internet (demande de connexion seulement) #$IPTABLES -A PREROUTING -t nat -i $INTIF -p tcp -d ! $PRIVATE_IP --dport http -m state --state NEW -j ULOG --ulog-prefix "RULE Transfert2 -- ACCEPT " # On redirige les requête http pour Internet vers notre machine. #$IPTABLES -A PREROUTING -t nat -i $INTIF -p tcp -d ! $PRIVATE_IP --dport http -j REDIRECT --to-port 80 /etc/init.d/iptables save ======= Script 2========================== #!/bin/sh IPTABLES=/sbin/iptables INTIF="eth0" NETWORK="192.168.1.0/24" NETWORK_BROADCAST="192.168.1.255" PRIVATE_IP="192.168.1.2" # On vide (flush) toutes les règles existantes $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -F INPUT $IPTABLES -F FORWARD $IPTABLES -F OUTPUT # Set the default policy to drop all forwarded packets $IPTABLES -P FORWARD DROP # Create internet chain # This is used to authenticate users who have already signed up $IPTABLES -N internet -t nat # Accept all local traffic $IPTABLES -t nat -A PREROUTING -i $INTIF --destination $NETWORK -j ACCEPT # First send all traffic via newly created internet chain # At the prerouting NAT stage this will DNAT them to the local # webserver for them to signup if they aren't authorised # Packets for unauthorised users are marked for dropping later $IPTABLES -t nat -A PREROUTING -j internet # Now that we've got to the forward filter, drop all packets # marked 99 - these are unknown users. We can't drop them earlier # as there's no filter table $IPTABLES -t filter -A FORWARD -m mark --mark 99 -j DROP ###### INTERNET CHAIN ########## # Allow authorised clients in, redirect all others to login webserver # Add known users to the NAT table to stop their dest being rewritten # Ignore MAC address with a * - these users are blocked # This awk script goes through the /var/lib/users flat file line by line awk 'BEGIN { FS="\t"; } { system("$IPTABLES -t nat -A internet -m mac --mac-source "2ドル" -j RETURN"); }' /var/lib/users # MAC address not found. Mark the packet 99 $IPTABLES -t nat -A internet -j MARK --set-mark 99 # Redirects web requests from Unauthorised users to logon Web Page $IPTABLES -t nat -A internet -m mark --mark 99 -p tcp --dport 80 -j DNAT --to-destination $PRIVATE_IP ################################ Merci pour les retours éventuels!!