[原]RH AS3.0 + SQUID + MYSQL_AUTH

发表于:2007-07-04来源:作者:点击数: 标签:
[code:1:af96d0946e]RHAS3.0+SQUID+MYSQL_AUTH 安装说明:如果你的系统已经安装了SQUID,要先卸载了然后按照本文中的步骤重新安装SQUID。另外如果以前用的是IPTABLES+SQUID做的透明代理,仍然要在浏览器中进行代理 服务器 设置,否则SQUID不能使用MYSQL认证

[code:1:af96d0946e]RH AS3.0 + SQUID + MYSQL_AUTH

安装说明:如果你的系统已经安装了SQUID,要先卸载了然后按照本文中的步骤重新安装SQUID。另外如果以前用的是IPTABLES+SQUID做的透明代理,仍然要在浏览器中进行代理服务器设置,否则SQUID不能使用MYSQL认证,关于MYSQL_AUTH的版本是这样的,0.5版的我实验了很久总不能成功,所以我用了0.6beta版的MYSQL_AUTH。 

一、安装SQUID和MYSQL-SERVER

1.建立用户和组

[root@home root]# groupadd squid
[root@home root]# adduser -g squid -d /dev/null -s \
/sbin/nologin squid

2. 安装

[root@home root]# rpm –ivh mysql-server-3.23.58-1.9.i386.rpm
[root@home root]# rpm -ivh  squid-2.5.STABLE3-3.3E.i386.rpm

设置MYSQL的ROOT管理密码:
[root@home root]# mysqladmin –u root password ******

设置MSYQL和SQUID开机启动:
[root@home root]# chkconfig mysqld on
[root@home root]# chkconfig squid on

3.配置SQUID.CONF
--------------------------------------------------------
http_port 3128 
cache_mgr llzqq@nero.3322.org
error_directory /usr/share/squid/errors/Simplify_Chinese
dns_nameservers 202.99.160.68 202.99.168.8
visible_hostname nero.3322.org
httpd_aclearcase/" target="_blank" >ccel_uses_host_header on
httpd_accel_host virtual
httpd_accel_with_proxy on
cache_mem 20 MB 
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 30 KB
minimum_object_size_in_memory 0 KB
cache_dir ufs /tmp 100 16 256
cache_swap_low 85
cache_swap_high 90 
httpd_accel_port 80
#http_access deny all 
--------------------------------------------------------
4.启动SQUID和MYSQL

[root@home root]# service mysqld start
[root@home root]# service squid start

二、译安装MYSQL_AUTH-0.6

[root@home root]# tar xzpf mysql_auth-0.6beta.tar.gz
[root@home root]# cd mysql_auth-0.6beta

修改Makefile中的内容如下:
[root@home mysql_auth-0.6beta]# vi Makefile

CFLAGS = -I/usr/include/mysql -L/usr/lib/mysql
$(INSTALL) -o squid -g squid -m 755 mysql_auth /usr/bin/mysql_auth
$(INSTALL) -o squid -g squid -m 600 $(CONF) /etc/mysql_auth.conf
$(INSTALL) -o squid -g squid -m 600 $(CONF) /etc/mysql_auth.conf.default

修改src/define.h中的内容如下:
[root@home mysql_auth-0.6beta]# vi +5 src/define.h

#define CONFIG_FILE "/etc/mysql_auth.conf"
#define DEF_MYSQLD_SOCKET "/var/lib/mysql/mysql.sock"

修改src/mysql_auth.conf中的内容如下:
[root@home mysql_auth-0.6beta]# vi src/mysql_auth.conf

mysqld_socket   /var/lib/mysql/mysql.sock

[root@home mysql_auth-0.6beta]# make 
[root@home mysql_auth-0.6beta]# make install

创建用户数据库
[root@home mysql_auth-0.6beta]# cd scripts
[root@home scripts]# mysql -u root –p****** < create_script


三、测试MYSQL_AUTH

1.添加一个测试用户

[root@home mysql_auth-0.6beta]# mypasswd test 123456
Password record ADDED succesfully.

2.验证刚才建立的用户

[root@home mysql_auth-0.6beta]# mysql_auth test
test 123456
0K

3.删除一个已经建立的用户用这个命令

[root@home mysql_auth-0.6beta]# mypasswd –d username
Password record DELETED succesfully.

四、在SQUID.CONF中增加MYSQL_AUTH认证

[root@home mysql_auth-0.6beta]# vi /etc/squid/squid.conf

添加下面的代码到SQUID.CONF中“TAG: acl”一节的后面

auth_param basic program /usr/bin/mysql_auth
auth_param basic realm Squid caching server
auth_param basic children 5
auth_param basic credentialsttl 2 hours
acl password proxy_auth REQUIRED
http_access allow password
authenticate_ip_ttl 2 hours
http_access deny all

五、客户端设置

在你浏览器的代理服务器设置中填写SQUID服务器的IP和端口:
192.168.0.1:3218

在你下载软件的代理服务器设置中填写SQUID服务器的IP和端口:
192.168.0.1:3218

六、一个简单的IPTABLES脚本

eth0:to lan
eth1:to adsl-modem
-------------------------------------------------------------------
#!/bin/bash

export PATH=/sbin:/usr/sbin:/bin:/usr/bin

modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 >/proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 >/proc/sys/net/ipv4/conf/all/accept_redirects
echo 1 >/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians

iptables -F
iptables -X
iptables -Z

## Allow forwarding through the internal interface
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A FORWARD -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

## Do masquerading through ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

## HTTP
iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 443 -m state --state ESTABLISHED,RELATED -j ACCEPT

## DNS
iptables -A INPUT -i ppp0 -p udp -s 0/0 --sport 53 -m state --state ESTABLISHED -j ACCEPT

## Anything else not allowed
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -j DROP
-------------------------------------------------------------------
[/code:1:af96d0946e]

 platinum 回复于:2004-03-31 08:58:59
我第一个顶,支持!!!

不过IPTABLES部分好像和我的有点像哦~~~ :mrgreen:

 panwj 回复于:2004-03-31 09:23:29
好文!

 text2002 回复于:2004-03-31 10:23:29
都是高手也!
有squid的基础资料吗?今天系统启动的时候看到squid的报错,google上搜索squid也没有了解多少。

谢谢。

 linuxsky 回复于:2004-03-31 10:28:13
虽然目前用不上mysql_auth
学习一下也不错。

 好好先生 回复于:2004-03-31 10:38:15
[quote:4df431a5fd="text2002"]都是高手也!
有squid的基础资料吗?今天系统启动的时候看到squid的报错,google上搜索squid也没有了解多少。

谢谢。[/quote:4df431a5fd]

呵呵!高手只是比别人多努力了一点而已,这是我个人的看法。我想llzqq也会同意我的观点的。 :em02: 


希望大家都能成为“高手”,都多给大家带来点好文章! :em02:

 llzqq 回复于:2004-03-31 11:42:42
为了这个我实验了两个月。

 pansoncn 回复于:2004-04-02 16:10:51
好,太好了。

 yanguo66 回复于:2004-04-02 16:40:22
请问你的squid 的版本是多少?

 llzqq 回复于:2004-04-02 16:41:57
squid-2.5.STABLE3-3.3E.i386.rpm

 laixi781211 回复于:2004-04-02 16:57:50
mysql_auth v0.5
Squid HTTP proxy MySQL authentication module
Ervin Hegedus
Wed Jan 15 18:10:00 CET 2003

Contents
Introduction 
Installation 
Create database 
Issues when compiling 
Configuration file 
Squid.conf changes 
Testing 
Contact details 
Introduction
This is an authentication module for the Squid proxy server to authenticate users on an mysql database. The database is a single table, and the table is a very simple user-password pair, with plain or encrypted passwords. 
There is a utility, called by mypasswd. With this you can add a new user to your pasword database, update it or delete from. It uses the configuration file, what mysql_auth. 

Usage is simple. It accepts a username and password on standard input. It will return OK if the username/password is valid, or ERR if there was some problem. Check syslog messages for reported problems. 

mypasswd is also a very simple program: simply type mypasswd with no arguments, and it gives you help about itself. Note, these are the examples about it: 

shell> mypasswd user password

