Visualizzazione post con etichetta Captive Portal. Mostra tutti i post
Visualizzazione post con etichetta Captive Portal. Mostra tutti i post

venerdì 19 ottobre 2018

NoDogSplash captive portal in OpenWRT

Aggiornamento
questo e' la risposta degli sviluppatori

First of all, almost all operating systems on both mobile and laptop/desktop now support the defacto standard Captive Portal Detection (CPD) function designed to facilitate a secure and consistent login to captive portals. This by default uses a cut down browser that is very restricted for security purposes.
What you are seeing on Android is the CPD browser blocking iframes.
On your laptop you will be using your normal browser.

---------------------------------------------------------------------------

Il mio scopo e' quello di far girare NoDogSplash captive portal su GL.iNet AR150 con firmware OpenWRT Stock in modo che la pagina di benvenuto (nel linguaggio di NoDog e' la splash page) mostri contenuti ripresi da un sito web esterno e che sia quindi dinamica

Per prima cosa devo precisare che il firmware stable dell'AR150 monta una versione di NoDogSplash abbastanza vecchiotta ovvero la 0.9_beta9.9.9-5 (ho provato a montare anche il firmware in testing ma le cose migliorano di poco perche' opkg installa la 1.0.2.1)


Per creare il portale captivo ho tolto il WPA all'AP e poi usata la seguente configurazione
In pratica ho aggiunto alle regole di firewalle la possibilita' per utenti non autenticati di poter
raggiungere il sito 150.217.xxx.xxx su porta 80
---------------------------------------------------------------------------------
config instance
  # Set to 1 to enable nodogsplash
  option enabled 1

  # Use plain configuration file as well
  #option config '/etc/nodogsplash/nodogsplash.conf'
  option network 'lan'
  option gatewayname 'OpenWrt Nodogsplash'
  option maxclients '250'
  option idletimeout '1200'
  #option redirecturl 'http://c1p81.altervista.org/montecatini/'
  #qoption authenticateimmediately 'yes'



  # Your router may have several interfaces, and you
  # probably want to keep them private from the network/gatewayinterface.
  # If so, you should block the entire subnets on those interfaces, e.g.:
  list authenticated_users 'block to 192.168.0.0/16'
  list authenticated_users 'block to 10.0.0.0/8'

  # Typical ports you will probably want to open up.
  list authenticated_users 'allow tcp port 22'
  list authenticated_users 'allow tcp port 53'
  list authenticated_users 'allow udp port 53'
  list authenticated_users 'allow tcp port 80'
  list authenticated_users 'allow tcp port 443'

  # For preauthenticated users to resolve IP addresses in their
  # initial request not using the router itself as a DNS server,
  list preauthenticated_users 'allow tcp port 53'
  list preauthenticated_users 'allow udp port 53'
  llst preauthenticated_users 'allow tpc port 80 to 150.217.xxx.xxx'
  # Allow ports for SSH/Telnet/DNS/DHCP/HTTP/HTTPS
  list users_to_router 'allow tcp port 22'
  list users_to_router 'allow tcp port 23'
  list users_to_router 'allow tcp port 53'
  list users_to_router 'allow udp port 53'
  list users_to_router 'allow udp port 67'
  list users_to_router 'allow tcp port 80'
  list users_to_router 'allow tcp port 443'

  # See https://github.com/nodogsplash for a full list of available options.
----------------------------------------------------------------

in seguito ho modificato lo splash.html come
l'idea e' quella di avere un iframe nel quale visualizzare la pagina derivante
dal sito esterno all'interno della pagina statica splash.html
-----------------------------------------------------------------
<html>
<head>
<title>$gatewayname Entry</title>
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
</head>
<body bgcolor="#DDDDDD" text="#000000">

<table border="0" cellpadding="2" cellspacing="0" width="100%">
<tr>
<td align="center"><h2>Luca $gatewayname</h2></td>
</tr>
<tr>
<td align="center">
<iframe height="710" width="720" src="http://150.217.73.108"></iframe>
</td>
</tr>

<tr>
<td align="center" height="120">
<!--
A client is authenticated by requesting the page $authtarget.
So, href to it here, with an img or link text the user can click on.
Also, note that any images you reference must reside in the
subdirectory that is the value of $imagesdir (default: "images").
-->
<a href="$authtarget">
<!--<img src="$imagesdir/splash.jpg" width="71" height="49" border="0"
alt="Click to enter" title="Click to enter">-->
<img src="http://c1p81.altervista.org/montecatini/img/logo_strong.jpg">
<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png">
</a>
</td>
</tr>
</table>
<form method='GET' action='$authaction'>
  <input type='hidden' name='tok' value='$tok'>
  <input type='hidden' name='redir' value='$redir'>
  <input type='submit' value='Click Here to Enter'>
