MikroTik Logging: inserire il nome utente nelle righe di log per gli Hotspot o PPPoE server

MikroTik Logging: inserire il nome utente nelle righe di log per gli Hotspot o PPPoE server

WirelessGuru-Mikrotik-Log-Hotspot-Connection-Part-2-username-add-on-every-log-lineAlzi la mano chi non ha mai desiderato avere direttamente fruibile l'username, che in molti casi si traduce nel numero di cellulare, in ogni riga di log generata dal nostro fido hotspot (o pppoe server) realizzato con MikroTik.

Come avete visto dal precedente articolo MikroTik Hotspot: Come loggare il traffico degli utenti (parte 1) si può realizzare in maniera molto efficace un logging, perfettamente a norma di legge, delle connessioni che transitano nella rete autenticata tramite hotspot (o pppoe server). Vi invito a leggerlo se non lo avete ancora visionato.

La totalità degli hotspot che mi è capitato di analizzare (e di realizzare) fino ad oggi utilizzavano quelle regole per attivare il logging. Però ogni qualvolta dovevano essere analizzati, per esempio a seguito di richiesta da parte della Polizia Postale, iniziava il "calvario" di ricercare quale username avesse quell'ip privato in quel momento. Ripeto, alzi la mano a chi non è capitato e non abbia pensato: come sarebbe grandioso avere subito l'username a portata di "mano".

Cosi' mi sono deciso di trovare una soluzione a questa problematica. Vediamo subito cosa sono riuscito a realizzare. Partiamo dal risultato:

WirelessGuru MikroTik Logging with Username in every row

Come ben vedete nel riquadro rosso abbiamo un numero di cellulare (mascherate per privacy le ultime cifre). Questo è il risultato che volevamo no? Adesso è molto semplice sapere chi alle 22:36 del 31 marzo 2916 è andato a visitare il sito web ospitato sul server 212.48.10.49.

Ma come ci siamo riusciti? Vediamolo assieme.

Regole di firewall custom ed un pizzico di scripting

Per riuscire ad inserire il nome utente nella riga di log dobbiamo utilizzare il campo "prefix" presente nella regola di firewall che genera il log, come spiegato nell' articolo precedente, quindi per ogni username ci vorrà una regola di firewall dedicata. Proprio cosi', a differenza di quello che abbiamo realizzato fino ad oggi, che con una potente ed unica regola generavamo il logging di un'intera rete, per avere regole customizzate dobbiamo obbligatoriamente avere almeno una regola per ogni username attivo nella macchina.

Ma come generiamo le regole? Ovviamente non manualmente. Ci dobbiamo avvalere di una features introdotta non da molto sul sistema operativo RouterOS. Sto parlando della possibilità di lanciare uno script per ogni utente che effettua il login e conseguentemente lanciare uno script diverso per ogni utente che effettua il logout.

Dove troviamo questa potente funzionalità? All'interno della sezione user-profile del nostro hotspot MikroTik (o pppoe server).

Per pulizia di pensiero e di lavoro creeremo una nuova catena di firewall, e la chiameremo "customlog".

All'interno dello script che viene chiamato ogni volta che l'utente fa login possiamo utilizzare delle variabili, a noi interessano per i nostri scopi le variabili $user e $address che contengono rispettivamente il nome utente e l'indirizzo io che gli è stato assegnato dal sistema.

Andremo a creare una semplice regola di firewall di questo tipo:

[syntax type="html|php|js|css"]

/ip firewall mangle add chain=customlog src-address=$address connection-state=new action=return log=yes log-prefix=$user comment=$user

[/syntax]

e la mettiamo nello script di "On login" della sezione Hotspot User Profile:

WirelessGuru-Regola-Log-Custom-In-User-Profile-1

Dopo aver inserito questa regola se proviamo a fare login nel nostro hotspot MikroTik vedremo che verrà creata una regola dinamica di firewall come dal seguente screenshoot (regola con id 1):

WirelessGuru-Hotspot-Logging-Dinamic-Firewall-Rulez

I più attenti noteranno una regola con id 0 di cui non abbiamo parlato. A cosa serve? Semplicemente serve per controllare il traffico che vogliamo redirigere alla nostra chain "customlog". In questo esempio facciamo passare tutto il traffico in forward dalla chain "customlog". Ecco la regola:

[syntax type="html|php|js|css"]/ip firewall mangle add chain=forward action=jump jump-target=customlog[/syntax]

Senza questa regola non verrà in alcun modo loggato il traffico.

Se apriamo i nostri log vedremo che il nome utente sarà correttamente presente in ogni linea di log.

Abbiamo finito quindi?

No, manca poco ma non è ancora finito.

Un po' di pulizia, rimuovere la regola di firewall al logout utente.

Dobbiamo obbligatoriamente rimuovere la regola di firewall appena creata al logout dell'utente altrimenti questa regola falserebbe i futuri log collegati a quell'indirizzo ip.

Andiamo quindi ad inserire nella sezione "On logout" del nostro Hotspot User-Profile il seguente comando:

[syntax type="html|php|js|css"]/ip firewall mangle remove [find comment="$user"][/syntax]

per far rimuovere la regola di firewall non appena il nostro utente esegue il logout (o viene buttato fuori dalla rete per inattività/idle-timeout)

WirelessGuru-Mikrotik-Hotspot-Remove-Dynamic-Firewall-Rulez-on-Logout

A questo punto abbiamo completato la configurazione e siamo riusciti con pochi semplici passi ad aggiungere in ogni riga di log, generata dal nostro router MikroTik, il nome utente del nostro sistema hotspot o pppoe che ha generato quella connessione.

Se pensate che questo articolo sia interessante, o possa interessare a qualcuno che conoscete non esitate ad inoltrarlo e/o condividerlo con i vostri colleghi sui social network.

Sei interessato all'acquisto di materiale WiFi per realizzare hotspot? Compila la form sottostante:

Nome e Cognome

Ragione sociale

Indirizzo email

Messaggio

MikroTik Hotspot: Come loggare il traffico degli utenti (parte 1)

MikroTik Hotspot: Come loggare il traffico degli utenti (parte 1)

WirelessGuru-Mikrotik-Log-Hotspot-Connection-Part-1

Realizzare delle reti Hotspot WiFi con MikroTik, a meno di non attribuire un ip pubblico per ogni utente, implica molto spesso di dover attivare un log del traffico degli utenti verso internet. Vediamo come possiamo con MikroTik attivare il logging del traffico degli utenti hotspot.

Generare i log

Grazie alla flessibilità e potenza del sistema operativo RouterOS possiamo in maniera molto semplice impostare alcune regole per tenere traccia delle attività relative agli utenti della rete wireless WiFi.

Per prima cosa andiamo nei settaggi relativi alle attività di Log ed abilitiamo il logging per hotspot e firewall:

[code]

/system logging add topics=firewall action=memory

/system loggin add topics=hotspot action=memory

[/code]

Attraverso queste due semplici regole diciamo al sistema di iniziare a tenere traccia delle attività relative all'hotspot (login, logout etc) e di "scrivere" nella RAM (memory) l'attività. Vedremo in seguito come veicolare in altri target questi log.

Adesso utilizzando il firewall andremo a creare una regola che permetta di "loggare" il traffico passante dal router:

[code]
/ip firewall mangle add chain=forward connection-state=new action=log
[/code]

Con questi semplici comandi abbiamo configurato il router MikroTik per "loggare" il traffico degli utenti, se infatti utilizziamo l'hotspot ed andiamo a vedere dentro "Log" troveremo sicuramente delle entry di questo tipo:

[code]
Feb 7 2016 20:17:59 firewall,info: in:bridge-hs out:ether1, src-mac 00:03:aa:dd:de:2c, proto TCP (SYN), 172.31.255.253:58523->64.233.166.188:5228, len 60
Feb 7 2016 20:20:16 firewall,info: in:bridge-hs out:ether1, src-mac 00:03:aa:dd:de:2c, proto TCP (SYN), 172.31.255.253:48072->64.233.167.192:7275, len 60
Feb 7 2016 20:22:59 firewall,info: in:bridge-hs out:ether1, src-mac 00:03:aa:dd:de:2c, proto TCP (SYN), 172.31.255.253:47049->64.233.184.188:5228, len 60
[/code]

ovviamente gli IP, le porte ed i mac-address varieranno dall'esempio sopra riportato!

Cosa abbiamo in queste entry? Andiamo ad analizzarle:

Feb 7 2016 10:17:59  Data ed ora del log

firewall,info  Chi ha generato il log (nel nostro caso il firewall)

in:bridge-hs out:ether1 Quali interfacce il pacchetto ha attraversato

