Le but de cet article est de montrer comment vous pouvez transformer un ordinateur ou un ordinateur portable basé sur Linux en un point d'accès sans fil où les utilisateurs peuvent être authentifiés via une page de portail captif. Pour cette tâche, le logiciel de contrôleur principal sera CoovaChilli. Ce logiciel est une solution de gestion de points d'accès idéale pour les hôtels, les restaurants, les supermarchés, les parcs et tout lieu offrant Internet WiFi.
Prérequis
- Une distribution Linux. Dans cet article, j'utiliserai Fedora 20. Les versions ultérieures 21/22 devraient fonctionner correctement.
- Bibliothèques de développement nécessaires pour les compilations de packages source.
- Une installation de serveur MySQL fonctionnelle.
- Un périphérique réseau filaire qui se connecte à Internet.
- Capacité à exécuter des commandes sudo.
- Un périphérique réseau sans fil qui prend en charge le mode point d'accès. Pour voir si votre appareil sans fil prend en charge le mode AP, exécutez :
sudo iw phy |grep -A 5 -i 'Supported interface modes' | grep '*'
Installer les dépendances CoovaChilli
yum install libnl3-devel libtalloc-devel iptables
Installer hostapd
Hostapd permet à votre ordinateur de fonctionner comme un authentificateur WPA/WPA2 de point d'accès (AP). D'autres fonctionnalités incluent les services d'authentification Radius, bien que nous ne les utiliserons pas ici.
La plupart des distributions Linux (y compris Fedora) ont des versions pré-emballées de hostapd et peuvent être installées à l'aide du logiciel de gestion de paquets. Par exemple, dans Fedora, CentOS et d'autres distributions Linux basées sur Red-Hat, une simple commande installera ce package :
yum install hostapd
Cependant, pour installer la dernière version de hostpad, nous devrons télécharger et compiler les sources. Cela peut être fait facilement comme suit :
cd /usr/src
sudo git clone git://w1.fi/hostap.git
Cela téléchargera à la fois hostapd le démon du serveur et les sources wpa_supplicant. Nous sommes intéressés par le premier, nous allons donc passer aux sources hostapd :
cd hostap/hostapd
Hostapd n'a pas de commande 'configure', donc avant de compiler hostapd, nous devons changer le préfixe d'installation. Un moyen simple et rapide de changer le répertoire d'installation par défaut consiste à utiliser sed :
sed -i "s:export BINDIR ?=/usr/local/bin/:export BINDIR ?=/usr/sbin:g" Makefile
Ensuite, copiez le fichier de configuration par défaut :
cp -v defconfig .config
nous devrons modifier certaines valeurs par défaut dans le fichier de configuration :
vim.config
Décommentez les options suivantes :
CONFIG_LIBNL32=y # Utilise les bibliothèques libnl 3.2
CONFIG_IEEE80211N=y # Active la prise en charge IEEE 802.11n
CONFIG_WNM=y # Active la prise en charge de la gestion réseau
CONFIG_IEEE80211AC=y # Active la prise en charge IEEE 802.11ac
CONFIG_DEBUG_FILE=y # Prise en charge de l'écriture du journal de débogage dans un fichier
Exécutez make et install :
make
sudo make install
Pour vérifier si hostapd est correctement installé, exécutez :
hostapd -v
La commande ci-dessus vous montrera la version et les crédits
Configurer hostapd
Créez un fichier de configuration hostapd à l'aide d'un exemple de fichier :
sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.confModifiez les paramètres suivants dans le fichier hostapd.conf :
driver=nl80211
interface=wlan0 # Remplacez-le par votre appareil sans fil
ssid=KAMPALA-3 # Remplacez-le par votre SSID
hw_mode=g
channel=6 # Entrez le canal souhaité
ieee80211n=1 # Activer IEEE 802.11n
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMPCréer un répertoire pour les sockets hostapd :
sudo mkdir /var/run/hostapdDéfinissez l'état de l'interface WiFi sur 'UP' et débloquez le WiFi si l'interrupteur logiciel est activé :
sudo rfkill débloquer le wifi
sudo ip link set dev wlan0 upTestez et démarrez hostapd :
sudo hostapd -d /etc/hostapd/hostapd.confSi tout se passe bien, le démon hostapd devrait démarrer et ne pas se fermer.
Ensuite, créez un fichier de service systemd. À l'heure actuelle, la plupart des distributions Linux utilisent systemd pour contrôler les services :
sudo vim /etc/systemd/system/hostapd.service
[Unité]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Après=dnsmasq.service
[Service]
Type=forking
PIDFile=/var/run/hostapd.pid
ExecStartPre=/bin/mkdir -p /var/run/hostapd
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /var/run/hostapd.pid -B
[Install]
WantedBy=multi-user.targetActivez le service pour qu'il démarre automatiquement au démarrage :
sudo systemctl enable hostapd.service
Freeradius
Puisque nous exigerons que les clients s'authentifient avant d'accéder à Internet, l'installation d'un serveur radius est nécessaire. FreeRadius est un serveur Radius open source. Il peut également être installé à l'aide de votre gestionnaire de packages Linux préféré, tel que yum ou apt. Mais puisque nous voulons installer la dernière version, nous allons compiler à partir des sources.
Télécharger freeradius :
cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2Décompressez les sources et passez à l'emplacement d'installation :
sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9Exécutez le script de configuration en vous assurant d'utiliser le préfixe et le chemin de bibliothèque corrects pour votre configuration :
sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=noProcédez à la compilation et à l'installation :
sudo make
sudo make installSi vous rencontrez l'erreur suivante
mkdir :impossible de créer le répertoire "/etc/raddb/" :le fichier existe
faire :*** [/etc/raddb/] Erreur 1Exécutez ce qui suit pour résoudre ce problème :
rmdir /etc/raddb
make install &&make installAjouter un groupe et un utilisateur radiusd :
sudo groupadd -r radiusd
sudo useradd -r -M -c "Radius Server User" -g radiusd radiusd -s /sbin/nologin
Configurer les tables MySQL freeradius
Démarrez le serveur MySQL s'il n'est pas en cours d'exécution. Comme mentionné ci-dessus, le processus d'initialisation se fait via systemd, donc :
sudo systemctl -q is-active mysqld.service || sudo systemctl démarrer mysqld.serviceAssurez-vous que le service démarre même au démarrage :
sudo systemctl enable mysqld.serviceCréer une base de données de rayon :
mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] créer un rayonGénérez des tables de base de données à l'aide du schéma MySQL :
sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] rayonCréez un utilisateur Radius MySQL et définissez des privilèges sur la base de données Radius :
mysql -u root -p[MYSQL_ROOT_PASSWORD] radius
ACCORDER TOUS LES PRIVILÈGES SUR radius.* à [FREERADIUS_DB_USER]@localhost IDENTIFIÉ par '[FREERADIUS_DB_PASS]' ;Configurez le module SQL radius :
sudo vim /etc/raddb/mods-available/sqlDécommentez et/ou modifiez les paramètres suivants :
driver ="rlm_sql_mysql"
dialect =”mysql”
server ="localhost"
port =3306
login ="FREERADIUS_DB_USER"
password ="FREERADIUS_DB_PASS "
read_clients =ouiAjouter des compteurs SQL chilispot :
sudo vim /etc/raddb/mods-available/sqlcounterAjoutez cette ligne à la fin du fichier ci-dessus :
$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.confLien suivant sql, sqlcounter vers les modules disponibles :
sudo ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/sql
sudo ln -s /etc/raddb/mods-available/sqlcounter /etc/raddb/ mods-enabled/sqlcounterConfigurer les clients de rayon
sudo vim /etc/raddb/clients.confRemplacez le mot de passe par le mot de passe utilisé ci-dessus pour la base de données FreeRadius MySQL :
secret =[FREERADIUS_DB_PASS]Configurer le serveur Radius :
sudo vim /etc/raddb/radiusd.confSous la section de sécurité, changez l'utilisateur et le groupe avec le nom créé lors de l'installation :
user =radiusd
group =radiusd
allow_vulnerable_openssl =yes
IMPORTANT :ne faites pas cela. Vous devriez vraiment mettre à jour les versions récentes d'OpenSSLSous la section d'instanciation (près de la ligne 728), ajoutez les modules de compteur suivants :
chillispot_max_bytes
noresetcounterConfigurez le serveur virtuel par défaut sous sites-available :
sudo vim /etc/raddb/sites-available/defaultSous la section Autoriser :
Commentez ce qui suit :#filter_usernameDécommentez ce qui suit :
auth_log
unix
Modifiez les éléments suivants :'-sql' en sqlAjoutez ce qui suit à la fin de la section d'autorisation :
chillispot_max_bytes
noresetcounterEnsuite, sous la section comptabilité, décommentez ce qui suit :
radutmpModifiez ce qui suit :
'-sql' en sqlEnsuite, sous la section session, décommentez ce qui suit :
radutmp
sqlEnsuite, dans la section post-autorisation, décommentez ce qui suit :
reply_logModifiez les éléments suivants :
'-sql' en sqlConfigurez le serveur virtuel de demandes de tunnel interne sous sites-available :
sudo vim /etc/raddb/sites-available/inner-tunnelSous la section Autoriser, modifiez les éléments suivants :
'-sql' en sqlAjoutez ce qui suit à la fin de la section d'autorisation :
chillispot_max_bytes
noresetcounterEnsuite, sous la section session, décommentez ce qui suit :
sqlEnsuite, dans la section post-autorisation, décommentez ce qui suit :
reply_logModifiez les éléments suivants :
'-sql' en sqlAjoutez les compteurs MySQL suivants pour Chillispot :
sudo vim /etc/raddb/mods-config/sql/counter/mysql/chillispot.conf
sqlcounter chilispot_max_bytes {
counter_name =Max-Total-Octets
check_name =ChilliSpot-Max-Total-Octets
reply_name =ChilliSpot-Max-Total-Octets
reply_message =" Vous avez atteint votre limite de bande passante"
sql_module_instance =sql
key =User-Name
reset =never
query ="SELECT IFNULL((SUM(AcctInputOctets + AcctOutputOctets)),0 ) FROM radacct WHERE username ='%{${key}}' AND UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime> '%%b'"
}
Modifier la propriété des répertoires de configuration et de journal :
sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radiusCréer un utilisateur administrateur dans la base de données Radius MySQL :
echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u rayon -p[FREERADIUS_DB_PASS] rayonRayon de départ à des fins d'initialisation et de test
sudo /usr/sbin/radiusd -XOuvrez une nouvelle fenêtre de terminal pour tester les connexions :
radtest [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]Si vous recevez un message comme celui-ci, vous en avez terminé avec la configuration du rayon minimal et requis pour les étapes suivantes :
Received Access-Accept Id 174 from 127.0.0.1:1812 to 0.0.0.0:0 length 20
Mais avant de laisser radius de côté, créez un fichier de service systemd pour votre serveur radius :
sudo vim /etc/systemd/system/radiusd.service
[Unité]
Description=Serveur RADIUS hautes performances FreeRADIUS.
Après=mysqld.service syslog.target network.target
[Service]
Type=forking
ExecStartPre=-/bin/mkdir /var/log/radius
ExecStartPre=-/bin/mkdir /var/run/radiusd
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/ log/radius
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/run/radiusd
ExecStartPre=/usr/sbin/radiusd -C
ExecStart=/usr/sbin/ radiusd -d /etc/raddb
ExecReload=/usr/sbin/radiusd -C
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi- utilisateur.cibleActivez le service pour qu'il démarre automatiquement au démarrage :
sudo systemctl enable radiusd.service
Installer Haserl
Haserl est nécessaire pour le miniportail intégré inclus dans CoovaChilli.
Télécharger haserl :
cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gzDécompressez l'archive :
sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/Compiler et installer :
./configure --prefix=/usr –libdir=/usr/lib64(Assurez-vous de modifier la bibliothèque correcte ou le préfixe souhaité)
make
sudo make install
Installer CoovaChilli
CoovaChilli est un logiciel de portail captif open source. Tout a commencé avec le projet de piment obsolète. Une fois l'installation et la configuration de coovachilli terminées, vous pourrez rediriger vos clients hotspot WiFi vers une page de connexion, c'est-à-dire un portail captif où ils pourront se connecter et accéder à Internet.
Téléchargez les dernières sources pour coovachilli :
cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.gitConfigurer et compiler coova :
cd /usr/src/coova-chilli
sh bootstrap
./configure --prefix=/usr --libdir=/usr/lib64 --localstatedir=/var --sysconfdir=/ etc --enable-miniportal --with-openssl --enable-libjson --enable-useragent --enable-sessionstate --enable-sessionid --enable-chilliredir --enable-binstatusfile --enable-statusfile --disable- statique --enable-shared --enable-largelimits --enable-proxyvsa --enable-chilliproxy --enable-chilliradsec --with-poll(Assurez-vous de modifier la bibliothèque correcte ou le préfixe souhaité)
make
sudo make installConfigurer CoovaChilli
Tous les fichiers de configuration se trouvent sous :/etc/chilli. Vous devrez créer un fichier de configuration avec les modifications de vos sites comme suit :
sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/configModifiez les paramètres suivants pour qu'ils correspondent à votre environnement :
HS_WANIF=eth0 # Interface WAN vers Internet
HS_LANIF=wlan0 # Interface d'abonné pour les appareils clients
HS_NETWORK=10.1.0.0 # Réseau HotSpot (doit inclure HS_UAMLISTEN)
HS_NETMASK=255.255. 255.0 # Masque de réseau HotSpot
HS_UAMLISTEN=10.1.0.1 # Adresse IP HotSpot (sur le réseau de l'abonné)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Définir comme votre secret partagé RADIUS
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Défini comme votre secret UAM
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]Ajoutez le script chili ipup.sh. Le but de ces scripts est de préparer le système à agir en tant que routeur. Vous pouvez également ajouter d'autres commandes, par ex. Paramétrage de la passerelle.
sudo vim /etc/chilli/ipup.sh
#!/bin/sh
#
# Autoriser le masquage IP via cette case
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEIMPORTANT :Remplacez l'appareil Internet par le bon.
Rendre le script exécutable :
sudo chmod 755 /etc/chilli/ipup.shActivez coovachilli pour qu'il démarre au démarrage :
sudo systemctl enable chiliDémarrer le coovachilli :
sudo systemctl start piment
Tester votre portail captif
Avant de commencer les tests, assurez-vous que vous pouvez d'abord accéder à Internet localement.
Ensuite, à l'aide d'un client sans fil tel qu'un smartphone ou un ordinateur portable, ouvrez votre navigateur Web préféré. Accédez à n'importe quelle URL / site Web de votre choix.
Si vous avez suivi les étapes ci-dessus, vous serez redirigé vers la page du portail captif comme indiqué ci-dessous :
Gestion des utilisateurs
Pour ajouter des utilisateurs afin qu'ils puissent accéder à Internet à l'aide de votre point d'accès, exécutez la commande suivante pour chaque utilisateur. Vous pouvez l'automatiser à l'aide d'un script si vous le souhaitez.
echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u rayon -p[FREERADIUS_DB_PASS] rayon
C'est tout !
Suivez-moi sur :@jzikusooka