在 Linux 上安裝 Squid + mysql_auth 的代理伺服器
by nemo ([email protected]) 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
;
第二步:安裝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([email protected])
參考文檔:
http://www.chinaunix.net/jh/38/63081.html
http://www.chinaunix.net/jh/38/115326.html
http://www.chinaunix.net/jh/38/178899.html