</form>
</body>
</html>

---------------------------------------------------------------------
la cosa divertente e' che tutto funziona perfettamente se mi collego da portatile con Chrome


mentre la stessa pagina vista dal telefono (Android 9) viene visualizzata cosi'

Una soluzione potrebbe essere la  modalita' Forwarding Authentication Service (FAS) (che in pratica reindirizza il login su un server esterno dovre peraltro potrebbe girare anche Php) ma non sembra funzionare (anche perche' tutti i tutorial sono per NoDogSplash 2....)

martedì 25 settembre 2018

Captive Portal su Raspberry Pi Zero W

Un esempio di Captive Portal (ovvero un Access Point WiFi che obbliga gli utenti a visualizzare determinate pagine, sia per loggarsi per l'accesso ad internet sia per altri accedere ad un web server interno)

La Raspberry Pi Zero W, non avendo due schede di rete di default come la 3b+, non puo' essere usata per fornire accesso ad internet come router


Per prima cosa si deve installare sulla SD una Raspbian Lite . Dato l'uso in HeadLess mode e' necessario configurare la scheda via SSH, non abilitata di default tramite la porta USB OTG, non abilitata di default

Una volta formattata la scheda SD si monta la partizione boot e
1) si inserisce un file vuoto denominato ssh (senza estensione)
2) si modifica il file config.txt aggiungendo una ultima riga con scritto dtoverlay=dwc2
3) si modifica il file cmdline.txt aggiungendo modules-load=dwc2,g_ether subito dopo rootwait

Fatto cio' si inserisce la SD nella Raspberry e si collega un cavo microUSB nella porta posta piu' centralmente collegando l'altro cavo al PC (l'alimentazione e' data dallo stesso cavo e non e' necessario di collegare la seconda USB)

A questo punto da PC (Linux o Mac) si puo' entrare in shell mediante SSH con il comando

ssh pi@raspberrypi.local

password : raspberry

si passa quindi a configurare la connessione WiFi per l'aggiornamento dei pacchetti con

sudo raspi-config 

opzione Netowork Options/Wifi dove si inseriscono i dati dell'Acces Point
si aggiorna il sistema e si installano i pacchetti

apt-get install hostapd dnsmasq apache2 php7.0

(questa configurazione e' stata ripresa da qui togliendo la parte malevola)

rc.local
-----------------------------------------------------------

service apache2 start

sleep 1
hostapd -B /etc/hostapd/hostapd.conf
sleep 2
ifconfig br0 up
ifconfig br0 10.1.1.1 netmask 255.255.255.0
sysctl net.ipv4.ip_forward=1
iptables --flush
iptables -t nat --flush
iptables -t nat -A PREROUTING -i br0 -p udp -m udp --dport 53 -j DNAT --to-destination 10.1.1.1:53
iptables -t nat -A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.1.1.1:80
iptables -t nat -A PREROUTING -i br0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.1.1.1:80
iptables -t nat -A POSTROUTING -j MASQUERADE
service dnsmasq start
exit 0


-----------------------------------------------------------

hostapd.conf
-----------------------------------------------------------
interface=wlan0
channel=6
hw_mode=g
ssid=Wi-Fi
bridge=br0
auth_algs=1
wmm_enabled=0
------------------------------------------------------------

dnsmasq.conf

------------------------------------------------------------
interface=br0
listen-address=10.1.1.1
no-hosts
dhcp-range=10.1.1.2,10.1.1.254,72h
dhcp-option=option:router,10.1.1.1
dhcp-authoritative

address=/apple.com/10.1.1.1
address=/appleiphonecell.com/10.1.1.1
address=/airport.us/10.1.1.1
address=/akamaiedge.net/10.1.1.1
address=/akamaitechnologies.com/10.1.1.1
address=/microsoft.com/10.1.1.1
address=/msftncsi.com/10.1.1.1
address=/msftconnecttest.com/10.1.1.1
address=/google.com/10.1.1.1
address=/gstatic.com/10.1.1.1
address=/googleapis.com/10.1.1.1
address=/android.com/10.1.1.1


override.conf
------------------------------------------------------------
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order Allow,Deny
 Allow from all
</Directory>
------------------------------------------------------------






Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...