Captive portal / http:80 redirect to localhost

Captive portal / http:80 redirect to localhost
« kdy: 13. 03. 2019, 18:27:25 »
Ahojte,

Zdanie je spravit captive portal pre WLAN, jedna sa o embedded Linux 4.11, BEZ iptables a net_forward.

Redirect nastane, ak sa uzivatel pripoji na HOST AP, a napise v prehliadaci "google.com", automaticky sa presmetuje na 127.0.0.1:80
Pripadne otvori WebBrowser na danej AP a bude presmerovany na 127.0.0.1:80 bez akejkolvek interakcie

Standardne by som to vyriesil cez iptables PRE/POST routing, nakolko nieje a nebude k dispozicii , hladam ine riesenie.
Nejake riesenia?

Najlepsie nieco co ide skompilovat pomocou GCC a nevyzaduje hromadu dependencies...
Diky M


Re:Captive portal / http:80 redirect to localhost
« Odpověď #1 kdy: 13. 03. 2019, 18:58:39 »
Redirect nastane, ak sa uzivatel pripoji na HOST AP, a napise v prehliadaci "google.com", automaticky sa presmetuje na 127.0.0.1:80

Tohle nemá řešení. Teda jedno řešení by to mělo – uživatel by musel použít čerstvě nainstalovaný prohlížeč, jiný než od Google.

Když uživatel zadá do prohlížeče google.com, prohlížeč ví, že tento web má navštěvovat jen přes HTTPS. Takže se vždy bude připojovat protokolem HTTPS na port 443. Vy to spojení sice můžete unést a přesměrovat na libovolný port, ale prohlížeč pořád bude komunikovat protokolem HTTPS, takže i server musí komunikovat přes HTTPS. A první, co takový server musí udělat, je poslat certifikát, který platí pro doménu google.com, a prohlížeč mu bude důvěřovat – a takový certifikát neseženete.

Jediná možnost je použít to, co standardně používají captive portály – když se uživatel (třeba s Androidem) připojí WiFi, systém zkusí oťukat pár adres, které má zadrátované. Zkouší navázat spojení HTTP, a pokud mu tohle spojení přesměrujete správným způsobem, pozná, že jde o captive portál, a zobrazí standardní hlášku, že tato WiFi potřebuje zadat přihlašovací údaje a zda má zobrazit přihlašovací stránku.

Pokud nezafunguje tenhle standardní mechanismus a závisí to na tom, že uživatel musí otevřít nějakou stránku v prohlížeči, musí uživatel zadat adresu, u které si jeho browser určitě nepamatuje, že je dostupná přes HTTPS. Hodí se pro to http://neverssl.com/, ale tu asi uživatelé běžně znát nebudou.

K tomu přesměrování potřebujete zfalšovat DNS odpověď aby směřovala na váš webový server (předpokládám, že to bude s tou detekcí captive portálů fungovat). Pak nepotřebujete žádný NAT. Takže když se uživatel přihlásí k AP, přes DHCP dostane IP adresu a adresu DNS serveru – a DNS server bude ten váš, který pošle tu zfalšovanou odpověď. Akorát uživatele nepřesměrovávejte na 127.0.0.1, ale na IP adresu, kde běží ten váš webserver.

Re:Captive portal / http:80 redirect to localhost
« Odpověď #2 kdy: 13. 03. 2019, 19:35:27 »
Dakujem za odpoved,

Chapem ze s HTTPS to nepojde, ale nakolko je mozno pouzit iba HTTP napriklad, "config.local" pripadne "config.localhost" alebo iba config, tak predpokladam ze by to s HTTP mohlo fungovat.

Ano, DHCP a aj DNS je k dispozicii.
Z Vasej odpovedi je zrejme, ze k presmerovaniu nebude potrebovat IPtables, ale postaci mi DNS napr dnsmasq, chapem to spravne?

Diky
M.

