基于IPTABLES的网络计费系统的设计
2009-07-13周喜平姜斌
周喜平 姜 斌
[摘要]以Iptables作为网关来实现中小型局域网的内网机器上网,将内网用户的帐号和IP地址绑定,通过修改Iptables的规则以及修改Netfilter的代码来控制内网用户上网;系统在计费的同时还可以实现域名和关键字过滤以及内网的防火墙,实现成本低,安全系数较高。
[关键词]Iptables网络计费
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1110090-01
一、引言
计费管理是网络管理的五大功能之一(故障管理、计费管理、配置管理、性能管理、安全管理)。常见的计费管理的实现方法有三种[1]:通过路由器进行计费、通过代理服务器进行计费和基于监听的计费。本文采用类似第二种计费实现方法即基于网关的实现方式。基于网关的实现方式较之基于代理服务器的实现方式的基本原理是相似的,就是在内网和Internet
网络之间建立网关(类似于代理服务器的功能),通过这个网关来实现内网用户访问Internet。所不同的是可以把网关设置成“透明网关”,即内网用户只要设置网关的IP地址就可以通过网关来访问Internet,而无需像代理服务器的实现方法那样过多的设置其他参数。本文以Linux系统中的Netfilter来实现“透明网关”,通过Netfilter和Iptables来完成内网用户访问Internet,同时实现对这些用户的上网控制和计费。
二、设计思路
Netfilter是Linux内核的一个完善的且功能强大的防火墙子系统,Iptables 是与最新的版本Linux 内核集成的IP信息包过滤系统,或者可以简单理解为Netfilter是Linux内核的一部分,而Iptables则是Linux提供给用户的一种工具,通过这种工具可以很好的处理内核中的防火墙的各种信息处理规则,利用Netfilter和Iptables可以实现NAT(Network Address Translation)。NAT即网络地址转换,当网关被分配一个或者多个合法的Internet IP地址后,通过NAT技术使发给其中某一个IP地址的包转发至内部某一内网用户的上网设备上,然后再将该内网用户的响应包伪装成该合法IP发出的包,这样内网用户即可访问Internet。
所有上网的内网用户访问Internat之前必须通过认证服务器的鉴别,通过设置NAT的PREROUTING链的规则[2],使得所有没有通过鉴别的用户重定向到认证服务器,而通过鉴别的用户,相应绑定的IP地址被写入Iptables的规则中,这个IP是允许访问Internat,而且不用被重定向到认证服务器。
当用户不想上网时,则从Iptables的规则中删除IP地址,这个工作可以由单独的刷新在线信息页面完成。
三、设计要点
(一)实现内网用户访问Internet
首选应该配置网关服务器,使得网关能够访问Internet,建议作为网关的服务器最好装配两块网卡,一块用来连接Internet(以下简称外网,用eth0代替),一块用来连接内网(用eth1代替)。在确保Netfitler和Iptables被安装完整后,就可以配置Iptables来实现NAT,建立可执行脚本:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F;
iptables -t nat -F;
iptables -t mangle -F;
以上脚本适合IPV4,通过执行以上脚本,使得任何内网访问eth1的请求包,都被转发到eth0。
(二)控制上网用户
确保内网用户能够访问外网后,在脚本中增加以下指令:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 196.188.1.9:80
其中IP地址196.188.1.9是认证服务器的IP地址。这里必须确保认证服务器已经设置好web认证服务,并且能够实现用户的基本信息认证,包括用户帐号、密码、上网在线时间、计费方式、费率等。
这条指令使所有访问外网的请求都被转发到196.188.1.9:80的认证页面。用户输入合法的帐号和密码后,调用下面的指令来完成该用户访问外网:
iptables -t nat -I PREROUTING s ipaddr -j ACCEPT
ipaddr是该上网帐号对应的IP地址,当然你好可以通过下列指令来邦定用户的MAC地址:
iptables -t nat -I PREROUTING s ipaddr -m mac --mac-source macaddr -j ACCEPT
macaddr是IP地址对应的计算机的MAC地址。
用户验证合法后,在客户端要做的另外一件事是弹出认证合法的“在线窗口”,通过该窗口上的“断开连接”按钮来告诉计费服务器用户下线时间,“在线窗口”通过刷新页面来告诉服务器用户是否在线,若用户点击“断开连接”按钮,或者规定时间内没有刷新在线信息,则服务器认为用户中断上网,则调用如下指令来阻断用户上网:
iptables -t nat -D PREROUTING -s ipaddr -j ACCEPT
(三)计费设计
本系统采用Java技术的J2EE开发标准来完成,web和应用服务器采用weblogic9.2,数据库采用oracle10g。用户的基本信息保存在数据库中,可以通过管理员增加用户的基本信息,也可以通过用户注册,管理员审批的方式。对于用户在线信息的维护,则是采用一个session的数据库表,每次用户端发送在线信息过来后,更新session中对应的信息,若发现某些用户的session信息过期,则清除session信息,同时删除该用户对应的Iptables规则。
采用Java来完成Iptables规则的修改是比较简单的事情,调用Runtime. getRuntime().exec(Stirng command)方法,就可以完成规则的增加和删除,因为在安装了netfilter 的linux中Iptable本身就是可执行的脚本工具。
四、结束语
本系统经过试用后,发现还存在一些问题,比如“在线窗口”的弹出影响了客户的使用体验,另外就是认证页面请求的转发只是web请求的转发,对于非HTTP请求的包会在不通过认证的情况下通过Iptables,这些是该系统下一步要改进的问题。
参考文献:
[1]张孟雄,校园网计费系统的实现途径探讨,空军雷达学院学报,2000.
[2]宋光惠等,基于IPTABLES的Web认证系统的实现,中国信息化教育,2009.