User Tools

Site Tools


informatique:acces_wifi_filtre:accueil

Accès WiFi filtré au Web

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

  • La livebox fournit une IP au serveur (192.168.1.42). Le DHCP doit être désactivé (toute facon, il sera bloqué par la passerelle). On peut limite mettre un petit filtrage MAC pour autoriser seulement la carte réseau de la passerelle et éviter que des petits malins connectent directement le cable du point d'accès WiFi à la livebox directement.
  • La passerelle joue le role de proxy (Squid) filtre (SquidGuard) ainsi que de serveur DNS (Bind). Elle distribue aussi des IPs (sur 192.168.2.0/24, à agrandir si besoin est) aux machines. On laissera passer, sans filtrer, les ports FTP, MSN, XMPP, SSH (peut-être).
  • Le point d'accès Wifi qui, en plus de diffuser le réseau WiFi, va filtrer les adresses MAC des clients connectés pour autoriser uniquement ceux dont on a une correspondance IP → MAC (par le fichier des leases de DHCPd) et MAC → Nom de la personne (fichier tenu par nous).

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).

FIXME: 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.

Flasher et configurer le point d'accès WiFi

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.

Configurer le serveur (passerelle)

Fixer le nom des 2 cartes réseau

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

Fixer les IP des 2 cartes réseau

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

Gérer les routes & la passerelle

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).

Créer un serveur DHCP qui balancera les bails sur eth1

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;
}

Configurer le serveur DNS (BIND)

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";

Configurer le serveur WEB (Apache2)

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

Installer et configurer Squid

Installer Squid

On commence par installer Squid

apt-get install squid3

Configurer Squid

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

Le rendre transparent

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)

Mettre en place le filtre (SquidGuard)

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.

Installation de SquidGuard

Pas beaucoup de choses à faire ici:

apt-get install squidguard

Configuration de 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.

Interface de gestion et filtrage des personnes autorisées

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.

On va commencer par créer l'interface

On crée les bases/tables MySQL

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.

On crée la page d'accueil

                <?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.

Puis la page d'inscription

<?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();
?>

Le script qui mettra à jour les adresses MAC autorisées

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

Enter your comment. Wiki syntax is allowed:
ONXNY
 
informatique/acces_wifi_filtre/accueil.txt · Last modified: 2011/12/26 20:51 (external edit)