Re:Captive portal / http:80 redirect to localhost
« Odpověď #3 kdy: 13. 03. 2019, 19:45:36 »
Z Vasej odpovedi je zrejme, ze k presmerovaniu nebude potrebovat IPtables, ale postaci mi DNS napr dnsmasq, chapem to spravne?
Ano, uživatel se zeptá na nějaký DNS název, vy mu ho přeložíte na IP adresu vašeho serveru a prohlížeč uživatele pak rovnou naváže spojení s vaším serverem, tj. nemusíte to spojení už nijak unášet.

Jediný problém s tímhle řešením by nastal, pokud by uživatelovo zařízení validovalo DNSSEC a on zkusil v prohlížeči zadat adresu z domény, která DNSSEC používá. Ale pokud požijete vlastní vymyšlenou doménu, s tímhle problém nemáte.

Re:Captive portal / http:80 redirect to localhost
« Odpověď #4 kdy: 13. 03. 2019, 19:48:18 »
Nepochopil som ci chcete presmerovat iba google.com, alebo vsetky domeny.
Ak iba niektore domeny  tak potrebujete menit DNS odpovede.. Vola sa to "dns doctoring" u cisca, podporuje to bind:
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
Aj dnsmasq : "alias".

Ak chcete upravovat kompletne vsetky odpovede tak to bude vacsi oriesok.


crown

  • ****
  • 383
    • Zobrazit profil
Re:Captive portal / http:80 redirect to localhost
« Odpověď #5 kdy: 14. 03. 2019, 11:07:00 »
To ovsem predpokladate, ze klient pouzije DNS server z DHCP odpovedi. Dnes vam hodne systemu bude pouzivat svuj vybrany DNS server. Jde to nastavit i na androidu, aby pouzil cloudflare 1.1.1.1 nebo google DNS.

Re:Captive portal / http:80 redirect to localhost
« Odpověď #6 kdy: 15. 03. 2019, 07:02:18 »
To ovsem predpokladate, ze klient pouzije DNS server z DHCP odpovedi. Dnes vam hodne systemu bude pouzivat svuj vybrany DNS server. Jde to nastavit i na androidu, aby pouzil cloudflare 1.1.1.1 nebo google DNS.
Princip captive portálu spočívá v tom, že nejprve danému zařízení nedovolíte přístup do internetu, a teprve když uživatel něco odsouhlasí na captive portálu, internet mu zpřístupníte. Pokud v tom zákazu přístupu na internet neuděláte výjimku, nedostane se ani na cizí DNS servery a nezbyde mu, než použít ty vaše.

Re:Captive portal / http:80 redirect to localhost
« Odpověď #7 kdy: 15. 03. 2019, 16:49:01 »
Dakujem za pomoc, vyriesil som to k spokojnosti pomocou dnsmasq

Ako bolo pisane, v pripade HTTP protokolu to funguje paradne, nakolko akakolvek *.* adresa bola resolvnuta na staticku IP a prehliadace neprotestovali (Test na Androide, MAC-u, iPhone a Win Firefox)

HTTPS som skusal iba namatkou, ale k redirectu neprislo, predpokladam ze prehliadac nevedel nadviazat ssl spojenie, ktore ja som v captive portali ani nemal implementovane, v podstate tento bod ma ani nezaujima, nakolko primarne mi ide o to, aby pripadny uzivatel napisal len "config.local" a bol presmerovany na xxx.yyy.zzz.xyz

Dakujem za radu!
M.

Kamui

Re:Captive portal / http:80 redirect to localhost
« Odpověď #8 kdy: 15. 03. 2019, 19:25:51 »
Dovolám si malý OT, ale nechápu proč na tohle dodnes není nějaký standard (nejspíš založený na 802.1X) a musí se to řešit takovými hnusnými hacky typu unesení spojení nebo falešné DNS.

Re:Captive portal / http:80 redirect to localhost
« Odpověď #9 kdy: 15. 03. 2019, 20:01:23 »
Dovolám si malý OT, ale nechápu proč na tohle dodnes není nějaký standard (nejspíš založený na 802.1X) a musí se to řešit takovými hnusnými hacky typu unesení spojení nebo falešné DNS.
Existuje návrh standardu: RFC 7710. Řeší to na úrovni přidělování adres (DHCP nebo RA), což je místo, kam to patří.