src-mac 00:03:aa:dd:de:2c Il MAC ADDRESS del dispositivo in LAN

proto TCP (SYN) Il tipo di protocollo (TCP, UDP, etc)

172.31.255.253:58523->64.233.166.188:5228 L'ip sorgente e l'ip destinatario con le relative porte.

Come ben si nota con questa entry riesco a "loggare" il minimo indispensabile richiesto dalla normativa:

chi (ip sorgente)

dove (ip destinazione)

cosa (protocollo + porta di destinazione, ad esempio TCP/80 è una richiesta HTTP)

quando (data ed ora)

Non avremo mai nei log, ed è corretto così, l'url/dns richiesto dall'utente. Tale informazione lederebbe in maniera netta le leggi sulla privacy degli utilizzatori della nostra area Hotspot WiFi.

Per quanto riguarda il "chi" essendo un ip privato dobbiamo fare un ulteriore ricerca, e andare a vedere, a ritroso, a quale nome utente il sistema aveva assegnato quell'ip.

Scorrendo a ritroso i log troveremo sicuramente una entry tipo:

[code]

Feb 7 2016 9:23:34 hotspot, info 34733xxxxx (172.31.255.253) logged in

[/code]

dove 34733xxxxx è il nome utente e 172.31.255.253 è l'ip associato al momento del login. Questo IP sarà dell'utente per tutta la durata della sua sessione (fino al suo logout dalla rete), dopo il logout quell'ip sarà riutilizzato da un'altro utente, fate quindi attenzione quando andate ad incrociare i dati.

Se vi chiedete se c'è un modo per avere l'username direttamente nella entry di log senza andare a ricercarlo a ritroso... beh leggete fino in fondo 🙂

Redirezionare i log verso un syslog remoto

A questo punto, visto che le reti hotspot generano un alto numero di entry log, dobbiamo redirezionare tali log verso un syslog esterno. Non possiamo lasciarli come sono adesso in quanto si cancellerebbero ad ogni riavvio o al superamento di una soglia (piuttosto bassa).

Procediamo con il configurare l'ip del server syslog. Si consiglia di averlo in LAN con l'hotspot o, se volete metterlo centralizzato in Cloud, assicuratevi di avere banda internet sufficiente. Come parametro di misura considerate che ogni utente attivo genera in media 5Kb di log al secondo, quindi 100 utenti attivi sono 500Kbps e cosi' via.

Per impostare l'ip del server log, ad esempio su 192.168.0.200 digitare:

[code]
/system logging action set remote remote=192.168.0.200
[/code]

Associare adesso le due regole di logging precedentemente create alla nuova action "remote", per fare questo dobbiamo prima trovare il loro id, attraverso un comando print:

[code]
/system logging print

# TOPICS ACTION PREFIX
0 info memory
1 error memory
2 warning memory
3 critical echo
4 firewall memory
5 hotspot memory
[/code]

successivamente modifichiamo la action utilizzando il loro id (nel nostro caso 4 e 5):

[code]
/system logging set 4 action=remote
/system logging set 5 action=remote
[/code]

Adesso i nostri log verranno inviati sul server Syslog remoto tramite il suo protocollo UDP con porta 514 e saranno memorizzati in maniera permanente sullo storage.

Conclusione

Con questo articolo ho illustrato come, in maniera molto semplice, sia possibile generare il flusso di log relativo agli utenti delle aree WiFi create con i prodotti MikroTik o RouterOS based come gli apparati della linea HIPERLINK di SICE.

In un prossimo articolo, per questo il titolo del presente finisce con "parte 1", mostrerò come è possibile includere nella linea di log anche il nome utente, senza doverlo andare a ricercare a ritroso nel file di log.

Volete avere una entry log contenente anche il nome utente? Qualcosa tipo:

Feb 7 2016 20:17:59 firewall,info: 34733xxxxx in:bridge-hs out:ether1, src-mac 00:03:aa:dd:de:2c, proto TCP (SYN), 172.31.255.253:58->64.233.166.188:5228, len 60

dove 34733xxxxx è l'username dell'utente dell'area WiFi?
Allora commentate e condividete con i vostri colleghi di LinkedIn questo post il più possibile 🙂

SMS Station login failed: You are calling outside your allowed timespan

SMS Station login failed: You are calling outside your allowed timespan

WirelessGuru-SMS-Station-HowtoSe a seguito di una mancata alimentazione della SMS Station di SICE all'improvviso tutta la vostra rete hotspot si blocca, andate a vedere nei log dei captive portal Mikrotik o SICE.

Se nei log trovate il seguente messaggio "Login failed: You are calling outside your allowed timespan" allora si sono disallineate le policy nel database della SMS Station.

La mancata alimentazione, quindi il non corretto shutdown della macchina, può in rari casi causare un problema con la sincronia delle policy. La SMS Station ha le policy collegate anche a funzionalità temporali , in quanto è presente una modulazione dinamica della velocità, ed ecco spiegato l'errore sibillino che appare nei captive portal. Per risolvere la situazione basterà entrare nel pannello di amministrazione della SMS Station (versione 4), andare su "System" e facendo click col tasto destro del mouse andare su "Policy prodotti". Ci verrà presenta la lista delle policy configurate sull'apparato. Entrare sulla prima e fare una modifica, ad esempio abilitare o disabilitare la modulazione dinamica della velocità. Salvare e poi rimettere come prima la policy modificate e, ovviamente, risalvare.

Eseguire questa operazione per tutte le policy presenti nell'elenco.

Una volta fatta questa operazione gli utenti tornaranno online senza problemi.

Vorrei puntualizzare che la SMS Station è un server Linux (basato su CentOS) ottimizzato per ripartire senza problemi anche a fronte di mancata alimentazione. In rari casi, e sottolineo rari casi, può accadere che tale mancanza faccia perdere qualche dato, evidentemente importante, che risiedeva nella cache dell'hard disk e che non è stata correttamente scritta. Al riavvio della macchina il server SQL si trova con delle tabelle incongruenti e tenta una ricostruzione che non sempre finisce in modo felice causando il messaggio di errore.

Come fare a proteggersi? Banalmente assicuratevi di mettere sempre sotto gruppo di continuità o semplice UPS la SMS Station. Se dovete fare dei lavori di spostamento nella sala server che implicano lo spegnimento della macchina eseguire prima un regolare shutdown della macchina ed attendere che Linux abbia completato la procedura di spegnimento.

Per eseguire lo shutdown della SMS Station entrare nella pagina amministrativa e fare click sull'icona di "Chiudi sessione" e poi scegliere il bottone "Spegni".

Come eseguire uno script per ogni lease del DHCP server di Mikrotik

Come eseguire uno script per ogni lease del DHCP server di Mikrotik

WirelessGuru-Mikrotik-HowtoAvete mai avuto l'esigenza di eseguire uno script per ogni client che si collega al dhcp server di Mikrotik?

Nelle recenti versioni di RouterOS è stata proprio aggiunta questa possibilità. Nella sezione DHCP server abbiamo una nuova opzione chiamata "Lease Script" che ci permette di eseguire un comando/script per ogni client a cui viene assegnato l'indirizzo ip dal nostro DHCP server o per ogni client che viene rilasciato/liberato dall'elenco dei leases (in quanto non  più presente).
Come variabili, a livello global, nel nostro script possiamo utlizzare:

  • $leaseBound 
  • $leaseServerName
  • $leaseActMAC
  • $leaseActIP

$leaseBound avrà valore 1 se il server ha dato l'ip a quel client, mentre ha valore 0 (zero) se il server ha liberato l'ip dai leases.

$leaseServerName avrà il nome del server DHCP che ha dialogato con il client.

$leaseActMAC conterrà il mac-address della macchina che ha ricevuto l'ip dal server.

$leaseActIP infine conterrà il l'ip assegnato in quel momento al client.

[nextpage title="Esempi d'uso"]

Ma a cosa può servire? Beh come molte opzioni presenti in RouterOS può sembrare inizialmente oscura la sua applicazione pratica, ma potrebbe capitare di doverla usare.

Ad esempio potremmo creare un sistema che generi dei walled garden temporanei per gli host; una esigenza potrebbe essere quella di permettere per 10 minuti l'accesso a social network (ad esempio Facebook) per sfruttarne le sue API ed implementare sul nostro hotspot un Social Login.
Come tutti ben sanno, ad oggi, non è possibile implementare il Social Login di Facebook senza mettere nei walled garden tutto Facebook, ma grazie al Lease-script del DHCP di RouterOS possiamo "liberare" Facebook in maniera temporanea host per host.

