GNU/Linux >> Linux Esercitazione >  >> Linux

Come installare un hotspot wireless con captive page su Linux utilizzando CoovaChilli

Lo scopo di questo articolo è dimostrare come trasformare un computer o laptop basato su Linux in un hotspot wireless in cui gli utenti possono essere autenticati tramite una pagina captive portal. Per questo compito, il software del controller principale sarà CoovaChilli. Questo software è una soluzione ideale per la gestione di hotspot per hotel, ristoranti, supermercati, parchi e qualsiasi luogo che offra Internet WiFi.

Prerequisiti

  • Una distribuzione Linux. In questo articolo utilizzerò Fedora 20. Le versioni successive 21/22 dovrebbero funzionare correttamente.
  • Librerie di sviluppo necessarie per le compilazioni di pacchetti sorgente.
  • Un'installazione del server MySQL funzionante.
  • Un dispositivo di rete cablato che si connette a Internet.
  • Possibilità di eseguire comandi sudo.
  • Un dispositivo di rete wireless che supporta la modalità Access Point. Per vedere se il tuo dispositivo wireless supporta la modalità AP, esegui:
    sudo iw phy |grep -A 5 -i 'Modalità interfaccia supportate' | grep '*'

Installa le dipendenze di CoovaChilli

yum install libnl3-devel libtalloc-devel iptables

Installa hostapd

Hostapd consente al tuo computer di funzionare come autenticatore WPA/WPA2 Access Point (AP). Altre funzionalità includono i servizi di autenticazione Radius, anche se non li useremo qui.

La maggior parte delle distribuzioni Linux (inclusa Fedora) hanno versioni preconfezionate di hostapd e possono essere installate usando il software di gestione dei pacchetti te. Ad esempio in Fedora, CentOS e altre distribuzioni Linux basate su Red Hat, un semplice comando installerà questo pacchetto:

yum install hostapd

Tuttavia, per installare l'ultima versione di hostpad, dovremo scaricare e compilare i sorgenti. Questo può essere fatto facilmente come segue:

cd /usr/src
sudo git clone git://w1.fi/hostap.git

Questo scaricherà sia hostapd il demone del server, sia i sorgenti wpa_supplicant. Siamo interessati al primo, quindi passeremo ai sorgenti di hostapd:

cd hostap/hostapd

Hostapd non ha un comando 'configure', quindi prima di compilare hostapd, dobbiamo cambiare il prefisso di installazione. Un modo rapido e semplice per cambiare la directory di installazione predefinita è usare sed:

sed -i “s:export BINDIR ?= /usr/local/bin/:export BINDIR ?= /usr/sbin:g” Makefile

Quindi, copia il file di configurazione predefinito:

cp -v defconfig .config

dovremo modificare alcune impostazioni predefinite nel file di configurazione:

vim .config

Decommenta le seguenti opzioni:

CONFIG_LIBNL32=y # Use libnl 3.2 libraries
CONFIG_IEEE80211N=y # Enables IEEE 802.11n support
CONFIG_WNM=y # Enables Network Management support
CONFIG_IEEE80211AC=y # Enables IEEE 802.11ac support
CONFIG_DEBUG_FILE=y # Support for writing debug log to file

Esegui make e install:

make
sudo make install

Per verificare se hostapd è installato correttamente, esegui:

hostapd -v

Il comando sopra ti mostrerà la versione e i crediti

Configura hostapd

Crea file di configurazione hostapd usando il file di esempio:

sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.conf

Modificare i seguenti parametri nel file hostapd.conf:

driver=nl80211
interface=wlan0 # Change this to your wireless device
ssid=KAMPALA-3 # Change this to your SSID
hw_mode=g
channel=6 # Enter your desired channel
ieee80211n=1 # Enable IEEE 802.11n
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

Crea directory per socket hostapd:

sudo mkdir /var/run/hostapd

Imposta lo stato dell'interfaccia Wi-Fi su "UP" e sblocca il Wi-Fi se l'interruttore software è attivo:

sudo rfkill unblock wifi
sudo ip link set dev wlan0 up

Testare e avviare hostapd:

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

Se tutto va bene, il demone hostapd dovrebbe avviarsi e non chiudersi.

Quindi, crea un file di servizio systemd. Ormai, la maggior parte delle distribuzioni Linux utilizza systemd per controllare i servizi:

sudo vim /etc/systemd/system/hostapd.service

