GNU/Linux >> Tutoriels Linux >  >> Linux

Comment installer un hotspot sans fil avec page captive sur Linux en utilisant CoovaChilli

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

Modifiez 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=CCMP

Créer un répertoire pour les sockets hostapd :

sudo mkdir /var/run/hostapd

Dé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 up

Testez et démarrez hostapd :

sudo hostapd -d /etc/hostapd/hostapd.conf

Si 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.target

Activez 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.bz2

Dé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.9

Exé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=no

Procédez à la compilation et à l'installation :

sudo make
sudo make install

Si vous rencontrez l'erreur suivante

mkdir :impossible de créer le répertoire "/etc/raddb/" :le fichier existe
faire :*** [/etc/raddb/] Erreur 1

Exécutez ce qui suit pour résoudre ce problème :

rmdir /etc/raddb
make install &&make install

Ajouter 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.service

Assurez-vous que le service démarre même au démarrage :

sudo systemctl enable mysqld.service

Créer une base de données de rayon :

mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] créer un rayon

Gé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] rayon

Cré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/sql

Dé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 =oui

Ajouter des compteurs SQL chilispot :

sudo vim /etc/raddb/mods-available/sqlcounter

Ajoutez cette ligne à la fin du fichier ci-dessus :

$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.conf

Lien 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/sqlcounter

Configurer les clients de rayon

sudo vim /etc/raddb/clients.conf

Remplacez 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.conf

Sous 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'OpenSSL

Sous la section d'instanciation (près de la ligne 728), ajoutez les modules de compteur suivants :

chillispot_max_bytes
noresetcounter

Configurez le serveur virtuel par défaut sous sites-available :

sudo vim /etc/raddb/sites-available/default

Sous la section Autoriser :

Commentez ce qui suit :

#filter_username

Décommentez ce qui suit :

auth_log
unix


Modifiez les éléments suivants :

'-sql' en sql

Ajoutez ce qui suit à la fin de la section d'autorisation :

chillispot_max_bytes
noresetcounter

Ensuite, sous la section comptabilité, décommentez ce qui suit :

radutmp

Modifiez ce qui suit :

'-sql' en sql

Ensuite, sous la section session, décommentez ce qui suit :

radutmp
sql

Ensuite, dans la section post-autorisation, décommentez ce qui suit :

reply_log

Modifiez les éléments suivants :

'-sql' en sql

Configurez le serveur virtuel de demandes de tunnel interne sous sites-available :

sudo vim /etc/raddb/sites-available/inner-tunnel

Sous la section Autoriser, modifiez les éléments suivants :

'-sql' en sql

Ajoutez ce qui suit à la fin de la section d'autorisation :

chillispot_max_bytes
noresetcounter

Ensuite, sous la section session, décommentez ce qui suit :

sql

Ensuite, dans la section post-autorisation, décommentez ce qui suit :

reply_log

Modifiez les éléments suivants :

'-sql' en sql

Ajoutez 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/radius

Cré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] rayon

Rayon de départ à des fins d'initialisation et de test

sudo /usr/sbin/radiusd -X

Ouvrez 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.cible

Activez 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.gz

Dé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.git

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

Configurer 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/config

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

IMPORTANT :Remplacez l'appareil Internet par le bon.

Rendre le script exécutable :

sudo chmod 755 /etc/chilli/ipup.sh

Activez coovachilli pour qu'il démarre au démarrage :

sudo systemctl enable chili

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


Linux
  1. Comment installer le serveur Web Nginx sur Linux

  2. Comment installer Vagrant sous Linux

  3. Comment installer un serveur FTP sur Rocky Linux 8 avec VSFTPD

  4. Comment installer Fail2ban avec Firewalld sur Rocky Linux 8

  5. Comment installer Elasticsearch sur Ubuntu 22.04 avec SSL

Comment installer LAMP Stack avec PhpMyAdmin dans Arch Linux

Comment installer Drupal CMS dans RHEL 8 Linux

Comment installer Joomla CMS dans RHEL 8 Linux

Comment exécuter un alias avec Sudo sous Linux

Comment installer OpenLiteSpeed ​​Webserver sur Alma Linux 8

Comment installer MongoDB sur Rocky Linux 8