Le but de cette page est de mettre en place un accès par WiFI filtré au Web. L'utilisateur doit pouvoir se connecter sans problème au réseau WiFi et accéder presque librement au net (les pages pornographiques, pédophiles, nazies, etc… seront quand même filtrées faute d'avoir des utilisateurs mineurs).
L'architecture logique est plus ou moins la suivante:
INTERNET - ADSL - Livebox - Passerelle - Point d'accès Wifi
Il devra donc avoir une actualisation du fichier d'adresses MAC autorisées toutes les x minutes entre la passerelle ainsi que le point d'accès WiFi (scp surement).
: Ajouter description + schéma
On ne mettra pas en place IPv6, vraiment dommage (j'aime bien IPv6) mais ca risque d'être chaud avec l'autoconfig et la correspondance add-IP-locale ↔ add-MAC.
En effet, avec IPv4, le serveur nous donne notre IP (bon, normalement, à part si quelqu'un fixe sa propre IP). Du coup, avec les légers logs de squid, si quelqu'un fout la merde, on devrait savoir qui a fait quoi. Avec IPv6, normalement, on devrait aussi savoir (vu qu'avec l'autoconfiguration, on a l'adresse MAC dans l'adresse), mais windows (du moins vista il me semble) à eu la bonne idée de mettre une IP aléatoire, du coup, pas moyen se savoir la véritable adresse MAC…
Toutes les manipulations se déroulent en root.
On va commencer par flasher le point d'accès WiFi (Linksys WRT54GL) pour lui permettre de faire plus d'options.
Vous allez sur le site de DD-WRT, vous choisiez la bonne version (dans mon cas dd-wrt.v24_mini_generic.bin) et vous flashez.
Créer un fichier dans le répertoire des règles udev et y mettre:
vim /etc/udev/rules.d/010_netinterfaces.rules
KERNEL=="eth*", SYSFS{address}=="00:02:44:6b:df:97", NAME="eth0"
KERNEL=="eth*", SYSFS{address}=="00:40:33:a0:79:4b", NAME="eth1"
#eth0 -> box ADSL
#eth1 -> reseau WiFi a filtrer
Ce fichier va s'occuper de que si on change les cartes réseau un jour, ca va pas tout bousiller. Il faudra que changer l'adresse MAC de la carte pour toujours conserver eth0 et eth1 et pas se mélanger les pinceaux.
Maintenant, il faut aussi créer un fichier qui va monter automatiquement eth0 et eth1. Comme ca, ca évite qu'il ne soit pas monté lors d'un reboot.
vim /etc/init.d/bootscript
echo "Script de boot" echo "Mounting des interfaces réseau" ifconfig eth0 up ifconfig eth1 up echo "Creation des routes" route del default route del default route del default route add 0.0.0.0/0 gw 192.168.1.1 eth0 route add default gw 192.168.1.1 eth0 route add default gw 192.168.1.1 eth0 #Pour qu'il sache ou forwarder ses paquets
chmod +x /etc/init.d/bootscript update-rc.d bootscript defaults
On va configurer les adresses des interfaces réseau
vim /etc/network/interfaces
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.42 netmask 255.255.255.0 gateway 192.168.1.1 auto eth1 iface eth1 inet static address 192.168.2.1 netmask 255.255.255.0 gateway 192.168.2.1
On ne vas pas encore s'occuper de gérer les routes (pour aller du réseau 2 au 1 et du 1 au 2). On va par contre déjà mettre le serveur DNS en place ainsi que le proxy filtre SQUID. Comme ca, on est déjà sur que tout ce qui passe entre les deux sous réseaux est filtré(WEB) ou impossible à modifier(DNS, qui sera fourni par le serveur).
apt-get install dhcp3-server
Configurer le fichier de configuration du serveur
vim /etc/dhcp3/dhcpd.conf
INTERFACES="eth1";
ddns-update-style none;
# option definitions common to all supported networks...
# option domain-name "wifi.agora";
option domain-name-servers 192.168.2.1;
default-lease-time 600;
max-lease-time 7200;
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
subnet 192.168.2.0 netmask 255.255.255.0 {
authoritative;
range 192.168.2.20 192.168.2.250;
option domain-name-servers 192.168.2.1;
option routers 192.168.2.1;
option broadcast-address 192.168.2.255;
}
Bind va nous servir à répondre directement au demandes de résolution DNS demandées par le client et aussi pouvoir les cacher. Du coup, quand une autre personne accédera au même domaine, ben il s'économise 250ms (peu, mais bon ^^, on va dire que c'est plus écologique, moins de trafic).
On installer ca vite fait
apt-get install bind9
Puis on configure (on en profite pour lui faire résoudre le TLD .42).
vim /etc/bind/named.conf
include "/etc/bind/named.conf.options";
// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "42" IN {
type forward;
forwarders {
91.191.147.246;
91.191.147.243;
79.143.244.68;
};
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
include "/etc/bind/named.conf.local";
On va aussi installer un petit serveur WEB pour pouvoir installer l'interface de gestion de la liste des adresses MAC autorisées et de la liste des correspondances add-MAC/Personne. Aussi, le serveur WEB servira à fournir de petites pages d'info (“À propos du réseau WiFi”, “Co-voiturage” (si ce projet est mis en place), Pages d'erreur SquidGuard, etc…).
Donc l'installation est très simple (on installe php5 et mysql-server en même temps):
apt-get install apache2 php5 mysql-server
Voila, tout con. Les pages web se trouveront dans /var/www
On commence par installer Squid
apt-get install squid3
Par défaut, on ne peut pas utiliser le proxy (on se prend un bon acces denied dans la tronche), il faut le configurer.
http_port 3128 transparent acl wifi_agora src 192.168.2.0/24 acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 #Ports acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow wifi_agora http_access deny all #http_access allow all icp_access deny all htcp_access deny all hierarchy_stoplist cgi-bin ? access_log /var/log/squid3/access.log squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern (cgi-bin|\?) 0 0% 0 refresh_pattern . 0 20% 4320 icp_port 3130 coredump_dir /var/spool/squid3
Actuellement, notre passerelle (qui actuellement répond que sur les ports 53 et 3128 du coté à filtrer) ne laisse pas passer le port 80(WEB). Donc si quelqu'un voudra accéder à internet, ben il devra spécifier l'adresse du proxy. Pas super-super. Mais notre ami Squid possède une option qui permet de le rendre transparent. En gros, notre passerelle va intercepter toutes les trames TCP à destination du port 80 et les rerouter vers le port de Squid. Celui-ci va ensuite se charger de “traverser” la passerelle et d'en même temps, filtrer les pages.
Donc, avec notre ami iptables, on fait:
iptables -t nat -A PREROUTING -s 192.168.2.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
Le problème, c'est qu'on veut filtrer les gens. Donc on va faire un filtrage par adresses MAC.
iptables -t nat -A PREROUTING -m mac --mac-source 00:16:d3:07:0c:f6 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
Ne pas oublier de mettre ce script en démarrage. C'est une erreur très conne qui vous fait perdre beaucoup de temps inutilement (mais il est assez puissant mon serveur ? pourquoi ca marche pas/reste en suspens pendant 30 secs ?) ^^!
On va donc l'ajouter au bootscript créé précédemment:
vim /etc/init.d/bootscript
Comme ca, le script de préroutage sera toujours éxécuté au boot, pas besoin de le faire soi-même (et d'oublier et donc de se demander pourquoi ca marche pas)
Légalement (Article 227-24 du code pénal), dans un établissement scolaire, quand un accès au web est proposé, ben il faut interdire (et donc filtrer) les sites à caractère pornographique, pédophile, raciste, néo-nazi, etc… Nous voulions le filtre le plus minime. C'est à dire pas comme le réseau “par défaut” que nous avons (ici, vous tapez “Linux” dans google, et c'est déjà bloqué). Nous voulons autoriser les sites de jeux (pas d'argent hein, de détente, les truc flash), youtube, dailymotion, facebook, msn, les webmails, etc… On va donc mettre très peu de blacklists au filtre.
Pas beaucoup de choses à faire ici:
apt-get install squidguard
On va vite fait créer une page d'erreur avertissant l'utilisateur du bloquage:
vim /var/www/squid/pageBloquee.php
<?php echo "<h1>La page est bloquee</h1>"; echo "IP: ".$_GET['clientaddr']; echo "<br />srcclass: ".$_GET['srcclass']; echo "<br />targetclass: ".$_GET['targetclass']; echo "<br />url: ".$_SERVER['url']; ?>
On s'occupera de faire une page un peu plus jolie après ^^.
Ensuite, on configure SquidGuard:
vim /etc/squid/squidGuard.conf
dbhome /var/lib/squidguard/db/blacklists/
logdir /var/log/squid
source agora_wifi {
ip 192.168.2.0/24
}
acl {
agora_wifi {
redirect http://127.0.0.1/squid/pageBloquee.php?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
pass any
}
}
acl {
default {
redirect http://127.0.0.1/squid/pageBloquee.php?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
pass none
}
}
Après la configuration rapide de SquidGuard, on va ajouter dans /etc/squid3/squid.conf
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
Cette ligne dira de faire passer le contenu que verra squid par SquidGuard
Et on reboot squid: /etc/init.d/squid3 restart
Actuellement, SquidGuard ne filtre rien du tout. On va donc télécharger des blacklists pour commencer à filtrer (et donc bloquer) les catégories de sites interdits.
Pour cela, on va télécharger les listes noires de l'université de Toulouse.
On se place dans /var/lib/squidguard/db
Et on télécharge la blacklist:
wget http://cri.univ-tlse1.fr/blacklists/download/blacklists.tar.gz tar -zxvf blacklists.tar.gz
Puis on ajoute ces catégories à squidguard (d'après le site de l'univ de Toulouse):
dbhome /var/lib/squidguard/db/blacklists
logdir /var/lib/squidguard/log
source agora_wifi {
ip 192.168.2.0/24
}
#src postes_enfant {
# ip 192.168.1.1-192.168.1.10
#}
dest adult
{
domainlist adult/domains
urllist adult/urls
expressionlist adult/expressions
}
destination agressif
{
urllist agressif/urls
domainlist agressif/domains
}
destination audio-video
{
urllist audio-video/urls
domainlist audio-video/domains
}
destination blog
{
urllist blog/urls
domainlist blog/domains
}
destination cleaning
{
urllist cleaning/urls
domainlist cleaning/domains
}
destination dangerous_material
{
urllist dangerous_material/urls
domainlist dangerous_material/domains
}
destination drogue
{
urllist drogue/urls
domainlist drogue/domains
}
destination financial
{
domainlist financial/domains
}
destination forums
{
urllist forums/urls
domainlist forums/domains
}
destination gambling
{
urllist gambling/urls
domainlist gambling/domains
}
destination hacking
{
urllist hacking/urls
domainlist hacking/domains
}
destination mobile-phone
{
urllist mobile-phone/urls
domainlist mobile-phone/domains
}
destination publicite
{
urllist publicite/urls
domainlist publicite/domains
}
destination radio
{
urllist radio/urls
domainlist radio/domains
}
destination redirector
{
urllist redirector/urls
domainlist redirector/domains
}
destination strict_redirector
{
urllist strict_redirector/urls
domainlist strict_redirector/domains
}
destination strong_redirector
{
urllist strong_redirector/urls
domainlist strong_redirector/domains
}
destination tricheur
{
urllist tricheur/urls
domainlist tricheur/domains
}
destination warez {
urllist warez/urls
domainlist warez/domains
}
destination webmail
{
urllist webmail/urls
domainlist webmail/domains
}
destination games
{
urllist games/urls
domainlist games/domains
}
destination mixed_adult
{
urllist mixed_adult/urls
domainlist mixed_adult/domains
}
destination filehosting
{
urllist filehosting/urls
domainlist filehosting/domains
}
destination reaffected
{
urllist reaffected/urls
domainlist reaffected/domains
}
destination sexual_education
{
urllist sexual_education/urls
domainlist sexual_education/domains
}
destination shopping
{
urllist shopping/urls
domainlist shopping/domains
}
destination dating
{
urllist dating/urls
domainlist dating/domains
}
destination marketingware
{
urllist marketingware/urls
domainlist marketingware/domains
}
destination astrology
{
urllist astrology/urls
domainlist astrology/domains
}
destination sect
{
urllist sect/urls
domainlist sect/domains
}
destination celebrity
{
urllist celebrity/urls
domainlist celebrity/domains
}
destination manga
{
urllist manga/urls
domainlist manga/domains
}
destination child
{
urllist child/urls
domainlist child/domains
}
destination malware
{
urllist malware/urls
domainlist malware/domains
}
destination press
{
# urllist press/urls
domainlist press/domains
}
#
# Spécifique : Si vous avez un squidguard au moins égal à 1.3, on réécrit les requêtes google
# avec le safe search on
#
rewrite search_engine {
s@^(.*\.google\..*/(search|ig))\?(.*)$@\1?safe=strict&\3@i
}
acl {
# postes_ouverts_bibliotheque {
# rewrite search_engine
# pass cleaning !malware !adult liste_bu none
# redirect http://192.168.1.21/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
# }
#
# pass_normal {
# rewrite search_engine
# pass cleaning !malware sexual_education !adult !agressif !audio-video !blog !dangerous_material !drogue !financial !forums !gambling !hacking !mobile-phone !publicite !radio #!strong_redirector !tricheur !warez !webmail !games !mixed_adult !filehosting !reaffected !shopping !dating !marketingware !astrology !sect !celebrity !manga all
# redirect http://192.168.1.21/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
# }
agora_wifi {
pass cleaning !malware sexual_education !adult !agressif !dangerous_material !drogue !gambling !hacking !mobile-phone !redirector !tricheur !warez !games !mixed_adult !reaffected !shopping !dating !marketingware !astrology !sect !celebrity !manga all
redirect http://127.0.0.1/squid/pageBloquee.php?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
}
default {
rewrite search_engine
pass none
redirect http://127.0.0.1/squid/nonAuthentifie?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
}
}
Puis on va mettre à jour les bases de données des blacklists de squidGuard:
squidGuard -d #Pour avoir les éventuelles erreurs.
Attention, ca prend du temps, et la charge monte pas mal, dans un PIII:
19:22:40 up 4:11, 5 users, load average: 2.07, 0.73, 0.27 19:24:51 up 4:14, 5 users, load average: 7.94, 3.33, 1.27 19:25:27 up 4:14, 5 users, load average: 8.15, 3.88, 1.53
Heureusement, ce n'est qu'une machine de test que j'ai chez moi. Le vrai serveur sera plus puissant et aura bien plus de ram.
Installer mysql-server et php5-cli
Voici comment va fonctionner la procédure d'inscription: La première fois que le gars va se connecter au WiFi, il va être redirigé vers le serveur apache (en gros, toutes les requêtes à destination du port 80 vont aller vers apache). La page de apache (en gros, un 404 qui va catcher toutes les autres pages) va prendre l'adresse MAC du client (qui est sa vraie mac car il se trouve sur le même sous réseau). Cette adresse mac va être entrée dans une table MySQL ainsi que son hash MD5. Ensuite, on va retourner à l'utilisateur son hash, qui sera en fait son “code” (pour pas qu'il croie que s'est son adresse mac et donc pour pas qu'il croie qu'il peut la spoofer pour se passer du filtrage).
Ensuite, l'utilisateur signe sa charte informatique et il la passe au “gérant” signée ainsi que son “code”. Dans son interface, il va autoriser cette adresse MAC (par le biais du code) et lui associer un nom.
Ensuite, chaque heure, un script se chargera se supprimer toutes les adresses et de rajouter les adresses autorisées.
CREATE USER 'wifi'@'%' IDENTIFIED BY 'MOTDEPASSE'; GRANT USAGE ON * . * TO 'wifi'@'%' IDENTIFIED BY 'MOTDEPASSE' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; CREATE DATABASE `wifi` ; GRANT ALL PRIVILEGES ON `wifi` . * TO 'wifi'@'%'; CREATE TABLE `wifi`.`clients` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `MAC` VARCHAR( 17 ) NOT NULL , `MACsha1` VARCHAR( 40 ) NOT NULL , `nom` VARCHAR( 100 ) NOT NULL , `prenom` VARCHAR( 100 ) NOT NULL , `classe` VARCHAR( 10 ) NOT NULL , `valide` ENUM( '0', '1' ) NOT NULL , `bloque` ENUM( '0', '1' ) NOT NULL ) ENGINE = MYISAM ;
Pour le log dans squid:
garder le fichier des leases DHCP (style 1 an). Comme ca, on sait quelle MAC avait telle IP à tel jour et telle heure. Comme squid log que les IP dans le log, ben on pourra faire la correspondance. Pas 100% fiable, mais ca devrait marcher.
<?php $IP = $_SERVER['REMOTE_ADDR']; //On prend l'IP du client. Normalement, dans le meme sous réseau que nous, donc on peut récuperer son adresse MAC. //$IP = '192.168.1.1'; exec("/usr/sbin/arp -a $IP", $arp); //On la prend via arp (pas oublier de donner des droits en execution) !! // var_dump($arp); if(strstr($arp[0], "no match found")) { echo "PAS D'ADRESSE MAC TROUVÉE, PROBLÈME!<br />"; $IP = '192.168.1.1'; unset($arp); exec("/usr/sbin/arp -a $IP", $arp); //On va prendre celle de la box pour les tests! } $mac = explode(" at", $arp[0]); $mac = explode(" [ether]", $mac[1]); $mac= strtolower(trim($mac[0])); //On sait jamais, mais on met en minuscules // echo "Votre MAC: $mac<br />"; $mysqlReq = mysql_result(mysql_query("SELECT COUNT(id) FROM clients WHERE MAC = '$mac'"), 0); if($mysqlReq == 0) { echo "<br /><br /><hr /><h3>Vous n'êtes pas encore inscrit!</h3>"; echo "<p><strong><a href=\"inscription.php\">Cliquez ici pour vous inscrire</a></strong></p><hr /><br />"; } ?>
Il manque bien sur la connexion et la déconnexion à la BDD avant et après le script. Je vous laisse faire.
<?php mysql_connect('127.0.0.1', 'wifi', 'wifi'); mysql_select_db('wifi'); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ASC du Lycée International de Ferney-Voltaire</title> </head> <body> <h1>Inscription au réseau Wi-Fi de l'ASC du Lycée de Ferney-Voltaire</h1> <?php $IP = $_SERVER['REMOTE_ADDR']; //On prend l'IP du client. Normalement, dans le meme sous réseau que nous, donc on peut récuperer son adresse MAC. //$IP = '192.168.1.1'; exec("/usr/sbin/arp -a $IP", $arp); //On la prend via arp (pas oublier de donner des droits en execution) !! if(strstr($arp[0], "no match found")) { echo "PAS D'ADRESSE MAC TROUVÉE, PROBLÈME!<br />"; $IP = '192.168.1.1'; unset($arp); exec("/usr/sbin/arp -a $IP", $arp); //On va prendre celle de la box pour les tests! } $mac = explode(" at", $arp[0]); $mac = explode(" [ether]", $mac[1]); $mac= strtolower(trim($mac[0])); //On sait jamais, mais on met en minuscules $macSHA1 = sha1($mac); //echo "Votre MAC: $mac<br />"; $message = "Vous devez maintenant remplir la charte (disponible au près de Mathieu ou <a href=\"Charte.odt\">ici</a>), la <strong>signer</strong>, <strong>inscrire votre code dans le dos de la feuille</strong> et la donner, avec une <trong>photocopie (à cela servent les carte de photocopie données par l'ASC à chaque nouvel adhérent) de votre carte d'identité</strong> ou passeport ou carnet de liaison (<u>avec photo</u>) à Mathieu dans l'aquarium ou dans le local de l'ASC (vers les photocopieuses)"; $mysqlReq = mysql_result(mysql_query("SELECT COUNT(id) FROM clients WHERE MAC = '$mac'"), 0); if($mysqlReq == 0) { //La personne ne s'est jamais encore inscrite, on va l'inscrire mysql_query("INSERT INTO clients (MAC, MACsha1) VALUES ('$mac', '$macSHA1')")or die(mysql_error()); echo "Vous vous êtes bien préinscrit. Voici votre code: "; echo "<strong>$macSHA1</strong><br />"; echo $message; } else { $valide = mysql_result(mysql_query("SELECT valide FROM clients WHERE MAC = '$mac'"), 0); if($valide == 0) { echo "Vous êtes déjà préinscrit ou en processus d'inscription (qui peut prendre quelques jours).<br >Voici votre code pour si vous l'auriez oublié(ou pas noté, par ce que je crois pas que vous arriviez à le mémoriser :p):<br /><strong>$macSHA1</strong><br />"; echo $message; } else { echo "Vous êtes normalement déjà inscrit et validé. Vous devriez normalement pouvoir accèder à <a href=\"http://www.google.fr\">Google</a> ou a <a href=\"https://www.facebook.com\">Facebook</a>.<br />Si vous rencontrez des problèmes, veuillez envoyer un mail à <a href=\"mailto:serveurascferney@gmail.com\">serveurascferney@gmail.com</a>"; } } ?> <p>Veuillez noter que vous devrez répéter chaque processus d'inscription pour chaque appareil que vous possèdez</p> </body> </html> <?php mysql_close(); ?>
Ce script, qui sera lancé directement depuis cron chaque 10 minutes de 7H à 18H avec la commande “php majAdressesMAC.php” a comme rôle de mettre à jour la liste des adresses MAC qui peuvent se connecter directement au proxy. Les autres son reroutées vers apache.
<?php mysql_connect('127.0.0.1', 'wifi', 'wifi'); mysql_select_db('wifi'); echo "MISE A JOUR DES ADRESSES MAC\n\n"; echo "On supprime les regles precedentes\n"; $listeMacAutorisees = mysql_query("SELECT * FROM clients WHERE valide = '1' AND bloque = '0'"); exec("iptables -t nat -F"); exec("iptables -t nat -X"); echo "On va ajouter les adresses MAC autorisees\n"; while($mac = mysql_fetch_assoc($listeMacAutorisees)) { if($mac['MAC'] != "98:8b:5d:19:d1:f7") //La livebox { exec("iptables -t nat -A PREROUTING -m mac --mac-source ".$mac['MAC']." -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128"); //On balance vers SQUID echo "On ajoute ".$mac['MAC']."\n"; } } echo "On va interdire (rerouter vers apache) le reste\n"; exec("iptables -t nat -A PREROUTING -s 192.168.2.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 80"); mysql_close(); echo "Script done\n"; ?>
Discussion