Freeradius chillihotspot debian etch
Objectifs
[modifier]Mise en place d'un hotspot sur une debian etch (remplacante de la sarge depuis le 7 avril)(netinstall) avec chillispot, freeradius, dialupadmin et sécurisation par squid et dansguardian.
- Apache HTTP Server http://httpd.apache.org/ Apache License
- ChilliSpot http://www.chillispot.înfo/ GNU GPL2
- FreeRadius e Dialup Admin http://www.freeradius.org/ GNU GPL2
- MySQL http://www.mysql.com/ GNU GPL2
- PHP4 http://www.php.net/ PHP License 3.0
Prérequis
[modifier]Les clients wifi devront avoir leur carte wireless paramétrée pour du DHCP. Les prérequis matériels pour l'installation du serveur sont très modeste:
* Un ordinateur de configuration PC PIII 900 MHz + RAM 128 MByte + HD 20 GByte + 2 cartes réseaux; * un point d'accés sans fil, dlink 2000ap+;
Dans le schéma ci-dessous, eth1 délivrera un service dhcp afin de configurer automatiquement les clients de la zone wifi.
________
| | point d'acces (192.168.182.50, SSID=draf261)
| CLIENT | )))) ((( \|/ ________ Internet+vlan pédago 192.168.0.0/24
|________| | | | |
+------| SERVER |------+
192.168.182.0/24 eth1 |________| eth0 (192.168.0.160)
Distribution GNU/Linux Debian Etch , kernel 2.6.18-4-686
- partionnement lvm, tout le disque
- choisir la carte eth0 comme carte prioritaire
Le vlan pédago a pour passerelle 192.168.0.1, dns 192.168.0.1
Choisir installation de base sans interface graphique (conserver juste système de base)
Pour ceux qui ont du mal avec vi:
# apt-get install less vim
Et pour pouvoir accéder par winscp et putty
# apt-get install ssh
Le réseau
[modifier]Les cartes
[modifier]la configuration du réseau est inscrite dans le fichier /etc/network/interfaces
Deux possibilités,
| Un DHCP existe sur le vlan pédago | Pas de DHCP sur le vlan pédago |
|---|---|
auto lo iface lo inet loopback auto eth0 allow-hotplug eth0 iface inet eth0 dhcp auto eth1 iface eth1 inet static address 0.0.0.0 |
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface inet eth0 static
address 192.168.0.160
netmask 255.255.255.0
broadcast 192.168.0.255
network 192.168.0.0
gateway 192.168.0.1
auto eth1
iface eth1 inet static
address 0.0.0.0
|
Ensuite modifier ou vérifier le fichier de configuration dns , /etc/resolv.conf
search srfdb.no-ip.org nameserver 192.168.0.1
C'est surtout la deuxième ligne qui est importante, elle indique l'adresse ip du serveur dns coté vlan pédago.
Routage
[modifier]Maintenant il va falloir activer l'ip_forwarding sur cette machine qui va servir de passerelle (et routeur). Pour cela modifier le fichier /etc/sysctl.conf de la manière suivante:
net.ipv4.conf.default.forwarding=1
puis en ligne de commande (vous pouvez faire un copier coller avec putty)
# echo 1 | tee /proc/sys/net/ipv4/ip_forward
On relance ensuite le réseau pour activer toutes ces modifications
# /etc/init.d/networking restart
Pour générer une interface réseau virtuelle (au niveau IP), il faut activer le "device" Tun
modprobe tun
Chillispot
[modifier]Deux méthodes: la compilation ou apt-get install chillispot
Je vais décrire la première méthode car je n'ai pu encore tester l'apt-get qui n'existait pas encore. De plus, je ne travaille pas avec la derniere version par manque d'information.
wget http://www.chillispot.info/download/chillispot-1.0.tar.gz tar -xzvf chillispot-1.0.tar.gz cd chillispot-1.0 apt-get install dpkg-dev build-essential apt-get install debhelper apt-get install fakeroot dpkg-buildpackage –rfakeroot cd .. dpkg -i chillispot_1.0_i386.deb
Ne pas s'inquiéter des messages d'erreurs, c'est normal puisque rien n'est parametré.
Création des régles iptables de base pour le firewall de chillispot
# cp /usr/share/doc/chillispot/firewall.iptables /etc/init.d/chilli.iptables # chmod a+x /etc/init.d/chilli.iptables # ln -s ../init.d/chilli.iptables /etc/rcS.d/S40chilli.iptables
Vérifier dans /etc/init.d/chilli.iptables, les paramètres suivants:
EXTIF="eth0" INTIF="eth1"
EXTIF correspond au réseau relié au net et INTIF correspond au réseau "wireless".
Pour relancer le "firewall"
# /etc/init.d/chilli.iptables
Remarque: Il ne devra pas y avoir de serveur DHCP dans le réseau wireless, c'est chillispot qui le fera.
Mise en place du serveur Radius et des bases
[modifier]Pour installer mysql-server freeradius freeradius-mysql freeradius-dialupadmin:
# apt-get install mysql-server freeradius freeradius-mysql freeradius-dialupadmin
Sécuriser le serveur mysql en créant un mot de passe au compte root de mysql
$ mysqladmin -u root password 'mysqlsecret' $ mysql -u root -p mysql> CREATE DATABASE radius; mysql> quit
Créer la structure de la base radius précédemment créée:
zcat /usr/share/doc/freeradius/examples/mysql.sql.gz | mysql -u root -p radius mysql -u root -p mysql> GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'mysqlsecret'; mysql> FLUSH PRIVILEGES; mysql> quit
Modifier en conséquence le fichier /etc/freeradius/sql.conf, qui permet la connexion de freeradius à sa base:
server = "localhost" login = "radius" password = "mysqlsecret"
Fichier users
[modifier]Afin d'effectuer un premier test ou pour ceux qui veulent gérer qu'un nombre restreint de comptes, nous allons commencer par paramétrer freeradius afin qu'il utilise un fichier contenant la liste des comptes autorisés /etc/freeradius/users. Modifions le fichier de paramétrage /etc/freeradius/radiusd:
bind_address = 127.0.0.1
proxy_requests = no
#$INCLUDE ${confdir}/proxy.conf
authorize {
preprocess
# auth_log
# attr_filter
chap
mschap
# digest
# IPASS
suffix
# ntdomain
eap
files
# sql
# etc_smbpasswd
# ldap
# daily
# checkval
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
# digest
# pam
# unix
# Auth-Type LDAP {
# ldap
# }
eap
}
preacct {
preprocess
acct_unique
# IPASS
suffix
# ntdomain
files
}
accounting {
detail
# daily
unix
# sql
radutmp
# sradutmp
# main_pool
# pgsql-voip
}
session {
radutmp
# sql
}
Il faut également paramétrer le fichier /etc/freeradius/clients.conf de la manière suivante
client 127.0.0.1 {
secret = "radiussecret"
}
Créons maintenant l'utilisateur test dans le fichier /etc/freeradius/users
test Auth-Type := Local, User-Password == "testsecret"
Ouvrir maintenant une deuxième console ou un deuxième putty et y lancer les commandes suivantes
# /etc/init.d/freeradius stop # freeradius -XXX -A
Dans la premiere console, effectuons le test suivant (grâce à la commande radtest):
# radtest test testsecret 127.0.0.1 0 radiussecret
Si tout ce passe bien, vous avez une réponse du type accept-accept sinon accept-reject...
Maintenant afin de faire plus professionnel ;=) et surtout pouvoir utiliser dialup-admin afin de rapidement créer et administrer les comptes, nous allons gérer les comptes au moyen de la basql radius. Commencons par modifier le fichier /etc/freeradius/radiusd:
A partir de authorize, mettre en commentaire toutes les lignes files et décommenter toutes les lignes sql.
Créons maintenant un compte utilisateur (mysqltest,testsecret) dans la base radius; cette opération sera plus simple lorsque dialup-admin sera paramétré.
$ echo "INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('mysqltest', 'Password', 'testsecret');" | mysql -u radius -p radius
Dans la deuxième console, faire un ctrl-c pour arréter le Freeradius, puis
# /etc/init.d/freeradius restart # freeradius -XXX -A
Nous pouvons maintenant effectuer le test dansq la première console:
# radtest mysqltest testsecret 127.0.0.1 0 radiussecret
Serveur Apache
[modifier]Installation d'Apache2 avec php4 pour des raisons de compatibilité avec dialupadmin. A ce propos la version utilisée de mysql est la 5.
apt-get install apache2 libapache-mod-ssl libapache2-mod-php4 libdate-manip-perl php4-mysql
Pour que php travaille avec mysql, dans le fichier /etc/php4/apache2/php.ini, activer la ligne suivante:
extension=mysql.so
Création d'une zone HTTPS sur notre serveur apache, afin de sécuriser l'administration:
# mkdir -p /var/www/hotspot{,/cgi-bin}
# zcat -c /usr/share/doc/chillispot/hotspotlogin.cgi.gz > /var/www/hotspot/cgi-bin/hotspotlogin.cgi
# chmod a+x /var/www/hotspot/cgi-bin/hotspotlogin.cgi
Modifier le fichier /var/www/hotspot/cgi-bin/hotspotlogin.cgi pour y rentrer un mot de passe pour permettre la connexion avec chillispot.
$uamsecret = "uamsecret"; $userpassword=1;
Créer un fichier hotspot dans le dossier /etc/apache2/sites-available/.
Rq: avec la nouvelle version de winscp, vous faites bouton droit et nouveau fichier.
Modifier ce fichier de la manière suivante:
NameVirtualHost 192.168.182.1:443 <VirtualHost 192.168.182.1:443> ServerAdmin webmaster@gmail.org DocumentRoot "/var/www/hotspot" ServerName "hotspot.srfdwifi.org" <Directory "/var/www/hotspot/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> Alias "/dialupadmin/" "/usr/share/freeradius-dialupadmin/htdocs/" <Directory "/usr/share/freeradius-dialupadmin/htdocs/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /var/www/hotspot/cgi-bin/ <Directory "/var/www/hotspot/cgi-bin/"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/hotspot-error.log LogLevel warn CustomLog /var/log/apache2/hotspot-access.log combined ServerSignature On SSLEngine on SSLCertificateFile /etc/apache2/apache.pem </VirtualHost>
Ensuite on active le nouveau site et le mode ssl
# a2ensite hotspot # a2enmod ssl
Création d'un certificat pour notre site en https:
openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
Cela ne s'invente pas, je conseille donc le copier-coller dans putty !!
Exemple de réponses aux questions posées: FR, Bourgogne, Dijon, SRFD, hotspotserver, hotspot.srfdwifi.org, srfd@gmail.com
Pour permettre "l'écoute" sur le port 443, modifier le fichier /etc/apache2/ports.conf de la manière suivante:
Listen 80 Listen 443
Relancer apache:
# /etc/init.d/apache2 restart
Configuration de Chillispot
[modifier]Modifier le fichier /etc/chilli.conf de la manière suivante (mettre absolument 2 dns même s'ils sont identiques):
net 192.168.182.0/24 dns1 192.168.0.1 dns2 192.168.182.1 domain srfdwifi.org radiusserver1 127.0.0.1 radiusserver2 127.0.0.1 radiussecret radiussecret radiuslocationid isocc=fr,cc=33,ac=21000,network=draf261 radiuslocationname SRFD,monbureau dhcpif1 eth1 uamserver https://192.168.182.1/cgi-bin/hotspotlogin.cgi uamsecret uamsecret uamlisten 192.168.182.1 uamallowed www.srfdwifi.org,192.168.182.50,192.168.0.0/24
- Pour rappel, 192.168.182.50 est l'ip du point d'accés, en cas de doute ou pour permettre l'utilisation de plusieurs points d'accés remplacer dans la dernière ligne uamallowed 192.168.182.50 par 192.168.182.0/24.
- uamsecret est le mot de passe définit précedemment pour permettre la connexion avec le chillispot.
Le premier test réel va pourvoir commencer:
- brancher le point d'accés (192.168.182.50) sur eth1, le boitier a été configuré en point d'accès avec comme passerelle et dns 192.168.182.1.
Connectez vous en wifi avec un portable sur ce point d'accés, lorsque vous ouvrirez la première fois un navigateur, vous serez automatiquement redirigé vers l'url https://192.168.182.1/cgi-bin/hotspotlogin.cgi (ou https://hotspot.srfdwifi.org/cgi-bin/hotspotlogin.cgi).
Pour vous connectez,
- login
- mysqltest
- password
- testsecret
Bon surf
Dialup Admin
[modifier]$ sed "/auto_increment/ s/DEFAULT '0'//" /usr/share/freeradius-dialupadmin/sql/badusers.sql | mysql -u radius -p radius $ mysql -u radius -p radius < /usr/share/freeradius-dialupadmin/sql/mtotacct.sql $ mysql -u radius -p radius < /usr/share/freeradius-dialupadmin/sql/totacct.sql $ sed "/auto_increment/ s/DEFAULT '0'//" /usr/share/freeradius-dialupadmin/sql/userinfo.sql | mysql -u radius -p radius
Configurer le fichier /etc/freeradius-dialupadmin/admin.conf
general_domain: srfdwifi.org general_radius_server_secret: radiussecret general_encryption_method: clear sql_username: radius sql_password: mysqlsecret
Vous pouvez faire un premier test en vous connectant à partir du portable sur https://192.168.182.1/dialupadmin/index.html
Mais on s'apercoit aussitôt qu'il n'existe aucune sécurité, on va donc "sécuriser" par la mise en place d'un htacess.
Modifier le fichier /etc/apache2/sites-available/hotspot:
<Directory "/usr/share/freeradius-dialupadmin/htdocs">
...
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
require valid-user
</Directory>
Création d'un compte pour accéder à dialupadmin, login: admin password: adminsecret
# htpasswd -bcm /etc/apache2/.htpasswd admin adminsecret # /etc/init.d/apache2 restart
Divers paramétrages
- chmod a+x /usr/share/freeradius-dialupadmin/tot_stats
Réglage durée de connexion
[modifier](Olivier)
- Editer le fichier /etc/freeradius-dialupadmin/default.vals
- Décommenter la ligne Max-Daily-Session: 14400
- Changer la valeur exprimée en seconde
Proxy transparent et filtrage
[modifier]# apt-get install squid sarg
Modifier /etc/squid/squid.conf: Sur la première ligne ajouter transparent:
http_port 3128 transparent
Créer le réseau srfd sous la ligne acl all src...
acl srfd src 192.168.182.0/24
Rechercher la ligne http_access allow localhost, et juste dessous mettre
http_access allow srfd
Redémarrer squid
/etc/init.d/squid restart
Ensuite installer dansguardian
apt-get install dansguardian
Configurer dansguardian
Editer le fichier /etc/Dansguardian/Dansguardian.conf
#UNCONFIGURED reportinglevel = 3 language = 'french' loglevel = 2 ogexceptionhits = on logfileformat = 1 loglocation = '/var/log/dansguardian/access.log' filterip = 192.168.182.1 filterport = 8080 proxyip = 192.168.182.1 proxyport = 3128 accessdeniedaddress = 'http://127.0.0.1/cgi-bin/dansguardian.pl' nonstandarddelimiter = on usernameidmethodproxyauth = on forwardedfor = on usexforwardedfor = on
Créér les règles iptables pour rediriger les requètes vers le proxy. Pour cela ajouter à la fin du fichier /etc/init.d/chilli.iptables
$IPTABLES -A INPUT -i tun0 -p tcp -m tcp --dport 8080 --syn -j ACCEPT $IPTABLES -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to-port 8080 $IPTABLES -I FORWARD 1 -i tun0 -o eth0 -s 192.168.182.0/24 -p tcp --dport 443 -m state --state NEW -j LOG --log-prefix HOTSPOT: