L'intérêt de la mise en place d'une telle solution , c'est de permettre à tout utilisateur disposant d'un compte sur l'ENT ou sur le réseau local de l'établissement , ou sur une base externe de pouvoir se connecter depuis un poste de travail sur internet .
Le principe, le serveur dispose de deux cartes réseaux:
* pour l'exemple traité ici, le serveur kanet aura sa carte 1 en dhcp, tout simplement.
Sur le serveur:
Comme il dispose de deux cartes, on ouvre une console et on affiche les log ainsi :
tail -f /var/log/mesages Feb 22 08:48:36 squeeze-test kernel: [ 5803.994016] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
CTRL + C pour fermer les logs On voit instantanément quelle est la carte que l'on branche. Pour notre exemple, la carte 1 du schéma sera eth0, la carte 2 sera eth1.
root@squeeze-test:~# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key.
# PCI device 0x1106:0x3106 (via-rhine) SUBSYSTEM==“net”, ACTION==“add”, DRIVERS==”?*”, ATTR{address}==“00:15:e9:ac:69:19”, ATTR{dev_id}==“0x0”, ATTR{type}==“1”, KERNEL==“eth*”, NAME=“eth0”
# PCI device 0x10de:0x03ef (forcedeth) SUBSYSTEM==“net”, ACTION==“add”, DRIVERS==”?*”, ATTR{address}==“00:1a:4d:f3:4b:81”, ATTR{dev_id}==“0x0”, ATTR{type}==“1”, KERNEL==“eth*”, NAME=“eth1” root@squeeze-test:~#
Maintenant que notre serveur est connecté à internet, regardons sont ip public et installons un serveur dhcp, toujours utile.
eth0 Link encap:Ethernet HWaddr 00:15:e9:ac:69:19
inet adr:192.168.1.17 Bcast:192.168.1.255 Masque:255.255.255.0
adr inet6: fe80::215:e9ff:feac:6919/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:527 errors:0 dropped:0 overruns:0 frame:0
TX packets:327 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:366072 (357.4 KiB) TX bytes:35933 (35.0 KiB)
Interruption:16 Adresse de base:0xb000
L'adresse côté internet est donc 192.168.1.17 (sur un réseau d'établisesment, ce sera tout simplement une adresse sur le lan.
Pour la carte côté portail captif (salle de cours, carte2), on utilise le fichier /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
iface eth1 inet static
address 192.168.0.254
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
auto eth1
La carte côté portail captif sera: 192.168.0.254
apt-get install openssh-server
Quand le serveur est prêt, il faut préparer une station de test. On placera cette station sur un réseau alimenté par la carte 2 de notre serveur Kanet.
Quand le client est physiquement connecté, on repasse sur le serveur, on doit proposer plusieurs services
<notes> pour télécharger kanet (version 32bits uniquement) wget http://kanet.googlecode.com/files/kanet_0.2-3_i386_squeeze.deb
les sources wget http://kanet.googlecode.com/files/kanet-0.2.3.tar.bz2
</notes>
Pour gagner du temps, on peut trouver ici les sources au simple format tar
wget http://linuxedu.tetaneutral.net/kanet-0.2.3.tar
apt-get install flex bison make
ln -s /usr/local/lib/libvala-0.12.so.0.0.0 /usr/lib/libvala-0.12.so.0
Le serveur kanet doit faire serveur dns, on installe dnsmasq aptitude install dnsmasq
Maintenant, on installe apache
aptitude install apache2
a2enmod rewrite a2enmod proxy a2enmod proxy_http a2enmod ssl
service apache2 restart
on telecharge le script kanet-rules (adapter l'ip)
chmod +x /etc/init.d/kanet-rules /etc/init.d/kanet-rules start update-rc.d kanet-rules defaults
la configuration du serveur kanet
vim /usr/local/etc/kanet/kanet.conf
/*
Configuration file for kanet
*/
{
/*
Server configuration
SERVER_MODE="STANDALONE" (default) or "PROXY"
*/
"SERVER_MODE" : "PROXY",
"SERVER_URL" : "https://192.168.0.254",
"SERVER_PORT" : "8181",
"SERVER_IP" : "",
"REDIRECT_SERVER_PORT" : "8080",
"QUEUE_NUM" : "0",
"SSL_CERT_FILE" : "/etc/apache2/ssl/mycert.crt",
"SSL_KEY_FILE" : "/etc/apache2/ssl/mykey.key",
"DEBUG" : "1",
/*
Persistent data,
only sqlite is available.
*/
"database" : "sqlite",
"sqlite_connection_string" : "/var/lib/kanet/kanet.sqlite",
"mysql_connection_string" : "Server=xxx; Port=3306; Database=xxx; uid=xxx; pwd=xxx;",
/*
Server behavior
*/
"login_page" : "https://192.168.0.254/www/login.html",
"captive_portal_page" : "https://192.168.0.254/www/update.html",
"cas_url" : "https://cas.entmip.fr/",
"www_path" : "/usr/share/kanet/",
"module_path" : "/usr/lib",
"auth_module_name" : "kanet-radiusclient",
/*
blacklist acls
always rejected.
*/
"KANET_ACL_TYPE_BLACKLIST": [
{ "address" : "127.0.0.1", "port" : 9090 },
{ "port" : 8089 }
],
/*
open acls
always open
*/
"KANET_ACL_TYPE_OPEN": [
{"address" : "fr.archive.ubuntu.com"},
{"address" : "www.paraschool.com"},
{"address" : "archive.canonical.com"},
{"address" : "extras.ubuntu.com"},
{"address" : "security.ubuntu.com"},
{"address" : "cas.entmip.fr"} ,
{"address" : "pool.ntp.org"} ,
{"address" : "10.255.5.215"},
{ "port" : 60 },
{ "port" : 135 },
{ "port" : 137 },
{ "port" : 138 },
{ "port" : 139 },
{ "port" : 123 },
{ "port" : 445 }
],
/*
default acls
open to authenticated users.
*/
"KANET_ACL_TYPE_DEFAULT": [
{ "port" : 8089 },
{ "port" : 443 },
{ "port" : 80 }
],
/* Admins : comma separated login list */
"admins": "colin,colin@upvm",
/*
blacklist_part
*/
"blacklist_users" : [
{ "login" : "colin", "message" : "hi foo ! you're login have been locked .." },
{ "login" : "johndoe", "message" : "hi john doe ! this account is locked .." }
],
"default_blacklist_message" : "Your account have been locked",
/*
auto_blacklist_acl
used to inform user they are probably infected, if a user try to join
one of this address, the user is automatically blacklisted and the message
display on is login window
*/
"auto_blacklist_acls": [
{ "address" : "192.168.1.45", "message" : "You're account have been temporarily locked <br/> because you're probably infected by a virus" },
{ "port" : 45678, "message" : "You're account have been temporarily locked <br/> because you're probably infected by a virus" }
],
/*
quota, in bytes or seconds. 0 is unlimited.
*/
"bytes_quota" : "0",
"time_quota" : "0",
/*
message
variables : $upbytes $downbytes $duration
*/
"update_msg" : "Up : $upbytes, Down: $downbytes, Time: $duration",
"over_quota_msg" : "Sorry you exceed your quota",
"blacklist_msg" : "Sorry, you're account have been locked",
"update_error_msg" : "An error occured during authentication process, please restart your browser",
}
Pour apache : le fichier /etc/apache2/ports.conf est déjà configuré pour écouter les ports 80 et 443 (ssl). En rélaite, on n'utilisera pas le port 80
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz
#NameVirtualHost 192.168.200.1:443
#Listen 443
NameVirtualHost *:8080
Listen 8080
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
On edite un nouveau fichier kanet dans /etc/apache2/sites-availables/kanet on desactive le vhost par default et on acitve kanet a2ensite kanet a2dissite default
on genere les clefs
openssl genrsa -out mykey.key 1024 openssl req -new -x509 -days 2000 -key mykey.key -out mycert.crt
mkdir /etc/apache2/ssl/ mv mycert.crt /etc/apache2/ssl/ service apache2 restart
la racine du serveur est située sur /etc/usr/share/kanet
le site site
ln -s /usr/local/lib/libkanet-radiusclient.so /usr/lib