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