佐须之男 发布的文章

在wifidog的login参数中加入客户端MAC地址

用户在连接到需要认证的wifi上之后,会被wifidog 的login 协议重定向到:

http://auth_server/login/?gw_id=xxx&gw_address=xxx&gw_port=xxx&url=xxx

如果我们想添加一个mac 地址,该如何实现?
添加网关的MAC地址直接可以改成:

http://auth_server/login/?gw_id=xxx&gw_address=xxx&gw_mac=xxx&gw_port=xxx&url=xxx

网关的MAC 地址获取很简单用ioctl 就可以实现,这里不细说,另一种办法是直接在配置页面把网关MAC 配置进wifidog.conf,给全局变量config 添加一个字段成员即可,也很简单。

那么添加当前客户端的MAC 地址又该如何实现?
在http.c 文件里找到

  /* Re-direct them to auth server */
  char *urlFragment;
  safe_asprintf(&urlFragment, "%sgw_address=%s&gw_port=%d&gw_id=%s&url=%s",
         auth_server->authserv_login_script_path_fragment,
         config->gw_address,
         config->gw_port,
         config->gw_id,
         url);
   debug(LOG_INFO, "Captured %s requesting [%s] and re-directing them to login page", r->clientAddr, url);
   http_send_redirect_to_auth(r, urlFragment, "Redirect to login page");
   free(urlFragment);

lighttpd 已经帮我们拿到了r->clientAddr,这个其实就是当前客户端的IP 地址,然后我们通过读取arp 表/proc/net/arp 来查找r->clientAddr 对应的MAC,不过wifidog 已经有现成的函数arp_get直接得到MAC 地址,所以我们直接将上述代码修改成:

  /* Re-direct them to auth server */
  char *urlFragment;
  char *client_mac = arp_get(r->clientAddr);

  if(client_mac == NULL)
         return;

  safe_asprintf(&urlFragment, "%sgw_address=%s&gw_port=%d&client_mac=%s&gw_id=%s&url=%s",
         auth_server->authserv_login_script_path_fragment,
         config->gw_address,
         config->gw_port,
         config->gw_id,
         url);
   debug(LOG_INFO, "Captured %s requesting [%s] and re-directing them to login page", r->clientAddr, url);
   http_send_redirect_to_auth(r, urlFragment, "Redirect to login page");
   free(urlFragment);

本文章由 http://www.wifidog.pro/2015/03/04/wifidog-login%E6%B7%BB%E5%8A%A0%E5%AE%A2%E6%88%B7%E7%AB%AFmac%E5%9C%B0%E5%9D%80.html 整理编辑,转载请注明出处

wifidog 报错iptables failed

报错如下:
(fw_iptables.c:116) iptables command failed(1): iptables -t mangle -F WiFiDog_br-lan_Trusted
(fw_iptables.c:116) iptables command failed(1): iptables -t mangle -F WiFiDog_br-lan_Outgoing
(fw_iptables.c:116) iptables command failed(1): iptables -t mangle -F WiFiDog_br-lan_Incoming

这是在wifidog 刚启动时,firewall 规则重置出现的log,在函数fw_destroy 里出现,因为这时WiFiDog_br-lan_Trusted,WiFiDog_br-lan_Outgoing,WiFiDog_br-lan_Incoming规则链还没有建立,所以iptables 清空(-F)失败,这段错误并不会影响wifidog正常执行,所以不用特别在意这段错误。

本文章由 http://www.wifidog.pro/2015/03/04/wifidog-iptables%E6%8A%A5%E9%94%99.html 整理编辑,转载请注明出处

wifidog在防火墙中的流程

1,iptables 的四链五表,这里就不多说了,自己可以参看相关资料。

2,wifidog在四链中的工作流程:

数据包---->mangle--->进入路由表前/
1)--->白名单MARK 01
2)--->认证的MAC,MARK 02
3)---->非认证不MARK ------>

-->nat--->进入路由表前-->
1)--目的IP是本地----放行
2)--目的IP非本地-----mark 02,mark 01--->放行
3)---无mark-->目的认证服务器--->放行
-->目的白名单--->放行
-->重定向80到2060

Filter----->非本地----
1)--->目的认证服务器--->放行
2)--->mark 254(黑名单)--->拦截
3)--->mark 01 02 ---->放行
4)--->非mark ---->只认过53 67 443端口

本文章由 http://www.wifidog.pro/2015/03/04/wifidog-%E9%98%B2%E7%81%AB%E5%A2%99%E6%B5%81%E7%A8%8B.html 整理编辑,转载请注明出处

wifidog简介

WiFidog简介
WIFIdog是一种新的认证方式,这种认证方式的优势在于安全性高,不容易被破解验证。

  1. 客户端发出初始化请求,比如访问www.baidu.com
  2. 网关的防火墙规则将这个请求重定向到本地网关的端口上。这个端口是Wifidog监听的端口。
  3. Wfidog提供一个HTTP重定向回复,重定向到Web认证页面,重定向的Url的Querystring中包含了Gateway的ID,Gateway的FQDN以及其他的信息。
  4. 用户向认证服务器发出认证请求。
  5. 网关返回一个(可以是自定义的)splash(也称作“登录”)页面。
  6. 用户提供他的凭据信息,比如用户名和密码。
  7. 成功认证的话,客户端将会被重定向到网关的自己的web页面上,并且带有一个认证凭据(一个一次性的token)
  8. 用户就是用获取到的凭据访问网关。
  9. 网关去认证服务器询问token的有效性。
  10. 认证服务器确认token的有效性。
  11. 网关发送重定向给客户端,以从认证服务器上获取 成功提示页面,重定向到
    http://portal_server:port/portal_script 这个位置。
  12. 认证服务器通知客户请求成功,可以上网了。

本文章由 http://www.wifidog.pro/2015/03/03/wifidog%E7%AE%80%E4%BB%8B-3.html 整理编辑,转载请注明出处