Visto l'alto interesse riguardo a questo argomento (permettere temporaneamente l'accesso a Facebook per un tempo limitato), mi riprometto di creare una guida step-by-step nei prossimi giorni.

 

 

Come creare un hotspot WiFi da zero con Mikrotik

Come creare un hotspot WiFi da zero con Mikrotik

Come si configura un'area hotspot WiFi con apparati Mikrotik partendo da zero? Vediamo di seguito come in pochi semplici passi riusciamo a creare un'area WiFi protetta dal captive portal di Mikrotik.

Innanzitutto definiamo l'area hotspot WiFi. Un'area hotspot WiFi è un'area senza protezioni wireless (open, senza wpa/wpa2 o altro) a cui è possibile connettersi liberamente. I tentativi di navigazione saranno però redirezionati verso una pagina di login dal servizio captive portal interno.

Per realizzare un'area hotspot è fondamentale innanzitutto separare l'area hotspot WiFi dalla LAN a cui è connesso internet. Per questo motivo dobbiamo obbligatoriamente utilizzare due subnet distinte di ip. Non è quindi possibile realizzare un'area hotspot WiFi in modalità transparent bridge.

Eseguire sull'apparato un

[code gutter="false"]/system reset-configuration no-default=yes[/code]

per portarlo ad uno stato di inizializzazione. A questo punto assegnamo due indirizzi ip, uno alla scheda wlan1 (la scheda wireless) ed un'altro alla scheda ether1 (la scheda ethernet da cui prenderemo banda internet):

[code gutter="false"]/ip address add address=192.168.1.2/24 interface=ether1 disabled=no
/ip address add address=172.16.0.1/16 interface=wlan1 disabled=no[/code]

l'indirizzo della scheda ether1 in questo esempio è casuale, va ovviamente adattato alla rete che ospiterà il nostro apparato hotspot. Anche l'indirizzo assegnato alla scheda wireless è casuale, ma qui, non avendo vincoli possiamo assegnare una classe ip di nostro gradimento con la sola accortezza di settarla diversa da quella della erher1. Nell'esempio abbiamo assegnato una /16 come maschera a bit (65534 ip), non ci sono regole specifiche per questa scelta, ma è largamento consigliato non limitare il range del dhcp dell'hotspot a "pochi" ip visto che oggigiorno ci sono molti device wireless che si connettono alle aree hotspot gratuite ed una volta che il server dhcp ha esaurito gli ip disponibili si ha l'effetto di una rete wifi "non funzionante".

Una volta configurati gli indirizzi ip dovremo settare anche il default gateway che ci permetterà di raggiungere la rete internet:

[code gutter="false"]/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1[/code]

il gateway impostato, così come l'ip della ether1, è solo un esempio da adattare alla rete ospite in una configurazione reale.

[nextpage title="Auto Configuratore"]

Una volta assegnati gli indirizzi ip siamo pronti per far partire l'auto configuraratore presente in RouterOS, basta seguire passo passo le richieste del configuratore per arrivare ad avere un buon hotspot setup di base:

[code gutter="false" highlight="1,3,5,6,12,14,16,18,19"]
/ip hotspot setup
Select interface to run HotSpot on
hotspot interface: wlan1
Set HotSpot address for interface
local address of network: 172.16.0.1/16
masquerade network: yes
Set pool for HotSpot addresses
address pool of network: 172.16.0.2-172.16.255.254
Select hotspot SSL certificate
select certificate: none
Select SMTP server
ip address of smtp server: 0.0.0.0
Setup DNS configuration
dns servers: 8.8.8.8
DNS name of local hotspot server
dns name: hotspot.wirelessguru.it
Create local hotspot user
name of local hotspot user: test
password for the user: test
[/code]

Una volta completato il wizard avremo tutto configurato. Basterà configurare la scheda wireless con l'ssid desiderato e la modalità access point (ap-bridge):

[code gutter="false"] /interface wlan1 set ssid=wirelessguru \

mode=ap-bridge wireless-protocol=802.11 \

disabled=no[/code]

A questo punto collegandosi all'ssid configurato si avrà in risposta una pagina di login. Nel wizard abbiamo creato anche un utente test con password test.
Inserendola navigheremo su internet attraverso il nuovo hotspot appena creato.

HashFlare
HashFlare
HashFlare
HashFlare
HashFlare
HashFlare
HashFlare
HashFlare
HashFlare
HashFlare
HashFlare