[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=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

Abilita l'avvio automatico del servizio all'avvio:

sudo systemctl enable hostapd.service

Libero raggio

Poiché richiederemo ai client di autenticarsi prima di accedere a Internet, è necessaria l'installazione di un server radius. FreeRadius è un server raggio basato su open source. Può anche essere installato utilizzando il tuo gestore di pacchetti Linux preferito come yum o apt. Ma poiché vogliamo installare l'ultima versione, compileremo dal sorgente.

Scarica raggio libero:

cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2

Decomprimi i sorgenti e passa alla posizione di installazione:

sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9

Esegui lo script di configurazione assicurandoti di utilizzare il prefisso e il percorso della libreria corretti per la tua configurazione:

sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=no

Procedi con la compilazione e l'installazione:

sudo make
sudo make install

Se ti imbatti nel seguente errore

mkdir:impossibile creare la directory '/etc/raddb/':il file esiste
make:*** [/etc/raddb/] Errore 1

Esegui quanto segue per risolverlo:

rmdir /etc/raddb
make install && make install

Aggiungi gruppo e utente con raggio:

sudo groupadd -r radiusd
sudo useradd -r -M -c "Radius Server User" -g radiusd radiusd -s /sbin/nologin

Configura tabelle MySQL freeradius

Avvia il server MySQL se non è in esecuzione. Come accennato in precedenza, il processo di inizializzazione avviene tramite systemd, quindi:

sudo systemctl -q is-active mysqld.service || sudo systemctl start mysqld.service

Assicurati che il servizio si avvii anche all'avvio:

sudo systemctl enable mysqld.service

Crea database raggio:

mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] create radius

Genera tabelle di database utilizzando lo schema MySQL:

sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

Crea un utente raggio MySQL e imposta i privilegi sul database raggio:

mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

GRANT ALL PRIVILEGES ON radius.* to [FREERADIUS_DB_USER]@localhost IDENTIFIED by '[FREERADIUS_DB_PASS]';

Configura il modulo raggio SQL:

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

Decommenta e/o modifica i seguenti parametri:

driver = "rlm_sql_mysql"
dialect = ”mysql”
server = "localhost"
port = 3306
login = "FREERADIUS_DB_USER"
password = "FREERADIUS_DB_PASS"
read_clients = yes

Aggiungi contatori SQL chillispot:

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

Aggiungi questa riga alla fine del file precedente:

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

Next link sql, sqlcounter ai moduli disponibili:

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

Configura i clienti raggio

sudo vim /etc/raddb/clients.conf

Modificare la password con la password utilizzata sopra per il database MySQL di FreeRadius:

secret = [FREERADIUS_DB_PASS]

Configura server raggio:

sudo vim /etc/raddb/radiusd.conf

Nella sezione sicurezza, cambia l'utente e il gruppo con il nome creato durante l'installazione:

user = radiusd
group = radiusd
allow_vulnerable_openssl = yes
IMPORTANT: Don't do this. You really should update to recent versions of OpenSSL

Nella sezione istanziare (near line 728), aggiungere i seguenti moduli contatore:

chillispot_max_bytes
noresetcounter

Configura il server virtuale predefinito in siti disponibili:

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

Nella sezione di autorizzazione:

Commenta quanto segue:

#filter_username

Decommenta quanto segue:

auth_log
unix


Modifica quanto segue:

da
'-sql' to sql

Aggiungi quanto segue alla fine della sezione di autorizzazione:

chillispot_max_bytes
noresetcounter

Avanti nella sezione contabilità, decommenta quanto segue:

radutmp

Modificare quanto segue:

da
'-sql' to sql

Avanti nella sezione della sessione, decommenta quanto segue:

radutmp
sql

Avanti nella sezione post-autenticazione, decommenta quanto segue:

reply_log

Modifica quanto segue:

da
'-sql' to sql

Configura il server virtuale delle richieste del tunnel interno in siti disponibili:

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

Nella sezione di autorizzazione, modifica quanto segue:

da
'-sql' to sql

Aggiungi quanto segue alla fine della sezione di autorizzazione:

chillispot_max_bytes
noresetcounter

Successivamente, nella sezione della sessione, decommenta quanto segue:

sql

Avanti nella sezione post-autenticazione, decommenta quanto segue:

reply_log

Modifica quanto segue:

da
'-sql' to sql

Aggiungi i seguenti contatori MySQL per Chillispot:

sudo vim /etc/raddb/mods-config/sql/counter/mysql/chillispot.conf

sqlcounter chillispot_max_bytes {
counter_name = Max-Total-Octets
check_name = ChilliSpot-Max-Total-Octets
reply_name = ChilliSpot-Max-Total-Octets
reply_message = "You have reached your bandwidth limit"
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'"
}

Modifica la proprietà delle directory config e log:

sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radius

Crea utente amministratore nel database MySQL raggio:

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

Inizia raggio a scopo di inizializzazione e test

sudo /usr/sbin/radiusd -X

Apri una nuova finestra del terminale per testare le connessioni:

radtest [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]

Se ricevi un messaggio come questo, hai finito con la configurazione del raggio minima e richiesta per i passaggi successivi:

Ricevuto Access-Accept ID 174 da 127.0.0.1:1812 a 0.0.0.0:0 lunghezza 20

Ma prima di lasciare il raggio da parte, crea un file di servizio systemd per il tuo server raggio:

sudo vim /etc/systemd/system/radiusd.service

[Unit]
Description=FreeRADIUS high performance RADIUS server.
After=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-user.target

Abilita l'avvio automatico del servizio all'avvio:

sudo systemctl enable radiusd.service

Installa Haserl

Haserl è necessario per il miniportale incorporato incluso in CoovaChilli.

Scarica haserl:

cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz

Prepara il tarball:

sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/

Compila e installa:

./configure --prefix=/usr –libdir=/usr/lib64

(Assicurati di modificare la libreria corretta o il prefisso desiderato)

make
sudo make install

Installa CoovaChilli

CoovaChilli è un software captive portal basato su open source. È iniziato dal deprecato progetto peperoncino. Al termine dell'installazione e della configurazione di coovachilli, sarai in grado di reindirizzare i tuoi client hotspot WiFi a una pagina di accesso, ovvero un captive portal in cui possono accedere e accedere a Internet.

Scarica le ultime fonti per coovachilli:

cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.git

Configura e compila 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-static --enable-shared --enable-largelimits --enable-proxyvsa --enable-chilliproxy --enable-chilliradsec --with-poll

(Assicurati di modificare la libreria corretta o il prefisso desiderato)

make
sudo make install

Configura CoovaChilli

Tutti i file di configurazione si trovano in:/etc/chilli. Dovrai creare un file di configurazione con le modifiche ai tuoi siti come segue:

sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/config

Modifica i seguenti parametri in modo che corrispondano al tuo ambiente:

HS_WANIF=eth0 # WAN Interface toward the Internet
HS_LANIF=wlan0 # Subscriber Interface for client devices
HS_NETWORK=10.1.0.0 # HotSpot Network (must include HS_UAMLISTEN)
HS_NETMASK=255.255.255.0 # HotSpot Network Netmask
HS_UAMLISTEN=10.1.0.1 # HotSpot IP Address (on subscriber network)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Set to be your RADIUS shared secret
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Set to be your UAM secret
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]

Aggiungi lo script chilli ipup.sh. Lo scopo di questi script è di preparare il sistema a fungere da router. Potresti anche voler aggiungere altri comandi, ad es. Impostazione del gateway.

sudo vim /etc/chilli/ipup.sh

#!/bin/sh
#
# Allow IP masquerading through this box
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

IMPORTANTE:cambia il dispositivo Internet con quello corretto.

Rendi eseguibile lo script:

sudo chmod 755 /etc/chilli/ipup.sh

Abilita coovachilli in modo che si avvii all'avvio:

sudo systemctl enable chilli

Avvia coovachilli:

sudo systemctl start chilli

Test del tuo captive portal

Prima di iniziare il test, assicurati di poter accedere a Internet in locale.


Quindi, utilizzando un client wireless come smartphone o laptop, apri il tuo browser web preferito. Vai a qualsiasi URL/sito web di tua scelta.

Se hai seguito i passaggi precedenti, verrai reindirizzato alla pagina del captive portal come mostrato di seguito:

Gestione utenti

Per aggiungere utenti in modo che possano accedere a Internet utilizzando il tuo hotspot, esegui il comando seguente per ciascun utente. Puoi automatizzarlo utilizzando uno script, se lo desideri.

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

Questo è tutto gente!

Seguimi su:@jzikusooka


Linux
  1. Come installare Nginx Web Server su Linux

  2. Come installare Vagrant su Linux

  3. Come installare un server FTP su Rocky Linux 8 con VSFTPD

  4. Come installare Fail2ban con Firewalld su Rocky Linux 8

  5. Come installare Elasticsearch su Ubuntu 22.04 con SSL

Come installare lo stack LAMP con PhpMyAdmin in Arch Linux

Come installare Drupal CMS in RHEL 8 Linux

Come installare Joomla CMS in RHEL 8 Linux

Come eseguire un alias con Sudo in Linux

Come installare il server Web OpenLiteSpeed ​​su Alma Linux 8

Come installare MongoDB su Rocky Linux 8