add a new user if it doesn't exist, or update its password. This form of mypasswd also makes it: 
shell> mypasswd user
Enter NEW password:
Re-enter NEW password:
Password record ADDED succesfully.

And you can delete a user from database, like this: 
shell> mypasswd -d user

mypasswd has a CGI format, it is called by mypasswd.cgi Fom more info, please visit the projects webpage. 

mysql_auth is released under the GNU General Public License and is available from http://people.fsn.hu/~airween/mysql_auth/. ;
Mysql_auth tested with MySQL 3.23, on Linux and FreeBSD os's. 

Installation
Make any changes to the source code you need. For example, set up correctly place of configuration file. See that in define.h. 

Review the Makefile, and modify based on target platform or site requirements. Setting up the mysql.h header and libmysqlclients.a places. Setting up your squid user and group accounts, and squid root directory.
Setting up correctly the permissions of mysql_auth.conf (mode 600)!
This is very important! This file included a mysql account, with select, update, insert and delete privileges! 
Also very important: if you use mysql.log, be very carefull! It contains all transactions! For example: 


52 Query       UPDATE data SET password = password ("1234") WHERE user LIKE 'airween'

After when you edit what you want, type 'make', then 'make install', then 'make clean'. 

'Make install' will put 'mysql_auth' into /usr/local/squid/bin by default, and 'mysql_auth.conf' to /usr/local/squid/etc. 

Create database
For store user and password pairs, you need a database, like mysql. It is very simple, one-table database. For create it, you need to run create_script from path/to/your/source/scripts directory. 

You can create it like this: 


shell> cd path/to/mysql_auth-source/scripts
shell> mysql -u your_user_name -p < create_script
Enter password: <type your password>

To add a user: 
shell> mysql -u your_user_name -p mysql_auth
Enter password:
Welcome message...

mysql> insert into data values ('joeav', 'joespass');
Query OK, 1 row affected (0.00 sec)

mysql>

or if you want to store your passwords in encrypted format: 
shell> mysql -u your_user_name -p mysql_auth
Enter password:
Welcome message...

mysql> insert into data values ('joeav', password("joespass"));
Query OK, 1 row affected (0.00 sec)

mysql>

Or try mypasswd: 
shell> mypasswd joeav joespass

That's it! 
Note: if you set up in mysql_auth.conf the encrypt_password_form to 'yes', mypasswd also uses encrypt form. 

Hopefully nobody has problems compiling mysql_auth, and create_script. 

Issues when compiling
The Makefile uses the GCC compiler, and assumes that it is in the current PATH. Mysql_auth is known to compile properly on Debian Linux 3.0, and FreeBSD 4.7 without problems. Other operating systems are untested, but use a recent copy of the GNU C compiler. 

Problem occur, when you can't setting up mysql header and/or library correctly.
Other, if you use MySQL 4.0 or above, may be you need to use in CFLAGS -lz at last. 

Configuration file
Mysql_auth uses a configuration file. It reads just every startup, not every query. The file is /usr/local/squid/etc/mysql_auth.conf. If this path needs to be changed, see define.h. 

  #define CONFIG_FILE   "/usr/local/squid/etc/mysql_auth.conf"

An example configuration file is provided. It looks like 

hostnamelocalhost
# FQDN hostname or IP address.

usersquid
# mysql user name - mysql administrator sets up.

passwordsquid
# password of mysql user - mysql administrator sets up.

databasemysql_auth
# mysql database on mysql server - a unique name.

tabledata
# table name in mysql database - contents two couloms, user and password.
# The password store in plain or encrypt format, and of course, case sensitive.

user_column     user
# column name where username exists.

password_column password
# password name where passwords exists.

encrypt_password_formno
# if you want to store your passwords in encrypted form
# this is case insensitive; 'YES' and 'yes' is same

These values are defaults, when you don't set other, mysql_auth wants to work with these. 

All comments start with '#'. Empty line allowed. 

When a user provides a username/password, mysql_auth querys from mysql server. It stops after a user has been successfully authenticated. Make sure the server can be reached and is active, or else mysql_auth will return all with errors! 

Squid.conf changes
Refer to Squid documentation for the required changes to squid.conf. You will need to set the following lines to enable authentication for your access list - 

  acl <yourACL> proxy_auth REQUIRED
  http_access allow password
  http_access allow <yourACL>
  http_access deny all

