首页>比特动态>多功能IP代理服务器用户管理系统的方案设计
多功能IP代理服务器用户管理系统的方案设计

    随着因特网技术的迅速发展 ,越来越多的计算机连入了因特网。 目前已经联系着 160 多个国家和地区 ,上网的计算机已超过 5000 万台。它促进了信息产业的发展 ,并将改变人们的生活、学习和工作方式 ,对很多人来说 ,因特网已成为不可缺少的工具。而随着因特网的发展也产生了诸如 IP 地址耗尽、网络资源争用和网络安全等问题。一般情况下 ,用户上网无非是专线上网和通过 ISP 服务商拨号上网。 前者上网的用户需要一个专用的能连入因特网的 IP 地址 ,而且这个地址是固定不变的 ;后者的地址则是在 ISP 服务方动态提供的临时能的方式如下 :当一个内部主机向外发包时 ,IP 代理服务器在转发此 IP 包之前 ,用自己的 IP 地址替换此包的源 IP 地址 ,并临时产生一个本机端口号来替换此包的 TCP/ IP 头中的源端口号 ,同时代理服务器会记录下此替换 ,当外部的返回包到来时(送往服务器主机的临时端口) ,代理服务器能自动识别它 ,将此返回包的目的 IP 地址和端口号替换成内部主机的地址和端口号 ,然后发回给内部主机。通过这种方式 ,实现的代理功能 ,这种方式我们称之为 IP 代理服务。其工作原理图如下 :


多功能IP代理服务器用户管理系统的方案设计


    客户端基本不用做太多的设置。2


    式 ,一种是 www 代理 ,另一种是 IP 代理。


    IP 代理服务器工作在 IP 层 ,适用于 TCP/ IP 包 ,能使没有 Internet,IP 代理服务也是有缺点的 ,主要是在管理用户上机方面不但是


    地址的主机通过有 Internet 地址的主机访问 Internet。其实现代理功www 代理服务器 ,它只能根据 IP 报文进行访问控制 ,而不能对用如户进行身份认证 ,从而导致无法为同一计算机的每个用户分别计费 , 并且安全性策略不能涉及到客户端的不同用户。所以 ,需要为 IP 代理服务器设计一个用户的管理系统 ,包括两个子系统 ,其一 :认证管理系统 ;其二 :记账收费系统 ,这其中首先要解决的就是认证问题。


    2  认证管理问题


    认证(Authentication) 又称鉴别、确认 ,它是证实某人或某事是否名副其实或是是否有效的一个过程。认证用以确保数据的真实性 , 阻止对手的主动攻击 ,如窜改、冒充等。认证往往是许多应用系统中安全保护的第一道设防 ,因而是极其重要的。在本系统中 ,认证主要是为了确认用户的身份的真实性和有效性 ,以弥补基于包过滤的 IP 代理只能管理 IP 而不能进行用户管理的不足。


    认证的基本思想是通过验证称谓者(人或事) 的一个或多个参数的真实性和有效性 ,来达到验证称谓者是否名副其实的目的。其常用的参数有口令、标识符、密钥、信物、指纹、视网纹等。就本系统来说 ,使用基于口令的身份认证即可达到我们的管理目的了。


    如果使用普通的口令验证机制 ,即用户的口令以口令表的形式存储。当用户要访问系统时 ,系统提示用户输入口令。用户输入口令后 ,系统将用户输入的口令和其存储的口令相比较。若相等 ,则确认用户身份有效 ,接受访问。若不相等 ,则确认用户身份无效 ,拒绝访问。这种简单的口令验证机制中存在以下问题 :


    2. 1  用户的口令以明文形式存储在系统中 ,容易泄漏。系统管理员可以获得整个口令文件 ,一些精心策划的用户利用系统的漏洞也可获得别人的口令。


    2. 2  由于用户向系统输入的是明文形式的口令 ,所以敌手可以在用户终端到系统的线路上截取用户的口令。


    2. 3  这种口令验证机制对系统和用户是不平等的 ,这里只有系统强制性的验证用户的身份 ,而用户无法验证系统的身份。当用户请求访问系统时 ,终端屏幕上显示出“请输入口令:!”,这时用户一般会不假思索的从键盘上输入自己的口令 ,但这可能是一个骗局。是对手为了获取用户口令而冒充系统的骗局 ,因此 ,不仅允许系统验证用户的身份 ,也应平等的允许用户验证系统的身份。


    所以 ,基于上述的考虑 ,我们可以使用一种改进的口令验证机制 ---用单向函数加密口令进行用户的身份认证。它主要是针对普通的简单口令验证机制所存在的一个缺点。这种机制就是让用户口令在系统中以密文形式存储。为了安全 ,这种加密应使从口令的密文中恢复出口令的明文在计算上是不可能的。即口令一旦加密 ,将永不可以明文形式在任何地方出现。这就要求对口令加密的算法是单向的 ,只能加密 ,不能解密。用户访问系统时输入自己的口令 ,系统对其口令用单向函数加密 ,并与存储的样本比较。若两者相等 ,便接受其访问 ,若不相等 ,便拒绝其访问。


    具体到本系统中身份认证的口令 ,可以采用一个强的密码算法作为单向函数。因为设计中的 IP 代理服务器是工作在 Linux 系统中的 ,所以 ,相应的 ,也可以选用 DES 加密口令。以用户口令的前 8 个字符为密钥 ,不足 8 位的用传统的 crypt () 函数把用户口令填充到 8 个字符 ,用每个字符的 7 位形成一个 56 位的 DES key ,对一个常数进行加密 ,经过 25 次迭代后将所得 64 比特密文变换成 11 个可打印字符作为口令的密文 ,存储于口令文件中。为了提高加密强度还将 DES算法中 E 置换部分由固定的改为由随机数来选定 ,从而使用标准 DES 器件不能破译。


    针对这个系统 ,设计成采用客户机/ 服务器的模式 :身份认证作为一个系统程序(daemon) 运行在服务器端的指定端口 ,监听客户端用户的请求。在动态主机服务器分配了 IP 给子网内的机器后 ,用户在客户端运行相应的程序(client 程序) 提出他的上网请求 ,并且他提交了他的用户名和口令 ,该请求与服务器通信也是通过先前的指定端口。如果在服务器端 ,认证的 daemon 程序监听到了客户端通过指定端口发送过来的请求 ,则认证程序 daemon 生成一个子进程来处理该请求 ,同时父进程继续监听。子进程则接受客户端的用户提交的用户名和口令 ,然后该子进程就对所收到的用户名和口令查找存储在服务器端的表项 ,首先找用户名是否存在 ,不在则再返回要求认证的信息 ,存在则就传送过来的口令调用函数进行 DES 加密后和表项中的对照 ,相符合后 ,子进程可以通过调用命令来转入 IP 代理的转发过程 ,同时对该用户进行上网的流量统计。当用户不使用客户端的机器后 ,他也可以在客户端通过 client 程序取消他的上机。考虑到 DHCP 分配 IP 是有时间限制的 ,所以 client 的程序也应该有个定时的过程 ,这个时间可以以 DHCP 服务器分配 IP 时的时间为准。在定时器到了分配 IP 的时间后 ,应该让用户重新认证他的身份。


    (原理流程图如下)


    结合设计时所用的各个系统过程 ,动态分配 IP 过程、IP 代理过程 ,以及所用到的各个软件 ,DHCP 和 IPChains ,最后按照上述思想 , 在服务器端运行的服务器程序(daemon) 工作在指定端口监听客户端的 IP 请求并处理 ,在客户端的客户端软件(client) 运行后 ,在指定端口与服务器通信来向服务器发送用户名和口令以及接受来自服务器反馈的消息 ,同时 daemon 程序启动定时器 ,当到了时间(IP 的租用时间) 后 ,服务器端向 client 端发出重新认证身份的请求报文 ,client 接受后 ,自动断开与 daemon 的连接 ,并弹出登录窗口 ,以便用户再次进行身份认证。


    上面描述的只是对用户上机时的身份确认的解决 ,即身份认证 , 还有对用户的管理问题 ,比如说可上机用户身份建立的账号管理和密码管理这两方面也是认证管理系统需要解决的。对用户的账号的创建管理可以在服务器端进行 ,通过命令直接建立账号 ,加入到/ etc/ passwd 文件中 ,并且让这些用户属于一种组(group) ,它们的权限都是不能访问服务器的文件的(具有最小权限) 。


    用户口令(密码) 的安全性在上文已提及 ,采用Linux 系统对用户的口令管理方式 ,其加密过程前文已有叙述。目前主要是用户的密码的更改问题 ,通过命令直接建立账号后 ,口令我们一般都是设置成一个默认的初始密码(比如说 12345678) ,然后 ,具有上网权限的用户在他初次上机时更改他的密码。这一点在客户端的 client 程序中也应该有所反映。用户在客户端提出更改口令的请求 ,服务器端的 daemon 监听到后 ,接受其请求 ,返回信息要求其输入原始密码和他想变更的新密码 ,用户输入后 ,服务器端程序对调用口令更改函数更改其口令 ,至此用户的口令更改完成。


    用户认证管理系统的设计时 ,调用的各种认证函数需要用到 Linux系统的 PAM 库 ,它是可插入的认证模块 (并不是 Linux 指的模块) 用于实现应用程序的认证机制 ,程序员或管理员不需要重新编写或编译程序就可以改变认证机制。它为系统管理进行用户确认提供广泛的严密控制 ,本身不是一个工具 ,但提供了一个前端函数库(一个 API) 用来确认用户的应用程序。PAM 库可以用一个单独的文件/


    etc/ pam. conf 来配置 ,也可以通过位于/ etc/ pam. d/ 下的一组配置文件来配置。


    PAM 定义了四种类型的模块。auth 模块提供实际的认证过程 , 比如提示口令输入并检查输入的口令 ,设置保密字如用户组或 KER BEROS 通行证。account 模块负责检查并确认是否可以进行认证(比如 ,账户是否到期 ,用户此时此刻是否可以登入 ,等等) 。password 模块被用来设置口令也就是更改密码。一旦用户认证通过 ,session 模块将被用来做使用户使用其账户前的初始化工作 ,如安装用户的


    HOME 目录 ,用户的电子邮箱 ,等等。


    在 PAM 中 ,authentication(认证) :包括‘pam-authenticate( ) ’来认证


    用户‘, pam-setcred( ) ’来设置刷新和销毁用户的 credentials。Account management :包括‘pam-acct-mgmt( ) ’来检查用的账号是否还有效。可以被用来检查用户是否超时或账号是否过期 ,Password management 包括‘: pam-chauthtok( ) ’用来修改密码。程序通过调用‘pam-start( ) ’和 ‘pam-end( ) ’来开始或结束一次 PAM 事务。‘pam-get-item ( ) ’和 ‘pam-set-item( ) ’读写有关事务的信息。可以用‘pam-strerror( ) ’来取


    得错误信息。Session management 包括‘pam-open-session ( ) ’和‘pamclose-session( ) 用于对话过程的管理。例如 ;可以用来纪录用户的连接时间。一次 telnet 过程实际上也是一个 session。


    3  记账收费问题


    作为一个局域网的上机环境 ,对不同的用户进行记账收费也是必要的。


    在认证管理一节中 ,我们构造了一个上网系统 ,它是以 IPChains 为基础的 ,IPChains 可以设置对符合规则的包的信息进行记录 ,这可以通过 - l 选项来实现 ,例如 ,要记录从 202. 199. 249. 0/ 24 出发的所有被转发的包的情况 ,使用 :


    ipchains - A forward - s 202. 199. 249. 0/ 24 - l - j ACCEPT


    然后在 dmesg 中就可以看到核心记录的包的信息了。然后服务器端的记账程序在对 dmesg 文件进行分析处理 ,根据用户的信息 ,上网时所分配的 IP 地址 ,以及他所上网的地址流量 ,进行计费。  整个计账系统分为四个模块 :Free IP 维护、数据采集、数据分析与处理、结果查询 ,其原理流程图如下 :


多功能IP代理服务器用户管理系统的方案设计


    Free IP 是接入 CERNET的用户 ,可免费访问 Internet 的不完全连续的 IP 地址段 ,由多个包含起始 IP 地址和终止 IP 地址的地址段组


    成。如 :162 . 105. 0. 0 ?162. 105. 255. 255 ,166. 111. 0. 0 - 166. 111.


    255. 255 等 ,基本包括了国内的全部站点。但随着 Internet 的发展 ,会不断地有所变化。计费时 ,用户访问的目的地址如果不在 Free IP 地址段中 ,即表示访问国外站点。所以 ,必须能够对 Free IP 地址段进行维护。


    代理服务器系统将每次数据传送时的详细信息记录下来并存储到日志文件中。数据采集的工作就是在指定时间 ,从日志文件中将跟计费有关项目的数据采集作为原始信息。数据分析和处理是计费系统中的关键模块。原始数据是根据日志文件产生的 ,有许多和计费无关的记录 ,必须首先将其滤除 ;其次 ,结合 Free IP 地址段 ,分别按用户统计其国内外流量 ,并计算相应费用 ;最后 ,按星期生成统计信息。结果查询部分是实现上网用户对最后结果的查询和打印 ,这是最后的工作 ,设计成基于网页的方式 ,实现是应用 CGI 语言编写。


    用户在客户段通过 www 方式查询。