Chinaunix

标题: 【原创】使用LAMP开发一个简易的Squid集中管理软件squid_front [打印本页]

作者: duanjigang    时间: 2009-05-12 22:42
标题: 【原创】使用LAMP开发一个简易的Squid集中管理软件squid_front
squidfront已经在sourceforge注册开通了开源项目,地址是:
https://sourceforge.net/projects/squidfront/
最新版在此处下载,欢迎大家提供意见,并参与开发。!!

##############################################################

修改历史:
2009-06-10 22:27 问题:myauth和ipuser中的打印语句忘记关闭了,会导致验证出错。
  解决方法:
                mysql_auth.c:173行,注释掉打印语句。
           ipuser/main.cpp:274行,的cout注释掉,166行的cout也注释掉
2009-06-12 添加文档说明,最新的使用文档在23楼。

################################################

好久没上坛子发帖了,今晚上来整理下前段时间的一个小作分享出来。php代码写的比较垃圾,不过功能勉强实现了,希望能对大家有用。开始!

引言
接触squid不多,只知道是作代理服务器用的一款开源软件,源代码没有仔细看,仅仅看了一部分ACL的介绍和外部验证程序,觉得挺好玩的,不过又发现Squid总要手动去修改配置,挺麻烦的,为什么不像mysql拥有mysql-front这款前端一样,为squid做一个squid_front程序,方便对squid进行配置和集中管理?于是,我就开始做这个Squid_front,其实做这个东西一开始的初衷是应别人要求,最后又中断不做了,钱没赚到,就把它拿出来给大家分享,不管做得好坏与否,如果能用得上,就参考下吧,总比我把它一直扔在电脑上强。
一开始最感兴趣的就是Squid对用户访问的控制,比如用户名,密码,源IP约束等,最后沟通又加上了有效期的限制,想实现一个用户在一个时刻只能登陆一个实例的功能,我实在没耐心看源代码,就没有做成,如果有朋友实现了,不妨把它加进去(我做了一部分尝试,最后失败了,加之最近比较忙,就没再继续做下去,做技术已经懒到这种地步了。)
功能
功能不算太多,逐条列举出来。
第一:对squid服务器进行集中管理,当然只是指Squid进程。
用户可以在系统中添加要管理的服务器,如图1:
总的服务器列表如图2:
第二:对每个squid服务器上的squid程序,进行用户管理,能够添加用户,登录密码,设置用户的有效期限,访问代理服务器的合法源IP地址,或者禁止某个用户使用代理功能。
在对用户进行管理的之外,还能查看当前squid进程的连接信息。
如下图为单个squid服务器的信息如图3
下图4是用户的添加过程:
和用户配置的修改(图5)
最后一个简单的功能,修改登录密码(图6):

[ 本帖最后由 duanjigang 于 2009-6-12 13:44 编辑 ]

1.JPG (48.65 KB, 下载次数: 139)

1.JPG

2.JPG (50.52 KB, 下载次数: 107)

2.JPG

3.JPG (67.74 KB, 下载次数: 109)

3.JPG

4.JPG (25.95 KB, 下载次数: 111)

4.JPG

5.JPG (26.04 KB, 下载次数: 109)

5.JPG

6.JPG (14.18 KB, 下载次数: 122)

6.JPG

source.rar

832.84 KB, 下载次数: 287


作者: duanjigang    时间: 2009-05-12 22:46
软件结构
结构很简单
Squid_front直接跟mysql数据库打交道,进行数据读取和配置信息读写。
有三个后台程序运行在每个squid服务器上,与squid一起协同工作,他们分别是:
Myauth:
修改myauth的源代码,在用户名和密码验证的基础上,对使用期限和禁止使用标志做了检查,算是一个加强版的myauth吧
Ipuser:
Squid自带的ipuser是对用户名和IP地址的验证,我做了部分修改,也是完成这个功能,另外还添加了对禁止标志位的检查,并更新用户的最近登陆时间,这样在界面上就能看都某个用户最近连接的时间。这个程序偷懒用得mysql++的库,所以如果要使用需要安装这个包。
Linkmon:定期从系统的netstat结果中筛检squid连接,更新到数据库中,如果数据库中某个连接已经过时,则删除该条记录,另外,如果配置发生改变,就会在事件表写一个事件,linkmon检测到得话,会自动调用system命令重新加载squid的配置。
作者: duanjigang    时间: 2009-05-12 22:47
数据库表说明
Squid的myauth模块对数据库和表做了可配置方式,个人觉得没必要这么做,表结构直接写死就行了。Squid_front的php代码中包含了squid.sql文件,可以直接导入到数据库中。
这里仅对每个表做简单说明。
t_event:
记录系统发生的改变,比如添加删除用户,修改用户信息,服务器信息等等操作时,就会在该表中写入一条flag为1的记录,对应某个服务器,然后linkmon进城检测到该服务器有配置变更后,就会调用system(“squid -k reconfigure ”)命令来重新加载配置。进行实时配置生效。
t_server
服务器信息表,存储所有服务器的信息
t_server_connect
存储服务器的连接信息。
t_sys_user
存储系统用户信息,但是目前没有提供用户添加功能,所以这个表里的数据只有admin一项,无法删除增加,只能修改密码。
t_user
使用每个代理服务器的用户信息,密码,用户名,限制标志位,有效期等。
t_user_log
用户的登陆信息,包括源IP和时间。

[ 本帖最后由 duanjigang 于 2009-5-12 22:48 编辑 ]
作者: duanjigang    时间: 2009-05-12 22:49
部署方法
首先LAMP环境你需要拥有,然后安装mysql++的开发库。
然后部署squid_front的php程序,并在配置文件bug_conf.php中修改数据库的访问地址,帐户等。这个应该比较简单。
接着,根据你的mysql和mysql++的安装目录,对ipuser,myauth和linkmon的makefile做适当修改,使得能够编译通过。然后把这三个可执行程序拷贝到squid安装目录下的libexec目录下,接着就需要修改配置了。
把附件中的etc目录下的配置文件放到你的squid安装目录的etc下,对于squid.conf文件,最好不要修改,而只是参考这个自带的squid.conf进行修改,添加ipuser和mysql_auth的验证功能。
最后,要在linkmon,ipuser和myauth的配置文件中分别修改服务器IP地址为你的Squid服务器的IP地址,还有修改数据库的访问地址和账户。
######### ip_user.conf
[ DB_config]
#数据库名称
db = squid
#数据库服务器地址
host = 192.168.0.20
#登陆数据库的用户名
user = squid
#数据库访问密码
pass = squid
#当前系统上对外提供squid服务的IP地址
 [SysInfo]
#本机IP地址
IP=123.120.1.249

######   link_mon.conf
[ DB_config]
db = squid
host = 192.168.0.20
user = squid
pass = squid
#本机IP地址
server = 123.120.1.249
#squid的监听端口,要与Squid.conf中的一致
port = 8888
#linkmon检测端口和配置变更的周期(秒)
rate = 2

mysql_auth.conf配置文件中要注意的就是最后一行
server_ip  123.120.1.249 需要填写本机IP

squid.conf中需要注意的也就是这段配置
#added by duanjigang@2009-04-02 start
auth_param basic children 5
auth_param basic realm Squid caching server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
auth_param basic program /usr/local/squid/libexec/mysql_auth
#added by duanjigang@2009-04-04 start
external_acl_type ip_user_check children=5 %SRC %LOGIN  /usr/local/squid/libexec/ip_user -f /usr/local/squid/etc/ip_user.conf
#external_acl_type ip_user_check children=5 %SRC %LOGIN /usr/local/squid/libexec/ip_user  
acl ipuser external ip_user_check

acl password proxy_auth REQUIRED
#http_access allow   ipuser
http_access allow  password ipuser
authenticate_ip_ttl 2 hours
http_access deny all
#added by duanjigang@2009-04-04 end

作者: duanjigang    时间: 2009-05-12 22:50
运行
启动squid程序后,然后启动linkmon程序
./linkmon  -f /usr/local/squid/etc/linkmon.conf &
这个时候就可以使用了。
说明Squid_front部分php代码为原创,试用了开源的php数据库访问库adodb_lite组件。后台的ipuser和myauth参考已有代码,linkmon为原创部分,如果由于程序运行不当对个人或者组织造成任何可能的损失,本人不负担任何责任,只供技术交流,如果进行修改或者用于商业用途,请保留作者信息。
交流方式EMail:duanjigang1983@126.com
MSN:duanjigang@hotmail.com
参考资料
Squid实现基于MySQL的用户及IP绑定的验证
http://linux.chinaunix.net/bbs/viewthread.php?tid=1061907
作者: tony_wangzt    时间: 2009-05-13 09:22
不错啊
作者: badb0y    时间: 2009-05-13 10:24
不错,,好东西,,收藏一下!
作者: sfrict    时间: 2009-05-13 10:27
顶下吧  
作者: 贺兰云天    时间: 2009-05-13 10:40
多谢瑞儿加精华啊
作者: axlrose    时间: 2009-05-13 10:57
强,友情帮顶
作者: thatday    时间: 2009-05-13 11:10
支持!
作者: vema    时间: 2009-05-14 15:41
友情支持
作者: 啊泰    时间: 2009-05-15 12:42
强 支持 哈哈
作者: liudew    时间: 2009-05-23 17:18
楼主很强悍,谢谢,收藏!
作者: rods    时间: 2009-05-23 19:23
太强了,谢谢提供
作者: 一刀砍死    时间: 2009-05-29 20:06
不错不错
作者: 聪明笨小孩    时间: 2009-06-08 09:34
挺好 学习学习
作者: zhangheng520    时间: 2009-06-10 14:31
标题: good
非常好
作者: zhangheng520    时间: 2009-06-10 14:34
标题: very good
good good !!!!!!
作者: duanjigang    时间: 2009-06-10 15:00
关于这个小软件,刚申请开通了sourceforge的开源项目社区。想把它安家落户到那里。
本周末那边的CVS之类的就能定下来了,希望对squid,php和C的朋友积极参与开发,
也渴望对此类软件有需求的朋友多提意见,我们一起不断丰富完善Squid!
作者: duanjigang    时间: 2009-06-10 22:33
修改了两个问题,下载的朋友可以在代码中对应进行修改
作者: duanjigang    时间: 2009-06-10 22:38
我记得原来做了个最近登陆时间的显示,今天忽然发现没了,在sourceforge版把它加上
作者: duanjigang    时间: 2009-06-12 13:39
应一个朋友要求,把安装使用文档细化了一下:
squid_front安装手册
-------cmer 2009-06-11 23:21 beijing


(1):LAMP环境搭建 linux + apache + mysql + php
这是基本的环境,需要提前安装好。
(2):gcc编译环境。
需要squid代码的编译和squidfront包中c++代码的编译。
(3)安装步骤。

Squid服务器上程序安装。

1):在各个被管理的机器上安装squid-2.5.STABLE13.tar.gz包.
2):编译linkmon,ipuser和myauth的C/C++代码。把可执行程序拷贝到squid安装目录的libexec目录下。
3):把下载包中的etc解压缩后拷贝到squid的安装包下的etc目录下作为新的配置。修改三个配置文件中的数据库
地址和用户名,密码,以及当前机器的IP。

squidfront控制中心程序安装
部署squid_front的php程序到你的LAMP环境中,修改squid.conf中的数据库连接信息。同时把目录下的
squid.sql数据库导入到你的mysql数据库中。记着要给squidfront访问创建用户帐户或者用root(我并不建议直接用root).

(4):程序运行

控制中心
启动apache,mysql服务后。登陆页面 http://xxxx/squid_front就会打开登陆页面,进行登录配置。
最好先删除原来自带的任何信息,然后再添加。
squid服务器
启动squid程序,然后进入squid的libexec目录下,手动启动linkmon程序:./linkmon -f ../etc/linkmon.conf
就OK了,然后就可以在页面就行配置,不用重启squid通过后台进程重新加载配置就可以完成了。
并用pstree查看Squid与ipuser和myauth的父子进程关系,如果有任何问题,请自己检查。
(5):使用方法
进入页面,自己根据IP地址在页面添加Squid服务所在的机器,添加用户,修改用户信息,密码等。
然后通过QQ或者其他软件检查本服务的可靠性。

作者: ritto    时间: 2009-06-17 23:29
这个一定要顶
作者: 小小磊    时间: 2009-06-23 14:52
标记下
作者: sailer_sh    时间: 2009-07-01 19:23
it's cool, very thanks
作者: ljily000    时间: 2009-07-07 16:05
好!

顶!
作者: 向前走直到永远    时间: 2011-06-02 15:33
回复 23# duanjigang


    你的这个开源项目,现在还在进行吗?有没有比较详细的文档啊?
作者: sxzc    时间: 2011-06-02 19:23
不错
作者: duanjigang    时间: 2011-06-03 17:57
回复  duanjigang


    你的这个开源项目,现在还在进行吗?有没有比较详细的文档啊?
向前走直到永远 发表于 2011-06-02 15:33



    在sf上面有详细文档的,如果有人使用,我可以提供帮助
作者: 贺兰云天    时间: 2011-12-11 11:17
今天又需要了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2