5.2 用户认证设置
缺省的,squid本身不带任何认证程序,但是我们可以通过外部认证程序来实现用户认证。一般说来有以下的认证程序:
1.ldap认证:你可以访问以下资源来获取更多的有用信息。
http://www.geocities.com/researchtriangle/thinktank/5292/projects/ldap/
http://home.iae.nl/users/devet/squid/proxy_auth/contrib/ldap_auth.tar.gz
2.smb认证:可以实现基于nt和samba的用户认证。更多的信息请访问以下资源。
http://www.hacom.nl/~richard/software/smb_auth.html
3.基于mysql的用户认证。
http://home.iae.nl/users/devet/squid/proxy_auth/contrib/mysql_auth.c
4.基于sock5密码用户认证。
http://nucleo.freeservers.com/
5.基于radius 的用户认证。
http://home.iae.nl/users/devet/squid/proxy_auth/contrib/auth.pl
但是我们一般常用的是用ncsa实现的认证和用smb_auth实现的基于nt和samba的用户认证。下面我们就来讲这两种认证方法的具体实现。
5.2.1 ncsa用户认证的实现
ncsa是squid源代码包自带的认证程序之一,下面我们以squid-2.3.stable2版本为例讲述ncsa的安装和配置。
1.从www.squid-cache.org下载squid源代码包squid-2.3.stable2-src.tar.gz并放到/tmp目录下。
2.用tar解开:
tar xvzf squid-2.3.stable2-src.tar.gz
%make
%make install
3.然后,进入/tmp/squid-2.3.stable2/auth_modules/ncsa目录。
% make
% make install
编译成功后,会生成ncsa_auth的可执行文件。
4.拷贝生成的执行文件ncsa_auth到/usr/bin目录
cp ncsa_auth /usr/bin/bin
5.修改squid.conf中的相关选项如下所示:
authenticate_program /usr/local/squid/bin/ncsa_auth /usr/bin/passwd
6.定义相关的用户类
acl auth_user proxy_auth required
注意,required关键字指明了接收所有合法用户的访问。
7.设置http_access
http_access allow auth_user
注意,如果你在改行中指定了多个允许访问的用户类的话,应该把要认证的用户类放在第一个。如下所示:
错误的配置:http_access allow auth_user all manager
正确的配置:http_access allow auth_user manager all
8.利用apache携带的工具软件htpasswd在/usr/local/squid/etc下生成密码文件并添加相应的用户信息。一般说来,该密码文件每行包含一个用户的用户信息,即用户名和密码。
用htpasswd生成密码文件passwd并添加用户bye。
htpasswd -c /usr/local/squid/etc/passwd bye
然后重新启动squid,密码认证已经生效。
5.2.2 smb用户认证的实现
国内介绍并使用ncsa实现用户认证的文章不多,而使用smb_auth和samba实现基于nt的用户认证我还没有看到过,下面我们就来看一看在squid中实现基于nt的用户认证。
当前smb_auth的最高版本是smb_auth-0.05,你可以在以下地址下载。当然,squid的源代码包中也包含smb_auth,但是是0.02版的。
http://www.hacom.nl/~richard/software/smb_auth-0.05.tar.gz
smb_auth的主页地址是http://www.hacom.nl/~richard/software/smb_auth.html。
1.系统需求:
squid2.0以上版本。
安装samba2.0.4以上版本。你并不需要运行samba服务,因为smb_auth只用到了 samba的客户端软件。
2.下载smb_auth-0.05.tar.gz并复制到/tmp.
3.tar xvzf smb_auth-0.05.tar.gz
4.根据你的要求修改makefile中的sambaprefix和installbin参数。sambaprefix指定了你的samba安装路径,installbin指明了smb_auth的安装路径。我们指定:
sambaprefix=/usr,installbin=/usr/bin.
5.make
6.make install,成功后会在installbin指定路径中生成可执行文件smb_auth.
7.按下列步骤设置你要用于认证的主域控制器:
首先.netlog共享目录中建立一个“proxy”文件,该文件只包含一个“allow”的字符串,一般说来,.netlog目录位于winntsystem32replimportscripts目录中;然后,设置所有你想让其访问squid的用户和用户组拥有对该文件的读的权力。
8.修改squid.conf中的相关选项如下所示:
authenticate_program /usr/local/squid/bin/smb_auth your_domain_name
9.定义相关的用户类
acl auth_user proxy_auth required
注意,required关键字指明了接收所有合法用户的访问。
10.设置http_access
http_access allow auth_user
注意,如果你在改行中指定了多个允许访问的用户类的话,应该把要认证的用户类放在第一个。如下所示:
错误的配置:http_access allow auth_user all manager
正确的配置:http_access allow auth_user manager all
如果一切正确的话,然后重新启动squid,密码认证已经生效。
说明:smb_auth的调用方法:
1.smb_auth -w your_domain_name
用your_domain_name指定你的域名。smb_auth将进行广播寻找该主域控制器。
2.smb_auth -w your_domain_name -b
如果你有多个网络接口,可以用-b 指定用于广播的网络接口的ip地址。
3.smb_auth -w your_domain_name -u
也可以用-u直接指定该主域控制器的ip地址。
4.smb_auth -w your_domain_name -s share
可以用-s指定一个不同.netlog的共享目录。
5.2.3 squid.conf中关于认证的其他设置
1.authenticate_children
说明:设置认证子进程的数目。缺省为5个。如果你处于一个繁忙的网络环境中,你可以适当增大该值。
2.authenticate_ttl
说明:设置一次认证的有效期,缺省是3600秒。
3.proxy_auth_realm
说明:设置用户登录认证时向用户显示的域名。
5.3透明代理的设置
关于透明代理的概念我们已经在第一节将过了,下面我们看一下怎么样在squid中实现透明代理。
透明代理的实现需要在linux 2.0.29以上,但是linux 2.0.30并不支持该功能,好在我们现在使用的通常是2.2.x以上的版本,所以不必担心这个问题。下面我们就用ipchains+squid来实现透明代理。在开始之前需要说明的是,目前我们只能实现支持http的透明代理,但是也不必太担心,因为我们之所以使用代理,目的是利用squid的缓存来提高web的访问速度,至于提供内部非法ip地址的访问及提高网络安全性,我们可以用ipchains来解决。
实现环境:redhat6.x+squid2.2.x+ipchains
5.3.1 linux的相关配置
确定你的内核已经配置了以下特性:
[*].network firewalls
[ ] socket filtering
[*] unix domain sockets
[*] tcp/ip.networking
[ ] ip: multicasting
[ ] ip: advanced router
[ ] ip: kernel level autoconfiguration
[*] ip: firewalling
[ ] ip: firewall packet.netlink device
[*] ip: always defragment (required for masquerading)
[*] ip: transparent proxy support
如果没有,请你重新编译内核。一般在redhat6.x以上,系统已经缺省配置了这些特性。
5.3.2squid的相关配置选项
设置squid.conf中的相关选项,如下所示:
http_port 3218
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
说明:
1.http_port 3128
在本例中,我们假设squid的http监听端口为3128,即squid缺省设置值。然后,把所有来自于客户端web请求的包(即目标端口为80)重定向到3128端口。
2.httpd_accel_host virtual
httpd_accel_port 80
这两个选项本来是用来定义squid加速模式的。在这里我们用virtual来指定为虚拟主机模式。80端口为要加速的请求端口。采用这种模式时,squid就取消了缓存及icp功能,假如你需要这些功能,这必须设置httpd_accel_with_proxy选项。
3.httpd_accel_with_proxy on
该选项在透明代理模式下是必须设置成on的。在该模式下,squid既是web请求的加速器,又是缓存代理服务器。
4.httpd_accel_uses_host_header on
在透明代理模式下,如果你想让你代理服务器的缓存功能正确工作的话,你必须将该选项设为on。设为on时,squid会把存储的对象加上主机名而不是ip地址作为索引。这一点在你想建立代理服务器阵列时显得尤为重要。
5.3.3 ipchains的相关配置
ipchains在这里所起的作用是端口重定向。我们可以使用下列语句实现将目标端口为80端口的tcp包重定向到3128端口。
#接收所有的回送包
/sbin/ipchains -a input -j accept -i lo
#将目标端口为80端口的tcp包重定向到3128端口
/sbin/ipchains -a input -p tcp -d 0.0.0.0/0 80 -j redirect 80
当然在这以前,我们必须用下面的语句打开包转发功能。
echo 1 > /proc/sys.net/ipv4/ip_forward
六、小节
开始,我们讨论了代理服务器的概念,代理服务器的分类;然后,我们把注意力集中在squid,讲述了如何安装和配置squid;最后我们讲了一些squid配置中的高级话题,即实现用户认证的两种方法,透明代理的实现等。当然,还有一些高级话题本章没有讲到,如代理阵列的实现,加速模式的运用等等。但是,我们不可能把所有东西都讲完讲全,希望读者能举一反三,自己去摸索,去尝试。
摘自:http://www.yn.cninfo.net
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器