日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Wifidog 认证

發(fā)布時(shí)間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Wifidog 认证 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先簡單介紹一下什么是Portal認(rèn)證,Portal認(rèn)證,通常也會(huì)叫Web認(rèn)證,未認(rèn)證用戶上網(wǎng)時(shí),設(shè)備強(qiáng)制用戶登錄到特定站點(diǎn),用戶可以免費(fèi)訪問其 中的服務(wù)。當(dāng)用戶需要使用互聯(lián)網(wǎng)中的其它信息時(shí),必須在門戶網(wǎng)站進(jìn)行認(rèn)證,只有認(rèn)證通過后才可以使用互聯(lián)網(wǎng)資源。現(xiàn)金很多中國移動(dòng)CMCC、中國聯(lián)通、中 國電信ChinaNet的WIFI都使用這種認(rèn)證接入方式。

在OpenWRT上實(shí)現(xiàn)Portal認(rèn)證,實(shí)際上早已有解決方案:

1. chillispot,但原維護(hù)作者停止更新,被chillispot.info接管繼續(xù)開發(fā);

2.coova-chilli,它是基于chillispot開發(fā)拓展的,功能最為強(qiáng)大;可以去官方看一下Coova-chilli;

3.wifidog

前兩個(gè)由于原維護(hù)作者停止更新,筆者也沒有深入研究,重點(diǎn)鉆研了wifidog,Wifidog也是OpenWRT和DD-WRT中實(shí)現(xiàn)Portal比較出名的。

但是,Wifidog只是實(shí)現(xiàn)AP認(rèn)證網(wǎng)關(guān),需要配合外部的Portal服務(wù)器才能使用,Portal主要是提供認(rèn)證所需的WEB頁面且實(shí)現(xiàn)認(rèn)證計(jì)費(fèi)等的 功能。雖然這也有很多商用解決方案,例如wiwiz、wifiap等,但是這些商業(yè)解決方案的目標(biāo)都是盈利,即使可以免費(fèi)使用,免費(fèi)賬號(hào)的功能和權(quán)限都受 到了很大的限制,例如不能自定義頁面,Web認(rèn)證頁面有廣告等等。有條件的人可能打算自己搭建Portal服務(wù)器,但是看看Wifidog的官方 Wiki,對(duì)搭建過程實(shí)在是難以理解。后來,筆者發(fā)現(xiàn)網(wǎng)絡(luò)上還有一個(gè)authpuppy方案,官方網(wǎng)站www.authpuppy.org,是一個(gè)已實(shí)現(xiàn)好的Wifidog認(rèn)證服務(wù)器,里面包含各種插件供你使用,官方的安裝過程也很簡單,如果你懂的HTML和面向?qū)ο缶幊痰南嚓P(guān)知識(shí)且擁有一個(gè)服務(wù)器,可以自行修改認(rèn)證頁面,使用authpuppy也是一個(gè)不錯(cuò)的方案。

但是,即便如此,這些方案還是不夠靈活,經(jīng)過筆者認(rèn)真鉆研,查閱大量資料并經(jīng)過多次抓包分析,終于理解了Wifidog的工作原理。接下來筆者將會(huì)跟你介 紹如何自行編寫一個(gè)輕量級(jí)的Web Portal認(rèn)證服務(wù)器。當(dāng)然,這需要你具有程序設(shè)計(jì)基礎(chǔ),HTML、CSS當(dāng)然是少不得的,后端開發(fā)語言可以使用PHP或Python或Java等。

首先,需要簡單介紹一下Wifidog的工作原理:

1.客戶端發(fā)出初始化請(qǐng)求,比如訪問?www.baidu.com。

2.網(wǎng)關(guān)的防火墻規(guī)則將這個(gè)請(qǐng)求重定向到本地網(wǎng)關(guān)的端口上。這個(gè)端口是Wifidog監(jiān)聽的端口。

3.Wfidog提供一個(gè)HTTP重定向回復(fù),重定向到Web認(rèn)證頁面,重定向的Url的Querystring中包含了Gateway的ID,Gateway的FQDN以及其他的信息。

4.用戶向認(rèn)證服務(wù)器發(fā)出認(rèn)證請(qǐng)求

http://portal_server:port/login_script?

gw_id=[GatewayID, default: “default”]

gw_address=[GatewayAddress, internal IP of router]

gw_port=[GatewayPort, port that wifidog Gateway is listening on]

url=[user requested url];

5.網(wǎng)關(guān)返回一個(gè)(可以是自定義的)splash(也稱作“登錄”)頁面。

6.用戶提供他的憑據(jù)信息,比如用戶名和密碼。

7.成功認(rèn)證的話,客戶端將會(huì)被重定向到網(wǎng)關(guān)的自己的web頁面上,并且?guī)в幸粋€(gè)認(rèn)證憑據(jù)(一個(gè)一次性的token),內(nèi)容比如:

http://GatewayIP:GatewayPort/wifidog/auth?token=[auth token];

8.用戶就是用獲取到的憑據(jù)訪問網(wǎng)關(guān)。

9.網(wǎng)關(guān)去認(rèn)證服務(wù)器詢問token的有效性。

10.認(rèn)證服務(wù)器確認(rèn)token的有效性。

11.網(wǎng)關(guān)發(fā)送重定向給客戶端,以從認(rèn)證服務(wù)器上獲取 成功提示頁面,重定向到 http://portal_server:port/portal_script 這個(gè)位置。

12.認(rèn)證服務(wù)器通知客戶請(qǐng)求成功,可以上網(wǎng)了。

圖解:

然后考察一下Wifidog的配置文件/etc/wifidog.conf,關(guān)鍵的配置項(xiàng)是:

AuthServer {

Hostname???????????? (Mandatory; Default: NONE)

SSLAvailable????????? ?(Optional; Default: no; Possible values: yes, no)

SSLPort?????????????? (Optional; Default: 443)

HTTPPort???????????? (Optional; Default: 80)

Path???????????????? ?(Optional; Default: /wifidog/ Note:? The path must be both prefixed and suffixed by /.? Use a single / for server root.)

LoginScriptPathFragment? (Optional; Default: login/? Note:? This is the script the user will be sent to for login.)

PortalScriptPathFragment (Optional; Default: portal/? Note:? This is the script the user will be sent to after a successfull login.)

MsgScriptPathFragment??? (Optional; Default: gw_message.php? Note:? This is the script the user will be sent to upon error to read a readable message.)

PingScriptPathFragment??? (Optional; Default: ping/? Note:? This is the script the user will be sent to upon error to read a readable message.)

AuthScriptPathFragment??? (Optional; Default: auth/? Note:? This is the script the user will be sent to upon error to read a readable message.)

}

# Listen on this port

GatewayPort 2060

# Parameter: CheckInterval

# Default: 60

# Optional

#

# How many seconds should we wait between timeout checks.? This is also

# how often the gateway will ping the auth server and how often it will

# update the traffic counters on the auth server.? Setting this too low

# wastes bandwidth, setting this too high will cause the gateway to take

# a long time to switch to it’s backup auth server(s).

CheckInterval 60

# Parameter: ClientTimeout

# Default: 5

# Optional

#

# Set this to the desired of number of CheckInterval of inactivity before a client is logged out

# The timeout will be INTERVAL * TIMEOUT

ClientTimeout 5

AuthServer是Portal服務(wù)器的配置項(xiàng);GatewayPort是Wifidog監(jiān)聽的地址,默認(rèn)是2060,一般保持默認(rèn)即 可;CheckInterval是心跳時(shí)長,單位是秒,什么是心跳呢,客戶端認(rèn)證成功之后,如果有網(wǎng)絡(luò)訪問動(dòng)作,Wifidog getway就會(huì)每隔一段時(shí)間訪問Portal服務(wù)器的一個(gè)腳本,用于認(rèn)證計(jì)費(fèi),當(dāng)然,如果客戶使用超時(shí)或超流量,也可以通過心跳強(qiáng)制客戶端下線。 ClientTimeout是用戶一次認(rèn)證成功后的網(wǎng)絡(luò)訪問時(shí)長,超過這個(gè)時(shí)間需要重新認(rèn)證,這個(gè)時(shí)長并非由ClientTimeout單獨(dú)決定,取決于 INTERVAL * TIMEOUT。詳細(xì)的配置信息可以訪問:http://dev.wifidog.org/browser/trunk/wifidog/wifidog.conf。

我們重點(diǎn)討論P(yáng)ortal服務(wù)器的配置項(xiàng),Hostname是Portal服務(wù)器的ip或者是域名,SSLAvailable和SSLPort是SSL加 密配置,如果你的Portal服務(wù)器有配置HTTPS加密,則需要配置這兩項(xiàng);Path是指你的腳本路徑(舉例,http://a.com/to/,則 a.com是域名,/to/是路徑),注意路徑必須以“/”開頭和結(jié)尾,如果是根路徑,則填一個(gè)“/”即可;接下來的5個(gè)配置指明你的腳本名,這說明了我 們需要寫五個(gè)腳本,我會(huì)詳細(xì)說明。(以下文中涉及的“第幾步”均是指Wifidog認(rèn)證過程的步驟)

LoginScriptPathFragment配置項(xiàng)配置的是登陸腳本,它通過GET方式接受傳入?yún)?shù)gw_address、gw_port、 gw_id、mac和url,gw_address是AP Getway的ip地址;gw_port是Wifidog監(jiān)聽的端口,即上面介紹的wifidog.conf中的GatewayPort配置;gw_id 是AP Getway的id,配置文件wifidog.conf中可以配置,默認(rèn)值是default,這個(gè)值的作用是當(dāng)存在多個(gè)AP是,服務(wù)器或管理員可以根據(jù)不 同的id確定用戶的接入點(diǎn);mac是客戶計(jì)算機(jī)的網(wǎng)卡物理地址,注意不是AP網(wǎng)關(guān)的mac,這個(gè)mac是用來識(shí)別客戶計(jì)算機(jī)的;url是客戶初始訪問的 Url,這些Querystring都是AP Getway向客戶端發(fā)出重定向請(qǐng)求自動(dòng)生成的。這個(gè)腳本同時(shí)需要提供登陸頁面,如果登陸成功,需要向客戶;端返回302重定向,重定向 到:http://gw_address:gw_port/wifidog/auth?token=[token];即實(shí)現(xiàn)第7步,其中[token]是 你自己自動(dòng)生成的token字符串,隨機(jī)生成一個(gè)字符串即可,但是長度最好長些,安全性更高,另外,token需要根據(jù)不同用戶保存,最好保存于數(shù)據(jù)庫 中,之后的AP Getway詢問token有效性(第9步)還需要用到。這里最好使用cookie或session,使之后的登陸成功頁面可以判斷用戶已經(jīng)成功,阻止未 登錄成功的人訪問認(rèn)證成功頁面。

PortalScriptPathFragment配置項(xiàng)配置的是登陸成功后服務(wù)器展示的腳本(第11步),它通過GET方式接受1個(gè)傳入?yún)?數(shù),gw_id,這個(gè)腳本比較簡單,告知用戶登陸成功即可,當(dāng)然,最好重定向到用戶之前想要方位的url,即第1步用戶輸入的URL。

MsgScriptPathFragment配置項(xiàng)配置的是錯(cuò)誤信息展示腳本,它通過GET方式接受一個(gè)傳入?yún)?shù)message,這個(gè)腳本也很簡單,展示 message的內(nèi)容即可,目的是當(dāng)認(rèn)證過程出現(xiàn)錯(cuò)誤,AP Getway會(huì)重定向到這個(gè)腳本,URL中含有錯(cuò)誤的信息。

PingScriptPathFragment配置項(xiàng)配置的是心跳腳本,這個(gè)腳本它通過GET方式接受5個(gè)傳入?yún)?數(shù),gw_id,sys.uptime,sys.memfree,sys.load,wifidog.uptime,其中,sys.uptime指的是 AP Getway的啟動(dòng)時(shí)間,sys.memfree指的是AP Getway的空閑內(nèi)存,sys.load指的是AP Getway的CPU負(fù)載,wifidog.uptime指的是wifidog的啟動(dòng)時(shí)間,這個(gè)腳本每隔一段時(shí)間(Wifidog.conf里配置的 CheckInterval),Wifidog會(huì)自動(dòng)訪問,但是其目的不是用戶驗(yàn)證,而是幫助管理員管理AP節(jié)點(diǎn),了解AP節(jié)點(diǎn)的負(fù)載情況,適時(shí)增加節(jié)點(diǎn) 等,Wifidog訪問這個(gè)腳本時(shí),需要這個(gè)腳本返回Pong,如果你沒有統(tǒng)計(jì)AP節(jié)點(diǎn)負(fù)載數(shù)據(jù)的需求,可以丟棄這些數(shù)據(jù),直接回應(yīng)Pong,注意,這個(gè) 回應(yīng)只包含“Pong”字符串,無需包含其他html標(biāo)簽。

AuthScriptPathFragment是用戶認(rèn)證腳本,實(shí)現(xiàn)的是第10步的功能,這個(gè)腳本它通過GET方式接受7個(gè)傳入?yún)?shù):stage、ip、 mac、token、incoming、outcoming和gw_id。其中stage的值是login,ip是客戶端的ip,注意不是AP Getwap的ip;mac是客戶端的網(wǎng)卡物理地址,token就是你在認(rèn)證腳本生成并返回給客戶端的;incoming和outcoming用于流量控 制,默認(rèn)值為0;gw_id同上。如何識(shí)別用戶登錄成功,通過mac和token吧,LoginScriptPathFragment登陸腳本在用戶登陸 成功后需要記錄用戶的mac和token,然后在此處驗(yàn)證,如果匹配,回復(fù)Auth: 1,否則,回復(fù)Auth: 0。另外,這個(gè)腳本也是心跳腳本,每隔一段時(shí)間Wifidog會(huì)自動(dòng)訪問,如果用戶使用時(shí)間超過限制或流量超過額度,服務(wù)器可以及時(shí)回應(yīng)Auth: 0結(jié)束用戶的訪問。另外需要注意的是,回應(yīng)同樣無需包含html標(biāo)簽,另外,在Auth后的冒號(hào)和0/1之間,有一個(gè)空格,缺少這個(gè)空格也會(huì)導(dǎo)致出錯(cuò)。

在配置Wifidog的配置文件wifidog.conf是,配置腳本的配置項(xiàng)都必須以“?”結(jié)尾,否則以GET方式傳遞的QueryString會(huì)因Url缺少問號(hào)訪問錯(cuò)誤的腳本。

看到了吧,僅僅5個(gè)簡單腳本,就可以實(shí)現(xiàn)利用Wifidog的Portal認(rèn)證,當(dāng)然,這過中還可以有很多應(yīng)用尚未發(fā)掘,比如流量控制、帶寬控制、結(jié)合 Radius服務(wù)器實(shí)現(xiàn)認(rèn)證等,你的開發(fā)也可以更上一層樓,實(shí)現(xiàn)更多功能。不過筆者還有一個(gè)建議,在登錄頁面除了用戶名和密碼意外,最好加個(gè)驗(yàn)證碼,防止 不懷好意之人暴力破解。

這樣,你只需要一個(gè)免費(fèi)的空間,甚至是簡單的百度云、新浪SAE等,就可以實(shí)現(xiàn)一個(gè)認(rèn)證服務(wù)器;有的人可能還會(huì)問,能不能把這些腳本集成到路由器當(dāng)中,我 的回答是能,只要你的腳本的功能不多,問題應(yīng)該不大,但是這么做的風(fēng)險(xiǎn)比較大,路由的負(fù)載比較高,導(dǎo)致路由的運(yùn)行會(huì)很不穩(wěn)定,甚至經(jīng)常死機(jī),這也是筆者親 身實(shí)踐的結(jié)果,所以筆者不建議這么做。

最后啰嗦提醒的是,WiFidog是使用iptables基于三層協(xié)議工作的,所以使用Wifidog的結(jié)果是,不僅是Wifi接入需要Portal認(rèn) 證,有線接入同樣需要認(rèn)證。避免這種情況最簡單的做法是設(shè)立mac白名單。可能有的人又會(huì)問,能不能做到僅是Wifi接入需要認(rèn)證,有線接入的無需認(rèn)證, 有的人可能想更上一層樓,能不能開兩個(gè)Wifi,僅其中一個(gè)Wifi需要認(rèn)證,另一個(gè)Wifi和有線網(wǎng)絡(luò)不需要Portal認(rèn)證,我的回答是能,至于具體 做法,以后再介紹。


總結(jié)

以上是生活随笔為你收集整理的Wifidog 认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。