免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2789 | 回复: 2
打印 上一主题 下一主题

[proxy] [原创] 在Linux上安装Squid+mysql_auth的代理服务器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-14 16:48 |只看该作者 |倒序浏览
在 Linux 上安装 Squid + mysql_auth 的代理服务器

by nemo (nemo@263.net) 2004.6.14
本文可随意转载,但请注明出处和作者姓名,谢谢.

摘要:本文主要讨论如何在Linux上安装结合mysql进行身份认证的squid代理服务器的安装,
至于squid的其它设置不在本文的讨论范围之内.

写本文的目的,一是前几天工作的一个简单终结,二是觉得网上有关squid+mysql_auth的中文
文档过少,希望能给那些象我一样E文糟糕的人一点帮助

好了,废话不多说了,进入正题.

操作系统环境 Redhat Linux 9.0
所需软件
1. Mysql        mysql-3.23.58.tar.gz
2. Squid        squid-2.5.STABLE5.tar.gz
3. Mysql_auth        mysql_auth-0.6beta.tar.gz

第一步:安装Mysql

    这步比较简单,我是把Mysql安装在了/soft/mysql下,请根据自己的实际情况,决定Mysql
的安装目录.有关安装Mysql的中文文档非常多,安装也比较容易,这里,我只是把我的安装步骤
简单列举一下,尽供参考

#groupadd mysql
#useradd -g mysql -c 'mysql user' -d /var/empty/ -s /bin/false mysql
#cd mysql-3.23.58
#./configure --prefix=/soft/mysql
#make
#make install
#./scripts/mysql_install_db
#chown -R root /soft/mysql
#chown -R mysql /soft/mysql/var
#chgrp -R mysql /soft/mysql
#cp ./support-files/my-medium.cnf /etc/my.cnf
#cp /soft/mysql/share/mysql/mysql.server /etc/init.d/mysqld
#chkconfig --add mysqld
#chkconfig --levels 3 mysqld on
#service mysqld start
#cd /soft/mysql/bin
#mysqladmin -u root -p password <newpasswd>;

第二步:安装Squid

    Squid的安装也比较容易,同样我也是把Suqid装在了/soft/squid下,一下是我安装Squid
的步骤

#cd squid-2.5.STABLE5
#./configure --prefix=/soft/squid \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-pthreads \
--enable-storeio=ufs,null \
--enable-default-err-language="Simplify_Chinese" \
--enable-auth="basic" \
--enable-baisc-auth-helpers="NCSA" \
--enable-underscore \
--enable-delay-pools \
--enable-snmp \
--enable-ssl \
--with-openssl=/usr/local/ssl \
--enable-cache-digests \
--disable-ident-lookups \
--disable-hostname-checks
#make all
#make install

这里的配置选项,我也不作过多说明了,因为相关文档也是相当丰富而且详实,以下两个说明文
档供大家参考
http://www.chinaunix.net/jh/38/115326.html
http://www.chinaunix.net/jh/38/63081.html

至此,Squid就安装完成了,按照以上两个文档的说明进行简单配置,Squid就可以很好的工作了,
接下来,我会详细说明如何使用mysql_auth模块,来实现Squid+mysql的身份认证.

第三步:安装mysql_auth,实现squid+mysql的身份认证

squid本身并不带身份认证功能,但是它可以结合其它程序来实现对客户端用户的身份认证,比
较常用的程序是NCSA,但是采用这种方式管理起来比较麻烦,而且用户自己不能修改密码,对管
理员的工作要求过高;而如果采用mysql_auth的话,可以结合apache+php来实现用户的轻松管理,
而且用户还可以自己根据需要来修改密码,非常方便.

首先解压缩mysql_auth-0.6beta.tar.gz
#tar zxf mysql_auth-0.6beta.tar.gz

3.1. 接下来修改Makefile文件,有几个地方需要修改

3.1.1. 第二行CFLAGS部分,你要根据你的实际情况进行修改,把两个路径都改成跟你系统相符的
因为我的mysql安装在/soft/mysql下,所以我的就改成
CFLAGS = -I/soft/mysql/include -L/soft/mysql/lib/mysql

3.1.2. 修改install部分
原来的内容是
install:
        $(INSTALL) -o nobody -g nogroup -m 755 mysql_auth /usr/local/squid/bin/mysql_auth
        $(INSTALL) -o root -g wheel -m 700 mypasswd /usr/local/bin/mypasswd
        $(INSTALL) -o nobody -g nogroup -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf
        $(INSTALL) -o nobody -g nogroup -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf.default
因为Linux没有nogroup这个工作组,需要改成nobody,同样系统默认也没有wheel工作组,改成root
接下来要修改的是安装的路径,你可以根据自己的情况来修改,下边是我修改之后的install
install:
        $(INSTALL) -o nobody -g nobody -m 755 mysql_auth /soft/squid/bin/mysql_auth
        $(INSTALL) -o root -g root -m 700 mypasswd /soft/squid/bin/mypasswd
        $(INSTALL) -o nobody -g nobody -m 600 $(CONF) /soft/squid/etc/mysql_auth.conf
        $(INSTALL) -o nobody -g nobody -m 600 $(CONF) /soft/squid/etc/mysql_auth.conf.default
我把mysql_auth和mypasswd安装到了squid的bin目录,mysql_auth.conf和mysql_auth.conf.default装到了
squid的etc目录

3.2. 现在要修改src下的define.h和mysql_auth.conf,mysql_auth.conf这时不修改也可以,安装完成后再改也行

3.2.1. 修改define.h
这个文件,主要是修改#define CONFIG_FILE "/usr/local/squid/etc/mysql_auth.conf"这行,它指定了
安装后mysql_auth.conf的位置,因为我们在修改Makefile文件时,已经修改了mysql_auth.conf的安装位置
这里如果不改的话,安装完成后mysql_auth就找不到mysql_auth.conf文件了,当然也就无法完成认证功能,
这里的修改一定要和修改后的Makefile文件里的相应修改相符,这行我改成了
#define CONFIG_FILE "/soft/squid/etc/mysql_auth.conf"

还有一个比较重要的修改是#define DEF_MYSQLD_SOCKET "/tmp/mysqld.sock"
因为在linux里,使用的是/tmp/mysql.sock,所以要修改成
#define DEF_MYSQLD_SOCKET "/tmp/mysql.sock"

其它的部分,就是些mysql主机名,用户名,密码,库名等信息,请根据个人喜好进行修改吧,以下是我修改
后的define.h文件,去掉了注释部分

#define CONFIG_FILE "/soft/squid/etc/mysql_auth.conf"

#define VAR_HOST_NAME "hostname"
#define DEF_HOST_NAME "localhost"

#define VAR_USER_NAME "user"
#define DEF_USER_NAME "squid"

#define VAR_USER_PASSWORD "password"
#define DEF_USER_PASSWORD "password"

#define VAR_DATABASE_NAME "database"
#define DEF_DATABASE_NAME "squid"

#define VAR_MYSQLD_SOCKET "mysqld_socket"
#define DEF_MYSQLD_SOCKET "/tmp/mysql.sock"

#define VAR_TABLE_NAME "table"
#define DEF_TABLE_NAME "squiduser"

#define VAR_USER_COLUMN "user_column"
#define DEF_USER_COLUMN "user"

#define VAR_PASSWORD_COLUMN "password_column"
#define DEF_PASSWORD_COLUMN "password"

#define VAR_ENCRYPT_PASSWORD_FORM "encrypt_password_form"
#define DEF_ENCRYPT_PASSWORD_FORM "no"

#define MAXLENGTH 512

#define MAX_STRLEN 64

struct my_params {
        char *var_host_name;
        char *var_user_name;
        char *var_user_password;
        char *var_database_name;
        char *var_mysqld_socket;
        char *var_table_name;
        char *var_user_column;
        char *var_password_column;
        char *var_encrypt_password_form;
};

3.2.2. 修改mysql_auth.conf文件
根据刚才对define.h文件的修改内容,将mysql_auth.conf中的相应内容进行修改就可以了
以下我修改后的define.h文件,同样的,去掉了注释部分
hostname        localhost

user            squid

password        password

database        squid

mysqld_socket   /tmp/mysql.sock

table           squiduser

user_column     user

password_column         password

encrypt_password_form   NO

3.3. 安装mysql_auth

做完以上的修改以后,就可以编译安装mysql_auth了
#cd mysql_auth-0.6beta
#make
#make install

接下来,可以到squid的etc目录里检查一下mysql_auth.conf文件的内容是否正确,如果不对,请进行
相应的修改

3.4. 建立mysql_auth使用的mysql库,用户和表
可以用mysql_auth源码目录scripts目录里的create_script来做这步操作,当然,你还得根据自己
的情况进行修改才可以,以下是我修改后的create_script文件
DROP DATABASE IF EXISTS squid;

USE mysql;
DELETE FROM user WHERE User LIKE 'squid';
DELETE FROM db WHERE User LIKE 'squid';
DELETE FROM tables_priv WHERE User LIKE 'squid';

CREATE DATABASE squid;

USE squid;

CREATE TABLE squiduser
        (user VARCHAR(16) NOT NULL PRIMARY KEY,
         password VARCHAR(64) BINARY NOT NULL);

GRANT SELECT,INSERT,UPDATE,DELETE ON squid.* TO squid@localhost IDENTIFIED BY 'password';

好了,现在可以使用这个文件了
到mysql的bin目录
#cd /soft/mysql/bin
#./mysql -uroot -p < /path/to/create_script
Enter password:
输入正确的密码后,mysql_auth需要的库环境就建立完成了

下边我们为mysql_auth建立一个用户
#./mysql -usquid -p
Enter password:
mysql>;use squid
Database changed
mysql>;insert into squiduser values ('nemo','123456');
Query OK, 1 row affected (0.00 sec)
mysql>;exit
接下来,我们检验一下mysql_auth是否已经正常工作了
到squid的bin目录里
#cd /soft/squid/bin
#./mypasswd nemo
Enter NEW password:
Re-enter NEW password:
Password record UPDATED succesfully.
如果出现让你两次输入新密码的提示,说明mysql_auth的安装已经成功了
改完密码后,你可以到数据库中看看,nemo用户的密码是否已经修改成功
3.5. 修改squid.conf
将squid.conf文件里原来跟认证有关的配置都注释掉,增加如下几行

#use mysql_auth
auth_param basic realm Nemo's proxy-caching Server
auth_param basic program /soft/squid/bin/mysql_auth
auth_param basic credentialsttl 2 hour
auth_param basic children 5

另外在http_access deny all前,增加如下两行
acl auth_user proxy_auth REQUIRED
http_access allow auth_user

保存退出

重启squid,客户端即可用nemo用户使用代理服务器上网了.
至此,安装完成.
如你有什么问题请于我联系nemo(nemo@263.net)

参考文档:
http://www.chinaunix.net/jh/38/63081.html
http://www.chinaunix.net/jh/38/115326.html
http://www.chinaunix.net/jh/38/178899.html

论坛徽章:
0
2 [报告]
发表于 2004-06-15 13:30 |只看该作者

[原创] 在Linux上安装Squid+mysql_auth的代理服务器

顶一下。

论坛徽章:
0
3 [报告]
发表于 2012-12-17 17:12 |只看该作者
IP限制的功能,没有涉及到
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP