📄 00000015.htm
字号:
理或者类似的其他代理程序通常只能对确定的应用程序进行代理。这类代理程序往往是 <BR>为了减少网络流量,提高网络速度或者是绕过防火墙用。 <BR> <BR> 我们在这里讨论最常用的代理程序。squid类似于apache的浏览代理,实际就是一个高 <BR>速缓冲器,但是在某些方面,它比apache更容易管理。而socks5代理则是一个特殊的转 <BR>发器,它利用某种特定的编程接口接受客户的请求并且代替客户处理请求。 <BR> <BR> 8.5.1 squid代理程序 <BR> <BR> 与Apache的proxy功能类似,squid也是一个接受客户请求,代替客户处理并且加以缓 <BR>冲的产品。但是与apache不同的是,squid不需要forks自身。另外,squid可以配置成为 <BR>利用用户名和口令来限制用户的身份,这在按照IP地址进行身份认证不适用的时候是很 <BR>重要的。 <BR> <BR> squid是一个功能非常强大的程序,例如你可以将它配置成向“内”的服务器(提高你 <BR>自己的服务器的响应能力),或者是用多个squid机器构成复杂的缓冲系统,如此等等, <BR>你可以自己参考squid的文档。作为一本教程,我们不想涉及到这一类过于专门的问题中 <BR>去。我们将主要介绍如何配置一个可以通过密码验证用户的代理系统。实际上,很多防 <BR>火墙的设计者都利用squid在不损害防火墙的可靠性的同时使得用户的应用更加简便。例 <BR>如,你可以用防火墙将除了squid机器之外的所有内部机器全部挡住,然后让客户通过s <BR>quid访问外界,这样的方法比建立复杂的ipchains过滤规则更容易,而且除非防火墙机 <BR>器被攻克,内部的机器是安全的。 <BR> <BR> 要使用squid,首先必须安装这个程序,例如: <BR> <BR> [root@wxd linux]# rpm -q squid <BR> <BR> squid-2.2.STABLE4-5 <BR> <BR> 然后就可以配置squid程序了。 <BR> <BR> squid的配置文件在/etc/squid/squid.conf,(编译时定义),实际上,你完全可以 <BR>在缺省的配置文件上改动,不过,按照我们的一般方法,我们从一个适当构作的最小的 <BR>squid.conf开始: <BR> <BR> http_port 4444 <BR> <BR> acl LOCALDOMAIN src 202.199.248.0/255.255.255.0 <BR> <BR> acl test proxy_auth REQUIRED <BR> <BR> acl all src 0.0.0.0/0 <BR> <BR> acl SSL_ports port 443 563 <BR> <BR> cache_mem 8 MB <BR> <BR> cache_dir /var/squid/cache 100 16 256 <BR> <BR> cache_access_log /var/log/squid/access.log <BR> <BR> cache_log /var/log/squid/cache.log <BR> <BR> cache_store_log /var/log/squid/store.log <BR> <BR> cache_dns_program /usr/bin/dnsserver <BR> <BR> dns_children 5 <BR> <BR> authenticate_program /usr/bin/ncsa_auth /etc/squid/passwd <BR> <BR> authenticate_children 5 <BR> <BR> authenticate_ttl 30 <BR> <BR> reference_age 1 month <BR> <BR> acl Safe_ports port 80 21 443 563 70 210 1025-65535 <BR> <BR> acl CONNECT method CONNECT <BR> <BR> http_access allow LOCALDOMAIN <BR> <BR> http_access allow test <BR> <BR> http_access deny !Safe_ports <BR> <BR> http_access deny CONNECT !SSL_ports <BR> <BR> http_access deny all <BR> <BR> 这个配置文件包含了squid的主要内容,首先,http_port 4444定义squid使用的代理 <BR>服务端口。这里利用4444端口作为代理端口,注意由于squid是以nobody权限运行,这个 <BR>端口必须大于1024。 <BR> <BR> 接下来,acl是一种定义行,上面的定义可以这样解释: <BR> <BR> acl all src 0.0.0.0/0将"all"定义为一个类,包含所有客户机器。src说明这里的定 <BR>义是对源地址的,也可以用dest对目标地址进行定义,如acl sth dest 202.199.248.0 <BR>/24。 <BR> <BR> acl LOCALDOMAIN src 202.199.248.0/255.255.255.0如上述是定义所有位于202.199 <BR>.248.*处的客户机器为LOCALDOMAIN类。 <BR> <BR> acl SSL port 443 563 将所有目标端口是443或563的访问定义为SSL类。同样另外的 <BR>一句acl safe_ports port 80 21 443 563 70 210 1025-65535定义连接到这些端口的访 <BR>问为安全端口。 <BR> <BR> acl test proxy_auth REQUIRED定义所有需要身份验证的用户为test类。 <BR> <BR> acl CONNECT method CONNECT 定义所有使用TCP连接的用户为CONNECT类。 <BR> <BR> 实际上,所有这些类的定义都是为了给后面的存取限制提供定义,我们可以在最后看 <BR>到存取限制语句: <BR> <BR> http_access allow LOCALDOMAIN <BR> <BR> http_access allow test <BR> <BR> http_access deny !Safe_ports <BR> <BR> http_access deny CONNECT !SSL_ports <BR> <BR> http_access deny all <BR> <BR> 允许202.199.248.0/24的用户使用代理;另外凡是通过了身份验证的用户也可以使用 <BR>代理;其他的全部禁止。访问到非安全端口的全部禁止。 <BR> <BR> squid的用户身份验证是通过密码验证。要使用这个功能,首先必须编译squid的密码 <BR>验证程序。这要求你安装了squid的源代码,然后在squid源代码的目录中 <BR> <BR> $make <BR> <BR> gcc -g -O2 -Wall -I. -I../../include -I../../include -c ncsa_auth.c -o <BR>ncsa_auth.o <BR> <BR> gcc -g ncsa_auth.o -o ncsa_auth -L../../lib -lmiscutil -lcrypt -lm -lresol <BR>v -lbsd -lnsl <BR> <BR> 将会在当前目录下产生一个ncsa_auth程序。将它拷贝到/usr/bin下面。 <BR> <BR> 我们可以通过Apache部分讲到的htpasswd程序生成身份验证需要的密码文件: <BR> <BR> $htpasswd -c /etc/squid/passwd wanghy <BR> <BR> New password: <BR> <BR> Re-type new password: <BR> <BR> Adding password for user wanghy <BR> <BR>$ <BR> <BR> 这样就加入了一个名叫wanghy的squid用户,然后就可以用上面的行来启用身份验证程 <BR>序了: <BR> <BR> authenticate_program /usr/bin/ncsa_auth /etc/squid/passwd <BR> <BR> authenticate_children 5 <BR> <BR> 说明用/usr/bin/ncsa_auth作为身份验证程序,验证密码文件为/etc/squid/passwd, <BR>注意这个文件必须全局可读,因为squid在工作的时候,是用一个属主为nobody的子进程 <BR>来执行,相应地ncsa_auth的权限也是nobody。authenticate_children是身份验证程序 <BR>的个数。设置了身份验证后,用户访问代理服务时会弹出这样的对话框: <BR> <BR> <BR> <BR> 图8.3 squid的身份验证 <BR> <BR> 只有用户名和口令符合,才能通过代理访问外界。 <BR> <BR> authenticate_ttl 3600这样的行用来定义一次身份验证的有效期,如果超过了这个时 <BR>间用户没有动作,再连接时squid会要求用户重新进行身份验证。 <BR> <BR> 接下来的几行设置squid用的内存数量,使用的纪录文件,而最重要的是下面一行: <BR> <BR> cache_dir /var/squid/cache 100 16 256 <BR> <BR> 这个命令设置squid用来存贮cache文件的目录,这个目录必须是全局可写的;后面三 <BR>个参数,第一个是目录的容量,或者说最大允许多大的cache;第二个和第三个则是第一 <BR>层和第二层目录下允许有多少个子目录,你可以自己调节这些数字。 <BR> <BR> 如果你处在防火墙内部,而名字服务器位于防火墙外,你可能希望代理服务器能同时 <BR>对DNS进行代理,下面两行: <BR> <BR> cache_dns_program /usr/bin/dnsserver <BR> <BR> dns_children 5 <BR> <BR> 启动了这个功能,dnsserver程序是缺省的dns代
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -