047
PHP基于Linux的应用层网关系统设计样本
(样本只提供该系统的基本情况介绍,若需要完整的设计和论文,建议您购买本系统,凡是购买本站系统的,本站均根据您的要求,把系统上的开发信息,题目等修改成符合您的要求)
本设计包含内容:源代码+毕业论文
论文大概:
1
2 基于Linux的应用层网关系统设计
2.1.1 摘要
应用层的网络管理是很多中小型企业在信息化的过程中所面临的难题之一。企业的管理者要保证企业的网络资源用于正常的工作而不是被滥用,除了从制度方面进行限制之外,一个应用层网络管理系统是不可缺少的。本文在对用户需求进行分析的基础上,设计和实现了一个基于GNU/Linux和自由软件的应用层网关系统,并制作了一套基于B/S结构的网关管理软件对网关过滤规则进行管理和维护。本文力求在理论研究的基础上对应用层的网络管理问题给出一种灵活、有效、可靠且低成本的解决方案。
关键词:应用层网关,GNU/Linux,iptables,layer7
2.1.2 Abstract
Network management of application layer is one of the difficult
problems for the medium and minor enterprise informatization. The
administrators of enterprises want to make sure the network
resources of enterprises are used in the work instead of
abusing, so they must limit from the institution, and a network
management system of application layer is indispensable. This text
has designed and realized an application layer gateway that based on
GNU/Linux and other free software, make network gateway management
software, which based on B/S structure to manage and maintain filter
rule. This text tries to provide a flexible, valid, reliable and low
cost solution for resolve the problem of application layer network
management based on theoretical research.
Keywords: Network gateway of application layer,
GNU/Linux、iptables、layer7
2.1.3 目录
绪论 1
1系统目标 2
2系统分析和设计 3
2.1系统分析 3
2.2系统设计 4
2.2.1国内外研究综述 4
2.2.2原型系统 4
3所涉及的技术介绍: 6
4系统具体实现 13
4.1系统原理解析 13
4.2安装配置步骤 14
4.2.1安装GNU/Linux操作系统 14
4.2.2获取软件包 14
4.2.3给内核和netfilter打补丁 15
4.2.4编译、并测试netfilter模块 17
4.2.5编译安装MySQL 18
4.2.6编译安装Apache 21
4.2.7编译安装PHP 22
4.2.8测试安装结果 24
4.3核心代码及分析 25
4.3.1代码功能概述 25
4.3.2登陆模块及验证码 26
4.3.3主界面 30
4.3.4各模块界面 32
4.3.5连接数据库的公用文件代码 35
4.3.6规则数据库结构 36
4.3.7关于文件操作 39
5系统测试 41
5.1测试环境 41
5.2测试用例 41
5.3测试结果 44
5.4存在的问题 44
6总结 46
致谢 47
参考文献 48
附录 49
2.1.4 绪论
一直以来,计算机网络中的防火墙(firewall)或者网关(gateway)对于网络信息的过滤和控制主要体现在对来自或者发往特定端口或者特定IP地址的信息进行匹配。这样的基于网络层的控制在过去很长一段时间是有效的,因为在这个时期出现的大多数的网络应用程序是使用固定端口的,并且服务器的IP地址常常是固定而且明显的。随着网络的发展,很多新的应用程序不再使用固定的端口,服务器和客户机的角色逐渐混淆,服务器的IP地址常常有多个而不是固定在一个地址上。这时候原来的基于网络层的控制就显得不够灵活,甚至完全无法工作。本文通过对NetFilter及相关程序的二次开发,实现了一个快速的、有效的、易管理的应用层网关系统,力求给应用层网络管理提供一种比较好的解决方案。
2.1.5 1系统目标
可以对客户端能否使用各种网络软件(例如QQ,BT等)进行控制。
可以对客户端访问的网址(URL)进行基于字符匹配的过滤。
控制的方法是简单的,规则是容易维护的,而且具有很好的灵活性。无论使用者是否有专业知识都能进行基本的维护。
系统应具有良好的可扩展性,可以通过添加新模块的方式来进行功能扩展。
提供身份鉴别功能,进行规则维护需要提供适当的身份信息。
整个系统有效、安全、易管理。
2.1.6 2系统分析和设计
2.1.6.1 2.1系统分析
系统目标1和2中的要求实际上就是对于应用层数据流的监控。对于数据流的监控一般有两种方式:网关监控和旁路监控。旁路监控多用于监测,很少用于控制。本系统使用的是前者。也就是说,我们的系统是以网关形式存在的。如果需要,它也可以提供DHCP,NAT等服务。现在市场上出售的主流防火墙和路由器等设备,通常只支持网络层的监控,也就是基于IP地址和端口的监控。对于应用层的监控,现有的几种产品的核心技术都是一样的,就是使用基于Linux系统的netfilter/iptables模块,外加上它的layer-7补丁和其他一些补丁。我们这里也是一样的。这个基本架构完全可以实现目标1和2的要求。
系统目标3则提出了一个新的问题,即对规则列表的维护。Iptables规则对于非专业人员来说是很晦涩难懂的,更不要说熟练的编写整个规则列表了。所以我们需要编写一个简单明了而又灵活的规则维护和管理系统。市场上的产品对于这个问题的解决有两种模式:C/S和B/S,即使用客户端软件与网关通讯,或者在网关上安装web服务器和相应的脚本解释器,编写web系统来实现对规则的管理。这两种方法各有千秋,一般来说,使用C/S模式的系统安全性和效率都要好一些,但是灵活性不够好。而web系统的灵活性则是非常好的,只要注意编码规范,一样可以保证系统的安全性和效率。本系统中我们使用B/S模式。
系统目标4要求了系统的可扩展性,实际上这个特点是由netfilter模块来保证的,它本身是个开放的系统,可以自己编写并添加模块进去。而且网上有很多模块提供下载,保证了系统是可以根据需求被扩展的。
系统目标5可以通过web系统的认证模块来实现。
如果严格做到1~5,那么系统目标6也就实现了。
2.1.6.1.1
2.1.6.1.2
2.1.6.1.3 4.3.2登陆模块及验证码
登陆界面如下图:
其中的验证码是利用PHP的GD模块生成的图片,其中还加入了干扰象素。相关主要代码如下:
<?php
session_start();
while(($Randnum=rand()%10000)<1000);
$_SESSION['$Randnum']=$Randnum;
Header("Content-type:
image/gif");
srand((double)microtime()*1000000);
$im =
imagecreate(60,20);
$black =ImageColorAllocate($im,
0,153,204);
$white =ImageColorAllocate($im,
255,255,255);
$gray =ImageColorAllocate($im,
200,200,200);
imagefill($im,68,30,$gray);
//将四位整数验证码绘入图片
//imagestring($im,
5, 15, 2, $HTTP_GET_VARS['authnum'], $white);
imagestring($im, 5,
15, 2, $_SESSION['$Randnum'],
$white);
for($i=0;$i<300;$i++)
//加入干扰象素
{
$randcolor =
ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 ,
$randcolor);
}
ImagePNG($im);
ImageDestroy($im);
?>
这里我们使用了session来储存由rand函数产生的随机数,以便在下面的过程中与用户的输入进行校验。
用户的提交由login.php来进行接收和处理。
[root@localhost
strFilter]# cat
login.php
<?
require_once('conn.php');
session_start();
$username=$_POST['n'];
$password=$_POST['p'];
$CHK=$_POST['CHK'];
if
($_SESSION['$Randnum']==$CHK){
$exec="select * from user where
name='".$username."'";
if($result=mysql_query($exec))
{
if($rs=mysql_fetch_object($result))
{
if($rs->pass==$password)
{
if
($rs->level=="1")
{$_SESSION['admin']="1";}
else {$_SESSION['admin']="0";}
$_SESSION['username']=$username;
$_SESSION['password']=$password;
//
header("location:index.php");
echo
"<script>alert('登陆成功');location.href='main.php';</script>";
}
else
{
$_SESSION['username']="";
$_SESSION['admin']="";
echo
"<script>alert('密码校验出错!');location.href='index.html';</script>";
}
}
else
{
$_SESSION['username']="";
$_SESSION['admin']="";
echo
"<script>alert('用户名不存在!');location.href='index.html';</script>";
}
}
else
{
$_SESSION['username']="";
$_SESSION['admin']="";
echo
"<script>alert('无法连接数据库!');location.href='index.html';</script>";
}
}
else
{
$_SESSION['username']="";
$_SESSION['admin']="";
echo
"<script>alert('校验码错!');location.href='index.html';</script>";
}
?>
以上是login.php的代码。用户通过index.html将数据post过来,所以我们在这里使用$_POST['xx']数组来接收。如果登陆成功,用户的基本信息将被写入$_SESSION['xx']数组,否则该数组会被清空。
2.1.6.1.4 4.3.3主界面
登陆成功后的界面如下:
下面摘录操作指南来对各个项目进行说明:
1、修改密码
在提供了原密码和适当的新密码的情况下,可以修改密码。
2、规则维护
这是系统的核心部分,页面上部的表显示了目前数据库中所存放的规则的内容。中间是3个链接:
“写入规则文件”就是把数据库中存放的规则按照iptables的语法写入脚本文件,系统会按照预先设定的时间间隔去执行这个脚本文件。
“手工编辑规则文件”则是提供一个浏览并且编辑程序所产生的脚本文件的平台,使我们的程序具有比较好的灵活性。
“立即执行规则文件”可以使当前的规则文件立即执行一次,以便立即查看执行效果。
3、高级维护
其实就是“手工编辑规则文件”。如果在这里把文件内容编辑乱了,还可以回到规则维护界面重新“写入规则文件”。
4、日志分析
根据访问记录,生成简单的统计图表。
5、系统选项
可以在这里设定一些系统参数。这些参数在程序中被广泛使用。
6、退出
清空登陆信息,推出系统。
2.1.6.1.5 4.3.4各模块界面
修改密码:
规则维护:
高级维护:
日志分析:
系统选项:
2.1.6.1.6 4.3.5连