Aller au contenu

Freeradius chillihotspot debian etch

De TIC Enseignement Agricole BFC
Version datée du 1 février 2024 à 11:10 par Cv5lw (discussion | contributions) (1 version importée)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

Objectifs

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.

Prérequis

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

Les cartes

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

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

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

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

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

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

$ 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

  1. chmod a+x /usr/share/freeradius-dialupadmin/tot_stats

Réglage durée de connexion

(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

# 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: