歡迎您光臨本站 註冊首頁

在Linux上安裝Squid+mysql_auth的代理伺服器

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

在 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

;
 
 第二步:安裝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

[火星人 ] 在Linux上安裝Squid+mysql_auth的代理伺服器已經有829次圍觀

http://coctec.com/docs/service/show-post-11958.html