You will also need to review the following directives. The number of mysql_auth children spawned is set with authenticate_children. The number of children needed is site-dependent, so some experimentation may be required to find the best number. 

  proxy_auth_realm Squid proxy server
  authenticate_program /usr/local/squid/bin/mysql_auth
  authenticate_ttl 5
  authenticate_children 5

Testing
I strongly urge that mysql_auth is tested prior to being used in a production environment. It may behave differently on different platforms. To test it, run it from the command line. Enter username and password pairs separated by a space. 

It should behave in the following way - 

 - Press ENTER to get an OK or ERR message.
 - Make sure pressing CTRL-C aborts the program.
 - Test that entering no details does not result in an OK or ERR message.
 - Test that entering an invalid username and password results in
   an ERR message.
 - Test that entering an valid username and password results in an OK message.

Usernames cannot have whitespace in them, passwords can. 

Contact details
To contact the maintainer of this package, email Ervin Hegedus at airween@people.fsn.hu, or airween@freemail.hu. 

Also I have a nice mailing list: https://lists.fsn.hu/mailman/listinfo/mysql-auth ;

Good Luck! :)

 laixi781211 回复于:2004-04-02 17:02:31
谁有mysql_auth-0.6beta.tar.gz 
我这里不能下载呀

 llzqq 回复于:2004-04-02 17:36:38
我给你,留下MAIL。

 一起走过的日子 回复于:2004-04-02 17:43:04
[quote:54c43c44e5="laixi781211"]谁有mysql_auth-0.6beta.tar.gz 
我这里不能下载呀[/quote:54c43c44e5]

偶也要!

anthonis@hotmail.com

先谢了!

 llzqq 回复于:2004-04-02 17:56:14
楼上清查收!

 imtj 回复于:2004-04-02 20:00:18
我也没有办法下在AUTH-MYSQL。。。可以发送给我吗?
taojin@grandunion.com.cn

 llzqq 回复于:2004-04-02 20:24:00
http://freshmeat.net/redir/mysql_auth/34350/url_tgz/mysql_auth-0.6beta.tar.gz

自己下吧!

 一起走过的日子 回复于:2004-04-03 17:23:43
[quote:82c3931f9c="llzqq"]楼上清查收![/quote:82c3931f9c]

谢了先^_^

 :em02:

 cysky 回复于:2004-04-04 07:53:41
好文章,

 wujianpengjj 回复于:2004-04-04 10:25:26
我觉得原来的好像也没有问题,就是要注意一下,mysql_auth编译时候mysql的lib的位置,还有就是squid启动的时候注意一下mysql.socks的位置,有的是在/var/lib下的,有的是在 /tmp下的我最近作pureftp+mysql的时候就遇到这个问题了。我用的是mysql_auth0.5。还有认证好像对透明代理没什么用的它只能认证http的其他的好像iptables直接就转发了。不知道我说的对不对,楼主能联系一下吗?wjp@mail.neuq.edu.cn

 hefish 回复于:2004-04-04 13:40:12
我靠,4个月?
我写个openldap_auth也不要这么长时间啊。。。。

 好好先生 回复于:2004-04-04 14:03:10
[quote:07555b39bb="hefish"]我靠,4个月?
我写个openldap_auth也不要这么长时间啊。。。。[/quote:07555b39bb]
老大,把你的心得共享一下我们不就省事儿了吗?也不至于走弯路了。如果可以,我代表我们版的网友先谢谢你! :em02:

 llzqq 回复于:2004-04-04 16:05:22
[quote:b12d845562="hefish"]我靠,4个月?
我写个openldap_auth也不要这么长时间啊。。。。[/quote:b12d845562]

什么意思。

 hefish 回复于:2004-04-04 18:21:58
没有其它意思。

 wujianpengjj 回复于:2004-04-04 20:12:19
看来我挺笨的我做了一年多。

 iyxlcczy 回复于:2004-04-07 22:12:52
:em02: 兄弟,  我也要。
   
   邮箱:  iyxlcczy@163.com

javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">

原文转自:http://www.ltesting.net